ecspresso advent calendar 2020 day 9 - wait
Amazon ECS のデプロイツールである ecspresso の利用法をまとめていく ecspresso Advent calendar 9日目です。
--no-wait
で実行した操作の完了を待つ wait
コマンド
これまで deploy
, rollback
, refresh
コマンドの項で説明したとおり、ecspresso は ECS サービスの状態を変更する操作を実行したあとにはデフォルトで ECS サービスの状態が安定するまで待機します。設定ファイル(config.yaml) で指定されたタイムアウト時間まで待機しますが、それでも安定状態にならなければコマンドの実行が失敗 (exit 1) します。
ECS サービスの状態が安定するのを待たずに、ECS サービスの状態を変更する操作を実行したら即終了したい場合に備えて、各コマンドには --no-wait
オプションが実装されています。CI/CD 環境などで自動デプロイを行う場合など、ワークフローの実行を長時間ブロックさせたくないという要求に対応したものです。
--no-wait
で実行した後に、別途 ECS サービスが安定状態になるまで待機するために ecspresso wait
コマンドが用意されています。
wait
コマンドのオプション
$ ecspresso wait --help
usage: ecspresso wait
wait until service stable
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
--config=CONFIG config file
--debug enable debug log
wait
コマンドには固有のオプションはありません。
wait
コマンドの実装
wait
コマンドの実装は、ECS サービスのデプロイ方法によって異なります。
ローリングデプロイ(デフォルト)の場合
サービス定義の deploymentController.type
が ECS
の場合です。特にデプロイ方法を指定していない場合は ECS のデフォルトのローリングデプロイが実行されます。
aws-sdk-go の ecs.WaitUntilServicesStable
を呼び出すことで wait
を実装しています。
AWS CodeDeploy によるデプロイの場合
サービス定義の deploymentController.type
が CODE_DEPLOY
の場合です。AWS Code Deploy によるデプロイを行う方法については[17日目]で説明しています。
aws-sdk-go の codedeploy.WaitUntilDeploymentSuccessful
を呼び出すことで実装しています。
deploymentController が EXTERNAL の場合
外部デプロイ には執筆時点(2020-12)では非対応です。wait
だけではなく、deploy
コマンドを含めて一切対応がありません。
10日目は、設定ファイル上のサービス/タスク定義と、稼働中のサービス/タスク定義の状態の差異を表示する方法について説明します。
Discussion