はじめに
DjangoアプリケーションをAWS LambdaとAPI Gatewayを利用してサーバーレス環境で運用することで、従来のEC2やElastic Beanstalkを使用した構成と比べて、コストの削減やスケーラビリティの向上が可能になります。本記事では、DjangoアプリをAWS Lambda + API Gatewayを使ってデプロイし、サーバーレス環境で運用する方法を詳しく解説します。
サーバーレス運用のメリット
1. サーバー管理不要
EC2やコンテナのようにインスタンスを管理する必要がなく、インフラ管理の手間を削減できます。
2. コスト削減
使用したリクエスト数に応じた従量課金制のため、低トラフィックなアプリに最適です。
3. 自動スケール
リクエスト数に応じて自動でスケールし、負荷に対応可能です。
AWS Lambda + API Gateway で Django をデプロイする手順
1. 必要なツールのインストール
AWS Lambdaにデプロイするためのツールをセットアップします。
pip install zappa
2. Djangoプロジェクトの作成・準備
Djangoの新規プロジェクトを作成するか、既存のプロジェクトを使用します。
django-admin startproject myproject
cd myproject
必要なライブラリをインストールします。
pip install django djangorestframework
3. settings.py の変更
DjangoをLambda上で実行するために、適切な設定を行います。
ALLOWED_HOSTS の設定
ALLOWED_HOSTS = ['*']
STATIC ファイルの管理
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
4. Zappa のセットアップ
Zappaを使用してDjangoをAWS Lambdaにデプロイします。
Zappaの初期化
zappa init
対話形式で以下の設定を行います。
- S3バケット名の指定
- Lambda関数名の指定
- AWSリージョンの選択
- API Gatewayの設定
5. ZappaでDjangoをデプロイ
zappa deploy
6. API Gatewayの設定
デプロイ後、API Gatewayのエンドポイントが提供されます。これを利用してDjangoアプリへアクセス可能です。
zappa status
7. Djangoのマイグレーション適用
zappa manage dev migrate
API Gatewayのカスタマイズ
API Gatewayを利用してカスタムドメインを設定し、HTTPSを有効化できます。
カスタムドメインの設定
- API Gatewayの「カスタムドメイン名」を開く
- ACMでSSL証明書を取得
- Route 53でドメインのCNAMEを設定
- API Gatewayと統合し、エンドポイントを設定
CORSの設定
フロントエンドからのリクエストを許可するため、CORSを有効化します。
{
"allowedOrigins": ["*"]
}
S3を利用した静的ファイル管理
Lambda環境ではローカルストレージが使えないため、静的ファイルをS3に配置する必要があります。
S3の設定
pip install boto3 django-storages
settings.py
の変更:
AWS_STORAGE_BUCKET_NAME = 'my-django-static-files'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
静的ファイルのアップロード
python manage.py collectstatic
まとめ
本記事では、DjangoアプリをAWS Lambda + API Gatewayを利用してサーバーレス環境で運用する手順を解説しました。
- AWS Lambdaを使用してDjangoをデプロイ
- API Gatewayを利用してエンドポイントを公開
- S3を利用して静的ファイルを管理
サーバーレスアーキテクチャを活用することで、スケーラブルで低コストなDjangoアプリを運用できます。