2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWSコンテナ入門】①GitHub Actionを使って、ECRにDocker ImageをPushしてみる

Posted at

※これは Japan AWS Jr.Champions の活動である「コンテナ・サーバレス もくもく会」で実施したハンズオンのアウトプットです。

🧭 はじめに

PJでコンテナ(EKS)上の基幹システム構築は経験しているんですが…

  • ロールの関係上、業務では全然コンテナに触らない
  • そもそも AWS周りのコンテナサービスに全然触ったことが無い!

ということで、
Japan AWS Jr.Championsの活動である 「コンテナ・サーバレス もくもく会」 に参加し、
AWSのコンテナサービスに時間の許す限り触ってみることにしました。


🐳 今回のゴール

まずは AWSに閉じた話での入門編 ということで、今回は以下を実施しました👇

  1. 事前準備:ECRにイメージをプッシュする
  2. ECS:簡単なタスクを実行してみる
  3. AWS Batch:ECS(Fargate)を動かしてみる

🛠️ ハンズオンの狙い

  • ECR / ECS / AWS Batch といった AWSコンテナサービスの基本概念 を理解する
  • 実際にコンテナを動かしながら 構成要素や流れ を整理する

本記事では、①事前準備:ECRにイメージをプッシュするを実施してみたいと思います。

ハンズオン実施概要

  1. ECRの作成
  2. IDプロバイダの作成
  3. GitHub用IAMロールの作成
  4. GitHub Actionの設定

① ECRの作成

まずは GitHub からイメージをプッシュする先となる ECR を作成していきます。
プライベートレジストリでリポジトリを作成し、イメージタグ等の設定もデフォルトで作成します。

📝 Immutable にするとタグの上書き(使い回し)ができなくなるため、開発環境では mutable を選択。
本番環境等、厳格にバージョン管理を行う場合は immutable を利用。

image.png


② IDプロバイダの作成

続いて、③ GitHub用 IAMロールを作成するにあたり、AWS 上に GitHub を IDプロバイダとして追加します。
これにより、GitHub Actions から安全に AWS リソースへアクセスできるようになります。

「IAM」 > 「IDプロバイダ」 > 「プロバイダを追加」を押下し、以下の値を入力👇

項目 設定値
プロバイダのタイプ OpenID Connect
プロバイダのURL https://token.actions.githubusercontent.com
対象者 sts.amazonaws.com

image.png

これで IAMロール作成時に、信頼されたエンティティとして GitHub を指定可能となります。


③ GitHub用 IAMロールの作成

IAMロールの作成画面より、以下の設定値で IAMロールを作成します👇

項目 設定値
信頼されたエンティティタイプ ウェブアイデンティティ
アイデンティティプロバイダー https://token.actions.githubusercontent.com
Audience sts.amazonaws.com
GitHub organization 自分の GitHub アカウント名

image.png

今回は GitHub Action から ECR にイメージを Push するため、ECR のプライベートレジストリに対するフルアクセス権限を付与したポリシーを追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ecr:*",
            "Resource": "*"
        }
    ]
}

ECR操作以外の操作をGitHubから実行したい場合はそのサービスに対する権限をポリシーとして追加。
これで、GitHub Actionを実行する準備は整いました。

④GitHub Action設定

Git Hubにて利用するリポジトリに「利用するGitリポジトリ/.github/workflows/ecr_push.yaml」を配置
前の手順で作成したIAMロールを引き受け、ビルドしたイメージをECRにPushする処理を実装します。
※今回はGPT君にコーディングしてもらいました

name: Build and Push to ECR

on:
push:
  branches:
    - main
  # 例:Dockerfileやスクリプト変更時に実行
  paths:
    - 'Dockerfile'
    - '**/*.py'

jobs:
build-and-push:
  name: Build & Push Image to ECR
  runs-on: ubuntu-latest
  permissions:
    id-token: write   # OIDC 利用に必須
    contents: read    # ソース取得用

  env:
    # ======== 作成したリソース・アカウントIDを記載する =========
    AWS_ACCOUNT_ID: "AWSアカウントIDを入力"
    AWS_REGION: "デプロイ先リージョンを入力"
    ECR_REPOSITORY: "ECRリポジトリ名を入力"
    IAM_ROLE_NAME: "GitHub Action用IAMロールを入力"
    IMAGE_TAG: "latest"
    # ================================================================
  steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    # GitHub→AWS OIDCでロールを引き受け
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v4
      with:
        role-to-assume: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/${{ env.IAM_ROLE_NAME }}
        aws-region: ${{ env.AWS_REGION }}

    # ECRへログイン
    - name: Login to Amazon ECR
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v2

    # Docker Build & Push
    - name: Build, Tag, and Push Image
      run: |
        IMAGE_URI=${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
        echo "Building image: $IMAGE_URI"
        docker build -t $IMAGE_URI .
        docker push $IMAGE_URI

利用するGitリポジトリの直下に実装した機能のコードファイルとDockerfileをコミットする。

■実装したコード
後続の記事で処理内容には簡単に触れるので割愛

■Dockerfile

# Dockerfile
FROM public.ecr.aws/amazonlinux/amazonlinux:2023

# OSパッケージ
RUN dnf -y update && dnf -y install python3 python3-pip && dnf clean all

# Python依存
RUN pip3 install --no-cache-dir boto3

# アプリ配置
WORKDIR /app
COPY aggregate_accesslog.py /app/

# 実行
ENTRYPOINT ["python3", "/app/aggregate_accesslog.py"]

これで、ソースコードがCommitされたことをトリガーにAction.Yamlが起動し正常終了。

image.png

イメージがプッシュ出来てました!
image.png

おわりに

ここまででECRにイメージをプッシュできたので、次の章ではこのイメージを使ってECS上でタスクを実行してみます!

2
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?