目次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 build、docker run)を理解している方 - AWS上でのコンテナ運用(ECS / Fargate)に初めて挑戦したい方
本記事で構築するシステム構成図
本ハンズオンでは、以下のシステム構成を構築します。
前提条件・環境準備
AWS環境の事前準備
まず、AWSアカウントと適切な管理権限を用意してください。
権限が不足していると、後述のECSクラスターの作成やIAMロールの設定でエラーが発生することがあるため、事前に確認しておくと安心です。
ローカル開発環境の準備
ハンズオンを進めるにあたり、以下のツールをインストールし、動作確認を行います。それぞれの公式インストールガイドは以下のリンクを参照してください。
Dockerコンテナの作成や実行に必要な環境です。加えて、お使いのOS(Windows / Mac)に合わせたインストーラーをダウンロードし、セットアップを進めてください。
Docker Desktop 公式ドキュメント一方で、ターミナルからAWSリソースを操作・認証するためには、コマンドラインツールが必要です。そのため、AWS CLIをインストールしてください。
AWS CLI 公式ドキュメントワークスペースの作成
続いて、作業用ディレクトリ(work/)を作成します。
このディレクトリは、後述のStep 2: コンテナイメージの作成で使用するため、分かりやすい場所に作っておくとよいでしょう。
Step 1: AWS CLI (SSO認証) のセットアップ
外部のアイデンティティプロバイダー(IdP)やIAM Identity Center経由でログインするフェデレーテッドユーザーが、ローカル環境のターミナルからAWS CLIを利用するための認証手順を解説します。
まず、ターミナル(Windowsの場合はPowerShellやWSL、Macの場合はTerminalやiTerm2)を開き、以下のコマンドを実行します。
次に、コマンドを実行すると対話型プロンプトが表示されるので、以下の情報を順に入力します。
- SSO session name:
my-sso-session - SSO start URL: IAM Identity Centerのスタートページ URL
- SSO region:
ap-northeast-1(東京)またはap-northeast-3(大阪)
続いて、ターミナル上の表示に従い自動または手動でブラウザが立ち上がるので、ログインを承認します。
その後、ターミナルに戻ると、アクセスできるAWSアカウントの一覧と使用可能なロール(権限)が表示されるので、矢印キーで選択します。
さらに、以下の通りCLIの基本設定を行います。
- CLI default client Region:
ap-northeast-1(またはap-northeast-3) - CLI default output format:
json - CLI default profile name:
my-sso
ここまでの設定が正しく完了したかどうかは、以下のコマンドで確認できます。
S3バケット一覧(または空の応答)が表示されれば、正常に連携できています。
ただし、毎回 --profile my-sso オプションを入力するのは手間がかかります。そこで、以下のコマンドでプロファイル情報を現在のターミナルセッションに設定しておきましょう。
【Mac / Linux】
【Windows (Command Prompt)】
【Windows (PowerShell)】
最後に、環境変数が正しく適用されたかどうかを、以下のコマンドで確認します。
オプションなしでS3バケット一覧が表示されれば完了です。
なお、SSOのセッションが切れた場合の対処法については、トラブルシューティングの項目1で解説しています。
Step 2: コンテナイメージの作成とローカル検証
1. Webアプリケーションの準備
はじめに、WindowsはCドライブ直下、Macはデスクトップ上に作成した work フォルダの中に ecs-sample フォルダを作成します。作成した ecs-sample フォルダは、VSCode等のエディタで開いておきましょう。
次に、ecs-sample フォルダの中に Dockerfile を作成し、以下を記述します。
続いて、ecs-sample フォルダの中に index.html を作成し、表示させたい任意のWebページ内容を記述します。
その後、ターミナルを立ち上げ、以下の手順でビルド・起動を行います。
まず、以下のコマンドを ecs-sample 直下で実行し、Dockerイメージをビルドします。
次に、以下のコマンドでローカルコンテナを起動します。
最後に、ブラウザから以下のURLにアクセスし、作成した index.html の内容が表示されるか動作確認します。
2. Amazon ECRへのイメージプッシュ
まず、AWSマネジメントコンソールからAmazon ECR(Elastic Container Registry)にアクセスし、リポジトリを作成します(例: ecs-sample)。

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

そして、表示された以下のステップの順にコマンドを端末で実行します。
aws ecr get-login-passwordを使ったECRへのログインdocker tagによるイメージのタグ付けdocker pushによるECRへのイメージ送信
Step 3: ECS (Fargate) & ALB インフラ環境の構築
1. 事前準備(IAMロール & CloudWatch Logs)
- ECSタスク実行ロール(
ecsTaskExecutionRole)の準備: ECRからのイメージ引き抜きやCloudWatchへのログ送信に必要な権限(AmazonECSTaskExecutionRolePolicy)が付与されていることを確認します。
2. ECSクラスターの作成
まず、ECSコンソールから「クラスターの作成」を選択します。
次に、クラスター名を入力します(例: ecs-cluster-[name]-01)。
画像のように、インフラストラクチャの起動タイプとして「AWS Fargate」を選択して作成します。

3. タスク定義(Task Definition)の作成
「タスク定義の新規作成」を選択し、以下の項目を設定します。
- タスク定義ファミリー名:
ecs-taskdef-[name]-01 - 起動タイプ: Fargate
- CPU: 0.25 vCPU
- メモリ: 0.5 GB
- タスク実行ロール:
ecsTaskExecutionRole
- コンテナ名:
ecs-container-[name]-01 - イメージURI: ECRにプッシュしたイメージのURI
- ポートマッピング: 80 / TCP
- ログ収集: CloudWatch Logsを有効化(
awslogsログドライバ)
4. ALB構築およびECSサービスのデプロイ
ECSサービスの作成画面から、ALB(ロードバランサー)やターゲットグループの設定を同時に行い、デプロイまでを完了させます。
作成したECSクラスターの画面を開き、「サービスの作成」ボタンをクリックします。

続いて、以下の通りサービスとタスク定義の設定を行います。
- タスク定義ファミリー: 作成したタスク定義(
ecs-taskdef-[name]-01)を指定 - サービス名:
ecs-taskdef-[name]-01-service-01 - コンピューティングオプション: 起動タイプ Fargate
- 必要なタスク数:1

さらに、ネットワークおよびセキュリティ設定を行います。
- VPC: 利用するVPCを選択
- サブネット: Publicサブネットを選択
- セキュリティグループ: HTTP 80番ポートのインバウンド接続(
0.0.0.0/0)を許可したセキュリティグループを設定 - パブリックIPの付与: TURN ON(有効)

加えて、サービス作成画面内の「ロードバランシング」セクションにて、ALBの設定を合わせて行います。
- ロードバランサーの種類: Application Load Balancer(ALB)を選択
- ロードバランサー名:
alb-[name]-01 - ターゲットグループの作成: 新規作成を選択
- ターゲットグループ名:
alb-tg-[name]-01 - ターゲットタイプ: IP
- プロトコル / ポート: HTTP / 80
- ヘルスチェックパス:
/
すべての設定を入力後、「作成」ボタンを押してサービスをデプロイします。
デプロイ完了後、作成したサービスの「正常性とメトリクス」タブを開き、以下の点を確認します。
- サービス概要のタスクステータスが
1 件実行中になっていること - 「ロードバランサーのターゲット正常性」セクションで、ターゲットの正常性が
1 件が正常になっていること
なお、ターゲットの正常性が「異常」または確認できない場合は、トラブルシューティングの項目3を参照してください。
作成された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 を実行した際、以下のエラーが発生する。
【対策】
AWS ECRが発行するトークン長が、Windows Credential Managerの許容上限を超えていることが原因です。
~/.docker/config.json(Windowsの場合は%USERPROFILE%\.docker\config.json)を開きます。"credsStore": "wincred"(または"credsStore": "desktop")の行を削除して保存します。- 認証情報がローカルファイルへ保存されるようになり、正常にログインできるようになります。
3. ECRからイメージが引き抜けずタスクが停止する(CannotPullContainerError)
【現象】
ECSタスクが起動後すぐに停止する。
【対策】
ecsTaskExecutionRoleにECR読み取り権限が含まれているか確認します。- また、Fargateタスクのネットワーク設定で「パブリックIPの自動割当」が有効になっているか、あるいはNAT Gateway/VPC Endpointへのルートが確保されているかを確認します。
4. ALBのヘルスチェックが失敗する(Unhealthy)
【現象】
ALB配下のタスクがヘルスチェックエラーで繰り返し再起動する。
【対策】
- コンテナ側でListenしているポート(80)と、ターゲットグループのポート設定が一致しているか確認します。
- さらに、ALBからECSタスク(セキュリティグループ間)への80番ポートの通信が許可されているかも確認します。
5. CloudWatchにログが出力されない
【現象】
タスクのログがCloudWatch Logsに表示されない。
【対策】
タスク実行ロールに logs:CreateLogStream および logs:PutLogEvents の権限が含まれているか確認します。
おわりに / 後片付け(リソース削除)
学習が終了したら、不要な課金を防ぐために、必ず以下の順番でリソースを削除してください。
- ECSサービスの削除(サービスを削除することでタスクが自動停止します)
- ECSクラスターの削除
- ALBおよびターゲットグループの削除
- ECRリポジトリの削除
- CloudWatchロググループの削除
以上で、Step 1からStep 3までの一連のハンズオンは完了です。
同じカテゴリーの記事
同じカテゴリの記事を読む