SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

AWSとAzureのマネージドサービスで実践カオスエンジニアリング

【AWSのコンテナでカオスエンジニアリング】AWS Fault Injection SimulatorでECSにカオスを挿入する

AWSとAzureのマネージドサービスで実践カオスエンジニアリング 第4回

  • このエントリーをはてなブックマークに追加

 本連載では、AWSやMicrosoft Azureが提供するカオスエンジニアリングのマネージドサービスの特徴と実際のカオスエンジニアリングの実践方法を紹介します。今回は、AWS Fault Injection Simulator(FIS)を活用し、Amazon ECSにカオスを挿入する方法について紹介します。

  • このエントリーをはてなブックマークに追加

はじめに

 第2回の記事では、AWS Fault Injection Simulator(FIS)を利用してAmazon EC2(EC2)にカオスを挿入する方法を紹介しながら、FISがどのように「システムに対して安全にカオスの挿入を行う上で考慮すべき観点」に対応しているかを説明しました。

 本記事では、Amazon Elastic Container Service(Amazon ECS)のFargate起動タイプで構成されたシステムに対してFISでカオスを挿入する方法を紹介します。

前提条件

実験対象システム

 実験の対象システムとして、Amazon ECS と AWS Fargate を利用した Twelve-Factor Apps の開発で紹介されているサンプルソリューションを利用します。ブログ内のCloudFormationを利用して展開を行うのですが、何点か注意があります。

  1. CloudFormationのEnvironmentNameパラメーターでprodを指定すると、CodePiplineに追加のステージが作成されるため、試しで利用する場合はprod以外の値にした方がよいでしょう
  2. 利用しているpythonライブラリの依存関係の問題で、サンプルソリューションをそのままで動かすことはできません。以下のファイルの内容を下記のように編集したうえで、CodePipelineのTwelve-Factor-App-Pipelineを再実行して、再デプロイを行うようにしてください
twelve-factor-app / twelve-factor-app-ecs-blog-main / requirements.txt
Flask==1.1.1
boto3==1.17.12
jinja2<3.1.0
itsdangerous==2.0.1
werkzeug==2.0.3

正常性検知アラートの設定

 前回の記事では、CloudWatch synthetic monitoringでの正常性監視によって定常状態を定義していましたが、今回はApplication Load Balancer(ALB)のレスポンスコードを用いて定常状態を定義します。メトリクスの数式に基づく CloudWatch アラームの作成を参考に、下記のような総リクエスト内のエラーリクエスト数の割合を示すErrorRateを定義します。一度も発生していないメトリクスは設定することができないため、もし下記のメトリクスが表示されていないようであれば、次項で説明する疑似リクエスト作成の対応を実施後、改めてErrorRateの定義を行っていただければと思います。

  • ErrorRate = (HTTPCode_Target_4XX_Count+HTTPCode_Target_5XX_Count)/RequestCount

 このErrorRateを1分間で評価するようにしておき、全リクエストのうちエラーとなるリクエスト数が10%以上となった場合に、アラームを発報するように設定しておきます。

疑似リクエストの生成

 今回は実際の利用者を模した疑似リクエストを作成し、システムに負荷がかかった状態で、カオスの挿入を行いたいと思います。疑似リクエストはAWS での分散負荷テストを用いて作成します。CloudFormationテンプレートを実行すると、負荷テストの設定が行えるようになります。下記のように設定を行い、負荷テスト中に実験を行うようにします。

項目 設定値 補足
Task Count 1
Concurrency 5 あまり多くの負荷をかけると今回のシステムはリクエストの処理が追いつかなくなるため、同時実行は5としておきます
Region ap-northeast-1 負荷テストソリューションを配置したリージョンを選択します
Ramp Up 1 minutes 極力早く最大負荷にしたいため、1分を指定します
Hold For 10 minutes 実験時間よりも長くなるようにしておきます
Run Now 選択 スケジュール実行を選んでも構いません
Include Live Data チェック 負荷の状態をリアルタイムで確認しておきたいので選択しておきます
Test Type Single HTTP endpoint
HTTP endpoint under test サンプルソリューションのhelloエンドポイント(CloudFormationの出力セクションのLoadBalancerDNSの値) helloエンドポイントはDynamoDBへの接続処理も確認できるため、正常性確認時のURLとして最適です
HTTP Method GET -

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
実験内容

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
AWSとAzureのマネージドサービスで実践カオスエンジニアリング連載記事一覧

もっと読む

この記事の著者

奥村 康晃(株式会社NTTデータ)(オクムラ ヤスアキ)

 NTTデータ入社以来、クラウドサービスのAPIを連携させることで効率的な管理を可能とするクラウド管理プラットフォームの開発に従事。現在では、クラウド導入の技術コンサルや組織での技術戦略立案にも携わる。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/16846 2022/11/25 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング