はじめに
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のセットアップ
- AWSマネジメントコンソールにログイン
- ECSサービスを開く
- 新しいクラスターを作成し、Fargateを選択
- タスク定義を作成し、コンテナイメージをECRのものに設定
- サービスを作成し、Fargateで実行するよう設定
- ロードバランサーを設定し、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を使って運用する手順を解説しました。
- DjangoアプリのDockerコンテナ化
- AWS Fargateへのデプロイ
- RDSとS3を活用したデータ管理
AWS Fargateを活用することで、インフラ管理の手間を削減し、スケーラブルなDjangoアプリの運用が可能になります。