概要
今回はCircleCI
を用いてECSのタスクを実行する際に少し手間取ったのでその原因と解決法を載せておきます。
前提
Rails
を使用してdb:migrate
を実行するため、
CircleCI
を用いてデプロイ時にECS(Fargate)上でdb:migrate
用のタスクを起動します。
手間取った要因
タスクを実行する際に最初にデプロイしたときのタスク定義が使用されてしまって、
ローカル上でデータベースに変更を加えた内容がデプロイ時に反映されないという現象が起こった。
原因
この解決法は簡単で、CircleCI
の設定ファイルにタスク定義を更新するジョブを記載していなかったことが原因でした。
なので下記のように訂正しました。
(修正前)
config.yml
workflows:
version: 2
build-test-deploy:
jobs:
# 省略(他の設定は省略しています)
- aws-ecs/run-task:
name: db-migrate
cluster: ${CLUSTER_NAME}
task-definition: locals-db-migrate
security-group-ids: ${SECURITY_GROUP_ID}
subnet-ids: ${SUBNET_ID_1A}, ${SUBNET_ID_1C}
filters:
branches:
only:
- main
(修正後)
config.yml
workflows:
version: 2
build-test-deploy:
jobs:
# 省略(他の設定は省略しています)
# 追加 #
- aws-ecs/update-task-definition:
name: update-db-migrate-task
family: ${MIGRATE_FAMILY}
container-image-name-updates: "container=${BACK_CONTAINER_NAME},tag=${CIRCLE_SHA1}"
filters:
branches:
only:
- main
# 追加 #
- aws-ecs/run-task:
name: db-migrate
cluster: ${CLUSTER_NAME}
task-definition: ${MIGRATE_TASK}
security-group-ids: ${SECURITY_GROUP_ID}
subnet-ids: ${SUBNET_ID_1A}, ${SUBNET_ID_1C}
requires:
- update-db-migrate-task
filters:
branches:
only:
- main
まとめ
ちょっと考えれば、タスクを更新しなきゃだめだよなって気づける初歩的なミスでした。
AWSの基礎的な知識をもう少し固めないといけないと感じました。