SREチームの藤原です。
この記事は 面白法人グループ Advent Calendar 2023 4日目の記事です。
今日は、自分が開発・メンテナンスしている Amazon ECS デプロイツール ecspresso の次のバージョンでリリースされる予定の新機能を、予告として紹介したいと思います。
ecspresso v2.3 に入りそうな新機能
Pull Requestで v2.3 ラベルが付いているもの を新機能としてリリースする予定です。
Secrets ManagerのARNを取得する secretsmanager_arn
テンプレート関数
add secretsmanager plugin by fujiwara · Pull Request #618 · kayac/ecspresso · GitHub
ECSタスクにSecrets Managerで管理している値を環境変数として読み込む場合、secrets.valueFrom
属性にシークレット名ではなく、ARNを指定する必要があります。
Secrets ManagerのシークレットARNは、例えば名前が example/foo
だった場合には次のように、作成時に末尾にランダムな値が付与されます。例: arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:example/foo-soBS7X
(-soBS7X
がランダムな値)
そのため名前を知っているだけではARNを構築することができず、別途 AWS CLI や ecspresso の CloudFormation / tfstate 参照機能などを利用して ARN を取得する必要がありました。
v2.3 で追加予定の secretsmanager_arn
テンプレート関数を使用すると、secretsの名前を指定してARNをテンプレートに展開できるため、この手間を省けます。
"secrets": [ { "name": "EXAMPLE_FOO", "valueFrom": "{{ secretsmanager_arn `example/foo` }}" } ]
ecspresso run --client-token
引数をサポート
add run --client-token by fujiwara · Pull Request #631 · kayac/ecspresso · GitHub
先日リリースされた、ECSタスク起動の冪等性をサポートする --client-token
引数を追加します。この引数に任意の値を指定することで、同じ値が指定されて実行された RunTask API の呼び出しが冪等になり、複数回実行しても一回の呼び出しとして扱われることが保証されます。
なおSDKの更新により、引数を指定しない場合には内部でランダムな値の token が生成されて RunTask が呼び出されるようになったため、ECS API が503を返すなどして自動でリトライが行われた場合にも意識せずに冪等になるようになっています。
ecspresso diff
コマンドで、サービスが存在しない場合にもエラーにならないで差分が表示されるように
これまでは ecspresso diff
を実行した場合に比較対象の ECS サービスが存在していない場合には、エラーになっていました。
ecspresso は v2.0 から新規作成とデプロイを区別せず、deploy
コマンドで新規作成も更新もできるようになっていましたが、diffコマンドの挙動では区別されていたため、これを変更しました。
v2.3ではECSサービスが存在しない場合、追加のみの差分が表示されるようになります。
デプロイフローに `ecspresso diff` を入れてると、初回デプロイ時に service xx is not found で workflow が止まるのなんとかしたい。
— snaka (@snaka) 2023年12月1日
`|| exit 0` でエラーを無視できそうだけど、初回のそのエラーのケース以外は普通にエラーとなってほしい...
設定ファイルの timeout
をCLIフラグで上書きできるように、ほか追加の環境変数をサポート
ecspresso の設定ファイルには timeout
という項目があり、コマンド実行中に設定したタイムアウト時間を超えた場合にはエラーになります。
しかし設定ファイルによらず、実行時のCLIフラグによりこの値を上書きしたいという要望がありました。Add a CLI flag to support a timeout · Issue #598 · kayac/ecspresso · GitHub
確かに、タイムアウト時間はコマンド実行時に処理によって動的に決めたい性質があるため、設定ファイルの値をフラグで上書きできる方が便利です。
v2.3では --timeout
フラグが追加されます。また、同時に次の環境変数によって CLI フラグの値を設定するのと同様の効果を得ることができます。
ECSPRESSO_TIMEOUT
ECSPRESSO_CONFIG
ECSPRESSO_ENVFILE
ECSPRESSO_DEBUG
ECSPRESSO_EXT_STR
ECSPRESSO_EXT_CODE
ECSPRESSO_ASSUME_ROLE_ARN
ecspresso v2.3はもうすぐリリース予定です
現在鋭意作業中ですが、このアドベントカレンダーが完結するまでには ecspresso v2.3 をリリースしたいと思っています。
普段から ecspresso をご利用中の皆様、要望を送ってくださった皆様、いつもありがとうございます!