☕
ecspressoで単発のバッチ処理を実行
環境
- ecspresso 2.7.0
関連記事
前提
- ECSクラスター
- タスクロール
- タスク実行ロール
- ECRリポジトリ
などは、Terraformで別途作成済みとします。
併せて、アプリはコンテナイメージにビルドして、ECRにプッシュ済みとします。
ecspresso.yml
ecspresso.yml
region: ap-northeast-1
cluster: クラスター名
service_definition: ecs-service-def.json
task_definition: ecs-task-def.json
plugins:
- name: tfstate
config:
url: {{ must_env `S3_TFSTATE_URL` }}
サービス定義
ロードバランサーなどは不要。
ecs-service-def.json
{
"serviceName": "適当なサービス名",
"desiredCount": 1,
"launchType": "FARGATE",
"platformVersion": "LATEST",
"platformFamily": "LINUX",
"networkConfiguration": {
"awsvpcConfiguration": {
"subnets": [
"サブネットID1",
"サブネットID2"
],
"securityGroups": [
"セキュリティグループID"
],
"assignPublicIp": "DISABLED"
}
},
"healthCheckGracePeriodSeconds": 10,
"schedulingStrategy": "REPLICA",
"enableExecuteCommand": true,
"availabilityZoneRebalancing": "ENABLED"
}
タスク定義
ecs-task-def.json
{
"family": "適当な名前",
"runtimePlatform": {
"operatingSystemFamily": "LINUX",
"cpuArchitecture": "ARM64"
},
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "コア数",
"memory": "メモリ量",
"taskRoleArn": "タスクロールARN",
"executionRoleArn": "タスク実行ロールARN",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "コンテナ名",
"image": "イメージ:タグ",
"user": "appuser",
"essential": true,
"environment": [
{
"name": "TZ",
"value": "Asia/Tokyo"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-region": "ap-northeast-1",
"awslogs-group": "ロググループ名",
"awslogs-stream-prefix": "適当なプレフィックス"
}
},
"readonlyRootFilesystem": true,
"mountPoints": [
{
"containerPath": "/tmp",
"sourceVolume": "app-ephemeral-volume",
"readOnly": false
}
]
}
],
"volumes": [
{
"name": "app-ephemeral-volume"
}
]
}
実行
run.sh
export S3_TFSTATE_URL=s3://バケット名/terraform.tfstate
ecspresso run --no-wait
これだけで、ECS上でバッチ処理を1回実行できます!
Discussion