翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
App Runner 用のアプリケーションコードの開発
この章では、 にデプロイするアプリケーションコードを開発または移行する際に考慮すべきランタイム情報と開発ガイドラインについて説明します AWS App Runner。
ランタイム情報
コンテナイメージを提供するか App Runner が構築するかにかかわらず、App Runner はコンテナインスタンスでアプリケーションコードを実行します。コンテナインスタンスのランタイム環境の主な側面を以下に示します。
-
フレームワークのサポート — App Runner は、ウェブアプリケーションを実装するすべてのイメージをサポートします。選択したプログラミング言語や、使用するウェブアプリケーションサーバーまたはフレームワークには関係ありません。便宜上、アプリケーション構築プロセスと抽象イメージの作成を効率化するために、さまざまなプログラミングプラットフォーム用のプラットフォーム固有のマネージドランタイムを提供しています。
-
ウェブリクエスト – App Runner は、コンテナインスタンスに HTTP 1.0 および HTTP 1.1 のサポートを提供します。サービスの設定の詳細については、「」を参照してくださいApp Runner サービスの設定。HTTPS セキュアトラフィックの処理を実装する必要はありません。App Runner は、すべての受信 HTTP リクエストを対応する HTTPS エンドポイントにリダイレクトします。HTTP ウェブリクエストのリダイレクトを有効にする設定を行う必要はありません。App Runner は、アプリケーションコンテナインスタンスにリクエストを渡す前に TLS を終了します。
注記
-
HTTP リクエストには合計 120 秒のリクエストタイムアウト制限があります。120 秒には、本文を含むリクエストの読み取りと HTTP レスポンスの書き込みの完了にアプリケーションがかかる時間が含まれます。
-
リクエストの読み取りとレスポンスのタイムアウトの制限は、使用するアプリケーションによって異なります。これらのアプリケーションには、Python 用の HTTP サーバーである Gunicorn など、独自の内部タイムアウトがあり、デフォルトのタイムアウト制限は 30 秒です。このような場合、アプリケーションのタイムアウト制限は App Runner の 120 秒のタイムアウト制限よりも優先されます。
-
App Runner はフルマネージドサービスであり、TLS 終了を管理するため、TLS 暗号スイートやその他のパラメータを設定する必要はありません。
-
-
ステートレスアプリ – 現在、App Runner はステートフルアプリをサポートしていません。したがって、App Runner は、単一の受信ウェブリクエストを処理する期間を超えて状態が永続化することを保証しません。
-
ストレージ – App Runner は、受信トラフィック量に応じて App Runner アプリケーションのインスタンスを自動的にスケールアップまたはスケールダウンします。App Runner アプリケーションの Auto Scaling オプションを設定できます。ウェブリクエストを処理する現在アクティブなインスタンスの数は受信トラフィック量に基づいているため、App Runner は、ファイルが 1 つのリクエストの処理を超えて保持できることを保証できません。したがって、App Runner はコンテナインスタンスにファイルシステムをエフェメラルストレージとして実装します。これは、ファイルが一時的なものであることを意味します。例えば、App Runner サービスを一時停止して再開しても、ファイルは保持されません。
App Runner は 3 GB のエフェメラルストレージを提供し、インスタンスのプル、圧縮、および非圧縮コンテナイメージに 3 GB のエフェメラルストレージの一部を使用します。残りのエフェメラルストレージは App Runner サービスで使用できます。ただし、ステートレスであるため、これは永続的なストレージではありません。
注記
ストレージファイルがリクエスト間で保持されるシナリオがある場合があります。例えば、次のリクエストが同じインスタンスに送信されると、ストレージファイルは保持されます。リクエスト間でのストレージファイルの永続化は、特定の状況で役立ちます。例えば、リクエストを処理するときに、今後のリクエストで必要になる可能性がある場合に、アプリケーションがダウンロードするファイルをキャッシュできます。これにより、将来のリクエスト処理が高速化される可能性がありますが、速度の向上は保証できません。コードでは、前のリクエストでダウンロードされたファイルがまだ存在すると想定しないでください。
高スループット、低レイテンシーのインメモリデータストアを使用したキャッシュが保証されるようにするには、Amazon ElastiCache
などのサービスを使用します。 -
環境変数 – デフォルトでは、App Runner は
PORT
環境変数をコンテナインスタンスで使用できるようにします。ポート情報を使用して変数値を設定し、カスタム環境変数と値を追加できます。AWS Secrets Manager または AWS Systems Manager Parameter Store に保存されている機密データを環境変数として参照することもできます。環境変数の作成の詳細については、「」を参照してください環境変数の参照。 -
インスタンスロール – アプリケーションコードが AWS サービス APIs または AWS SDKsを使用してインスタンスロールを作成します。 AWS Identity and Access Management 次に、作成時に App Runner サービスにアタッチします。コードが必要とするすべての AWS サービスアクションのアクセス許可をインスタンスロールに含めます。詳細については、「インスタンスロール」を参照してください。
コード開発ガイドライン
App Runner ウェブアプリケーションのコードを開発するときは、以下のガイドラインを考慮してください。
-
ステートレスコードを設計する — App Runner サービスにデプロイするウェブアプリケーションをステートレスに設計します。コードでは、単一の受信ウェブリクエストを処理する期間を超えて状態が維持されないことを前提とする必要があります。
-
一時ファイルの削除 – ファイルを作成すると、ファイルはファイルシステムに保存され、サービスのストレージ割り当ての一部が取り込まれます。 out-of-storage エラーを回避するには、一時ファイルを長期間保持しないでください。ファイルキャッシュの決定を行うときは、ストレージサイズとリクエスト処理速度のバランスを取ります。
-
インスタンスの起動 — App Runner はインスタンスの起動時間を 5 分提供します。インスタンスは、設定されたリッスンポートでリクエストをリッスンし、起動から 5 分以内に正常である必要があります。起動時に、App Runner インスタンスには vCPU 設定に基づいて仮想 CPU (vCPU) が割り当てられます。使用可能な vCPU 設定の詳細については、「」を参照してくださいApp Runner でサポートされている設定。
インスタンスが正常に起動すると、インスタンスはアイドル状態になり、リクエストを待機します。料金は、インスタンスの起動時間に基づいて支払います。最低料金は、インスタンスの開始ごとに 1 分です。料金については、「AWS App Runner の料金
」を参照してください。