はじめに
ECSデプロイのロールバック判断にCircuit Breakerを利用していましたが、CloudWatch Alarmのアラーム状態を検知してロールバックを行う機能が追加されていました。
この機能を利用することでメトリクスを監視し、デプロイ後に異常状態であればロールバックを行うという構成ができるようになりました。
アラーム時にロールバックを行えると色々と活用できそうな気がするので試してみます。
やってみる
CloudWatch Alarmの作成
ロールバックの判断を行うアラームを作成します。
検証を行うECS ServiceのCPU Utilize最大値が30%を超えた時点でアラーム状態になるアラームを作成しました。
現状では負荷が低いコンテナをデプロイしているので、アラームはOK状態となっています。
サービスの編集
サービスを編集から上記で作成したCloudWatch Alarmとの紐づけを行います。
「デプロイ不具合の検出」からCloudWatchアラームを設定して失敗時のロールバック項目にチェックを付けます。
Circuit Breakerとの併用もできるようです。
異常なコンテナのデプロイ
CPU負荷が高いコンテナをデプロイします。
タスク定義の新規リビジョンを作成し、サービスを更新します。
負荷が低いリビジョン1から負荷が高いリビジョン2に更新しました。
リビジョン2のタスクがデプロイされることを確認します。
CloudWatch Alarmを確認すると、狙い通り「アラーム状態」となっています。
デプロイイベントを確認すると「alarm detected」が原因となり、ロールバックが開始されていました。
まとめ
簡単ですがAlarmの異常状態からロールバックが発生することを確認しました。
「デプロイ時のAlarmがすでに異常状態の場合はロールバックが発生しない」など、実運用をする場合にはいくつか考慮すべき点があると思います。
以下のドキュメントを事前に確認することをお勧めします。