こんにちは、岩城です。
ECSでBlue/Greenデプロイを行っている環境でトラフィックの再ルーティング
と元のタスクセットの終了
をCLIから実行できるか確認する機会がありましたので共有します。
トラフィックの再ルーティング
トラフィックの再ルーティング
とは、Greenタスクの起動が完了した後にユーザーのトラフィックをBlueタスクから切り替えることです。
ECSタスクを更新するとCodeDeployが動いてGreenタスクが起動します。トラフィックをGreenタスクへ切り替える際、トラフィックの再ルーティングを行う必要があります。
CodeDeployのデプロイメントグループで設定すると、すぐに再ルーティングさせたり、設定した時間を経過すれば再ルーティングするといったことが可能です。
すぐに再ルーティングさせたくないし、自分の任意のタイミングで再ルーティングさせたい。だけど、マネジメントコンソールからの作業だと操作ミスするかも知れないから、CLIで対応したいという場合、以下で対応できます。
$ aws deploy continue-deployment \
--deployment-id "[デプロイメントID]" \
--deployment-wait-type "READY_WAIT"
元のタスクセットの終了
元のタスクセットの終了
とは、BlueタスクからGreenタスクへの切り替わった後にBlueタスクを終了させることです。
こちらもデプロイメントグループで設定すると、元のタスクを終了させる時間をコントロールすることができ、マネジメントコンソールだけでなくCLIでも対応できます。
$ aws deploy continue-deployment \
--deployment-id "[DEPLOYMENT+ID]" \
--deployment-wait-type "TERMINATION_WAIT"
ちなみに、当初はaws deploy continue-deployment
ではなくaws ecs delete-task-set
で元のタスクを終了できないか試しました。
ところが以下のようなエラーが出力され、CodeDeployでコントロールされているサービスであるため削除できないことを知りました。
$ aws ecs delete-task-set \
--cluster "[CLUSTER_NAME]" \
--service "[SERVICE_NAME]" \
--task-set "[TASKSET_ID]" \
--force
An error occurred (InvalidParameterException) when calling the DeleteTaskSet operation: Amazon ECS does not support task set management on services where deployments are controlled by AWS CodeDeploy.
おわりに
トラフィックの再ルーティング
と元のタスクセットの終了
は、CodeDeployのデプロイメントグループで設定した期間に達したら勝手に実行されます。
任意のタイミングで実行したい場合、長めに期間を設定しておき、マネジメントコンソールやCLIから実行することで実現できます。
本エントリがどなかたのお役に立てれば幸いです。