1
2

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 ECS on Fargate チュートリアル Level 2

Last updated at Posted at 2025-04-05

はじめに

AWSのFargateを使ってみたいけど、何から始めていいかわからない...という方へ。
一緒に超シンプルな構成を試して「これがFargateか😃」を体感してみましょう!の第2弾です。
具体的には、パブリックサブネットにECSを構築しDjangoとNginxの2つのコンテナを起動します。

ちなみに、第1弾はこちら。
Dockerfileとhtmlファイルを使ってNginxコンテナを起動しました。

第1弾は魔法ファイルをCloudFormationにアップロードしてVPCやセキュリティグループ、ロールなどを自動で構築しましたが、今回はコンソール画面で作っていきますよ。

AWS ECS on Fargateを使って簡易アプリを動かすまでの手順をまとめました。

やってみよう

前提 : AWSにログインしている。GitとLinuxコマンドチョット分かる

以下の手順で進めます。作業にかかる時間は50分ほどです。
ゴールはFargateでコンテナ起動し「Hello,World!」の画面を表示することです。

1.ロールを作成する
2.VPCとセキュリティグループを作成する
3.ECRにリポジトリを作成
4.CloudWatchにロググループを作成する
5.GitHubから簡易アプリをクローンする
6.リポジトリにDockerイメージをプッシュする
7.タスク定義を作成する
8.クラスターを作成する
9.サービスを作成する
10.「これがFargateか😃」を体感
11.CloudWatchのログを見てみよう

それではチュートリアルスタートです。

1.ロールを作成する

IAM → ロール →「ロールを作成」をクリック

ロール作成1のコピー.png

ロール作成2.png

ロール作成3.png

ロール作成4.png

ロール作成5.png

ロール名は「ecsTaskExecutionRole」にしてください。後で作成するタスク定義と合わせるためです。
ロール作成6.png

追加されました
ロール作成1.png

2.VPCとセキュリティグループを作成する

VPC-> 「VPCを作成」をクリックし、画像のようにVPCを作成します
VPC作成.png

VPC作成2.png

VPC作成3.png

VPC作成4.png

セキュリティグループも作成します
SG作成1.png

SG作成2.png

3.ECRにリポジトリを作成

Django用とNginx用に2つのリポジトリを作成します。
リポジトリ名はそれぞれ「reverse-proxy-django-app」と「reverse-proxy-django-nginx」にしてください。後で作成するタスク定義に合わせるためです。

スクリーンショット 2025-04-05 8.20.47.png

4.CloudWatchにロググループを作成する

どの画面でも構いませんので、画面左下にあるCloudShellを開いてください。

スクリーンショット 2025-04-05 8.41.54.png

CloudShellで下記コマンドを実行します

CloudWatch にロググループが存在するか確認
aws logs describe-log-groups --query "logGroups[*].logGroupName"
ロググループが存在しない場合は下記コマンドで作成
aws logs create-log-group --log-group-name "/aws/ecs/reverse-proxy-cluster"

5.GitHubから簡易アプリをクローンする

以下のGitHubリポジトリを使用させていただきます

CloudShellで下記コマンドを実行します

GitHubからリポジトリをクローンする
git clone https://github.com/free-honda/reverse-proxy-django-prd.git

6.リポジトリにDockerイメージをプッシュする

ECS → リポジトリ → 「reverse-proxy-django-app」をクリック → CloudShellを開き、CloudShell内でdjango_appディレクトリに移動してください

スクリーンショット 2025-04-05 8.44.33.png

コンソール画面の「プッシュコマンドを表示」をクリックし、4つのコマンドを実行します

スクリーンショット 2025-04-05 8.44.59.png

スクリーンショット 2025-04-05 15.30.35.png

更新ボタンを押してみてください
「reverse-proxy-django-app」リポジトリにイメージをプッシュできました

スクリーンショット 2025-04-05 8.55.05.png


次は「reverse-proxy-django-nginx」リポジトリにイメージをプッシュします

リポジトリ → 「reverse-proxy-django-nginx」をクリック → CloudShellを開き、CloudShell内でreverse-proxy-django-prdディレクトリに移動

スクリーンショット 2025-04-05 8.52.01.png

再度「プッシュコマンドを表示」のコマンドを実行しますが、
2つ目のコマンドの代わりに下記を実行してください

Nginx のビルド
docker build -t reverse-proxy-django-nginx -f nginx.Dockerfile .

「reverse-proxy-django-nginx」リポジトリにイメージをプッシュできました

スクリーンショット 2025-04-05 8.54.54.png

7.タスク定義を作成する

ECS → タスク定義 → 新しいタスク定義の作成 → JSONを使用した新しいタスク定義の作成
タスク定義1.png

編集画面内に下記のJSONをペーストします
ただし「xxx」の部分はご自身のアカウントIDに変更してください。3カ所あります。

{
  "family": "reverse-proxy-task",
  "executionRoleArn": "arn:aws:iam::xxx:role/ecsTaskExecutionRole",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "1024",
  "memory": "2048",
  "containerDefinitions": [
      {
          "name": "django",
          "image": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/reverse-proxy-django-app",
          "cpu": 512,
          "memory": 1024,
          "portMappings": [
              {
                  "containerPort": 8000,
                  "protocol": "tcp"
              }
          ],
          "essential": true,
          "environment": [
              {
                  "name": "DJANGO_SETTINGS_MODULE",
                  "value": "mysite.settings"
              },
              {
                  "name": "DJANGO_SECRET_KEY",
                  "value": "your-secret-key"
              },
              {
                  "name": "STATIC_ROOT",
                  "value": "/app/staticfiles"
              }
          ],
          "logConfiguration": {
              "logDriver": "awslogs",
              "options": {
                  "awslogs-group": "/aws/ecs/reverse-proxy-cluster",
                  "awslogs-region": "ap-northeast-1",
                  "awslogs-stream-prefix": "ecs"
              }
          }
      },
      {
          "name": "nginx",
          "image": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/reverse-proxy-django-nginx",
          "cpu": 512,
          "memory": 1024,
          "portMappings": [
              {
                  "containerPort": 80,
                  "protocol": "tcp"
              }
          ],
          "essential": true,
          "logConfiguration": {
              "logDriver": "awslogs",
              "options": {
                  "awslogs-group": "/aws/ecs/reverse-proxy-cluster",
                  "awslogs-region": "ap-northeast-1",
                  "awslogs-stream-prefix": "ecs"
              }
          }
      }
  ]
}

タスク定義2.png

8.クラスターを作成する

スクリーンショット 2025-04-05 8.56.53.png

スクリーンショット 2025-04-05 8.57.04.png

9.サービスを作成する

サービスを作成します。
スクリーンショット 2025-04-05 8.59.46.png

スクリーンショット 2025-04-05 9.01.26.png

スクリーンショット 2025-04-05 9.01.38.png

VPCやセキュリティグループは自分で作成したものに変更してください
スクリーンショット 2025-04-05 9.25.47.png

サービスをクリック
スクリーンショット 2025-04-05 9.26.56.png

10.「これがFargateか😃」を体感

タスクをクリック
スクリーンショット 2025-04-05 9.28.02.png

2つのコンテナが起動できているのを確認して、パブリックIPアドレスでアクセスします
スクリーンショット 2025-04-05 9.28.29.png

いけましたね!🎊
スクリーンショット 2025-04-05 9.28.46.png

11.CloudWatchのログを見てみよう

CloudWatch → ロググループ → ロググループ名をクリック

スクリーンショット 2025-04-05 16.28.08.png

とりあえずNginxをクリック
スクリーンショット 2025-04-05 16.29.13.png

ログを表示できます
スクリーンショット 2025-04-05 16.30.30.png

お金かかるので使い終わったら削除してね
- ECSのタスク、サービス、クラスター
- VPC
- CloudWatchのログストリーム

まとめ

最後までお付き合いくださりありがとうございます。

今回はタスク定義以外のリソースを作成してみました。
自分の詰まりポイントとしては、IAMユーザのロール設定とCloudWatchのロググループの作成ですかね。
これであなたも「Fargateチョットワカル」気なりましたか?

参考文献

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?