ECSにおけるローリングアップデートの安全性を向上させたいryoこんにちは、ryoです。ECSのローリングアップデートはデフォルトのデプロイ形式であり、多くのケースで利用されていると思います。今回は、ECSのローリングアップデートの安全性を高める仕組みをご紹介します。今回紹介する方法は現時点(2023年2月)でローリングアップデートのみ対応ですECSのローリングアップデート失敗時の挙動ECSのタスクが正常に立ち上がらないなどの理由でDesiredCountに達しない場合、ECSはサービススロットリングロジックに基づきタスクの再起動を行います。https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-throttle-logic.htmlこのロジックでは、タスクが正常に立ち上がりDesiredCountを満たすまで永久にタスクの再起動を行います。+自動ロールバックの導入が役立ちます。breakerはECSのローリングアップデートにおける異常を検知した際に、自動でロールバックをしてくれる機能です。breakerを使わずに実現が可能です。タスクの終了イベントをEventBridgeでキャプチャすることが出来るので、EventBridgeから様々なAWSサービスに連携が出来ます。タスクの異常終了の検知を行なってもロールバックなどの対応は自前で実装を行うか、その都度対応していく必要があります。自動ロールバックが可能になります。仕組み詳しい仕組みはこちらのスライドに分かりやすくまとまっているので、ご一読いただければと思います。https://d1.awsstatic.com/Developer%20Marketing/jp/developer-zone/ECS-Deployment-Circuit-Breaker-Rollback.pdf基本的にはデプロイ時にタスクが立ち上がらない場合やヘルスチェックが通らない場合に、ある閾値まで再試行を行い、閾値を超えた際にロールバックを行うという挙動になります。デプロイ時のチェックは主に2段階に分かれていて、簡単に図に表すと以下のようになります。200という式で表されます。最小の再試行回数は10で、最大の再試行回数は200になります。200となり、最小試行回数である10が閾値となります。200となり、閾値は100になります。Alarmsの発報に応じて、自動でロールバックを行うことが可能です。Alarmsではメトリクスに対して、柔軟に設定が可能で、アプリケーションに応じて様々なケースが考えられます。公式ブログの図を見ると、時間軸t2から新バージョンのローリングアップデートが始まり、時間軸t3でデプロイが完了すると想定します。Alarmsの発報によるロールバック可能期間が開始されます。timeと呼ばれる、デプロイ完了(DesiredCountを満たす)後の追加のロールバック可能期間です。timeはAlarmの設定に応じて、ECS側で自動で計算されます。Alarmsが発報した場合にタスクのロールバックが行われる形になります。Alarmsに使うメトリクスの選定について、ドキュメントに推奨のものが記載されています。Alarmsを組み込んだローリングアップデートをCDKで作成したECSに組み込む方法を紹介します。Fargateのインフラ定義を行います。Alarmsとの統合にはまだ対応していないため、今回はエスケープハッチを利用して設定を行います。CDKのGitHubを見るとPR出している方がいたので、もうすぐエスケープハッチを利用しなくても設定出来るようになりそうです。https://github.com/aws/aws-cdk/pull/24182エスケープハッチは高レベルコンストラクタからL1コンストラクタにアクセスするための方法で、L1コンストラクタはCloudFormationのリソースと1対1で紐づいているため、柔軟な設定が可能です。詳細はこちらを参照ください。https://docs.aws.amazon.com/cdk/v2/guide/cfn_layer.htmlCloudFormationではDeploymentConfigurationで該当の設定が可能なので、エスケープハッチからこちらの設定を行います。https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-deploymentconfiguration.htmldeploymentCircuitBreakerとalarmsにはenableとrollbackがあり、別々に設定可能です。falseといった設定も可能で、この場合はデプロイ失敗時にEventBridgeへの通知のみ走ります。};まとめ今回はローリングアップデートをより安全に行う方法と、CDKでの設定方法を紹介させていただきました。timeを除くと評価期間が被りますが、それぞれの目的は全く異なるものです。取り入れて少しでも安全なデプロイにしていきましょう!どなたかの参考になれば幸いでございます。ウェブサービス株式会社(DWS)公式ブログ記事URLをコピーしました。