Slide 1

Slide 1 text

1 18TRIPにおける AWSサービスを活用した 負荷テスト・障害テスト 2024/9/25 JAWS-UG GameTech ©18TRIP PROJECT

Slide 2

Slide 2 text

2 株式会社フリースタイル ゲーム事業部 インフラセクション マネージャー 安田 直人 NintendoSwitch 向けソフト 「オバケイドロ!」 開発・運営 CloudFront フリースタイルとは? ・本社:愛知県名古屋市 ・業務内容: システムエンジニアリングサービス 自社/受託開発(システム / ゲーム) 好きなAWSサービス ©18TRIP PROJECT ©2018 FREE STYLE, Inc.

Slide 3

Slide 3 text

3 ©18TRIP PROJECT 18TRIP(エイトリ) 近未来の横浜「HAMA18区」を舞台に、 旅をテーマに展開される “おもてなしアドベンチャー” 企画・制作 音楽制作 開発 リベル・エンタテインメント ポニーキャニオン フリースタイル iOS/Android 2024/5/23 サービス開始

Slide 4

Slide 4 text

4 アジェンダ • 18TRIPのインフラ構成 • AWSサービスを活用したテストとは • FISって何? • DLTって何? • まとめ ©18TRIP PROJECT

Slide 5

Slide 5 text

5 ©18TRIP PROJECT 18TRIPのインフラ構成

Slide 6

Slide 6 text

6 ©18TRIP PROJECT

Slide 7

Slide 7 text

7 サービスを活かしたサーバ構成 • LEMP環境をモダンなサービスをベースに構成 • WebサーバはECS on Fargate+Nginx+Laravel • DBはAurora for MySQL • キャッシュDBとしてElastiCache for Redis ©18TRIP PROJECT

Slide 8

Slide 8 text

8 運用にもAWSサービスを活用 • デプロイやバッチ処理もAWSサービスで! • CodePipeline+GitHubでデプロイを管理 • StepFunctions+EventBridgeで各種バッチ処理を実施 • 更に今回はテスト関連もAWSサービスを活用することに ©18TRIP PROJECT

Slide 9

Slide 9 text

9 ©18TRIP PROJECT AWSサービスを活用した テストとは

Slide 10

Slide 10 text

10 AWSサービスを活用したテストとは • 本作ではリリース前に障害テストと負荷テストを実施 • これまでのプロジェクトでは • 手動で停止するなどの障害テスト • 攻撃サーバを別で構築しての負荷テスト をしていた • FIS、DLTを利用することで手間を最小限に! ©18TRIP PROJECT

Slide 11

Slide 11 text

11 ©18TRIP PROJECT 「FIS」って何?

Slide 12

Slide 12 text

12 FIS = AWS製障害テストツール • 正式名称:AWS Fault Injection Service • AWSの各リソースに対して疑似障害を起こせる • 例:EC2の停止・再起動、ECSタスクの停止、 RDSのフェールオーバーなどが実施可能 ©18TRIP PROJECT

Slide 13

Slide 13 text

13 シナリオに沿った障害テストが可能 • 複数の障害を順番に組み合わせて実施可能 • GUIでアクションとターゲット を順番に追加していく • 18TRIPでは • ECSタスク停止 • RDSフェールオーバー を実施 ©18TRIP PROJECT

Slide 14

Slide 14 text

14 FISを使ってみて… • 設定方法はシンプルでわかりやすく、 最低限のテストならサクッと設定することが出来た • テスト内容のインポート、エクスポートもできるため パターン違いなども作りやすそう • 作り込んだシナリオや負荷テスト中に実行するなど、 多様な観点での実施は今後利用するうえでの課題 ©18TRIP PROJECT

Slide 15

Slide 15 text

15 ©18TRIP PROJECT 「DLT」って何?

Slide 16

Slide 16 text

16 DLT = AWS製負荷テストツール • 正式名称:Distributed Load Testing on AWS • 単一のサービスではなく、CloudFormationにより 一括構築されたサービス群 • CloudFront、Lambda等から構成される ©18TRIP PROJECT

Slide 17

Slide 17 text

17 DLTの構成図 ©18TRIP PROJECT

Slide 18

Slide 18 text

18 JMeterベースで負荷テスト • Webコンソールからテスト内容を設定可能 • JMeterのシナリオとデータをまとめ、 Zipでアップロードして使用することもできる • 18TRIPではJMeterのシナリオを使って実施 ©18TRIP PROJECT

Slide 19

Slide 19 text

19 DLTの設定画面 ©18TRIP PROJECT

Slide 20

Slide 20 text

20 DLTの実行結果画面 ©18TRIP PROJECT

Slide 21

Slide 21 text

21 ©18TRIP PROJECT DLTに問題発生…!!

Slide 22

Slide 22 text

22 負荷テストが上手くいかない… • DLTは指定した並列数に応じて Fargateが起動し、ターゲットへアタックする • が…テスト開始と共にFargateが次々止まり アタックが終わってしまう… ©18TRIP PROJECT

Slide 23

Slide 23 text

23 原因はS3の仕様にあり • DLT内部で設定用のファイルをアップロードしている S3の仕様に問題があった • 詳しくは後述 • ファイル容量が一定以上だとアップロードの 完了前にテストが開始してしまう… • 結果、エラーになってFargateが停止… ©18TRIP PROJECT

Slide 24

Slide 24 text

24 問題となったS3の仕様とは • DLTはアップするファイルサイズにより、使うAPIが変わる • 5MB以上だとマルチパートアップロードが利用される • が…S3のマルチパートアップロードはタイムアウト回避の ためにアップロード途中でも完了ステータスを返してしまう • レスポンスの詳細を見れば本当に完了しているか判定できるが、 DLTはそこまで行ってくれない ©18TRIP PROJECT

Slide 25

Slide 25 text

25 駄目なら直せば良い • DLT用のLambda関数は通常の関数と同様に 編集が可能 • 担当SAに助力頂きながら関数を修正 • S3へのアップロード処理に待ち時間を持たせることで 正常に動作するように ©18TRIP PROJECT

Slide 26

Slide 26 text

26 DLTを使ってみて… • JMeterの知見があれば比較的簡単に利用できた • 使われるサービスがサーバレス中心のため、 攻撃サーバを建てるよりもコスパが良かった • ただ、使い始めには前述したような謎挙動に 振り回される場面も… ©18TRIP PROJECT

Slide 27

Slide 27 text

27 まとめ • FIS、DLTの導入で工数もコストも改善できた • 今後も使い込むことで更にメリットが得られる • 知見の少なさ、挙動の読めなさで困ることもあったが、 SAさんに協力いただくことで対処が出来た ©18TRIP PROJECT

Slide 28

Slide 28 text

28 ©18TRIP PROJECT ご清聴ありがとうございました