ECS のローリング更新でデプロイ時間を短くする方法を教えてください
困っていた内容
ECS サービスのデプロイ方法としてローリング更新を設定しています。開発環境では頻繁にデプロイするので、デプロイ時間を少しでも短くしたいです。変更するとデプロイ時間が短くなる設定項目とかはあったりしませんか?
どう対応すればいいの?
最小ヘルス率(minimumHealthyPercent
)の変更をご検討ください。
minimumHealthyPercent
は、デプロイメント中またはコンテナインスタンスがドレインしているときに、サービスに対して実行する必要があるタスク数の下限を、サービスに必要なタスク数の割合 (%) として表します。
minimumHealthyPercent
の設定値がデフォルトの100%の場合、RUNNING
状態のタスク数を保つため、ローリング更新は次の順番でデプロイを行います。
- 新規ECSタスクを起動開始する
- 新規ECSタスクが
RUNNING
状態になる - 既存ECSタスクを停止開始する
- 既存ECSタスクが
STOPPED
状態になる
一方で、minimumHealthyPercent
の設定値が0%の場合、RUNNING状態のタスク数を保つ必要がないため、次の順番でデプロイを行います。
- 新規ECSタスクを起動開始、既存ECSタスクを停止開始する
- 新規ECSタスクが
RUNNING
状態になる - 既存ECSタスクが
STOPPED
状態になる
※2と3の順番は不定
新規ECSタスクの起動処理と 既存ECSタスクの停止処理が並列して行われるため、デプロイ時間の短縮が期待できます。
なお、デプロイ中はRUNNING
状態のタスク数が0以下になることが想定されますので、ご注意ください。
やってみた
AWS Fargate を1タスク(中身はnginx)でminimumHealthyPercent
を変更した場合の例となります。
経過時間およびイベントメッセージはECSサービスのイベントタブを確認しました。
minimumHealthyPercent 100%
デプロイ時間は3分33秒でした。追加⇨停止の順番で実施されたことが確認できます。
経過時間(秒) | イベントメッセージ |
---|---|
- | デプロイ開始 |
14 | service hato has started 1 tasks: task |
115 | service hato has stopped 1 running tasks: task |
213 | service hato (deployment ecs-svc/123) deployment completed. |
minimumHealthyPercent 0%
デプロイ時間は58秒でした。追加と停止がほぼ同時タイミングで実施されたことが確認できます。
経過時間(秒) | 処理内容 |
---|---|
- | デプロイ開始 |
4 | service ngx has stopped 1 running tasks: task |
4 | service ngx has started 1 tasks: task |
58 | service hato (deployment ecs-svc/123) deployment completed. |