メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

Elastic Beanstalk への Django アプリケーションのデプロイ

このチュートリアルでは、デフォルトの Django ウェブサイトを、Python 2.7 を実行している Elastic Beanstalk 環境にデプロイする方法について説明します。チュートリアルでは、デプロイのメカニズムとして EB CLI を使用しますが、AWS マネジメントコンソール を使用してプロジェクトのコンテンツを含む ZIP ファイルをデプロイすることもできます。EB CLI は、Python SDK for AWS(boto)を使用する Python で記述されたインタラクティブなコマンドラインインターフェイスです。

前提条件

Elastic Beanstalk を含め、アマゾン ウェブ サービス(AWS)を使用するには、AWS アカウントと認証情報が必要です。詳細を確認し、サインアップするには、https://aws.amazon.com/ にアクセスしてください。

このチュートリアルを実行するには、以下のパッケージを含む、インストールされている Python の一般的な前提条件をすべて満たす必要があります。

  • Python 2.7

  • pip

  • virtualenv

  • awsebcli

チュートリアルの一部として Django フレームワークをインストールします。

注記

EB CLI を使用して環境を作成するには、サービスロールが必要です。Elastic Beanstalk 管理コンソールで環境を作成することで、サービスロールを作成できます。サービスロールがない場合は、eb create を実行したときに EB CLI によって作成されます。

Django で Python 仮想環境を設定する

virtualenv で仮想環境を作成し、それを使用して Django とその依存関係をインストールします。仮想環境を使用することで、アプリケーションで必要なパッケージを正確に識別し、アプリケーションを実行する EC2 インスタンスにそれらの必要なパッケージをインストールすることができます。

開発環境を設定するには

  1. eb-virt という名前の仮想環境を作成します。

    Linux または OS X のような Unix ベースのシステムでは、次のコマンドを入力します。

    ~$ virtualenv ~/eb-virt

    Windows は、以下のコマンドを入力します。

    C:\> virtualenv %HOMEPATH%\eb-virt
  2. 仮想環境をアクティブ化します。

    Unix ベースのシステムでは、次のコマンドを入力します。

    ~$ source ~/eb-virt/bin/activate
    (eb-virt) ~$

    Windows は、以下のコマンドを入力します。

    C:\>%HOMEPATH%\eb-virt\Scripts\activate
    (eb-virt) C:\>

    コマンドプロンプトの先頭に (eb-virt) と表示され、仮想環境を使用していることが示されます。

    注記

    この手順の残りの部分では、ホームディレクトリ ~$ に Linux のコマンドプロンプトが表示されます。Windows では、C:\Users\USERNAME> であり、USERNAME は Windows ログイン名です。

  3. pip を使用して Django をインストールします。

    (eb-virt)~$ pip install django==1.9.12
  4. Django がインストールされたことを確認するには、次のように入力します。

    (eb-virt)~$ pip freeze
    Django==1.9.12
    ...

    このコマンドは、仮想環境にインストールされるすべてのパッケージを一覧します。後でこのコマンドの出力を使用して、プロジェクトを Elastic Beanstalk で使用するために設定します。

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

仮想環境を使用して、Django プロジェクトを作成してマシンで実行する準備ができました。

Django アプリケーションを作成するには

  1. 仮想環境をアクティブ化します。

    Unix ベースのシステムでは、次のコマンドを入力します。

    ~$ source ~/eb-virt/bin/activate
    (eb-virt) ~$

    Windows は、以下のコマンドを入力します。

    C:\>%HOMEPATH%\eb-virt\Scripts\activate
    (eb-virt) C:\>

    コマンドプロンプトの先頭に (eb-virt) と表示され、仮想環境を使用していることが示されます。

    注記

    この手順の残りの部分では、ホームディレクトリと Linux のホームディレクトリ ~/ に Linux のコマンドプロンプト ~$ が表示されます。Windows では、C:\Users\USERNAME> であり、USERNAME は Windows ログイン名です。

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

    (eb-virt)~$ django-admin startproject ebdjango

    このコマンドは、次のディレクトリ構造を持つ ebdjango という標準の Django サイトを作成します。

    ~/ebdjango
      |-- ebdjango
      |   |-- __init__.py
      |   |-- settings.py
      |   |-- urls.py
      |   `-- wsgi.py
      `-- manage.py
  3. manage.py runserver で Django サイトをローカルで実行します。

    (eb-virt) ~$ cd ebdjango
    (eb-virt) ~/ebdjango$ python manage.py runserver
  4. ウェブブラウザで http://127.0.0.1:8000/ を開いて、サイトを表示します。

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

    Django version 1.9.12, using settings 'ebdjango.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.
    Not Found: /
    [15/Feb/2016 20:14:09] "GET / HTTP/1.1" 200 1767
    Ctrl-C

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

Django を使用してローカルシステムに作成したサイトを、Elastic Beanstalk でのデプロイ用に設定します。

デフォルトでは、Elastic Beanstalk は、アプリケーションを開始するために application.py というファイルを探します。作成した Django プロジェクトにはこのファイルが存在しないため、アプリケーション環境の調整が必要になります。また、アプリケーションのモジュールをロードできるように、環境変数を設定する必要があります。

Elastic Beanstalk 用にサイトを設定するには

  1. 仮想環境をアクティブ化します。

    Linux ベースのシステムでは、次のコマンドを入力します。

    ~/ebdjango$ source ~/eb-virt/bin/activate

    Windows は、以下のコマンドを入力します。

    C:\Users\USERNAME\ebdjango>%HOMEPATH%\eb-virt\Scripts\activate
  2. pip freeze を実行して出力を requirements.txt という名前のファイルに保存します。

    (eb-virt) ~/ebdjango$ pip freeze > requirements.txt

    Elastic Beanstalk は requirements.txt を使用して、アプリケーションを実行する EC2 インスタンスにどのパッケージをインストールするかを判断します。

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

    (eb-virt) ~/ebdjango$ mkdir .ebextensions
  4. .ebextensions ディレクトリ内に、次のテキストを持つ django.config という名前の設定ファイルを追加します。

    例 ~/ebdjango/.ebextensions/django.config

    option_settings:
      aws:elasticbeanstalk:container:python:
        WSGIPath: ebdjango/wsgi.py

    この設定 WSGIPath は、アプリケーションを起動するのに Elastic Beanstalk が使用する WSGI スクリプトの場所を指定します。

  5. deactivate コマンドを使用して、仮想環境を非アクティブ化します。

    (eb-virt) ~/ebdjango$ deactivate

    追加パッケージをアプリケーションに追加するか、またはアプリケーションをローカルで実行する必要があるときは、いつでも仮想環境を再アクティブ化します。

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

Elastic Beanstalk でアプリケーションをデプロイするために必要な条件をすべて追加しました。プロジェクトディレクトリは次のようになります。

~/ebdjango/
|-- .ebextensions
|   `-- django.config
|-- ebdjango
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt

次に、アプリケーション環境を作成し、設定済みのアプリケーションを Elastic Beanstalk を使用してデプロイします。

環境を作成し、Django アプリケーションをデプロイするには

  1. eb init コマンドで EB CLI リポジトリを初期化します。

    ~/ebdjango$ eb init -p python2.7 django-tutorial
    Application django-tutorial has been created.

    このコマンドは、django-tutorial という名前の新しいアプリケーションを作成し、ローカルリポジトリを設定して最新の Python 2.7 プラットフォーム設定で環境を作成します。

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

    ~/ebdjango$ eb init
    Do you want to set up SSH for your instances?
    (y/n): y
    Select a keypair.
    1) my-keypair
    2) [ Create new KeyPair ]

    1 つのキーペアがすでにある場合はそれを選択するか、またはプロンプトに従って新しいキーペアを作成します。プロンプトが表示されないか設定を後で変更する必要がない場合は、eb init -i を実行します。

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

    ~/ebdjango$ eb create django-env

    注記

    「service role required」エラーメッセージが表示された場合は、eb create をインタラクティブに (環境名を指定せずに) 実行してください。EB CLI によってロールが作成されます。

    このコマンドは、django-env という名前のロードバランシング Elastic Beanstalk 環境を作成します。環境の作成には約 5 分かかります。Elastic Beanstalk はアプリケーションを実行するのに必要なリソースを作成し、EB CLI がターミナルに中継する情報メッセージを出力します。

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

    ~/ebdjango$ eb open

    これにより、アプリケーション用に作成されたドメイン名を使用してブラウザウィンドウが開きます。ローカルで作成してテストしたのと同じ Django ウェブサイトが表示されます。

アプリケーションが実行されていることを確認できない場合や、エラーメッセージが表示される場合は、エラーの原因を判断する方法のヒントを得るために「デプロイのトラブルシューティング」を参照してください。

アプリケーションが実行されていることを実際に確認できた場合は、Elastic Beanstalk での最初の Django アプリケーションのデプロイが正常に完了しています。

アプリケーションの更新

Elastic Beanstalk で実行中のアプリケーションまたはその設定を更新して再デプロイすることができます。この場合、インスタンスを更新して新しいアプリケーションバージョンを開始する作業は、Elastic Beanstalk が実行します。

この例では、Django の管理コンソールを有効にして、他のいくつかの項目を設定します。

サイト設定を変更する

デフォルトでは、Django ウェブサイトは UTC タイムゾーンを使用して時間を表示します。settings.py でタイムゾーンを指定して、これを変更することができます。

サイトのタイムゾーンを変更するには

  1. TIME_ZONEsettings.py 設定を変更する

    例 ~/ebdjango/ebdjango/settings.py

    ...
    # Internationalization
    LANGUAGE_CODE = 'en-us'
    TIME_ZONE = 'US/Pacific'
    USE_I18N = True
    USE_L10N = True
    USE_TZ = True

    タイムゾーンのリストについては、このページを参照してください。

  2. Elastic Beanstalk 環境にアプリケーションをデプロイします。

    ~/ebdjango/$ eb deploy

サイト管理者を作成する

Django アプリケーション用のサイト管理者を作成すると、ウェブサイトから管理コンソールに直接アクセスできます。管理者のログインの詳細は、Django が生成したデフォルトプロジェクトに含まれるローカルデータベースイメージに安全に保存されます。

サイト管理者を作成するには

  1. Django アプリケーションのローカルデータベースを初期化します。

    ~/ebdjango$ python manage.py migrate
    Operations to perform:
      Apply all migrations: admin, contenttypes, auth, sessions
    Running migrations:
      Rendering model states... DONE
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying sessions.0001_initial... OK
    
  2. manage.py createsuperuser を実行して、環境を作成します。

    ~/ebdjango$ python manage.py createsuperuser
    Username: admin
    Email address: me@mydomain.com
    Password: ********
    Password (again): ********
    Superuser created successfully.
  3. 静的ファイルの保存場所を Django に渡すには、STATIC_ROOTsettings.py を定義します。

    例 ~/ebdjango/ebdjango/settings.py

    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/1.9/howto/static-files/
    STATIC_URL = '/static/'
    STATIC_ROOT = 'static'
  4. manage.py collectstatic を実行して、static ディレクトリに admin サイトの静的アセット(javascript、CSS、画像)を追加します。

    ~/ebdjango$ python manage.py collectstatic
    You have requested to collect static files at the destination
    location as specified in your settings:
    
        ~/ebdjango/static
    
    This will overwrite existing files!
    Are you sure you want to do this?
    
    Type 'yes' to continue, or 'no' to cancel: yes
    Copying 'admin/static/adm/css/rtl.css'
    Copying 'admin/static/adm/css/changelists.css'
    Copying 'admin/static/adm/css/fonts.css'
    ...
  5. アプリケーションをデプロイします。

    ~/ebdjango$ eb deploy
  6. ブラウザでローカルサイトを開き、次のようにサイトの URL に /admin/ を付加することで、管理コンソールが表示されます。

    http://djang-env.p33kq46sfh.us-west-2.elasticbeanstalk.com/admin/
  7. ステップ 2 で設定したユーザー名とパスワードでログインします。

ローカルでの更新/テストと同様の手順を使用し、続けて eb deploy を実行することができます。実稼働サーバーの更新は Elastic Beanstalk が処理するため、ユーザーはサーバー管理ではなくアプリケーション開発に集中できます。

データベース移行設定ファイルを追加する

サイトが更新されたときに実行される .ebextensions スクリプトに、コマンドを追加することができます。これにより、データベースマイグレーションを自動的に生成できます。

アプリケーションがデプロイされたときに移行ステップを追加するには

  1. 次の内容で、 という名前の新しい設定ファイルdb-migrate.configを作成します。

    例 ~/ebdjango/.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 回だけ実行するようにできます。

  2. アプリケーションをデプロイします。

    ~/ebdjango$ eb deploy

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

インスタンス時間と開発セッション間の他の AWS リソースを保存するには、eb terminate を使用して Elastic Beanstalk 環境を終了します。

~/ebdjango$ eb terminate django-env

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

サンプルアプリケーションで実行した場合は、プロジェクトフォルダーと仮想環境を削除することもできます。

~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango

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

別の Python ウェブフレームワークを試す場合は、「AWS Elastic Beanstalk への Flask アプリケーションのデプロイ」をチェックアウトしてください。