はじめに
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インスタンスの作成
- AWSマネジメントコンソールで「RDS」サービスを開く
- 新しいデータベースの作成
- PostgreSQL または MySQL を選択
- インスタンス名、ユーザー名、パスワードを設定
- セキュリティグループを適切に設定
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アプリをデプロイする手順を解説しました。
- AWS CLIとEB CLIのインストール
- Djangoプロジェクトの準備
- Elastic Beanstalk環境の作成とデプロイ
- Amazon RDSの設定とデータベース接続
- 静的ファイルの管理
Elastic Beanstalkを利用すると、インフラの管理を自動化しつつ、簡単にDjangoアプリをスケールできるメリットがあります。