AWS

ECS (Fargate) + ALB Webアプリケーション構築ハンズオン

NEW 2026年8月18日

目次Category


はじめに

この記事の目的

この記事では、まずAWS CLIのSSO認証を導入し、次にDockerイメージを作成してECRへプッシュし、最終的にECS (Fargate) + ALB によってコンテナWebサービスを公開するまでの流れを、順を追って実践的に解説します。

つまずきやすいポイントについては、後述のトラブルシューティングで詳しく補足しています。

💡 本記事で「SSO認証」を採用している理由

一般的な学習環境や個人開発では、IAMユーザーのアクセスキー(AWS Access Key ID / AWS Secret Access Key)を用いた認証がよく使われます。

しかし、本研修環境(社内環境)の都合上、SSO認証での手順を解説しています。

※ IAMユーザー(アクセスキー)認証で進めたい方は、以下の公式ドキュメントや解説記事を参照のうえ、aws configure コマンド等で設定を行ってください。

対象者

  • Dockerの基本操作(docker builddocker run)を理解している方
  • AWS上でのコンテナ運用(ECS / Fargate)に初めて挑戦したい方

本記事で構築するシステム構成図

本ハンズオンでは、以下のシステム構成を構築します。

 

前提条件・環境準備

AWS環境の事前準備

まず、AWSアカウントと適切な管理権限を用意してください。

権限が不足していると、後述のECSクラスターの作成やIAMロールの設定でエラーが発生することがあるため、事前に確認しておくと安心です。

ローカル開発環境の準備

ハンズオンを進めるにあたり、以下のツールをインストールし、動作確認を行います。それぞれの公式インストールガイドは以下のリンクを参照してください。

■ Docker Desktop

Dockerコンテナの作成や実行に必要な環境です。加えて、お使いのOS(Windows / Mac)に合わせたインストーラーをダウンロードし、セットアップを進めてください。

Docker Desktop 公式ドキュメント
■ AWS CLI

一方で、ターミナルからAWSリソースを操作・認証するためには、コマンドラインツールが必要です。そのため、AWS CLIをインストールしてください。

AWS CLI 公式ドキュメント

ワークスペースの作成

続いて、作業用ディレクトリ(work/)を作成します。

このディレクトリは、後述のStep 2: コンテナイメージの作成で使用するため、分かりやすい場所に作っておくとよいでしょう。

Step 1: AWS CLI (SSO認証) のセットアップ

外部のアイデンティティプロバイダー(IdP)やIAM Identity Center経由でログインするフェデレーテッドユーザーが、ローカル環境のターミナルからAWS CLIを利用するための認証手順を解説します。

■ 手順1: SSO設定コマンドの実行

まず、ターミナル(Windowsの場合はPowerShellやWSL、Macの場合はTerminalやiTerm2)を開き、以下のコマンドを実行します。

Terminal
aws configure sso
■ 手順2: プロファイル情報の入力

次に、コマンドを実行すると対話型プロンプトが表示されるので、以下の情報を順に入力します。

  1. SSO session name: my-sso-session
  2. SSO start URL: IAM Identity Centerのスタートページ URL
  3. SSO region: ap-northeast-1(東京)または ap-northeast-3(大阪)
■ 手順3: ブラウザでのログイン承認

続いて、ターミナル上の表示に従い自動または手動でブラウザが立ち上がるので、ログインを承認します。

■ 手順4: アカウントとロールの選択

その後、ターミナルに戻ると、アクセスできるAWSアカウントの一覧と使用可能なロール(権限)が表示されるので、矢印キーで選択します。

■ 手順5: デフォルト設定の入力

さらに、以下の通りCLIの基本設定を行います。

  1. CLI default client Region: ap-northeast-1(または ap-northeast-3
  2. CLI default output format: json
  3. CLI default profile name: my-sso
■ 手順6: 設定の確認(プロファイル指定)

ここまでの設定が正しく完了したかどうかは、以下のコマンドで確認できます。

Terminal
aws s3 ls --profile my-sso

S3バケット一覧(または空の応答)が表示されれば、正常に連携できています。

■ 手順7: 環境変数 AWS_PROFILE の適用

ただし、毎回 --profile my-sso オプションを入力するのは手間がかかります。そこで、以下のコマンドでプロファイル情報を現在のターミナルセッションに設定しておきましょう。

【Mac / Linux】

bash
export AWS_PROFILE="my-sso"

【Windows (Command Prompt)】

cmd
set AWS_PROFILE=my-sso

【Windows (PowerShell)】

powershell
$env:AWS_PROFILE="my-sso"
■ 手順8: 最終動作確認

最後に、環境変数が正しく適用されたかどうかを、以下のコマンドで確認します。

Terminal
aws s3 ls

オプションなしでS3バケット一覧が表示されれば完了です。

なお、SSOのセッションが切れた場合の対処法については、トラブルシューティングの項目1で解説しています。

Step 2: コンテナイメージの作成とローカル検証

1. Webアプリケーションの準備

はじめに、WindowsはCドライブ直下、Macはデスクトップ上に作成した work フォルダの中に ecs-sample フォルダを作成します。作成した ecs-sample フォルダは、VSCode等のエディタで開いておきましょう。

次に、ecs-sample フォルダの中に Dockerfile を作成し、以下を記述します。

Dockerfile
FROM httpd:2.4
COPY index.html /usr/local/apache2/htdocs/index.html

続いて、ecs-sample フォルダの中に index.html を作成し、表示させたい任意のWebページ内容を記述します。

その後、ターミナルを立ち上げ、以下の手順でビルド・起動を行います。

■ 手順1: Dockerイメージのビルド

まず、以下のコマンドを ecs-sample 直下で実行し、Dockerイメージをビルドします。

Terminal
docker build -t ecs-sample .
■ 手順2: ローカルコンテナの起動

次に、以下のコマンドでローカルコンテナを起動します。

Terminal
docker run -p 8080:80 ecs-sample
■ 手順3: 動作確認

最後に、ブラウザから以下のURLにアクセスし、作成した index.html の内容が表示されるか動作確認します。

URL
http://localhost:8080

2. Amazon ECRへのイメージプッシュ

■ 手順1: ECRリポジトリの作成

まず、AWSマネジメントコンソールからAmazon ECR(Elastic Container Registry)にアクセスし、リポジトリを作成します(例: ecs-sample)。

ECSタスク実行ロール

■ 手順2: プッシュコマンドの確認

次に、ECRコンソール画面右上にある「プッシュコマンドを表示」ボタンをクリックします。

■ 手順3: イメージのログインとプッシュ

そして、表示された以下のステップの順にコマンドを端末で実行します。

  1. aws ecr get-login-password を使ったECRへのログイン
  2. docker tag によるイメージのタグ付け
  3. docker push によるECRへのイメージ送信

Step 3: ECS (Fargate) & ALB インフラ環境の構築

1. 事前準備(IAMロール & CloudWatch Logs)

  1. ECSタスク実行ロール(ecsTaskExecutionRole)の準備: ECRからのイメージ引き抜きやCloudWatchへのログ送信に必要な権限(AmazonECSTaskExecutionRolePolicy)が付与されていることを確認します。
    ECSタスク実行ロール

2. ECSクラスターの作成

まず、ECSコンソールから「クラスターの作成」を選択します。

次に、クラスター名を入力します(例: ecs-cluster-[name]-01)。

画像のように、インフラストラクチャの起動タイプとして「AWS Fargate」を選択して作成します。

ECS clusterの作成

3. タスク定義(Task Definition)の作成

「タスク定義の新規作成」を選択し、以下の項目を設定します。

■ 基本設定
  1. タスク定義ファミリー名: ecs-taskdef-[name]-01
  2. 起動タイプ: Fargate
  3. CPU: 0.25 vCPU
  4. メモリ: 0.5 GB
  5. タスク実行ロール: ecsTaskExecutionRole
■ コンテナ設定
  1. コンテナ名: ecs-container-[name]-01
  2. イメージURI: ECRにプッシュしたイメージのURI
  3. ポートマッピング: 80 / TCP
  4. ログ収集: CloudWatch Logsを有効化(awslogs ログドライバ)

4. ALB構築およびECSサービスのデプロイ

ECSサービスの作成画面から、ALB(ロードバランサー)やターゲットグループの設定を同時に行い、デプロイまでを完了させます。

■ 手順1: ECSサービスの作成開始

作成したECSクラスターの画面を開き、「サービスの作成」ボタンをクリックします。

ECS Serviceの作成

■ 手順2: サービス基本設定

続いて、以下の通りサービスとタスク定義の設定を行います。

  1. タスク定義ファミリー: 作成したタスク定義(ecs-taskdef-[name]-01)を指定
  2. サービス名: ecs-taskdef-[name]-01-service-01
  3. コンピューティングオプション: 起動タイプ Fargate
  4. 必要なタスク数:1 サービスの詳細

 

■ 手順3: ネットワーキング設定

さらに、ネットワークおよびセキュリティ設定を行います。

  1. VPC: 利用するVPCを選択
  2. サブネット: Publicサブネットを選択
  3. セキュリティグループ: HTTP 80番ポートのインバウンド接続(0.0.0.0/0)を許可したセキュリティグループを設定
  4. パブリックIPの付与: TURN ON(有効)

ネットワークの設定

■ 手順4: ロードバランシング(ALB)設定

加えて、サービス作成画面内の「ロードバランシング」セクションにて、ALBの設定を合わせて行います。

 

  1. ロードバランサーの種類: Application Load Balancer(ALB)を選択
  2. ロードバランサー名: alb-[name]-01
  3. ターゲットグループの作成: 新規作成を選択
  4. ターゲットグループ名: alb-tg-[name]-01
  5. ターゲットタイプ: IP
  6. プロトコル / ポート: HTTP / 80
  7. ヘルスチェックパス: /
■ 手順5: デプロイと動作確認

すべての設定を入力後、「作成」ボタンを押してサービスをデプロイします。

デプロイ完了後、作成したサービスの「正常性とメトリクス」タブを開き、以下の点を確認します。

  1. サービス概要のタスクステータスが 1 件実行中 になっていること
  2. 「ロードバランサーのターゲット正常性」セクションで、ターゲットの正常性が 1 件が正常 になっていること
 

なお、ターゲットの正常性が「異常」または確認できない場合は、トラブルシューティングの項目3を参照してください。

■ 手順6: 動作確認

作成されたALBのDNS名(例: ojt-alb-xxx.ap-northeast-1.elb.amazonaws.com)をコピーし、ブラウザのアドレスバーに貼り付けてアクセスします。作成したWebページが表示されれば、デプロイは成功です。

ハマりやすいポイントと対策(トラブルシューティング)

1. SSOのセッション切れ

【現象】
AWS CLI実行時に認証エラーが発生する。

【対策】
設定をやり直す必要はありません。aws sso login コマンドを実行し、ブラウザで再承認を行うことで認証を更新できます。詳しい初期設定の手順はStep 1を参照してください。

2. docker login実行時にエラーが発生する(The stub received bad data.)

【現象】
aws ecr get-login-password を使用して docker login を実行した際、以下のエラーが発生する。

Error
Error saving credentials: error storing credentials - err: exit status 1

【対策】
AWS ECRが発行するトークン長が、Windows Credential Managerの許容上限を超えていることが原因です。

  1. ~/.docker/config.json(Windowsの場合は %USERPROFILE%\.docker\config.json)を開きます。
  2. "credsStore": "wincred"(または "credsStore": "desktop")の行を削除して保存します。
  3. 認証情報がローカルファイルへ保存されるようになり、正常にログインできるようになります。

3. ECRからイメージが引き抜けずタスクが停止する(CannotPullContainerError)

【現象】
ECSタスクが起動後すぐに停止する。

【対策】

  1. ecsTaskExecutionRole にECR読み取り権限が含まれているか確認します。
  2. また、Fargateタスクのネットワーク設定で「パブリックIPの自動割当」が有効になっているか、あるいはNAT Gateway/VPC Endpointへのルートが確保されているかを確認します。

4. ALBのヘルスチェックが失敗する(Unhealthy)

【現象】
ALB配下のタスクがヘルスチェックエラーで繰り返し再起動する。

【対策】

  1. コンテナ側でListenしているポート(80)と、ターゲットグループのポート設定が一致しているか確認します。
  2. さらに、ALBからECSタスク(セキュリティグループ間)への80番ポートの通信が許可されているかも確認します。

5. CloudWatchにログが出力されない

【現象】
タスクのログがCloudWatch Logsに表示されない。

【対策】
タスク実行ロールに logs:CreateLogStream および logs:PutLogEvents の権限が含まれているか確認します。

おわりに / 後片付け(リソース削除)

学習が終了したら、不要な課金を防ぐために、必ず以下の順番でリソースを削除してください。

  1. ECSサービスの削除(サービスを削除することでタスクが自動停止します)
  2. ECSクラスターの削除
  3. ALBおよびターゲットグループの削除
  4. ECRリポジトリの削除
  5. CloudWatchロググループの削除

以上で、Step 1からStep 3までの一連のハンズオンは完了です。

この記事を書いた人

村守俊一

shunichi_muramori

26卒 ITソリューション部ビジネスソリューションセクション