App Runner のアプリケーションコードの開発 - AWS App Runner

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

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 (IAM) を使用してインスタンスロールを作成します。次に、作成時に App Runner サービスにアタッチします。コードが必要とするすべての AWS サービスアクションのアクセス許可をインスタンスロールに含めます。詳細については、「インスタンスロール」を参照してください。

コード開発ガイドライン

App Runner ウェブアプリケーションのコードを開発するときは、以下のガイドラインを考慮してください。

  • コンテナイメージのパッチ適用 – コンテナイメージを提供する場合、これらのイメージを定期的に更新してパッチを適用する責任があります。App Runner がインフラストラクチャを管理する間は、提供されたコンテナイメージのセキュリティとup-to-dateステータスを確認する必要があります。詳細については、AWS App Runner ドキュメントを参照してください。

  • ステートレスコードを設計する – App Runner サービスにデプロイするウェブアプリケーションをステートレスに設計します。コードは、単一の受信ウェブリクエストを処理する期間を超えて状態が維持されないことを前提とする必要があります。

  • 一時ファイルの削除 – ファイルを作成すると、ファイルはファイルシステムに保存され、サービスのストレージ割り当ての一部になります。out-of-storageエラーを避けるため、一時ファイルを長期間保持しないでください。ファイルキャッシュの決定を行うときは、ストレージサイズとリクエスト処理速度のバランスを取ります。

  • インスタンスの起動 – App Runner はインスタンスの起動時間を 5 分で提供します。インスタンスは、設定されたリッスンポートでリクエストをリッスンし、起動後 5 分以内に正常である必要があります。起動時に、App Runner インスタンスには vCPU 設定に基づいて仮想 CPU (vCPU) が割り当てられます。使用可能な vCPU 設定の詳細については、「」を参照してくださいApp Runner でサポートされている設定

    インスタンスが正常に起動すると、インスタンスはアイドル状態になり、リクエストを待機します。料金は、インスタンスの起動時間に基づき、インスタンスの開始ごとに 1 分の最小料金がかかります。料金については、「AWS App Runner の料金」を参照してください。