Python プラットフォームを使用する - AWS App Runner

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

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

AWS App Runner Python プラットフォームはマネージドランタイムを提供します。各ランタイムにより、Python バージョンに基づいてウェブアプリケーションを使用してコンテナを簡単に構築および実行できます。Python ランタイムを使用すると、App Runner はマネージド Python ランタイムイメージから開始します。このイメージは Amazon Linux Docker イメージに基づいており、Python のバージョン用のランタイムパッケージと、いくつかのツールと一般的な依存関係パッケージが含まれています。App Runner は、このマネージドランタイムイメージをベースイメージとして使用し、アプリケーションコードを追加して Docker イメージを構築します。次に、このイメージをデプロイして、コンテナでウェブサービスを実行します。

App Runner コンソールまたは CreateService API オペレーションを使用してサービスを作成するときに、App Runner サービスのランタイムを指定します。ソースコードの一部としてランタイムを指定することもできます。コードリポジトリに含める App Runner 設定ファイルruntimeキーワードを使用します。マネージドランタイムの命名規則は <language-name><major-version> です。

有効な Python ランタイム名とバージョンについては、「」を参照してくださいPython ランタイムリリース情報

App Runner は、デプロイまたはサービスの更新のたびに、サービスのランタイムを最新バージョンに更新します。アプリケーションで特定のバージョンのマネージドランタイムが必要な場合は、App Runner 設定ファイル runtime-versionキーワードを使用して指定できます。メジャーバージョンやマイナーバージョンなど、任意のレベルのバージョンにロックできます。App Runner は、サービスのランタイムに対して、下位レベルの更新のみを行います。

Python ランタイムのバージョン構文: major[.minor[.patch]]

例:3.8.5

次の例は、バージョンロックを示しています。

  • 3.8 – メジャーバージョンとマイナーバージョンをロックします。App Runner はパッチバージョンのみを更新します。

  • 3.8.5 – 特定のパッチバージョンにロックします。App Runner はランタイムバージョンを更新しません。

Python ランタイム設定

マネージドランタイムを選択する場合は、少なくとも コマンドを構築して実行するように設定する必要があります。App Runner サービスを作成または更新するときに設定します。これは、次のいずれかの方法を使用して実行できます。

  • App Runner コンソールの使用 – 作成プロセスまたは設定タブのビルドの設定セクションでコマンドを指定します。

  • App Runner API の使用CreateServiceまたは UpdateService API オペレーションを呼び出します。CodeConfigurationValues データ型の BuildCommandおよび StartCommandメンバーを使用してコマンドを指定します。

  • 設定ファイルの使用 – 最大 3 つのビルドフェーズで 1 つ以上のビルドコマンドと、アプリケーションを起動する 1 つの実行コマンドを指定します。追加のオプション設定があります。

設定ファイルの提供はオプションです。コンソールまたは API を使用して App Runner サービスを作成する場合、App Runner が作成時に設定を直接取得するか、設定ファイルから取得するかを指定します。

特定のランタイムバージョンのコールアウト

注記

App Runner は、Python 3.11 および Node.js 18 のランタイムバージョンに基づいて、アプリケーションの更新されたビルドプロセスを実行するようになりました。アプリケーションがこれらのランタイムバージョンのいずれかで実行されている場合は、マネージドランタイムバージョンと App Runner ビルド「」を参照して、改訂されたビルドプロセスの詳細を確認してください。他のすべてのランタイムバージョンを使用するアプリケーションは影響を受けず、元のビルドプロセスを引き続き使用します。

Python 3.11 (App Runner ビルドの改訂)

マネージド Python 3.11 ランタイムには、apprunner.yaml で次の設定を使用します。

  • トップセクションのruntimeキーを に設定します。 python311

    runtime: python311
  • 依存関係をインストールするにはpippip3の代わりに を使用します。

  • の代わりにpython3インタープリタを使用しますpython

  • pip3 インストーラをpre-runコマンドとして実行します。Python は/app、 ディレクトリの外部に依存関係をインストールします。App Runner は Python 3.11 用に改訂された App Runner ビルドを実行するため、apprunner.yamlファイルのビルドセクションのコマンドを介して/appディレクトリの外部にインストールされたすべてのものが失われます。詳細については、「改訂された App Runner ビルド」を参照してください。

    run: runtime-version: 3.11 pre-run: - pip3 install pipenv - pipenv install - python3 copy-global-files.py command: pipenv run gunicorn django_apprunner.wsgi --log-file -

詳細については、このトピックで後述する Python 3.11 用の拡張設定ファイルの例も参照してください。

Python ランタイムの例

次の例は、Python サービスを構築および実行するための App Runner 設定ファイルを示しています。最後の例は、Python ランタイムサービスにデプロイできる完全な Python アプリケーションのソースコードです。

注記

これらの例で使用されるランタイムバージョンは 3.7.7 および 3.11 です。使用するバージョンに置き換えることができます。サポートされている最新の Python ランタイムバージョンについては、「」を参照してくださいPython ランタイムリリース情報

この例では、Python マネージドランタイムで使用できる最小限の設定ファイルを示しています。App Runner が最小限の設定ファイルで行う前提条件については、「」を参照してください設定ファイルの例

Python 3.11 では、 コマンドpip3python3 コマンドを使用します。詳細については、このトピックで後述する Python 3.11 用の拡張設定ファイルの例を参照してください。

例 apprunner.yaml
version: 1.0 runtime: python3 build: commands: build: - pip install pipenv - pipenv install run: command: python app.py

この例では、Python マネージドランタイムですべての設定キーを使用する方法を示します。

注記

これらの例で使用されるランタイムバージョンは 3.7.7 です。使用するバージョンに置き換えることができます。サポートされている最新の Python ランタイムバージョンについては、「」を参照してくださいPython ランタイムリリース情報

Python 3.11 では、 コマンドpip3python3 コマンドを使用します。詳細については、このトピックで後述する Python 3.11 用の拡張設定ファイルの例を参照してください。

例 apprunner.yaml
version: 1.0 runtime: python3 build: commands: pre-build: - wget -c https://s3.amazonaws.com/DOC-EXAMPLE-BUCKET/test-lib.tar.gz -O - | tar -xz build: - pip install pipenv - pipenv install post-build: - python manage.py test env: - name: DJANGO_SETTINGS_MODULE value: "django_apprunner.settings" - name: MY_VAR_EXAMPLE value: "example" run: runtime-version: 3.7.7 command: pipenv run gunicorn django_apprunner.wsgi --log-file - network: port: 8000 env: MY_APP_PORT env: - name: MY_VAR_EXAMPLE value: "example" secrets: - name: my-secret value-from: "arn:aws:secretsmanager:us-east-1:123456789012:secret:testingstackAppRunnerConstr-kJFXde2ULKbT-S7t8xR:username::" - name: my-parameter value-from: "arn:aws:ssm:us-east-1:123456789012:parameter/parameter-name" - name: my-parameter-only-name value-from: "parameter-name"

この例では、 で Python 3.11 マネージドランタイムを使用するすべての設定キーの使用を示していますapprunner.yaml。この例では、このバージョンの Python では改訂された App Runner ビルドが使用されるため、 pre-runセクションが含まれています。

pre-run パラメータは、改訂された App Runner ビルドでのみサポートされます。アプリケーションが元の App Runner ビルドでサポートされているランタイムバージョンを使用している場合は、このパラメータを設定ファイルに挿入しないでください。詳細については、「マネージドランタイムバージョンと App Runner ビルド」を参照してください。

注記

これらの例で使用されるランタイムバージョンは 3.11 です。使用するバージョンに置き換えることができます。サポートされている最新の Python ランタイムバージョンについては、「」を参照してくださいPython ランタイムリリース情報

例 apprunner.yaml
version: 1.0 runtime: python311 build: commands: pre-build: - wget -c https://s3.amazonaws.com/DOC-EXAMPLE-BUCKET/test-lib.tar.gz -O - | tar -xz build: - pip3 install pipenv - pipenv install post-build: - python3 manage.py test env: - name: DJANGO_SETTINGS_MODULE value: "django_apprunner.settings" - name: MY_VAR_EXAMPLE value: "example" run: runtime-version: 3.11 pre-run: - pip3 install pipenv - pipenv install - python3 copy-global-files.py command: pipenv run gunicorn django_apprunner.wsgi --log-file - network: port: 8000 env: MY_APP_PORT env: - name: MY_VAR_EXAMPLE value: "example" secrets: - name: my-secret value-from: "arn:aws:secretsmanager:us-east-1:123456789012:secret:testingstackAppRunnerConstr-kJFXde2ULKbT-S7t8xR:username::" - name: my-parameter value-from: "arn:aws:ssm:us-east-1:123456789012:parameter/parameter-name" - name: my-parameter-only-name value-from: "parameter-name"

この例では、Python ランタイムサービスにデプロイできる完全な Python アプリケーションのソースコードを示します。

例 requirements.txt
pyramid==2.0
例 server.py
from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.response import Response import os def hello_world(request): name = os.environ.get('NAME') if name == None or len(name) == 0: name = "world" message = "Hello, " + name + "!\n" return Response(message) if __name__ == '__main__': port = int(os.environ.get("PORT")) with Configurator() as config: config.add_route('hello', '/') config.add_view(hello_world, route_name='hello') app = config.make_wsgi_app() server = make_server('0.0.0.0', port, app) server.serve_forever()
例 apprunner.yaml
version: 1.0 runtime: python3 build: commands: build: - pip install -r requirements.txt run: command: python server.py