GitHub Logo

[Github]Github Actions で Docker イメージを AWS の ECR にプッシュする方法

普段ソースコードは Github で管理しているんですが、 AWSCodePipeline を使用した開発で AWSECRGithub のソースコードを docker build してイメージをプッシュしてたんですが、毎回手作業は面倒臭いんで、 Github Actions を使って自動化してみました。

Github Actions についてはこちらを見てもらえればと思います。

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

前提条件

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

AWS 側の作業

AWS ECR にプッシュすることができる権限を持つユーザを作成する

AWS ECR にプッシュすることができる権限を持つユーザを作成します。
AWS IAM のユーザーページにアクセスし、ユーザーを追加をクリックしします。

Github Actions ECR 1

ユーザ名 を入力し、 AWS 認証情報タイプを選択アクセスキー - プログラムによるアクセスを選択し、次のステップ:アクセス権限をクリックします。

Github Actions ECR 2

アクセス許可の設定既存のポリシーを直接アタッチを選択し、 AmazonEC2ContainerRegistryFullAccess にチェックを入れて次のステップ:タグをクリックします。

Github Actions ECR 3

今回はとりあえず、 AWS ECR に対して全権限を持っている AmazonEC2ContainerRegistryFullAccess を選択しましたが、ここは必要に応じて権限を弱くしても良いです。最低限 AWS ECR にプッシュできればどんな権限設定でも良いと思います。
タグの追加画面では特に入力することはないので、そのまま次のステップ:確認をクリックします。

Github Actions ECR 4

確認画面で設定内容を確認し、問題なければユーザーの作成をクリックします。

Github Actions ECR 5

ユーザー追加できました。

Github Actions ECR 6

この画面で表示されているアクセスキーIDシークレットアクセスキーは後で使うので忘れずにメモしておきましょう。

AWS ECR にリポジトリを作成する

Github Actions でプッシュしたイメージを保存するリポジトリを作成します。
Amazon ECR のリポジトリ画面から今回はプライベートリポジトリを作成します。

Github Actions ECR 7

リポジトリを作成をクリックしてリポジトリ作成画面を開きます。
リポジトリ名を入力し、リポジトリを作成をクリックし、リポジトリを作成します。
いろいろ設定はありますが、基本デフォルトのままで良いと思います。

Github 側の作業

Github Actions 作成

Github Actions を作成します。
Github のリポジトリの画面から Actions をクリックするといろんな雛形が表示されますが、今回は雛形を使用しないので、 set up a workflow yourself のリンクをクリックし、自分で最初からファイルを作成します。

Github Actions ECR 8

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をクリックし、左側のメニューの SecretsActions をクリックします。

Github Actions ECR 8

Actions secrets 画面が開くので New repository secret ボタンをクリックします。

Github Actions ECR 9

NameValue に下記のものを追加します。

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 リポジトリの ActionsPush ECR をクリックします。
このリポジトリの main ブランチに対してプッシュすると自動で workflow が実行されます。
成功すると下記の画像のようになります。

Github Actions ECR 10

AWS ECR 確認

AWS ECR のリポジトリにイメージがプッシュされていれば成功です。

Github Actions ECR 11

最後に

Github ActionsAWS ECR にイメージをプッシュすることができました。今回は main ブランチがプッシュされると自動起動するようにしていますが、手動実行に切り替えたり、リリースタグを作成したときに自動実行するように変更することもできます。
なので、検証環境用には main ブランチにプッシュされるたびに最新のイメージをプッシュし、本番環境用にはリリースタグ作成時に最新イメージをプッシュするという運用ができると思います。
設定に AWS を操作したり、 Github を操作したり切り替えが大変ですが、一度設定できてしまえばあとは微調整で対応できると思います。

この記事が皆さんのシステム運用を楽にするために役に立てばと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です