0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:コンテナ2つで構成するDjango+NginxアプリのECSタスク定義とは

Last updated at Posted at 2025-04-04

はじめに

AWS ECS(Elastic Container Service)は、Dockerコンテナをスケーラブルにデプロイ・管理できるサービスです。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

本記事では、実際のタスク定義(Task Definition)をもとに、DjangoアプリケーションとNginxのリバースプロキシ構成がどのように構成されているのかを紐解きます。


タスク定義の全体構成

"taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:xxx:task-definition/reverse-proxy-task:11",
"family": "reverse-proxy-task",
"revision": 11,
"status": "ACTIVE",
"requiresCompatibilities": ["FARGATE"],
"networkMode": "awsvpc",
"cpu": "1024",
"memory": "2048",
  • taskDefinitionArn: タスク定義の一意な識別子。
  • family: タスク定義グループ名。
  • revision: リビジョン番号。バージョン管理に相当。
  • requiresCompatibilities: 実行環境(ここでは FARGATE)。
  • networkMode: awsvpc で独立したENIが割り当てられる。
  • cpu/memory: タスク全体に割り当てるリソース量。

コンテナ定義①:Django アプリ

"name": "django",
"image": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/reverse-proxy-django-app",
"cpu": 512,
"memory": 1024,
"portMappings": [{"containerPort": 8000, "hostPort": 8000}],
"environment": [
  {"name": "DJANGO_SETTINGS_MODULE", "value": "mysite.settings"},
  {"name": "STATIC_ROOT", "value": "/app/staticfiles"},
  {"name": "DJANGO_SECRET_KEY", "value": "your-secret-key"}
],
"logConfiguration": {
  "logDriver": "awslogs",
  "options": {
    "awslogs-group": "/aws/ecs/reverse-proxy-cluster",
    "awslogs-region": "ap-northeast-1",
    "awslogs-stream-prefix": "ecs"
  }
}
  • image: ECR上のDjangoアプリケーションイメージ。
  • portMappings: コンテナ内ポート8000をホストの8000にバインド。
  • environment: Djangoの設定に必要な環境変数。
  • logConfiguration: CloudWatch Logs へのログ送信設定。

コンテナ定義②:Nginx

"name": "nginx",
"image": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/reverse-proxy-django-nginx",
"cpu": 512,
"memory": 1024,
"portMappings": [{"containerPort": 80, "hostPort": 80}],
"logConfiguration": {
  "logDriver": "awslogs",
  "options": {
    "awslogs-group": "/aws/ecs/reverse-proxy-cluster",
    "awslogs-region": "ap-northeast-1",
    "awslogs-stream-prefix": "ecs"
  }
}
  • image: ECR上のNginxイメージ。Djangoへのリバースプロキシ。
  • portMappings: HTTPリクエスト用に80番ポートをバインド。
  • logConfiguration: Djangoと同様、CloudWatchにログ出力。

タスク実行に必要なIAMロール

"executionRoleArn": "arn:aws:iam::xxx:role/ecsTaskExecutionRole"

このIAMロールには以下のポリシーが含まれている必要があります:

  • AmazonECSTaskExecutionRolePolicy
  • ECRからのイメージ取得、CloudWatchへのログ出力

その他の設定

"requiresAttributes": [
  "com.amazonaws.ecs.capability.logging-driver.awslogs",
  "ecs.capability.execution-role-awslogs",
  "com.amazonaws.ecs.capability.ecr-auth",
  "ecs.capability.task-eni"
]
  • ECSがタスクを正常に実行するために必要な機能。

まとめ

このタスク定義は、AWS ECS Fargate上にDjangoアプリとNginxのリバースプロキシ構成をデプロイするための標準的な例です。Fargateを使うことでインフラの管理が不要となり、ログ収集やネットワークも簡単に構成可能です。

このような構成は、マイクロサービス化やDevOpsを進める上で非常に有効です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?