AWS Elastic Beanstalkを活用したDjangoデプロイ【Django×AWS入門5】

はじめに

AWS Elastic Beanstalk(EB)は、AWSが提供するPaaS(Platform as a Service)で、インフラの設定を自動化しながら簡単にアプリケーションをデプロイできます。DjangoアプリケーションをElastic Beanstalk上でデプロイすることで、スケーラビリティの高い運用が可能になります。

本記事では、AWS Elastic Beanstalkを活用してDjangoアプリをデプロイする方法を初心者向けに詳しく解説します。

AWS Elastic Beanstalkとは?

Elastic Beanstalkの特徴

  • インフラの自動管理:EC2、RDS、ロードバランサーなどのAWSリソースを自動的に設定
  • 簡単なデプロイ:コードをアップロードするだけでデプロイ可能
  • スケーラビリティ:トラフィックの増加に応じて自動スケール
  • 監視・ログ管理機能:AWS CloudWatchと連携して監視可能

DjangoとElastic Beanstalkの相性

  • Python/Djangoに対応しており、環境構築が簡単
  • WSGIを使用し、Gunicornなどのアプリケーションサーバーと連携可能
  • Amazon RDSやS3との統合が容易

環境の準備

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

Elastic Beanstalkを利用するために、AWS CLIとEB CLIをインストールします。

AWS CLIのインストール

pip install awscli
aws configure

EB CLIのインストール

pip install awsebcli

2. AWS IAMユーザーの設定

Elastic Beanstalkを利用するためのIAMユーザーを作成し、AdministratorAccess-AWSElasticBeanstalkポリシーを付与します。

Djangoプロジェクトの準備

1. Djangoプロジェクトの作成

django-admin startproject myproject
cd myproject

2. 必要なパッケージのインストール

pip install gunicorn boto3 psycopg2-binary awsebcli

3. requirements.txt の作成

pip freeze > requirements.txt

4. settings.py の変更

Elastic Beanstalkで動作するようにDjangoの設定を変更します。

ALLOWED_HOSTS の設定

ALLOWED_HOSTS = ['.elasticbeanstalk.com', 'localhost']

静的ファイルの設定

import os
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

5. WSGIの設定

Elastic BeanstalkはWSGIアプリケーションを実行するため、wsgi.pyを使用します。

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()

Elastic Beanstalk環境の作成

1. Elastic Beanstalkの初期化

eb init -p python-3.8 myproject

ここで、AWSリージョンやアプリケーション名を選択します。

2. 環境の作成

eb create myproject-env

このコマンドを実行すると、AWSが自動的にEC2インスタンス、ロードバランサー、セキュリティグループなどを作成し、Djangoアプリをデプロイします。

3. デプロイの実行

コードを更新した後、以下のコマンドでデプロイできます。

eb deploy

Amazon RDSの設定(データベース接続)

1. RDSインスタンスの作成

  1. AWSマネジメントコンソールで「RDS」サービスを開く
  2. 新しいデータベースの作成
  3. PostgreSQL または MySQL を選択
  4. インスタンス名、ユーザー名、パスワードを設定
  5. セキュリティグループを適切に設定

2. Djangoのデータベース設定変更

RDSのエンドポイントをDjangoの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',
    }
}

3. マイグレーションの実行

python manage.py migrate

静的ファイルの管理

Elastic Beanstalkでは、静的ファイルをS3に保存すると効率的です。

1. boto3 と django-storages のインストール

pip install boto3 django-storages

2. settings.py の変更

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

3. collectstatic の実行

python manage.py collectstatic

まとめ

本記事では、AWS Elastic Beanstalkを活用してDjangoアプリをデプロイする手順を解説しました。

  1. AWS CLIとEB CLIのインストール
  2. Djangoプロジェクトの準備
  3. Elastic Beanstalk環境の作成とデプロイ
  4. Amazon RDSの設定とデータベース接続
  5. 静的ファイルの管理

Elastic Beanstalkを利用すると、インフラの管理を自動化しつつ、簡単にDjangoアプリをスケールできるメリットがあります。