9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker-ComposeのAWS ECSデプロイをGithub Actionでやる

Last updated at Posted at 2022-01-26

前置き

Docker-Composeで環境を作っているのでそのままそれを使ってpushできると楽だと思った。

いろいろ調べたがあまりまとまっているものがなかったので書いた。

前提条件

  • Mac
  • AWSアカウントがある。
  • Docker Desktop環境がある
  • AWS CLI環境がある

手順

  1. IAMユーザを作る。以下の権限をユーザorグループにつけておく。
  • Administrator Access
  • AmazonECS_FullAccess

AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYを控えておく。

  1. Amazon ECS用のcontextを作る。

以下のコマンドを実行

$ docker context create ecs [contextname]

? Create a Docker context usingと聞かれるのでAWS secret and token credetialsを選択

AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYを入力。

$ docker context listで追加できたか確認できる。`$ docker context use [context name]で選択できる。現在はdefaultにしておく。

  1. AWSコンソールでECRのプライベートリポジトリを作る。一つのDocker Imageにつき一つ作成する。

uriをコピーしておく

  1. レジストリに対してDockerクライアントを認証する。AWSコンソール上のプッシュコマンドの表示をクリックして1つめのコマンドをコピーして実行する。

image.png
image.png

  1. yamlのimageをそれぞれECRのリポジトリパスに修正
version: "3"
services:
  backend:
    image: リポジトリパス # ここ
    build:
      context: .
      dockerfile: ./backend/Dockerfile
    container_name: backend
    tty: true
    ports:
      - 8000:8000
    volumes:
      - .:/app
      - node_modules:/app/frontend/node_modules
  frontend:
    image: リポジトリパス #ここ
    build:
      context: .
      dockerfile: ./frontend/Dockerfile
    container_name: frontend
    tty: true
    env_file: .env.development
    ports:
      - 3000:3000
    volumes:
      - .:/app
      - node_modules:/app/frontend/node_modules
    depends_on:
      - backend
volumes:
  node_modules:
  1. $docker-compose pushでdocker imageをECRにプッシュ
  2. $docker context use [context name]でcontextをECSのものに切り替える。
  3. $docker compose upでECSデプロイ完了。コンソール上で確認できるはず。
  4. githubのSecretsにAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_ECR_REPO_NAMEを登録
  5. 以下のymlファイルをActionに登録してpushしておしまい!!!
ecs.yaml
name: ECR Push

on:
  push:

jobs:
  ecr-push:
    runs-on: ubuntu-latest
    name: ECR Push
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-east-1"

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

      - name: Build, to Amazon ECR
        run: |
          docker-compose -f docker-compose.prod.yml build

      - name: push image to Amazon ECR
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          ECR_REPOSITORY: ${{ secrets.AWS_ECR_REPO_NAME }}
          IMAGE_TAG: latest
        run: |
          docker-compose -f docker-compose.prod.yml push

エラーハンドリング

  • docker-compose pushで以下のエラーが出たらimageのtagが設定できていない。
$ docker-compose -f docker-compose.ecs.yaml push                                                           
An image does not exist locally with the tag: 785741758597.dkr.ecr.us-east-1.amazonaws.com/kanji-visualization/frontend

これを参考にタグ付けすることで解決
スクリーンショット 2022-02-19 17.12.48.png

参考文献

9
4
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
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?