amareloのブログ(仮)

IT系勉強会で感じた想いや知見をメインに書いていきます。

JAWS-UG朝会 #34 参加レポート

6/7 JAWS-UG朝会#34 に参加しましたので、レポートを書きます。

目次

イベントページ

jawsug-asa.connpass.com

セッション・LT

セッション① AWSを活用して社内ISUCONを開催したはなし 野村総合研究所 山口渡さん

ISUCONとは

  • 8時間の間にWebサービスを限界まで高速化するチーム対抗の性能改善テスト。
  • 今年は7月に予選、8月に本選を開催される。
  • 運営が準備したベンチマークを使って各チームのWebアプリケーションのスコアを算出する。
  • 参加者は、計測→改善→ベンチマーク のサイクルを回す。

高速なアプリケーションとは

  • 多くの人が快適に利用できるアプリケーション
  • 拘束はWebアプリケーションの必須要件。
  • Webアプリケーションを高速化するには、ボトルネックを特定・計測して改善する。
    • フロントエンド、バックエンド、両方の改善(チューニング、最適化)が必要であり、幅広い領域の知識が必要。

社内ISUCONを企画

  • 人材育成、人材発掘、社員同士の交流の場の提供を目的に。
  • インフラ系だけでなくアプリやセキュリティ系など、幅広い職種の人に参加いただけた。
  • 普段の本業で関わらない領域にチャレンジできる。

競技者用インスタンスの概要

  • OSレイヤー以上の改善のため、EC2を利用。
  • チームごとに踏み台サーバのEC2インスタンスを4台 × 28チーム = 112台構成
  • TeraformとAnsibleで構成管理

ポータルサイトの概要

  • 運営から競技者に、競技中に必要な情報をや機能を提供
  • SPA+サーバレス構成
    • フロントエンド:React + CloudFront + S3
    • バックエンド:APIGateway + Lambda + DynamoDB

ベンチマーカー

  • Webアプリケーションの性能を評価しスコアを算出する
  • Golangで実装・コンテナ化
  • AWS Batch for AWS Fargateで構築
    • ポータルサイトからのベンチマーク実行をトリガに、LambdaでBatchジョブを作成。
    • ジョブを作成してから30秒程度で開始。
    • ジョブごとにCloudWatchで確認可能。

当日の運営

  • ベンチマークの不具合事象が発生。
  • ファイルディスクリプタの上限を上げようとしたが、Fargateでは設定を変えられないことが判明。
    • 一部の異常系でHTTPコネクションの解放処理に不具合
      • ベンチマーカーのテストをローカルのDocker環境で実施していた。
      • ローカルのDocker環境のファイルディスクリプタは異なり、枯渇することはなかったため。

資料

speakerdeck.com

セッション② スタートアップでどのようにControl Towerを導入したか WHITE CROSS株式会社 Kazuki Oguraさん

以前のAWSアカウント運用の問題点

  • 単一のVPC内で複数のプロダクト・環境が稼働していた
    • 管理の煩わしさ
    • セキュリティ面んお不安
  • IAMユーザ、ロールの管理が統制されていなかった
    • 危険な操作が行われる
  • AWS Control Towerの導入をAWS SAから提案された

Control Towerとは

  • AWSマルチアカウント環境をセットアップ及び管理するための簡単な方法を提供する
  • landing zoneを1時間未満で構築できる(Organizations,Service Catalogなどを使用)
  • Organizationsを使用してマルチアカウント環境を作成
  • AWS SSOのデフォルトのディレクトリを使用してID管理を提供
  • ガードレール
    • AWSのベストプラクティス及びガバナンス向けの一般的なカスタマーポリシーに基づく厳選されたガードレールのセットを提供
    • ルールは企業全体または特定のアカウントのグループに提供可能
    • ガードレールには必須、強く推奨、選択的の3種類が存在する
    • 新しいガードレールがリリースされうr
  • 必須ガードレールの例
    • Control TowerやCloudFormationで設定されたIAMロールを変更不許可にする
    • ログアーカイブの公開読み取りアクセス設定の検出
  • 強く推奨
    • EC2インスタンスにアタッチされたEBSボリュームの暗号化が有効になっているか検出
    • RDSデータベースインスタンスへのパブリックアクセスが有効になっているか検出
    • SSHを介した無制限のインターネット接続が許可されているか
    • ルートユーザのアクセスキーの作成を許可しない
    • S3バケットへのパブリック読み取りアクセスが許可されているかを検出
  • 選択的ガードレール
    • VPCインスタンスのインターネットアクセスを禁止
    • EBSスナップショットがすべてのAWSアカウントで復元可能かどうか
    • リクエストされたAWSリージョンに基づいてAWSへのアクセスを拒否する
    • S3バケットバケットポリシの変更を許可しない

Control Tower導入までに行ったこと

  • OUの設計
    • OUは多層にすることはできない(Organizationsはできたはず)
  • 権限設定
    • アカウントの所属グループと権限
    • グループに所属させるユーザ等
  • ルートアカウントの管理方法検討
    • ユビキーによるMFAを採用
      • 専用スマホを準備するのに費用がかかる
      • 個人スマホに紐づけると紛失したり、退職時に上手く引き継げない恐れがある

Control Towerを導入した感想

  • 抱えていた仮題を解決できた
  • OrganizationsとSSOを用いたマルチアカウント運用がとても簡単に導入できた
  • CloudTrailやConfigなどのセキュリティサービスの導入も簡単に出来た。

Control Towerを導入すべきか

  • 既にマルチアカウント運用がうまくできている組織
    • 導入コストに比べてメリットを享受しづらい
    • ガードレールが使える
    • 正確なLanding zoneを使うことができる
  • まだマルチアカウント運用ができてきない組織
    • ぜひControl Towerを導入するべき!!

LT① Lambdaで最近やらかした話 もつさん

  • Kinesisから送られてくるデータを抽出して、別のSaaSへのAPI連携をさせるために、Lambdaで実行させようとしていた。
    • Lambdaでは対象のレコードを取得して、Kinesisから必要な情報を抽出し、SaaSの対象レコードにPOSTしようとしていた。
  • テストを繰り返していたところ、CloudWatchでは秒単位でエラーログが出続けていた。
    • Kinesisのデータ連携をすぐに止めた。
    • Lambdaの再試行パラメータ数値を低くした。
      • kinesisのデータ保持期間は24時間のため、もっと早めに中断させるため。
  • 原因
    • kinesisとの連携ではイベントソースマッピングを使用しているため、失敗するとKinesisのデータ有効期限が切れるまでひたすら繰り返す。
    • Lambdaの処理の中に無限ループから抜けられないものがあった。
  • 反省
    • 想定しない件数が出た時のためにCloudWatchアラートを入れておくべきだった。
      • もう少し早めに気づけた可能性があった。
    • 複数処理の分散のためにStep Functionsを使うことも考慮しておけばよかった。

資料

speakerdeck.com

LT②うわっ…AWSのセキュリティ系サービス、多すぎ…?オンプレエンジニアにも分かりやすく整理してみた KDDI 御田 稔さん

  • セキュリティ事故が起こると大問題になるが滅多にないため、正常性バイアスになりがち。
  • 何かあった時に一番困るのは責任者で、組織が大きいほど各担当の自分事意識が薄れがち。

AWSとオンプレの違い

  • 簡単に全世界から攻撃される。
    • セキュリティ知識なしに使うとすぐ事故につながる。
  • マネージドサービスの場合は、利用者が気にしなくていい部分が増える。

ネットワークセキュリティはオンプレと似ている

  • ファイアウォール
  • OSソフトウェアの脆弱性
    • Systems Manager
      • インベントリでソフトウェアバージョン一覧を抽出
      • パッチマネージャーでパッチの自動適用
    • Inspector
    • アナライザー
      • IAM Access Analyzer
        • ポリシ設定状況を可視化
      • VPC Reachability Analyzer
        • リソース間接続の正常性確認
      • Macie

有効化するだけのサービス

  • Config
    • リソースの変更記録
  • Security Hub
    • 自アカウントの危険性を把握
    • セキュリティ系サービスの出力結果を統合
  • GuardDuty
  • Security HubとGuard Dutyは30日無料お試し可能。トライアル中に推定コストを出してくれる。
    • とりあえず30日使ってみよう。

万が一インシデントが発生した場合

  • Amazon Detective
    • 被疑リソース周辺の怪しいログを可視化

資料

speakerdeck.com

LT③ アプリ側のコードを書いていた人がLambdaに触れて気づいたこと さき(H.Saki)さん

  • main関数とハンドラ関数が別に用意されている。
  • 2つのLambdaのスタート方式
    • コールドスタート
      • コード実行時にコンテナ作成して実行環境を初期化、コードを実行する。
    • ウォームスタート
      • コンテナ作成を省略してコードを実行する。
  • Lambdaが起動した時刻を利用して処理を行うコードを書いていた時のこと
    • handler関数に名言と時刻をセットにしたレスポンスを作成。
    • main関数にはタイムゾーンと時刻を初期化するコードを記述。
    • 1回目は成功したが、2回目以降のタイムスタンプがズレてきた。
  • ウォームスタートの本当の意味
    • ウォームスタートの時は、ハンドラ関数のみしか実行されない。
      • 時刻初期化をハンドラ関数の中で行うように修正したら解決。
  • なぜmainとハンドラに分かれているのか
    • ウォームスタート時の実行有無
      • ハンドラ関数にはスタート方式によらずに実行する処理を記述
      • main関数にはコールドスタートのみ実行する処理を記述
  • まとめ
    • Lambdaという実行インフラは、アプリ側のコードと密接に関わっている。
    • Lambda環境の動きとLambdaに乗せたコードの動きを関連付けて身に付けるのが大事。

資料

speakerdeck.com

最後に

ISUCONの話を聴いて興味が湧きました。Webアプリ開発経験ない人でも太刀打ちできるのか不安です(汗)

Lambdaの話が今日は多めでしたが、ウォームスタートとコールドスタートについては知識上でしか抑えていなかったため、実際にコードを実行させた結果を聴けて勉強になりました。 コード書いて実際に実行してみないと本当に理解できない部分もありますね。やっぱり、触って学ぶの大事!下手でも少しコード書いてLambdaで動かしてみよう。

来月はまた登壇させていただきます。まだほとんど準備できていないからそろそろペース上げていかねば!

jawsug-asa.connpass.com