LoginSignup
2
1

More than 3 years have passed since last update.

【CircleCI】【Terraform】【Rails】【AWS】Orbsを利用してECSでdb:migrateする方法

Last updated at Posted at 2020-07-27

概要

開発環境でなんらかの機能を追加した際に、本番環境へのデプロイと同時にdb:migrateしたい場合、CircleCIのOrbsを使うと楽に実装可能

前提

Terraformやコンソールからすでにサービスをデプロイしていること

migrationの実行

今回はTerraformから、マイグレーション用のタスクを準備した

task_definition.tf
resource "aws_ecs_task_definition" "rails-migration" {
  family = "rails-migration"
  container_definitions = file("./container_definitions/migration.json") # jsonfileはサービスで使用しているタスクのcommandを"ash", "-c", "bundle exec rails db:create db:migrate"に変更 logを出力している場合はprefixをmigrationとかに変更してやるとあとで楽
  task_role_arn = data.terraform_remote_state.iam.outputs.ecs_task_role_arn
  execution_role_arn = data.terraform_remote_state.iam.outputs.ecs_task_role_arn
  network_mode = "bridge"
}

CircleCIでデプロイ時にマイグレーションする用に設定する

.circleci/config.yml
version: 2.1 
orbs:
  aws-ecr: circleci/aws-ecr@6.11.0
  aws-ecs: circleci/aws-ecs@1.2.0
workflows:
  rails_build_and_deploy_and_migration:
    jobs:
      # イメージのビルドとプッシュ
      - aws-ecr/build-and-push-image:
          account-url: AWS_ECR_ACCOUNT_URL
          extra-build-args: "--build-arg RAILS_MASTER_KEY=${RAILS_MASTER_KEY}"
          region: AWS_REGION
          repo: 'app-image' 
          tag: '${CIRCLE_SHA1}'
          filters:
            branches:
              only:
                - master
      # デプロイ(サービスのアップデート)
      - aws-ecs/deploy-service-update:
          requires:
            - aws-ecr/build-and-push-image 
          family: '${MY_APP_PREFIX}-service'
          cluster-name: '${MY_APP_PREFIX}-cluster'
          container-image-name-updates: 'container=rails, tag=${CIRCLE_SHA1}'
      # ここからマイグレーションの実行
      - aws-ecs/run-task:
          cluster: '${MY_APP_PREFIX}-cluster'
          task-definition: rails-migration # マイグレーション用に定義したタスクの名前
          awsvpc: false # 環境に合わせて
          launch-type: EC2 # 環境に合わせて
          requires:
            - aws-ecs/deploy-service-update

Orbsを使用すると簡単に実装できる

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1