Django + AWS Fargateでコンテナ化アプリを運用【Django×AWS入門7】

はじめに

DjangoアプリケーションをAWSのコンテナ管理サービスであるAWS Fargate上で運用することで、サーバーレスの利便性を活かしつつ、コンテナの柔軟性を最大限に活用できます。本記事では、DjangoアプリをDockerコンテナ化し、AWS Fargateを用いて運用する手順を詳しく解説します。

AWS Fargateとは?

AWS Fargateの特徴

AWS Fargateは、AWSのコンテナオーケストレーションサービス(ECSやEKS)で使用できるサーバーレスコンテナ実行環境です。

  • サーバーレス: EC2インスタンスの管理が不要
  • 自動スケール: 負荷に応じてコンテナの数を自動調整
  • コスト最適化: 実行時間に応じた課金モデル
  • セキュリティ: IAMロールによるアクセス管理

DjangoとAWS Fargateの相性

  • DockerコンテナでDjango環境を統一管理できる
  • EC2不要で運用コストを削減
  • S3、RDS、ElastiCacheなどAWSのサービスとシームレスに統合可能

DjangoアプリのDockerコンテナ化

1. Dockerfileの作成

Djangoアプリをコンテナ化するためにDockerfileを作成します。

# ベースイメージ
FROM python:3.9

# 作業ディレクトリを設定
WORKDIR /app

# 必要なパッケージをインストール
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# Djangoアプリをコピー
COPY . /app/

# ポート設定
EXPOSE 8000

# 実行コマンド
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]

2. docker-compose.yml の作成

ローカル環境でのテスト用にdocker-compose.ymlを作成します。

version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DEBUG=True

3. Dockerイメージのビルドと実行

docker build -t my-django-app .
docker run -p 8000:8000 my-django-app

AWS Fargateへのデプロイ

1. AWS CLIのインストールと設定

AWS CLIをインストールし、設定を行います。

pip install awscli
aws configure

2. ECR(Elastic Container Registry)にイメージをプッシュ

AWS Fargateで使用するコンテナイメージをECRにアップロードします。

aws ecr create-repository --repository-name my-django-app
aws ecr get-login-password | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com

docker tag my-django-app <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/my-django-app

docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/my-django-app

3. ECS クラスターとFargateのセットアップ

  1. AWSマネジメントコンソールにログイン
  2. ECSサービスを開く
  3. 新しいクラスターを作成し、Fargateを選択
  4. タスク定義を作成し、コンテナイメージをECRのものに設定
  5. サービスを作成し、Fargateで実行するよう設定
  6. ロードバランサーを設定し、HTTPS対応

4. RDSとS3の連携

DjangoのデータベースとしてRDSを利用し、静的ファイル・メディア管理にS3を活用します。

settings.py のデータベース設定

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'mydb.abcdefghij.us-east-1.rds.amazonaws.com',
        'PORT': '5432',
    }
}

settings.py のS3設定

AWS_STORAGE_BUCKET_NAME = 'my-django-bucket'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

まとめ

本記事では、DjangoアプリをAWS Fargateを使って運用する手順を解説しました。

  1. DjangoアプリのDockerコンテナ化
  2. AWS Fargateへのデプロイ
  3. RDSとS3を活用したデータ管理

AWS Fargateを活用することで、インフラ管理の手間を削減し、スケーラブルなDjangoアプリの運用が可能になります。