これまで Heroku で運用してきたシステムを AWS に置き換える必要が発生し、 heroku run
と同等の操作が行えないと致命的だったので調査した結果になります。
前提条件
- AWS CLI のインストール
- ECSにタスクが定義されている
実行方法
aws ecs run-task
を使えば既存のタスク設定の実行コマンドを上書きして任意のコマンドを実行できます。
例えば、以下はRailsのコンテナを使用したタスク定義で rake db:migrate
を実行する例になります。
aws ecs run-task \
--cluster $CLUSTER \
--task-definition $TASK_ARN \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[$SUBNET_ID], securityGroups=[$SG_ID], assignPublicIp=ENABLED}" \
--overrides '{"containerOverrides": [{"name": "web", "command": ["bundle", "exec", "rake", "db:migrate"]}]}'
上記の以下の部分を実行する環境に応じて書き換えてください。
また containerOverrides.name
と containerOverrides.command
を設定内容、実行したいコマンドで書き換えてください。
キーワード | 値 |
---|---|
$CLUSTER | クラスター名 |
$TASK_ARN | タスク定義のARN (リビジョンを含めないように) |
$SUBNET_ID | サブネットのID |
$SG_ID | セキュリティグループのID |
その他の aws ecs run-task
の仕様、パラメーターについては 公式ドキュメント を参照してください。