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