Amazon ECS のデプロイツール、ecspresso の v1.4.0 をリリースしたのでお知らせです。
今回はそこまで大きな機能追加はないのですが、地味に嬉しい機能が入っております。どうぞご利用ください。
run コマンドに --overrides-file
が追加
単体タスクを実行する run コマンドに、--overrides-file
オプションが追加されました。
タスク実行時に上書きするコマンドや環境変数は、これまで --overrides
オプションでJSON文字列として渡す必要がありましたが、これが結構複雑な構造をしているので組み立てが面倒でした。
{ "containerOverrides": [ { "name": "foo", "command": ["my-command"] } ] }
こんな構造なので、CLI で渡すのはだいぶ煩雑です。ということで、あらかじめファイルとして JSON を記述しておいて、それを --overrides-file
で指定することができるようになりました。また、このファイルは他の ecspresso の定義ファイルと同様、テンプレートとして解釈されます。
{ "containerOverrides": [ { "name": "foo", "command": ["{{ must_env `COMMAND` | json_escape }}"] } ] }
このように環境変数の COMMAND
という値を展開するように定義しておけば、コマンドだけを変更したい場合に以下のように実行できます。便利!
$ COMMAND="echo hoge" ecspresso run --overrides-file overrides.json ...
verify コマンドに --no-get-secrets
オプションが追加
ecspresso verify でのタスク定義の検証時に、これまでは secrets の値が SSM パラメータストアや SecretsManager に存在して読み取れる必要がありました。権限的に読み取れない場合は verify が失敗してしまいますが、値によっては verify を行う環境からは読ませたくない、という要望がありました。
--no-get-secrets
オプションを指定すると、secrets が読み取れるかどうかの検証をskipします。
--envfile
オプションが追加
ecspresso の各種定義ファイルでは環境変数を展開できる機能があり、動作のカスタマイズには欠かせない機能です。
しかし、複数の環境に対するデプロイを1つの定義ファイルで行う場合には ecspresso 実行前に環境変数を定義し直す必要があります。これはちょっと面倒な場合があるため、あらかじめ環境変数を定義した envfile を指定できるようにしました。
指定できるファイルは一般的な .env 形式で、export
は付いていてもいなくても同様に動作します。
export FOO=foo BAR=bar
envfile のパースには hashicorp/go-envparse を使用しています。hashicorp のライブラリ、いつもながら渋いけど便利ですね。
init コマンドに --force-overwrite
オプションが追加
指定すると、init コマンドでの定義ファイル出力時に、既にファイルが存在していても確認なしで上書きします。
ecspresso の構成管理ファイルをバックアップ目的でリポジトリ管理していて、それを自動化する場合には確認なしで上書きしたいことはありますね。
テンプレート関数に tfstatef
が追加
Terraform state file をテンプレートから参照する機能で tfstate
関数がありますが、tfstatef
という関数が追加されました。これは要するに print に対する printf です。resource.name["foo"].id
のような参照を行う場合に、部分的に文字列を変数から組み立てたい場合に便利です。
例えば環境変数 AZ
を使用して aws_subnet.public['$AZ'].id
というリソース名を tfstate から参照したい場合、従来は printf で組み立てた文字列を tfstate 関数で渡す、という若干のテンプレート芸が必要でした。
{{ printf `aws_subnet.public['%s'].id` (must_env `AZ`) | tfstate }}
これが、以下のように分かりやすく記述できます。
{{ tfstatef `aws_subnet.public['%s'].id` (must_env `AZ`) }}
verify 時にタスク実行ロールに assume できない場合の警告を warning から info に変更
verify コマンド実行時、ecspresso はタスク実行ロールに assume role を試みて、成功したらタスク実行ロールで、失敗したら現在の権限で検証を行います。
タスク実行ロールに assume することでより確実な検証が行えるのですが、assume role できる設定をわざわざ行わない場合は毎回以下のような警告が(黄文字で)出力されてしまいます。
WARNING: failed to assume role to taskExecutuionRole.
実際にはこれは害があるとまでは言い切れない警告だったため、ログレベルを INFO に変更しました。
作者の周囲でも、この警告が出ていてもほとんど全員が無視するという結果が観測されたため、WARNING を無視させる習慣を付けてしまうのは望ましくない、という理由もあります。
リリースバイナリを Go 1.16 でビルド
Go 1.15 から Go 1.16 に変更しました。今回から、M1 mac の darwin むけ arm64 バイナリも同時にビルドしています。
ecspresso handbook も改訂予定です
v1.4.0 で追加、変更された機能については、ecspresso handbook でも順次改訂予定です。