2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsでDockerコンテナを自動ビルドし、ECRにデプロイする方法

Last updated at Posted at 2024-11-09

始めに

バックエンドのプログラムをdocker buildし、コンテナをECRにアップロードする作業を、これまではコードの変更があるたびに手動で行っていました。GitHub Actionsを使って自動化することで作業を効率化できるのではないかと考え、実装してみたところ、まとまった情報が少なかったため、この記事に手順をまとめました。同じことを試みようとしている方に参考にしていただければと思います。

AWS認証情報の設定

まず、GitHubからAWSを操作するには、認証情報(Credential)を設定する必要があります。方法としては以下の2通りがあります:

  • IAMユーザーの固定キーを使用する方法
  • IDプロバイダーを用いて一時的な認証情報を付与するIAMロールを使用する方法
    セキュリティの観点から、今回は後者の方法を選択しました。以下の記事を参考にして、IDプロバイダーを用いた認証情報の設定を行いました。

GitHubActionsのworkflowには以下の設定を追記しました。
your-role-arnには自身のロールのarnを記入してください。

permissions:
  id-token: write
  contents: read

steps:
  - name: Configure AWS credentials
    uses: aws-actions/configure-aws-credentials@v4
    with: 
      role-to-assume: your-role-arn
      aws-region: ap-northeast-1

ECRにアップロードする方法

ECRにコンテナをアップロードするためには、以下のコードをワークフローに記載します。(以下はECRプライベートリポジトリ用のコードです。パブリックリポジトリの場合は公式ドキュメントをご確認ください。)
your-ecr-repoには自身のリポジトリ名を記載してください。

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

      - name: Build, tag, and push docker image to Amazon ECR
        env:
          REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          REPOSITORY: your-ecr-repo
          IMAGE_TAG: ${{ github.sha }}
        run: |
          docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
          docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG

参考:

最終的なコード

以下が最終的なworkflowのコードです。

name: Docker Image CI

on:
  push:
    branches: [ "main" ]
permissions:
  id-token: write
  contents: read

jobs:

  build:

    runs-on: ubuntu-latest

    steps:
    - name: Checkout repo
      uses: actions/checkout@v3

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v4
      with: 
        role-to-assume: your-role-arn
        aws-region: ap-northeast-1

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

    - name: Build, tag, and push Docker image to Amazon ECR
      env:
        REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        REPOSITORY: your-ecr-repo
        IMAGE_TAG: ${{ github.sha }}
      run: |
        docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
        docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG

最後に

今回、GitHub Actionsを初めて使用しました。これまで手動で行っていた作業が自動化され、とても効率的になったことに感動しています。今後もGitHub Actionsは活用していきたいと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?