GitHub Actionsを使ったDockerイメージのビルドとAmazon ECRへのデプロイ

A woman sitting in a room with a window

GitHub Actionsを使ったDockerイメージのビルドとAmazon ECRへのデプロイ

今回は、GitHub Actionsを使ってDockerイメージをビルドし、Amazon Elastic Container Registry (ECR)にデプロイする方法について解説します。GitHub Actionsを活用することで、コードの変更に応じて自動的にDockerイメージをビルドし、ECRにプッシュすることができます。

GitHub Actionsとは

GitHub Actionsは、GitHubに組み込まれた継続的インテグレーション・継続的デプロイメント(CI/CD)のためのプラットフォームです。ワークフローを定義することで、コードのビルド、テスト、デプロイなどを自動化できます。GitHub Actionsでは、YAMLファイルを使ってワークフローを定義し、GitHubリポジトリ内の`.github/workflows`ディレクトリに配置します。

Amazon ECRとは

Amazon Elastic Container Registry (ECR)は、AWSが提供するフルマネージド型のDockerコンテナレジストリサービスです。ECRを使用すると、Dockerイメージを安全に保存、管理、デプロイすることができます。ECRは、AWSの他のサービスとの統合が容易で、スケーラビリティと可用性に優れています。

ワークフローの解説

それでは、GitHub Actionsを使ってDockerイメージをビルドし、Amazon ECRにプッシュするワークフローを解説していきます。

    - name: Login to Amazon ECR
      uses: aws-actions/amazon-ecr-login@v1
    - name: Build and push to Amazon ECR
      uses: docker/build-push-action@v3
        with:
        context: .
        push: true
        tags: ${{ env.ECR_REPOSITORY }}:${{ env.GITHUB_SHA }}
        cache-from: type=gha
        cache-to: type=gha,mode=max

1. Amazon ECRへのログイン

最初のステップでは、`aws-actions/amazon-ecr-login@v1`アクションを使用してAmazon ECRにログインします。このアクションは、AWSの認証情報を使用してECRレジストリにアクセスするために必要なログイン処理を行います。これは、以下の`aws`コマンドに相当します:

aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <ecr-registry>

2. DockerイメージのビルドとECRへのプッシュ

次のステップでは、`docker/build-push-action@v3`アクションを使用して、Dockerイメージのビルドとプッシュを行います。このアクションは、以下の`docker`コマンドに相当します:

docker build -t <ecr-registry>/<repository>:<tag> . docker push <ecr-registry>/<repository>:<tag>

`with`セクションでアクションの設定を行います:

  • `context: .`: Dockerfileが存在するディレクトリを指定します。ここでは、現在のディレクトリ(`.`)を指定しています。
  • `push: true`: ビルドしたイメージをレジストリにプッシュすることを指定します。
  • `tags: ${{ env.ECR_REPOSITORY }}:${{ env.GITHUB_SHA }}`: イメージにタグを付けます。ここでは、環境変数`ECR_REPOSITORY`(ECRリポジトリのURL)とGitHubのコミットハッシュ(`GITHUB_SHA`)を組み合わせたタグを使用しています。
  • `cache-from: type=gha`: キャッシュからイメージレイヤーを読み込むことを指定します。`type=gha`は、GitHub Actionsのキャッシュを使用することを示します。
  • `cache-to: type=gha,mode=max`: ビルドしたイメージレイヤーをキャッシュに保存することを指定します。`mode=max`は、キャッシュを最大限に活用することを示します。

キャッシュの活用

GitHub Actionsでは、キャッシュ機能を利用してビルドの効率化を図ることができます。`cache-from`と`cache-to`オプションを使用することで、以前のビルドで作成されたイメージレイヤーをキャッシュから読み込み、ビルド時間を短縮できます。また、ビルドしたイメージレイヤーをキャッシュに保存することで、次回以降のビルドでそれらのレイヤーを再利用できます。

キャッシュ機能は、`docker`コマンドや`aws`コマンドには直接対応する機能がありませんが、GitHub Actionsではこの機能を活用してビルドの効率化を図ることができます。

まとめ

GitHub Actionsを使ってDockerイメージをビルドし、Amazon ECRにデプロイする方法について解説しました。GitHub Actionsのワークフローでは、`aws-actions/amazon-ecr-login@v1`アクションを使用してECRにログインし、`docker/build-push-action@v3`アクションを使用してDockerイメージのビルドとプッシュを行います。また、キャッシュ機能を活用することで、ビルドの効率化を図ることができます。

GitHub Actionsを活用することで、コードの変更に応じて自動的にDockerイメージをビルドし、ECRにデプロイすることができます。これにより、開発者はコードの開発に専念でき、CI/CDパイプラインの管理を簡素化できます。

ぜひ、GitHub Actionsを使ってDockerイメージのビルドとデプロイを自動化してみてください。開発の効率化と品質向上に役立つはずです。