普段ソースコードはGithub
で管理しているんですが、AWS
のCodePipeline
を使用した開発でAWS
のECR
にGithub
のソースコードをdocker build
してイメージをプッシュしてたんですが、毎回手作業は面倒臭いんで、Github Actionsを使って自動化してみました。
Github Actions
についてはこちらを見てもらえればと思います。

AWS ECR
はコンテナソフトウェアをどこにでも簡単に保存、共有、デプロイできるAWS
のサービスです。

前提条件
今回は既にDockerfile
は作成済みとします。
Dockerfile
の作成方法が分からない方は以下の記事を参考にしてもらえればと思います。


AWS側の作業
AWS ECRにプッシュすることができる権限を持つユーザを作成する
AWS ECR
にプッシュすることができる権限を持つユーザを作成します。
AWS IAM
のユーザーページにアクセスし、ユーザーを追加をクリックしします。
ユーザ名
を入力し、AWS 認証情報タイプを選択
でアクセスキー – プログラムによるアクセスを選択し、次のステップ:アクセス権限をクリックします。
アクセス許可の設定で既存のポリシーを直接アタッチ
を選択し、AmazonEC2ContainerRegistryFullAccessにチェックを入れて次のステップ:タグをクリックします。
今回はとりあえず、AWS ECR
に対して全権限を持っているAmazonEC2ContainerRegistryFullAccessを選択しましたが、ここは必要に応じて権限を弱くしても良いです。最低限AWS ECR
にプッシュできればどんな権限設定でも良いと思います。
タグの追加画面では特に入力することはないので、そのまま次のステップ:確認をクリックします。
確認画面で設定内容を確認し、問題なければユーザーの作成をクリックします。
ユーザー追加できました。
この画面で表示されているアクセスキーIDとシークレットアクセスキーは後で使うので忘れずにメモしておきましょう。
AWS ECRにリポジトリを作成する
Github Actions
でプッシュしたイメージを保存するリポジトリを作成します。
Amazon ECR
のリポジトリ画面から今回はプライベートリポジトリを作成します。
リポジトリを作成をクリックしてリポジトリ作成画面を開きます。
リポジトリ名を入力し、リポジトリを作成をクリックし、リポジトリを作成します。
いろいろ設定はありますが、基本デフォルトのままで良いと思います。
Github側の作業
Github Actions作成
Github Actions
を作成します。
Github
のリポジトリの画面からActionsをクリックするといろんな雛形が表示されますが、今回は雛形を使用しないので、set up a workflow yourself
のリンクをクリックし、自分で最初からファイルを作成します。
push-ecr.yml作成
name: Push ECR
on:
push:
branches: [ main ]
jobs:
build-and-push:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
- 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: ap-northeast-1
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build, tag, and push image to Amazon ECR
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ${{ secrets.AWS_ECR_REPO_NAME }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:latest .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
下記のsecretsの値は別途設定が必要です。
- AWS_ACCESS_KEY_ID:IAMで配布されたアクセスキーID
- AWS_SECRET_ACCESS_KEY:IAMで配布されたシークレットアクセスキー
- AWS_ECR_REPO_NAME:ECRで登録したリポジトリ名
secretsを設定する
Github
のリポジトリのSettingsをクリックし、左側のメニューのSecrets
→Actions
をクリックします。
Actions secrets
画面が開くのでNew repository secret
ボタンをクリックします。
Name
とValue
に下記のものを追加します。
AWS_ACCESS_KEY_ID
- Name:AWS_ACCESS_KEY_ID
- Value:IAMで配布されたアクセスキーID
AWS_SECRET_ACCESS_KEY
- Name:AWS_SECRET_ACCESS_KEY
- Value:IAMで配布されたシークレットアクセスキー
AWS_ECR_REPO_NAME
- Name:AWS_ECR_REPO_NAME
- Value:ECRで登録したリポジトリ名
Dockerイメージをプッシュする
Github
リポジトリのActions
→Push ECR
をクリックします。
このリポジトリのmain
ブランチに対してプッシュすると自動でworkflow
が実行されます。
成功すると下記の画像のようになります。
AWS ECR確認
AWS ECR
のリポジトリにイメージがプッシュされていれば成功です。
最後に
Github Actions
でAWS ECR
にイメージをプッシュすることができました。今回はmain
ブランチがプッシュされると自動起動するようにしていますが、手動実行に切り替えたり、リリースタグを作成したときに自動実行するように変更することもできます。
なので、検証環境用にはmain
ブランチにプッシュされるたびに最新のイメージをプッシュし、本番環境用にはリリースタグ作成時に最新イメージをプッシュするという運用ができると思います。
設定にAWS
を操作したり、Github
を操作したり切り替えが大変ですが、一度設定できてしまえばあとは微調整で対応できると思います。
この記事が皆さんのシステム運用を楽にするために役に立てばと思います。
コメント