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_IDとAWS_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権限は十分です。