Amazon ECS デプロイツール、ecspresso v2.7.0 をリリースしました。
新機能
ECS Express モードに対応
先日リリースされたAmazon ECSの新機能、Express モードに対応しています。
Amazon ECS Express Mode は、AWS 全体で一般的に使用されるリソースを作成するための新たな統合により、Amazon ECS サービスリソースへのシンプルなインターフェイスを提供します。ECS Express Mode は、ECS クラスター、タスク定義、Application Load Balancer、自動スケーリングポリシー、Amazon Route 53 ドメインを 1 つのエントリポイントから自動的にプロビジョニングして設定します。
簡単な定義で、ECSが動作するための周辺リソースを自動的に作成してくれるものですね。
ecspresso v2.7 では ECS Express モードに対して、従来の ecspresso が提供している機能をほぼ全面的にサポートしています。
ecspresso init --express: Express モードで動作しているサービスを定義ファイル化- 従来のタスク定義、サービス定義の代わりに
ecs-express-def.json(jsonnet)というExpress専用の定義ファイルを作成します。
- 従来のタスク定義、サービス定義の代わりに
ecspresso deploy: ExpressモードのECSサービスをデプロイ、作成ecspresso diff: 定義ファイルと実リソースのdiff形式差分表示ecspresso render [express-definition or expressdef]: 各種定義ファイルの JSON / Jsonnet 形式でのレンダリングecspresso delete: Express サービスの削除ecspresso status: Express サービスの状態表示ecspresso rollback: 実行中のデプロイに対してロールバックecspresso verify: Express 定義ファイル中のリソースに対しての検証exec,refresh,tasks,waitコマンド: 同様に動作します
もちろん、定義ファイルでのテンプレートやJsonnet関数での便利な機能(環境変数、tfstate、SSMパラメーターの参照など)も従来通り動作します。
ただし、以下のサブコマンドについては Express モードでは動作しません。
- scale, run, revisions, register, deregister, appspec
Expressモードのサービスに対して ecspresso status を実行すると、従来のstatusコマンドの表示に加えて、Express専用の状態(自動定義されたpublic endpointのDNS名など) も表示します。
$ ecspresso status
2025-11-23T11:38:42.750+09:00 [INFO] ecspresso version: v2.7.0
Service: printenv
Cluster: ecspresso
TaskDefinition: ecspresso-printenv:11
Express:
Status: ACTIVE
IngressPaths:
PUBLIC pr-xxxxxxxxxxxxxxx.ecs.ap-northeast-1.on.aws
ちなみに、実際に動作する最小限の Express 用の定義ファイルは次のようなものです。ロールとコンテナイメージの定義だけ。簡単ですね! (IAM Roleだけは別途定義が必要ですが、これはマネージメントコンソールでも同様なのです)
{ "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole", "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices", "primaryContainer": { "image": "nginx:latest" } }
Expressモードから通常のECSサービスへのマイグレーション
Expressモードは簡単に定義できるのですが、簡単さと引き換えにECSが持つ細かい機能へのアクセスができません。例えばタスク定義での詳細な設定 (ulimitとかfirelensを使ったログ送信とか) はExpress用の定義ファイルからは設定できません。
しかしecspressoは、このように簡単に定義されてデプロイされたExpress ECSサービスに対して、通常のサービス定義とタスク定義を作成する形にマイグレーションを行えます。ecspresso init --no-express を実行するだけです。
$ ecspresso init --service myservice --cluster default --no-express
これで従来の ecspresso 同様、ECSのフル機能にアクセスできるサービス定義(ecs-service-def)とタスク定義(ecs-task-def)ファイルが自動生成されます。あとは通常のECSサービス同様に設定を変更し、ecspresso deploy するだけです。
deployしてもECS上ではExpressモードのままですが、サービス定義とタスク定義の変更は通常のECSサービス同様に適用されます。
簡単操作で作ったはいいものの詳細な項目が弄れなくて困る、という心配はありません。
【制限事項】ExpressモードのECSサービスではサービス定義の deploymentConfiguration と loadBalancers は変更不可になっています。これらを操作したい場合は、生成された定義ファイルを使って別の(通常の)ECSサービスとしてdeployしてから変更することになります。
コンテナイメージを提供します
これまでのecspressoの配布方法に加えて、コンテナイメージの提供を始めました。
distrolessのベースイメージにecspressoのバイナリが入っているだけのものです。イメージは AMD64/Arm64 両対応です。
$ docker pull ghcr.io/kayac/ecspresso:v2.7.0
バイナリをインストールすることなく、dockerから~/.aws や定義ファイルが入っているディレクトリをvolume mountして実行することもできますし、独自のコンテナをビルドする際にマルチステージビルドで COPY --from=ecspresso /usr/local/bin/ecspresso などとしてecspressoのバイナリを取り込む用途にも使えます。
$ docker run --rm \
-v ~/.aws:/root/.aws:ro \
-v $(pwd):/work \
-w /work \
ghcr.io/kayac/ecspresso:v2.7.0 deploy --config ecspresso.yml
まとめ
- 2025年11月にリリースされたECSの新機能、Expressモードに対応した ecspresso v2.7.0 をリリースしました
- コンテナイメージの提供も始めました
- どうぞご利用ください