はじめに
ECSではタスク定義を指定した上で「Run Task」を行うことでコンテナをバッチのようにして起動ができます。また、起動したコンテナの実行結果は、ステータスとして完了したかだけではなくシェル終了時の終了コード(Exit Code)としても取得が可能です。
本記事では実際にタスクとしてスクリプトを異常終了させ、その終了コードをコマンドから取得する流れを記載しました。
環境情報
- ECS Fargate 1.4
- aws-cli/2.15.5
事前準備
下記のように終了コードを5で返すスクリプトを作成した上で
#!/bin/bash sleep 10 exit 5
コンテナイメージ作成用のDockerfileを作成します。
FROM registry.access.redhat.com/ubi8/ubi ADD test.sh /test.sh RUN chmod -v +x /test.sh CMD ["/test.sh"]
同ファイルを元に作成したコンテナをローカル環境で起動確認すると、終了コードが確認できます。
$ docker image build -t test-exit -f Dockerfile .
$ docker run test-exit:latest
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES xx test-exit:latest "/test.sh" About a minute ago Exited (5) About a minute ago xx
これをECS上で稼働させるため、同コンテナのタスク定義(Task Definition)を作成し、保存します。作成したタスク定義のJSONは以下。
# TBC
確認方法
起動したいクラスター,サブネット,セキュリティグループ,パブリックIPの付与有無を指定した上で以下のコマンドを押下すると
$ aws ecs run-task --cluster arn:aws:ecs:ap-northeast-1:xx:cluster/xx --task-definition arn:aws:ecs:ap-northeast-1:xx:task-definition/xx:1 --network-configuration "awsvpcConfiguration={subnets=[subnet-xx],securityGroups=[sg-xx],assignPublicIp=DISABLED}" --launch-type FARGATEタスクとして一覧に表示されてタスク名が取得できます。
$ aws ecs list-tasks --cluster arn:aws:ecs:ap-northeast-1:xx:cluster/xx
{
"taskArns": [
"arn:aws:ecs:ap-northeast-1:xx:task/xx/2a5a4357b5894f38ad5152a1686102c5"
]
}このタスクArnsの末尾をdescribe-tasksで引数として指定すると
$ aws ecs describe-tasks --tasks xx --cluster arn:aws:ecs:ap-northeast-1:xx:cluster/xx
以下のように起動が終了したコンテナの状態が確認でき、スクリプトで指定したコードと同じ値であることが分かります。
{ "tasks": [ { ... "containers": [ { ... "lastStatus": "STOPPED", "exitCode": 5, ... } ], ... "failures": [] }
終わりに
TBC
以上、ご参考になれば幸いです。