AWS Lambda + API GatewayでDjangoをサーバーレス運用【Django×AWS入門6】

はじめに

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を有効化できます。

カスタムドメインの設定

  1. API Gatewayの「カスタムドメイン名」を開く
  2. ACMでSSL証明書を取得
  3. Route 53でドメインのCNAMEを設定
  4. 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アプリを運用できます。