AWS ECS構築時のメモ

概要

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]
  }
}