あけましておめでとうございます。Amazon ECS デプロイツール ecspresso の v1.3.0 をリリースしたのでお知らせです。
[2021-01-16 追記] v1.3.0 は init コマンドでクラッシュする問題があります。v1.3.1 をご利用ください。
今回は機能追加が盛り盛りなので、まとめて紹介します。
Release v1.3.0 · kayac/ecspresso · GitHub
【新機能】 cloudformation プラグインを追加
これまで ecspresso は Terraform tfstate を読み込んでそのリソース名から属性値を解決できる機能を持っていましたが、CloudFormation でも同様の処理ができるようになりました。
README に例がありますが、次のように Output と Export を定義したテンプレートで構築された、Stack 名が ECS-ecspresso という CloudFormation stack がある場合に
Outputs: SubnetAz1: Value: !Ref PublicSubnetAz1 SubnetAz2: Value: !Ref PublicSubnetAz2 EcsSecurityGroupId: Value: !Ref EcsSecurityGroup Export: Name: !Sub ${AWS::StackName}-EcsSecurityGroupId
ecspresso の設定ファイルで cloudformation plugin を指定すると
plugins: - name: cloudformation
定義ファイルで cfn_output
と cfn_export
という関数が使用可能になります。cfn_output スタック名 OutputKey
で Outputs の値を名前で解決できます。cfn_export エクスポート名
で、エクスポートされた値を名前で解決できます。
サービス定義での使用例は次のようになります。
{ "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "{{ cfn_output `ECS-ecspresso` `SubnetAz1` }}", "{{ cfn_output `ECS-ecspresso` `SubnetAz2` }}" ], "securityGroups": [ "{{ cfn_export `ECS-ecspresso-EcsSecurityGroupId` }}" ] } } }
ご意見をくださった @torics さん、@hamako9999 さん、@_sisisin さん、ありがとうございました!
【新機能】scale コマンドを追加
これまでサービスのタスク数を変更するためには deploy --no-update-service --skip-task-definition --tasks タスク数
を指定していましたが、これをショートカットにした scale
コマンドを追加しました。
$ ecspresso --config config.yaml scale --tasks 10
これで ecspresso --config config.yaml deploy --no-update-service --skip-task-definition --tasks 10
とおなじ意味になります。
タスク数だけを変えたい場合でも指定するオプションが多いため、うっかりサービスやタスクを更新してしまう事例がありました。scale コマンドを使用すると必要なのは --tasks のみ(必須) になるため、事故を防げます。
【新機能】tfstate plugin が URL を直接読み込めるようになりました
これまで tfstate plugin はローカルファイルの読み込みのみが可能でしたが、直接 s3, http(s) URL からも読み込めるようになりました。デプロイする環境に terraform.tfstate が存在していない場合、これまではわざわざ aws s3 cp
などでローカルにコピーする必要がありました。
plugins: - name: tfstate config: url: s3://my-bucket/terraform.tfstate
tfstate-lookup コマンドも v0.1.0 で URL からの tfstate 読み込みをサポートしています。 https://github.com/fujiwara/tfstate-lookup/releases/tag/v0.1.0
【新機能】設定ファイルで required_version
が使用可能に
特定のバージョン以降で追加された機能を要求する場合など、ecspresso のバージョンに制約を持たせたい場合に設定ファイルで使用できる機能です。
required_version: ">= v1.3.0, < v2"
このように semver で指定することで、条件を満たしていないバージョンの ecspresso で実行しようとするとエラーになります。hashicorp/go-version を使用しています。
この機能をサポートしていない v1.3.0 未満のバージョンでは無視されるため、v1.3.0 がリリースされた時点では指定する意味はありません。将来新しいバージョンがリリースされ、その時点で入った機能や修正に依存した処理があるためそれ未満のバージョンでは実行させたくないような場合に役に立つ予定です。
PR を送ってくださった mashiike さん (同僚) ありがとうございました!
【新機能】run
コマンドでタスクにタグが付けられるように
ecspresso run --tags Foo=Bar
で、実行するタスクに Foo という名前のタグが Bar という値で設定されます (複数指定可能)。
ecspresso run --propagate-tags=(SERVICE|TASK_DEFINITION)
で、実行するタスクに付けるタグをサービス定義もしくはタスク定義から引き継ぐことができます。
実は現状では、ecspresso でタスク定義を登録する際にはタグを附与することができません。これは定義ファイルを SDK の ecs.TaskDefinition
にマッピングしていて、この構造体にはタグの定義がないためです。(サポート方法を悩みつつ、具体的な需要が今のところないので何もしていません)
その他修正いろいろ
- [Fix] Unable to update platformVersion and networkConfiguration for CodeDeploy services. #209
- CodeDeploy でデプロイする際に、--update-service を付けていても platformVersion と networkConfiguration が変更できなかった問題を修正しています。
- [Fix] diff command becomes to compare local task definition and remote task definition. #218
- diff コマンドが比較するタスク定義のリモート(ECS)側が、これまで latest (一番リビジョンが大きい) のものになっていましたが、サービスが現在使用しているリビジョンのものと比較するようになりました。
- [Fix] Support to Docker Registry V2 API. Enables to read any public image repository using V2 API. (public.ecr.aws, gcr.io, ghcr.io and etc.) #214 #213
ecspresso handbook も改訂予定
昨年末に公開した ecspresso handbook ですが、こちらも v1.3.0 の新機能へ追従して近日改訂予定です。ご購入の方はそのままお読みいただけます。まだの方は是非この機会にお求めください。