GitHub ActionsでDockerイメージをビルドしてECRに自動デプロイ

問題

DockerイメージのビルドとECRへのpushを毎回手動で行っていました。ローカルのM1 Macでビルドするとアーキテクチャの問題が発生し、ビルド後にpushを忘れることも頻繁にありました。

解決方法

GitHub Actionsのワークフロー1つで完結します。

# .github/workflows/deploy.yml
name: Build and Push to ECR

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: $
          aws-secret-access-key: $
          aws-region: ap-northeast-2

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

      - name: Build and push
        env:
          REGISTRY: $
          REPOSITORY: my-app
          IMAGE_TAG: $
        run: |
          docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
          docker build -t $REGISTRY/$REPOSITORY:latest .
          docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG
          docker push $REGISTRY/$REPOSITORY:latest

GitHubリポジトリのSettings → SecretsにAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを登録してください。

ポイント

  • github.shaをタグとして使うと、どのコミットのイメージかを追跡できます。latestも一緒にpushしておくとデプロイ時に便利です。
  • GitHub Actionsのランナーはlinux/amd64なので、M1/M2 Macのアーキテクチャ問題がありません。
  • ECRリポジトリは事前に作成する必要があります。AWS CLIでaws ecr create-repository --repository-name my-appで作成できます。
  • IAMユーザーにAmazonEC2ContainerRegistryPowerUserポリシーを付与すれば、push/pull権限は十分です。