LoginSignup
0
2

More than 1 year has passed since last update.

Github Actions に AWS ECR + AWS ECS を用いた自動デプロイを実装する

Last updated at Posted at 2021-12-15

Github Actions に AWS ECR + AWS ECS を用いた自動デプロイを実装する

経緯

  • Github で管理しているコードを、AWS EC2 で動作するアプリとして載せることになった
  • k8s ほどではないけど、オートスケーリング + Docker が欲しく、マルチクラウド対応も特に考えてないため ECS を選択
  • 管理はある程度自動化したいので Github Actions で CI/CD を組むことになった

記載すること

  • Github Actions の yml を記載
  • ECR、ECSの設定は済んでいるものとして、設定方法などはこの記事で記載しない

内容

全体図

このような流れを想定

img001.png

Github Actions

詳細については後述

name: develop-cicd

on:
  push:
    branches: [develop]

jobs:
  build-register:
    if: github.ref == 'refs/heads/develop'
    runs-on: ubuntu-latest
    steps:

      - uses: actions/checkout@v2

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
          aws-region: ap-northeast-1

      # AWS ECR への Docker ログイン
      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

      # Build 及び Push
      - name: Build Docker And Push ECR
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          ECR_REPOSITORY: xxx-yyy-zzz-repository  # Pushしたいリポジトリを指定
          IMAGE_TAG: develop # タグ名
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

      # ログアウト
      - name: Logout of Amazon ECR
        if: always()
        run: docker logout ${{ steps.login-ecr.outputs.registry }}

  # ジョブを分けなくても動く
  deploy:
    needs: build-register
    runs-on: ubuntu-latest
    steps:
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
          aws-region: ap-northeast-1

      - name: Deploy
        env:
          ECS_CLUSTER_ARN: arn:aws:ecs:ap-northeast-1:0123456789:cluster/my-cluster-name # ECS のクラスター名
          ECS_SERVICE_NAME: my-service-name # ECS のサービス名
        run: |
          aws ecs update-service --cluster $ECS_CLUSTER_ARN --service $ECS_SERVICE_NAME --force-new-deployment

Github Actions の詳細

AWS ECR への ログインはこのようにする。前のステップで Credentials 認証を設定するのと併せて必須。

- name: Login to Amazon ECR
  id: login-ecr
  uses: aws-actions/amazon-ecr-login@v1

プッシュした Docker イメージを置き換えただけではサービスは反応してくれないので、強制デプロイを aws-cli で行う。

aws ecs update-service --cluster $ECS_CLUSTER_ARN --service $ECS_SERVICE_NAME --force-new-deployment
0
2
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
0
2