※これは Japan AWS Jr.Champions の活動である「コンテナ・サーバレス もくもく会」で実施したハンズオンのアウトプットです。
🧭 はじめに
PJでコンテナ(EKS)上の基幹システム構築は経験しているんですが…
- ロールの関係上、業務では全然コンテナに触らない
- そもそも AWS周りのコンテナサービスに全然触ったことが無い!
ということで、
Japan AWS Jr.Championsの活動である 「コンテナ・サーバレス もくもく会」 に参加し、
AWSのコンテナサービスに時間の許す限り触ってみることにしました。
🐳 今回のゴール
まずは AWSに閉じた話での入門編 ということで、今回は以下を実施しました👇
- 事前準備:ECRにイメージをプッシュする
- ECS:簡単なタスクを実行してみる
- AWS Batch:ECS(Fargate)を動かしてみる
🛠️ ハンズオンの狙い
- ECR / ECS / AWS Batch といった AWSコンテナサービスの基本概念 を理解する
- 実際にコンテナを動かしながら 構成要素や流れ を整理する
本記事では、①事前準備:ECRにイメージをプッシュするを実施してみたいと思います。
ハンズオン実施概要
- ECRの作成
- IDプロバイダの作成
- GitHub用IAMロールの作成
- GitHub Actionの設定
① ECRの作成
まずは GitHub からイメージをプッシュする先となる ECR を作成していきます。
プライベートレジストリでリポジトリを作成し、イメージタグ等の設定もデフォルトで作成します。
📝 Immutable にするとタグの上書き(使い回し)ができなくなるため、開発環境では
mutableを選択。
本番環境等、厳格にバージョン管理を行う場合はimmutableを利用。
② IDプロバイダの作成
続いて、③ GitHub用 IAMロールを作成するにあたり、AWS 上に GitHub を IDプロバイダとして追加します。
これにより、GitHub Actions から安全に AWS リソースへアクセスできるようになります。
「IAM」 > 「IDプロバイダ」 > 「プロバイダを追加」を押下し、以下の値を入力👇
| 項目 | 設定値 |
|---|---|
| プロバイダのタイプ | OpenID Connect |
| プロバイダのURL | https://token.actions.githubusercontent.com |
| 対象者 | sts.amazonaws.com |
これで IAMロール作成時に、信頼されたエンティティとして GitHub を指定可能となります。
③ GitHub用 IAMロールの作成
IAMロールの作成画面より、以下の設定値で IAMロールを作成します👇
| 項目 | 設定値 |
|---|---|
| 信頼されたエンティティタイプ | ウェブアイデンティティ |
| アイデンティティプロバイダー | https://token.actions.githubusercontent.com |
| Audience | sts.amazonaws.com |
| GitHub organization | 自分の GitHub アカウント名 |
今回は 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が起動し正常終了。
おわりに
ここまででECRにイメージをプッシュできたので、次の章ではこのイメージを使ってECS上でタスクを実行してみます!




