問題
ecs-cli compose run
ではコマンドを指定して実行することができる。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cmd-ecs-cli-compose.html
aws ecs run-task
やecspresso run
でコマンドを指定するにはoverrides
パラメータにjson文字列を渡す必要があり、json内にコマンドを埋め込む必要がある。
さらにコマンドは
{
"containerOverrides": [
{
"name": "string",
"command": ["string", ...],
}
]
}
とarrayにする必要があり、さらにめんどくさい。
対処
jo でJSONつくったり、
envsubstやerbでテンプレート展開するのを検討したけどどちらもめんどくさいので既存でありそうな気もするけど小さいコマンドを書いた。
$ ecs-overrides -e XXX=abc -e YYY=def app echo hello world
{"ContainerOverrides":[{"Command":["echo","hello","world"],"Cpu":null,"Environment":[{"Name":"XXX","Value":"abc"},{"Name":"YYY","Value":"def"}],"Memory":null,"MemoryReservation":null,"Name":"app","ResourceRequirements":null}],"ExecutionRoleArn":null,"InferenceAcceleratorOverrides":null,"TaskRoleArn":null}%
ecspressoで使うときは↓
$ ecspresso run --config config.yaml --skip-task-definition --overrides=$(ecs-overrides app echo hello world)