

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Elastic Beanstalk Python プラットフォームを使用する
<a name="create-deploy-python-container"></a>

このトピックでは、Elastic Beanstalk で Python アプリケーションを設定、ビルド、実行する方法について説明します。

AWS Elastic Beanstalk は、Python プログラミング言語のさまざまなバージョンで多数のプラットフォームブランチをサポートしています。完全なリストについては、「AWS Elastic Beanstalk プラットフォーム」ドキュメントの「[Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)」を参照してください。

Python ウェブアプリケーションは、WSGI を使用してプロキシサーバーの背後で実行できます。Elastic Beanstalk には、デフォルトの WSGI サーバーとして [Gunicorn](https://gunicorn.org/) が用意されています。

ソ出典バンドルに `Procfile` を追加して、アプリケーションの WSGI サーバーを指定および設定することができます。詳細については、「[Elastic Beanstalk での Procfile を使用した WSGI サーバーの設定](python-configuration-procfile.md)」を参照してください

Pipenv によって作成された `Pipfile` ファイルと `Pipfile.lock` ファイルを使用して、Python パッケージの依存関係やその他の要件を指定できます。依存関係の指定の詳細については、「[Elastic Beanstalk での要件ファイルを使用した依存関係の指定](python-configuration-requirements.md)」を参照してください。

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

設定オプションは[実行中の環境の設定を変更するために](environment-configuration-methods-after.md) Elastic Beanstalk コンソールで利用できます。環境を終了したときにその設定が失われないようにするため、[保存済み設定](environment-configuration-savedconfig.md)を使用して設定を保存し、それを後で他の環境に適用することができます。

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

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

`pip` から入手可能な Python パッケージの場合、アプリケーションの出典コードのルートに要件ファイルを含めることができます。Elastic Beanstalk は、デプロイ時に要件ファイルで指定された依存関係パッケージをすべてインストールします。詳細については、「[Elastic Beanstalk での要件ファイルを使用した依存関係の指定](python-configuration-requirements.md)」を参照してください

Elastic Beanstalk Linux ベースのプラットフォームを拡張するさまざまな方法の詳細については、「[Elastic Beanstalk Linux プラットフォームの拡張](platforms-linux-extend.md)」を参照してください。

## Python 環境の設定
<a name="create-deploy-python-container-console"></a>

Python プラットフォーム設定では、Amazon EC2 インスタンスの動作を微調整できます。Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境の Amazon EC2 インスタンス設定を編集できます。

Elastic Beanstalk コンソールを使用して、Python プロセス設定の構成、Amazon S3 への AWS X-Rayログローテーションの有効化、およびアプリケーションが環境から読み取ることができる変数の設定を行います。

**Elastic Beanstalk コンソールで Python 環境を設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

### Python 設定
<a name="python-console-settings"></a>
+ [**プロキシサーバー**] – 環境インスタンスで使用するプロキシサーバーです。デフォルトでは、nginx が使用されます。
+ [**WSGI パス**] – メインアプリケーション・ファイルの名前またはパス。たとえば、`application.py`、`django/wsgi.py` などです。
+ [**NumProcesses**] – 各アプリケーションインスタンスで実行するプロセスの数。
+ [**NumThreads**] – 各プロセスで実行するスレッドの数。

### AWS X-Ray 設定
<a name="python-console-xray"></a>
+ **X-Ray デーモン** – AWS X-Ray デーモンを実行して、 からのトレースデータを処理します[AWS X-Ray SDK for Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)。

### ログオプション
<a name="create-deploy-python-container.console.logoptions"></a>

[ログ Options] セクションには、2 つの設定があります。
+ [**Instance profile**] – アプリケーションに関連付けられた Amazon S3 バケットへのアクセス許可が付与されているインスタンスプロファイルを指定します。
+ **[Enable log file rotation to Amazon S3]** (Amazon S3 へのログファイルのローテーションの有効化) - アプリケーションの Amazon EC2 インスタンスのログファイルを、アプリケーションに関連付けられている Amazon S3 バケットにコピーするかどうかを指定します。

### 静的ファイル
<a name="python-platform-staticfiles"></a>

パフォーマンスを向上させるために、**[Static files]** (静的ファイル) セクションを使用して、ウェブアプリケーション内のディレクトリセットから静的ファイル (HTML、イメージなど) を配信するようにプロキシサーバーを設定することができます。ディレクトリごとに、仮想パスをディレクトリマッピングに設定します。プロキシサーバーは、指定されたパスのファイルに対するリクエストを受け取ると、アプリケーションにリクエストをルーティングする代わりにファイルを直接　　処理します。

設定ファイルまたは、Elastic Beanstalk コンソールを使用した静的ファイルの設定の詳細については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

デフォルトでは、Python 環境のプロキシサーバーは `static` パスにある `/static` という名前のフォルダにあるすべてのファイルを提供します。たとえば、アプリケーション出典の `logo.png` という名前のフォルダに `static` というファイルが含まれている場合、プロキシサーバーは `subdomain.elasticbeanstalk.com/static/logo.png` でそれをユーザーに提供します。このセクションで説明しているように、追加のマッピングを設定できます。

### 環境プロパティ
<a name="create-deploy-python-custom-container-envprop"></a>

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

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

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

```
import os
endpoint = os.environ['API_ENDPOINT']
```

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

詳細については「[環境変数とその他のソフトウェアの設定](environments-cfg-softwaresettings.md)」を参照してください。

## Python 設定の名前空間
<a name="python-namespaces"></a>

[設定ファイル](ebextensions.md)を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクをパフォーマンスできます。設定オプションは、[プラットフォーム固有](command-options-specific.md)のものでも、Elastic Beanstalk サービス全体の[すべてのプラットフォーム](command-options-general.md)に適用できるものでもかまいません。設定オプションは、名前空間として整理されています。

Python プラットフォームでは、名前空間 (`aws:elasticbeanstalk:environment:proxy`、`aws:elasticbeanstalk:environment:proxy:staticfiles`、`aws:elasticbeanstalk:container:python`) のオプションを定義します。

以下の設定ファイルの例では、`DJANGO_SETTINGS_MODULE` という名前の環境プロパティを作成する設定オプションを指定し、Apache プロキシサーバーを選択して、`statichtml` という名前のディレクトリを `/html` パスにマッピングし `staticimages` という名前のディレクトリを `/images` パスにマッピングする 2 つの静的ファイルオプションを指定して、`[aws:elasticbeanstalk:container:python](command-options-specific.md#command-options-python)` 名前空間に追加の設定を指定しています。この名前空間には、出典コードで WSGI スクリプトの場所を指定できるオプションと、WSGI で実行するスレッドとプロセスの数を指定できるオプションが含まれています。

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: production.settings
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /html: statichtml
    /images: staticimages
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi:application
    NumProcesses: 3
    NumThreads: 20
```

**注意事項**  
Amazon Linux AMI Python プラットフォームバージョン (Amazon Linux 2 より前の) を使用している場合は、`WSGIPath` の値を `ebdjango/wsgi.py` に置き換えます。この例の値は、Amazon Linux AMI プラットフォームバージョンでは support されていない Gunicorn WSGI サーバーで動作します。
さらに、これらの古いプラットフォームバージョンでは、静的ファイル―`aws:elasticbeanstalk:container:python:staticfiles`の設定に異なる名前空間が使用されます 。これは、スタンダードの静的ファイル名前空間と同じオプション名とセマンティクスを持っています。

設定ファイルでは、[お客様の環境のインスタンスでソフトウェアをさらに変更する](customize-containers-ec2.md)ためのキーもいくつか support されています。この例では、[packages](customize-containers-ec2.md#linux-packages) キーを使用して、Memcached をインストールし、`yum` および [コンテナ コマンド](customize-containers-ec2.md#linux-container-commands)を使用して、デプロイ時に run command にサーバーを設定します。

```
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"
```

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については「[設定オプション](command-options.md)」を参照してください。

## `python3` 実行可能ファイル
<a name="python3-executable"></a>

Elastic Beanstalk Python 環境の EC2 インスタンスで利用可能な `python3` 実行可能ファイルのバージョンは、プラットフォームで使用される同じ Python バージョンに必ずしも対応するとは限りません。例えば、Python 3.12 AL2023 プラットフォームでは、`/usr/bin/python3` は Python 3.9 を指します。これは、Python 3.9 が AL2023 の*システム Python* であるからです。詳細については、「*Amazon Linux 2023 ユーザーガイド*」の「[Python in AL2023](https://docs.aws.amazon.com/linux/al2023/ug/python.html)」を参照してください。プラットフォームで使用される Python バージョンに対応する実行可能ファイルには、バージョン管理された場所 (例: `/usr/bin/python3.12`) またはアプリケーション仮想環境 `bin` ディレクトリ (例: `/var/app/venv/staging-LQM1lest/bin/python3`) からアクセスできます。プラットフォームは、プラットフォームブランチに対応する正しい Python 実行可能ファイルを使用します。

# Elastic Beanstalk での Procfile を使用した WSGI サーバーの設定
<a name="python-configuration-procfile"></a>

ソースバンドルに [`Procfile`](platforms-linux-extend.build-proc.md#platforms-linux-extend.proc) を追加して、アプリケーションの WSGI サーバーを指定および設定することができます。`Procfile` でカスタムのスタートコマンドと実行コマンドを指定できます。

`Procfile` を使用すると、設定ファイルを使用して設定した `aws:elasticbeanstalk:container:python` 名前空間オプションが上書きされます。

次の例では、`Procfile` を使用して uWSGI をサーバーとして指定し、これを設定します。

**Example [Procfile]**  

```
web: uwsgi --http :8000 --wsgi-file application.py --master --processes 4 --threads 2
```

次の例では、`Procfile` を使用して、デフォルトの WSGI サーバーである Gunicorn を設定します。

**Example [Procfile]**  

```
web: gunicorn --bind :8000 --workers 3 --threads 2 project.wsgi:application
```

**注意事項**  
Gunicorn 以外の WSGI サーバーを設定する場合は、アプリケーションの依存関係として指定して、環境インスタンスにインストールされるようにしてください。依存関係の指定の詳細については、「[Elastic Beanstalk での要件ファイルを使用した依存関係の指定](python-configuration-requirements.md)」を参照してください。
WSGI サーバーのデフォルトポートは 8000 です。`Procfile` コマンドで別のポート番号を指定する場合は、`PORT` [環境プロパティ](environments-cfg-softwaresettings.md) もこのポート番号に設定します。

# Elastic Beanstalk での要件ファイルを使用した依存関係の指定
<a name="python-configuration-requirements"></a>

このトピックでは、アプリケーションを設定して、必要な他の Python パッケージをインストールする方法について説明します。通常の Python アプリケーションには、他のサードパーティー製 Python パッケージに対する依存関係があります。Elastic Beanstalk Python プラットフォームでは、アプリケーションが依存する Python パッケージを指定する方法が複数あります。

## `pip` および `requirements.txt` を使用します。
<a name="python-configuration-requirements.txt"></a>

Python パッケージをインストールするためのスタンダードツールは `pip` です。これには、すべての必要なパッケージ (およびバージョン) を 1 つの要件ファイルで指定する特徴があります。要件ファイルの詳細については、pip ドキュメントウェブサイトの「[要件ファイル形式](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format)」を参照してください。

`requirements.txt` という名前のファイルを作成し、出典バンドルの最上位ディレクトリに置きます。次は、Django の `requirements.txt` ファイルの例です。

```
Django==2.2
mysqlclient==2.0.3
```

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

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

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

**注記**  
Amazon Linux AMI Python プラットフォームバージョンでは、Elastic Beanstalk は Pipenv または Pipfiles をネイティブにサポートしていません。Pipenv を使用してアプリケーションの依存関係を管理する場合は、次のコマンドを実行して `requirements.txt` ファイルを生成します。  

```
~/my-app$ pipenv lock -r > requirements.txt
```
詳細については、Pipenv ドキュメントの [Generating a requirements.txt](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt) を参照してください。

## Pipenv と `Pipfile` を使用します
<a name="python-configuration-requirements.pipenv"></a>

Pipenv は、最新の Python パッケージングツールです。これは、パッケージのインストールと依存関係ファイルの作成と管理およびアプリケーションの virtualenv を組み合わせたものです。詳細については、「[Pipenv: 人間のための Python 開発ワークフロー](https://pipenv.readthedocs.io/en/latest/)」を参照してください。

Pipenv は 2 つのファイルを維持します。
+ `Pipfile` – このファイルには、さまざまな種類の依存関係と要件が含まれています。
+ `Pipfile.lock` – このファイルには、確定的なビルドを可能にするバージョンスナップショットが含まれています。

これらのファイルを開発環境で作成し、Elastic Beanstalk にデプロイするソースバンドルの最上位ディレクトリに含めることができます。これらの 2 つのファイルの詳細については、「[Pipfile と Pipfile.lock の例](https://pipenv.pypa.io/en/latest/basics/#)」を参照してください。



次の例では、Django と Django REST フレームワークをインストールするために Pipenv を使用しています。これらのコマンドは、ファイル `Pipfile` と `Pipfile.lock` を作成します。

```
~/my-app$ pipenv install django
~/my-app$ pipenv install djangorestframework
```

 

## 優先順位
<a name="python-configuration-requirements.precedence"></a>

このトピックで説明する要件ファイルを複数含めると、Elastic Beanstalk はそのうちの 1 つだけを使用します。次の表に、優先順位を降順で示します。

1. `requirements.txt`

1. `Pipfile.lock`

1. `Pipfile`

**注記**  
2023 年 3 月 7 日の Amazon Linux 2 プラットフォームリリース以降、これらのファイルを複数指定すると、Elastic Beanstalk はデプロイ中にどの依存関係ファイルが使用されたかを示すコンソールメッセージを発行します。

次のステップは、インスタンスのデプロイ時に Elastic Beanstalk が依存関係をインストールするために従うロジックです。
+ `requirements.txt` ファイルがある場合は、コマンド `pip install -r requirements.txt` を使用します。
+ 2023 年 3 月 7 日の Amazon Linux 2 プラットフォームリリース以降、`requirements.txt` ファイルはなくても `Pipfile.lock` がある場合は、コマンド `pipenv sync` を使用します。そのリリース前は、`pipenv install --ignore-pipfile` を使用していました。
+ `requirements.txt` ファイルと `Pipfile.lock` のいずれも存在しないが、`Pipfile` が存在する場合は、コマンド `pipenv install --skip-lock` を使用します。
+ 3 つの要件ファイルが見つからない場合は、アプリケーションの依存関係はインストールされません。