はじめに
Githubでmainブランチマージ時、即座にデプロイを走らせたいと思い、Github ActionsとApp Runnerを使って自動化することができたので書き留めておきます。
やること
GitHub (mainマージ)
↓
GitHub Actions
↓ docker build & push
Amazon ECR
↓
App Runner(自動デプロイ)
ディレクトリ構成
apprunner-mini という命名のRubyプログラムをDockerで動かすこととして進めていきます。
/Users/../
└── apprunner-mini/
├── app.rb
├── Gemfile
├── Gemfile.lock
├── config.ru
├── Dockerfile
└── .github/
└── workflows/
└── deploy.yml
ECR作成
AWS Console → ECR → “リポジトリを作成”
(例)
一般設定
リポジトリ名: apprunner-mini
イメージタグ設定
イメージタグのミュータビリティ: 上書きしてもいい場合はMutable
暗号化設定
AES-256
※作成後、以下のような レポジトリ URI をメモしておく
(例)123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/apprunner-mini
App Runner作成
AWS Console → App Runner → “サービスの作成”
(例)
ソース
リポジトリタイプ: コンテナレジストリ
プロバイダー: Amazon ECR
コンテナイメージのURI: ECR作成時に発行された レポジトリ URI
デプロイ設定
デプロイトリガー: 自動
ECRアクセスロール: IAMロールを選択または作成
サービス設定
サービス名: apprunner-mini
仮想CPU、仮想メモリ: 適切な値でOK
ポート: 使用しているポートでOK
ヘルスチェック
プロトコル: HTTP
パス: アプリ内でヘルスチェックできるパス
(初回起動用)ローカルからECRに1回push
AWSログイン(東京リージョン例)
aws --version
aws configure # 未設定ならここで設定(アクセスキー等)
ECRログイン
< ACCOUNT_ID > と < REGION > を自分のに置換
aws ecr get-login-password --region ap-northeast-1 \
| docker login --username AWS --password-stdin <ACCOUNT_ID>.dkr.ecr.ap-northeast-1.amazonaws.com
buildxでビルドしてpush
私はAppleシリコンのMacのため、amd64としています。
docker buildx create --use --name apprunner-builder 2>/dev/null || true
docker buildx build --platform linux/amd64 \
-t <ECR_URI>:latest \
--push .
終わったら、AWS Console → ECR → apprunner-mini → Images にlatestが見えることを確認。
GitHub ActionsとApp Runnerの連携
GitHub Secretsに環境変数追加
Settings → Secrets and variables → Actions :
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_REGION
AWS_ACCOUNT_ID
ECR_REPOSITORY
workflow をソースコード上に置く
.github/workflows/deploy.yml
(例)
name: deploy-to-apprunner
on:
push:
branches: [ "main" ]
permissions:
contents: read
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: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Login to Amazon ECR
uses: aws-actions/amazon-ecr-login@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push image (linux/amd64)
env:
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
AWS_REGION: ${{ secrets.AWS_REGION }}
ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY }}
run: |
ECR_URI="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY}"
docker buildx build --platform linux/amd64 \
-t "${ECR_URI}:latest" \
-t "${ECR_URI}:${GITHUB_SHA}" \
--push .
mainにマージしてみてGithub ActionsとApp Runnerを確認
おわりに
簡易的ではありますが、mainマージ時のデプロイを自動化することに成功しました。
参考になれば幸いです。

