ecspresso v2.5.0をリリースしました

Amazon ECS デプロイツール ecspresso v2.5.0 をリリースしたのでお知らせです。

github.com

新機能がいくつか、ログ出力まわりの変更、その他細かい修正などが入っています。非互換な変更は (ログ形式以外) ありません。

新機能

外部コマンド呼び出しプラグインを追加

ecspresso の実行時に、テンプレート関数から外部コマンドを呼び出して結果を取得する external plugin を追加しました。

ここでは使い方の例として、「現在時刻を ISO8601 形式で出力する jq コマンドを呼び出す」ようにしてみます。

$ jq -n "{ Now: now | todateiso8601 }"
{
  "Now": "2024-10-25T16:13:22Z"
}

ecspresso の設定ファイルで、external plugin から呼び出すコマンドを定義します。ここでは

  • jq というテンプレート関数を定義する
  • 実行するコマンドは jq -n で引数を1つ取る

としてみます。

# ecspresso.yml
plugins:
  - name: external
    config:
      name: jq
      command: ["jq", "-n"]
      num_args: 1
      timeout: 5

テンプレートからは、定義したテンプレート関数に対して、引数を渡すことで実行できます。

local jq = std.native('jq');
{
  today: jq('{ Now: now | todateiso8601 }').Now,
}

デフォルトでは、コマンドは標準出力にJSONを出力することを期待しています。設定で parser: string を指定することで、結果を文字列として扱うこともできるようになっています。

ユースケースとしては、ecspresso 実行前になんらかのコマンドを実行して ecspresso のテンプレートに埋め込む値を生成する必要がある場面を想定しています。

これまでは、環境変数を経由して値を受け渡す必要がありました。

  1. shell などでコマンドを実行し、その結果を環境変数に設定する
  2. ecspresso ではテンプレートで環境変数を参照する

external plugin を利用することで、環境変数での値のやりとりなしにコマンドの出力を直接扱うことが可能になります。

deploy --wait-until=deployed を追加

ecspresso deploy を実行すると、デフォルトでは ECS サービスが stable になるまで待機します。最新の deployment が成功した時点で待機を打ち切るためのオプションが追加されました。

デフォルトではこれまで通り、--wait-until=stable なので挙動は変わりません。

CodeDeploy 利用時に DeploymentConfigName を上書き可能に

これまでは、CodeDeploy の DeploymentGroup (ECSサービスに1:1対応している) に設定されている DeploymentConfigName が暗黙的に指定されていました。設定ファイルで codedeploy.deployment_config_name を明示的に指定することで、DeploymentGroup に指定された以外の DeploymentConfig を利用できるようになりました。

codedeploy:
  application_name: myapp
  deployment_group_name: mydeployment
  deployment_config_name: myDeploymentConfig # optional, override DeploymentGroup setting

ログ出力を log/slog に変更

ログの出力を Go 標準の slog に変更しました。v2.4までとはログの出力形式が多少異なります。

v2.4 まで

$ ecspresso diff --debug
2025/05/09 14:59:37 [INFO] ecspresso version: v2.4.6
2025/05/09 14:59:38 ecspresso/ecspresso [DEBUG] config file path: ecspresso.jsonnet
2025/05/09 14:59:38 ecspresso/ecspresso [DEBUG] timeout: 10m0s

v2.5 から

$ ecspresso diff --debug
2025-05-09T14:58:49.875+09:00 [INFO] ecspresso version: v2.5.0
2025-05-09T14:58:51.302+09:00 [DEBUG] [ecspresso/ecspresso] config file path: ecspresso.jsonnet
2025-05-09T14:58:51.302+09:00 [DEBUG] [ecspresso/ecspresso] timeout: 10m0s

また、--log-format=json というオプションが追加されました。ログと、その他の出力 (diff は除きます) が、JSON で出力されるようになります。

その他細かい変更

依存パッケージの更新、内部で time.Sleep() を利用しているタイミングで Ctrl-C などでの打ち切りがすぐに行われなかったのを修正、verify コマンドのリファクタリング(動作は同じです)、などが含まれています。


ということで、ecspresso v2.5.0 のお知らせでした。機能要望などをお送りいただいた皆様、ありがとうございました。今回のリリースでは非互換変更は含まれていないはずですが、もし何かありましたらお知らせ下さい。