☕️

ecspresso advent calendar 2020 day 9 - wait

2020/12/09に公開

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.typeECS の場合です。特にデプロイ方法を指定していない場合は ECS のデフォルトのローリングデプロイが実行されます。

aws-sdk-go の ecs.WaitUntilServicesStable を呼び出すことで wait を実装しています。

AWS CodeDeploy によるデプロイの場合

サービス定義の deploymentController.typeCODE_DEPLOY の場合です。AWS Code Deploy によるデプロイを行う方法については[17日目]で説明しています。

aws-sdk-go の codedeploy.WaitUntilDeploymentSuccessful を呼び出すことで実装しています。

deploymentController が EXTERNAL の場合

外部デプロイ には執筆時点(2020-12)では非対応です。wait だけではなく、deploy コマンドを含めて一切対応がありません。


10日目は、設定ファイル上のサービス/タスク定義と、稼働中のサービス/タスク定義の状態の差異を表示する方法について説明します。

https://zenn.dev/fujiwara/articles/ecspresso-20201210

Discussion