Elastic Bean Stalk で Django

公式チュートリアルの写経です。 docs.aws.amazon.com

EB CLI のインストール

$ pip install awsebcli
$ eb --version

DjangoPython 仮想環境を設定する

# eb-virt という名前の仮想環境を作成します。
$ virtualenv ~/eb-virt

# 仮想環境をアクティブ化します。
$ source ~/eb-virt/bin/activate

# pip を使用して、次のように入力して Django をインストールします。
$ pip install django==1.9.2

# Django がインストールされたことを確認するには、次のように入力します。
$ pip freeze

Django プロジェクトを作成する

# 仮想環境をアクティブ化します。
$ source ~/eb-virt/bin/activate

# django-admin startproject コマンドを使用して、ebdjango という名前の Django の新しいプロジェクトを作成します。
$ django-admin startproject ebdjango

# manage.py runserver で Django サイトをローカルで実行します。
$ cd ebdjango
$ python manage.py runserver

# ウェブブラウザで http://127.0.0.1:8000/ を開いて、サイトを表示します。

# サーバーログをチェックして、リクエストからの出力を確認します。Ctrl+C と入力すると、ウェブサーバーを停止して仮想環境に戻ることができます。

Elastic Beanstalk 用に Django をアプリケーションを設定する

# 仮想環境をアクティブ化します。
$ source ~/eb-virt/bin/activate

# pip freeze を実行して出力を requirements.txt という名前のファイルに保存します。
$ pip freeze > requirements.txt

# .ebextensions という名前のディレクトリを作成します。
$ mkdir .ebextensions

# .ebextensions ディレクトリ内に、次のテキストを持つ django.config という名前の設定ファイルを追加します。
$ vi.ebextensions/django.config
option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango/wsgi.py
# deactivate コマンドを使用して、仮想環境を非アクティブ化します。
$ deactivate

EB CLI でサイトをデプロイする

# eb init コマンドで EB CLI リポジトリを初期化します。
$ eb init -p python3.4 django-tutorial

# (オプション)eb init を再度実行してデフォルトのキーペアを設定し、アプリケーションを実行している EC2 インスタンスに SSH で接続できるようにします。
$ eb init

# 環境を作成し、eb create を使用してそこにアプリケーションをデプロイします。
$ eb create django-env

# 環境作成プロセスが完了したら、eb open でウェブサイトを開きます。
$ eb open

アプリケーションの更新

# settings.py の TIME_ZONE 設定を変更する
$ vi ebdjango/settings.py
TIME_ZONE = 'Asia/Tokyo'
# Elastic Beanstalk 環境にアプリケーションをデプロイします。
$ eb deploy

サイト管理者を作成する

# Django アプリケーションのローカルデータベースを初期化します。
$ source ~/eb-virt/bin/activate
$ python manage.py migrate

# manage.py createsuperuser を実行して、環境を作成します。
$ python manage.py createsuperuser

# 静的ファイルの保存場所を Django に渡すには、settings.py で STATIC_ROOT を定義します。
$ vi ebdjango/settings.py
STATIC_ROOT = 'static'
# manage.py collectstatic を実行して、static ディレクトリに admin サイトの静的アセット(javascript、CSS、画像)を追加します。
$ python manage.py collectstatic

# アプリケーションをデプロイします。
$ eb deploy

# ブラウザでローカルサイトを開き、次のようにサイトの URL に /admin/ を付加することで、管理コンソールが表示されます。
http://xxxxxxxx.elasticbeanstalk.com/admin/

# ステップ 2 で設定したユーザー名とパスワードでログインします。

# データベース移行設定ファイルを追加する
# 次の内容で、db-migrate.config という名前の新しい設定ファイルを作成します。
$ vi .ebextensions/db-migrate.config
container_commands:
  01_migrate:
    command: "django-admin.py migrate"
    leader_only: true
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: ebdjango.settings

この設定ファイルは、アプリケーションが起動する前に、デプロイプロセスの間に django-admin.py migrate コマンドを実行します。アプリケーションが起動する前に実行されるため、DJANGO_SETTINGS_MODULE 環境変数を明示的に設定する必要があります(通常は、スタートアップ中に wsgi.py がこれを行います)。コマンドで leader_only: true を指定することで、複数のインスタンスにデプロイする場合に 1 回だけ実行するようにできます。

# アプリケーションをデプロイします。
$ eb deploy

クリーンアップと次のステップ

$ eb terminate

このコマンドは、環境とその中で実行されているすべての AWS リソースを終了します。これによってアプリケーションが削除されることはありません。したがって eb create を実行することで、いつでも同じ設定でさらに環境を作成することができます。EB CLI コマンドの詳細については、「EB CLI による Elastic Beanstalk 環境の管理」を参照してください。

詳細なチュートリアルを含む Django の詳細については、公式ドキュメントを参照してください。