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

AWS Elastic Beanstalk Python プラットフォームを使用する

AWS Elastic Beanstalk Python プラットフォームは WSGI の Apache プロキシサーバーの背後で実行される Python ウェブアプリケーションの一連の 環境設定です。 各設定は Python 2.6、Python 2.7、および Python 3.4 を含む Python のバージョンに対応しています。

Elastic Beanstalk には、Elastic Beanstalk 環境内の EC2 インスタンスで実行されるソフトウェアのカスタマイズに使用できる設定オプションが用意されています。アプリケーションに必要な環境変数を設定し、Amazon S3 に対してログのローテーションを有効にしたら、アプリケーションのソースで静的ファイルが含まれるフォルダーを、プロキシサーバーによって提供されるパスにマッピングできます。

プラットフォームに固有の設定オプションは AWS マネジメントコンソール で実行中の環境の設定を変更するために利用できます。環境を終了したときにその設定が失われないようにするため、保存済み設定を使用して設定を保存し、それを後で他の環境に適用することができます。

ソースコードの設定を保存する場合、設定ファイルを含めることができます。設定ファイルの設定は、環境を作成するたびに、またはアプリケーションをデプロイするたびに適用されます。設定ファイルを使用して、デプロイの間にパッケージをインストールしたり、スクリプトを実行したり、他のインスタンスのカスタマイズオペレーションを実行することもできます。

pip から入手可能な Python パッケージの場合、アプリケーションのソースコードのルートに、 という名前の要件ファイルrequirements.txtを含めることもできます。Elastic Beanstalk は、デプロイ時に要件ファイルで指定されたパッケージをすべてインストールします。

AWS マネジメントコンソール で適用される設定は、設定ファイルに同じ設定があれば、それらの設定を上書きします。これにより、設定ファイルでデフォルト設定を定義し、コンソールでそのデフォルト設定を環境に固有の設定で上書きできます。設定の優先順位の詳細と設定の他の変更方法については、「設定オプション」を参照してください。

AWS マネジメントコンソール での Python 環境の設定

AWS マネジメントコンソール を使用して、Amazon S3 に対してログのローテーションを有効にしたら、アプリケーションが環境から読み取ることのできる変数を設定し、アプリケーションのソースで静的ファイルが含まれるフォルダーを、プロキシサーバーによって提供されるパスにマッピングできます。

お客様の環境のソフトウェア構成設定にアクセスするには

  1. Elastic Beanstalk コンソールを開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [Software Configuration] セクションで、  を編集します。 を選択します。

ログオプション

[Log Options] セクションには、2 つの設定があります。

  • Instance profile – アプリケーションに関連付けられた Amazon S3 バケットへのアクセス許可が付与されているインスタンスプロファイルを指定します。

  • Enable log file rotation to Amazon S3 – アプリケーションの Amazon EC2 インスタンスのログファイルを、アプリケーションに関連付けられている Amazon S3 バケットにコピーするかどうかを指定します。

静的ファイル

[Static Files] セクションでは、Python アプリケーションをヒットすることなく、ユーザーに直接、静的なアセットを提供するように、プロキシサーバーを設定できます。

デフォルトでは、プロキシサーバーは /static パスにある static という名前のフォルダにあるすべてのファイルを提供します。たとえば、アプリケーションソースの static という名前のフォルダに logo.png というファイルが含まれている場合、プロキシサーバーは subdomain.elasticbeanstalk.com/static/logo.png でそれをユーザーに提供します。

エントリを追加して [Apply] を選択することで、追加のマッピングを設定できます。各エントリには、アプリケーションのパスをソースコードのディレクトリにマッピングするキーと値を指定します。

環境プロパティ

環境プロパティを使用して、アプリケーションに情報を渡し、環境変数を設定できます。たとえば、CONNECTION_STRING という名前の環境プロパティを作成し、そのプロパティで、データベースへの接続にアプリケーションが使用する接続文字列を指定できます。

Elastic Beanstalk 内で実行している Python 環境の内部では、Python の os.environ ディクショナリを使用してこれらの値にアクセスできます。詳細については、http://docs.python.org/library/os.html を参照してください。

以下のようなコードを使用して、キーとパラメータにアクセスできます。

import os
connectionstring = os.environ['CONNECTION_STRING']

環境プロパティを使用して、フレームワークに情報を渡すこともできます。たとえば、DJANGO_SETTINGS_MODULE という名前のプロパティを作成して、そのプロパティで、特定の設定モジュールを使用するように Django を設定できます。環境によって、値は、development.settingsproduction.settings などになります。

設定ファイル

設定ファイル を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクを実行できます。

以下の設定ファイルの例で指定しているのは、DJANGO_SETTINGS_MODULE という名前の環境プロパティを作成する設定オプション、staticimages という名前のディレクトリを /images パスにマッピングする静的ファイルオプション、aws:elasticbeanstalk:container:python 名前空間にある追加の設定です。この名前空間には、ソースコードで WSGI スクリプトの場所を指定できるオプションと、WSGI で実行するスレッドとプロセスの数を指定できるオプションが含まれています。

option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: production.settings
  aws:elasticbeanstalk:container:python:staticfiles:
    "/images/": "staticimages/"
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango/wsgi.py
    NumProcesses: 3
    NumThreads: 20

設定ファイルでは、お客様の環境のインスタンスでソフトウェアをさらに変更するためのキーもいくつかサポートされています。この例では、packages キーを使用して、Memcached をインストールし、yum および container コマンドを使用して、デプロイ時にサーバーを設定するコマンドを実行します。

packages:
  yum:
    libmemcached-devel: '0.31'

container_commands:
  collectstatic:
    command: "django-admin.py collectstatic --noinput"
  01syncdb:
    command: "django-admin.py syncdb --noinput"
    leader_only: true
  02migrate:
    command: "django-admin.py migrate"
    leader_only: true
  03wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
  99customize:
    command: "scripts/customize.sh"

要件ファイル

requirements.txt ファイルを作成し、ソースバンドルの最上位ディレクトリに保存します。通常の Python アプリケーションには、他のサードパーティ製 Python パッケージに対する依存関係があります。Python では、pip がパッケージをインストールする標準的な方法です。pip の機能を使用すると、すべての必要なパッケージ(およびバージョン)を 1 つの要件ファイルで指定できます。要件ファイルの詳細については、「要件ファイルの形式」を参照してください。Django 用の requirements.txt ファイルの例を次に示します。

Django==1.9.2
MySQL-python==1.2.3

開発環境で、pip freeze コマンドを使用して要件ファイルを生成できます。

~/my-app$ pip freeze > requirements.txt

要件ファイルに、実際にアプリケーションによって使用されるパッケージのみが含まれるようにするには、それらのパッケージのみがインストールされている仮想環境を使用します。仮想環境の外では、pip freeze の出力に、オペレーティングシステムに付属のパッケージを含め、開発マシンにインストール済みのすべての pip パッケージが含まれます。