はじめに
本記事は、前回(第1回)でDockerを使って作成したWebアプリケーションを、AWS 上にデプロイする方法について紹介したいと思います。
今回は、AWSのフルマネージドなコンテナサービスである「Amazon ECS」と、その中でもサーバーレスな実行環境「Fargate」を用いて、Webアプリケーションを実行・公開します。
実際に操作を行いながら、コンテナイメージをECRに登録し、ECSタスクとして起動・停止するまでの流れを行っていきます。
手順を通じて学べるポイント
- AWS ECS / Fargate の基本構成と役割
- ECRにDockerイメージをアップロードする方法
- ECS上でコンテナアプリケーションを起動・停止する流れ
- パブリックIPを使ったWebアプリケーションのアクセス確認
作業の流れ
これから行う作業は、大きく分けて以下のような流れで進めていきます。
- ECR作成・コンテナイメージのアップロード
- ECS作成・クラスター作成・タスク定義作成・コンテナ起動
それでは、まずコンテナイメージを保存するECRリポジトリの作成から始めていきましょう。
手順
1. ECR作成・コンテナイメージアップロード
1.1 ECRを作成する
1.1.1 AWS マネジメントコンソールで「ECR」にアクセスします。
1.1.2 「repository」をクリックし、「リポジトリを作成」をクリックします。
1.1.3 リポジトリ名を入力し、「リポジトリを作成」をクリックします。
リポジトリ一覧に作成したリポジトリ名が表示されていれば作成完了です。
1.2 作成したECRにコンテナイメージをアップロードする
1.2.1 作成したECRのリポジトリ名をクリックし、「プッシュコマンドの表示」をクリックします。
1.2.2 今回はLinuxを利用しているため、「macOS/Linux」のプッシュコマンドを利用します。認証に必要なコマンドが記載されているため、メモしておきます。
1.3 Docker環境で作成したコンテナイメージをECRにプッシュする
1.3.1 Tera Term等のターミナルソフトを使ってSSH接続をし、先ほどメモしたプッシュコマンドを実行します。
[ec2-user@ip-10-0-1-70 ~]$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin "AWSアカウントID".dkr.ecr.ap-north east-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
[ec2-user@ip-10-0-1-70 ~]$ sudo -su -
Last login: Fri Jul 4 00:41:08 UTC 2025 on pts/0
[root@ip-10-0-1-70 ~]# cd ~/dockerfile/
[root@ip-10-0-1-70 dockerfile]# echo username2025 dockerfile ecs > index.html
[root@ip-10-0-1-70 dockerfile]# docker build -t training2025-user-ecr .
=> [3/3] COPY ./index.html /var/www/html/index.html 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:11363aebd3c6a4fa75baa268b6e913c2140288ef10 0.0s
=> => naming to docker.io/library/training2025-user-ecr 0.0s
[root@ip-10-0-1-70 dockerfile]# docker tag training2025-user-ecr:latest "AWSアカウントID".dkr.ecr.ap-northeast-1.amazonaws.com/training2025-user-ecr:latest
[root@ip-10-0-1-70 dockerfile]# docker push "AWSアカウントID".dkr.ecr.ap-northeast -1.amazonaws.com/training2025-user-ecr:latest
The push refers to repository [AWSアカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/training2025-user-ecr]
Login Succeeded が表示されれば、ECRへのログインは成功です。
docker push 実行時にエラーがなく進み、最後まで完了メッセージ「The push refers to repository...」が出ればイメージのアップロード完了です。
1.3.2 作成したECRリポジトリ名をクリックし、コンテナイメージがアップロードされていることを確認します。
「latest」というタグ付きのイメージが表示されていれば、アップロード成功です。
2. ECS作成
ここからはECSを作成していきます。
2.1 ECSクラスター作成
2.1.1 AWS マネジメントコンソールで「ECS」にアクセスします。
2.1.2 「クラスター」をクリックし、「クラスターの作成」をクリックします。
2.1.3 クラスター名とインフラストラクチャの「Fargate」を選択し、ECSクラスターを作成します。
2.2 ECS タスク定義作成
Fargate でアプリを動かすには、まず「タスク定義」という設定を作成します。
今回は、ECR に保存した Docker イメージを指定して、ポート80で動作する構成にしました。
ECS サービス作成時には、このタスク定義を元にコンテナが起動されます。
- タスク定義の設定
- タスク定義ファミリー:任意のタスク定義名
- インフラストラクチャの要件
- 起動タイプ:AWS Fargate
- CPU:.5 vCPU
- メモリ:1 GB
- タスクロール:escTaskExecution
- タスク実行ロール:escTaskExecution
- コンテナ‐1
- 名前:「1.1 ECRを作成する」で作成したECR名
- イメージURI:「1.2.2」でメモしたdocker pushで使ったコマンド
- コンテナポート:80
- メモリのソフト制限:0.512
必要な情報を入力し、「作成」をクリックすればタスク定義の作成は完了です。
2.3 ECSコンテナ起動
作成したタスク定義を使用して、タスクを手動で実行/停止します。
2.3.1 タスク定義の「デプロイ」メニューを左クリックし、表示された一覧の中から「タスク実行」をクリックします。
2.3.2 タスク実行のために、VPC やサブネット、セキュリティグループなどの設定を行います。
- 環境
- 既存のクラスター:「2.1 ECSクラスター作成」で作成したECS名
- コンピューティングオプション:起動タイプ
- 起動タイプ:FARGATE
- ネットワーキング
- VPC:事前作成したVPC名
- サブネット:事前作成したサブネット
- セキュリティグループ:既存のセキュリティグループを使用
- セキュリティグループ名:事前作成したセキュリティグループ
必要な情報を入力し、「作成」をクリックします。
実行したタスクがタスク一覧に表示され、タスクステータスが実行中になっていれば実行完了です。
2.3.3 クラスター内の「タスク」をクリックし、パブリックIPアドレスをコピーして自PCのブラウザからEC2インスタンスのパブリックIPアドレスを使用してアクセスします。
2.3.4 タスクの停止を行います。
最後に
今回は、Dockerで作成したWebアプリケーションをAWS ECS(Fargate)にデプロイし、ECR経由で実行するところまでを一通り行いました。
次回の【コンテナ入門#3】では、ALB(Application Load Balancer)を組み合わせた公開設定や、自動スケーリングの構成など、より実践的なECS運用方法について記載していますので、是非そちらもご覧ください。