概要
AWS ECSのデプロイフローを構築したときのメモを書き起こす。
terraform version0.13.2
CI/CD
GitHub Actions
aws-actions/amazon-ecs-render-task-definition@v1
及び
aws-actions/amazon-ecs-deploy-task-definition@v1
を利用する。
dev環境
ビルド後にaws-actions/amazon-ecs-render-task-definitionを利用し、aws-actions/amazon-ecs-deploy-task-definitionでデプロイする。
stg及びprd環境
デプロイしたいイメージを更新し、aws-actions/amazon-ecs-deploy-task-definitionでデプロイする。
ecs run-taskでjobを実行する
前提:特定のサービスに対してjobを実行する。 fargateタイプに対してecs run-taskする場合、セキュリティグループ及びサブネットを指定する必要がある。
$SUBNETS=$(aws ecs describe-services --services SERVICE --cluster CLUSTER --query "services[*].networkConfiguration.awsvpcConfiguration.join(',',subnets[])" --output text | sed 's/[^,]\+/"&"/g') $SG=$(aws ecs describe-services --services SERVICE --cluster CLUSTER --query "services[*].networkConfiguration.awsvpcConfiguration.securityGroups" --output text | sed 's/[^,]\+/"&"/g') $aws ecs run-task --cluster CLUSTER --launch-type "FARGATE" --overrides "containerOverrides=[{name="server",command=[\"bash\",\"-c\",\"set -a; ls;\"]}]" --network-configuration "awsvpcConfiguration={subnets=[$SUBNETS],securityGroups=[$SG]}" --task-definition TASK_DEF
Terraformのタスク定義について
Terraformでリソース管理する場合、デプロイごとにタスク定義が更新されるので、ignore_changesする必要がある。
resource "aws_ecs_service" "test" { .... lifecycle { ignore_changes = [task_definition] } }