6
3

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を使用してAmazon ECRにDockerイメージをプッシュする手順

Last updated at Posted at 2024-12-07

はじめに

本記事では、GitHub Actionsを使用して、Amazon Elastic Container Registry (ECR) にDockerイメージをプッシュする手順を紹介します。

GitHub Actionsを活用することで、CI/CDパイプラインを簡単に構築でき、コードの変更を自動でデプロイできる環境を整えることができます。

スクリーンショット 2024-12-07 22.40.40.png

また、本記事は未来の自分への備忘録として技術検証を行い、その成果や学びを記録していきます。

前提知識について

GitやGitHub Actionsについては、過去の記事でまとめているので、そちらも参考にしてください。

さらに、今後はTerraformやCloudFormationを活用し、インフラのコード化(Infrastructure as Code)を進め、インフラの開発・運用をより効率的に行っていく予定です。

これにより、手作業によるミスを減らし、再現性のあるインフラ構築を実現することを目指しています。

実際にやってみた

IAMユーザと権限の準備

AWSコンソールで「IAM」サービスを開き、以下の手順でユーザーを作成し、必要な権限を設定します。

スクリーンショット 2024-12-07 21.13.55.png

必要な権限として、「AmazonEC2ContainerRegistryFullAccess」または、以下のカスタムポリシー(※権限については、ご自身の環境に合わせて修正してください)を設定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchGetImage",
        "ecr:PutImage"
      ],
      "Resource": "arn:aws:ecr:<リージョン>:<アカウントID>:repository/<リポジトリ名>"
    }
  ]
}

ECRリポジトリの作成

AWSコンソールで「サービス一覧」からECRを選択し、「リポジトリを作成」をクリックします。

スクリーンショット 2024-12-07 21.21.15.png

リポジトリ名を設定し、プライベートに設定して問題ないことを確認後、作成します。CLIを使用して作成する場合、以下のコマンドでリポジトリを作成できます。

aws ecr create-repository --repository-name my-docker-repo

GitHubリポジトリの準備

GitHubで「New Repository」を選択し、リポジトリ名を設定した後、パブリックまたはプライベートの設定を行います(公開設定については任意で問題ありません)。

スクリーンショット 2024-12-07 21.25.36.png

GitHub Secretsの設定

GitHubリポジトリのページで、「Settings」 → 「Secrets and variables」 → 「Actions」を選択します。

スクリーンショット 2024-12-07 21.31.10.png

次に、「New repository secret」をクリックし、以下のシークレットを1つずつ登録してください。

  • AWS_ACCESS_KEY_ID:
    IAMユーザーのアクセスキー。

  • AWS_SECRET_ACCESS_KEY:
    IAMユーザーのシークレットキー。

  • AWS_REGION:
    ECRのリージョン(例: us-east-1)。

  • ECR_REPOSITORY:
    ECRリポジトリ名(例: my-docker-repo)。

  • IMAGE_TAG:
    Dockerイメージのタグ(例: latest)。

IAMユーザーのアクセスキーやシークレットキーは、アカウント設定の「セキュリティ認証情報」から作成して、取得できます。

スクリーンショット 2024-12-07 21.44.41.png

GitHub Actionsワークフロー設定

以下の内容を .github/workflows/ecr-push.yml に記述します。

.github/workflows/ecr-push.yml
name: Push to ECR

on:
  push:
    branches:
      - main

jobs:
  build-and-push:
    runs-on: ubuntu-latest

    steps:
      # リポジトリのクローン
      - name: Checkout code
        uses: actions/checkout@v3

      # AWS CLI のセットアップ
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v3
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      # Dockerログイン
      - name: Log in to Amazon ECR
        run: |
          aws ecr get-login-password --region ${{ secrets.AWS_REGION }} \
            | docker login --username AWS --password-stdin \
              $(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com

      # Dockerイメージのビルド
      - name: Build Docker image
        run: |
          docker build -t ${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }} -f Dockerfile .

      # Dockerイメージのタグ付け
      - name: Tag Docker image
        run: |
          docker tag ${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }} \
          $(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }}

      # Dockerイメージのプッシュ
      - name: Push Docker image to Amazon ECR
        run: |
          docker push \
          $(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }}

GitHub Actionsの詳細な使い方については、過去の記事でまとめているので、ぜひ参考にしてください。

Dockerfileの追加

作成したリポジトリに、以下のような Dockerfile を追加します(ここでは簡単なPythonアプリの構成例を示します)。

# ベースイメージ
FROM python:3.9-slim

# 作業ディレクトリ
WORKDIR /app

# 必要なファイルをコピー
COPY . /app

# 必要なパッケージをインストール
RUN pip install flask

# アプリケーションを実行
CMD ["python", "app.py"]

ローカルからpushしてみた

次に、ローカル環境でテスト的に main ブランチに push してみます。まず、任意のディレクトリを作成して、適当なファイルを作成して実施してください。

git init
git add .
git commit -m "test3"
git branch -M main
git remote add origin git@github.com:free-honda/GitHub-Actions-20241207.git
git push origin main

エラーが発生した場合は、必要に応じて修正してください。

push後の確認

GitHub Actionsの動作確認を行います。「Actions」タブで、ワークフローが正常に実行されているかを確認します。

スクリーンショット 2024-12-07 22.03.31.png

この画面で、約「40秒」でDockerイメージが正常にプッシュされたことが確認できました。

スクリーンショット 2024-12-07 22.06.02.png

最後に、ECRのサービス画面から確認し、想定通りイメージがpushされていることを確認できたので、GitHub Actionsを使ったECRへの自動デプロイが完了しました!

これで、GitHub Actionsを使用して main ブランチにプッシュされた変更が自動的にECRにデプロイされる設定が完成です!

まとめ

ここまでお読みいただき、ありがとうございました!少し整理しながらまとめた為、予想以上に時間がかかってしまいました(笑)。

今回は、GitHub Actionsを使用してECRにDockerイメージをプッシュする基本的な手順について紹介しました。

インフラのコード化に向けた第一歩として、非常に重要なポイントです。この内容をまとめることで、より深い理解を得ることができました。

この記事が、誰かの技術的な支えになれば嬉しいです!

関連記事

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?