Amplify アプリケーションのビルドインスタンスの設定 - AWS Amplify ホスティング

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

Amplify アプリケーションのビルドインスタンスの設定

Amplify ホスティングには、アプリケーションのビルドインスタンスに必要な CPU、メモリ、ディスク容量のリソースを提供する設定可能なビルドインスタンスサイズが用意されています。この機能のリリース前、Amplify は 8 GiB のメモリと 4 つの vCPU から成る固定サイズのビルドインスタンス構成を提供していました。

Amplify は、Standard、Large、XLarge という 3 つのビルドインスタンスタイプをサポートしています。インスタンスタイプを指定しなければ、Amplify はデフォルトの Standard インスタンスを使用します。Amplify コンソール、AWS CLI、または SDK を使用して、アプリケーションのビルドインスタンスタイプを設定できます。

各ビルドインスタンスタイプのコストは、ビルド時間 (分) ごとに計算されます。料金の詳細については、「AWS Amplify の料金」を参照してください。

次の表に、各ビルドインスタンスタイプのコンピューティング仕様を示します。

ビルドインスタンスタイプ

vCPUs

メモリ

ディスク容量

Standard

4 vCPU

8 GiB

128 GB

Large

8 vCPU

16 GiB

128 GB

XLarge

36 vCPU

72 GiB

256 GB

ビルドインスタンスタイプについて

ビルドインスタンスタイプの設定はアプリケーションレベルで設定され、アプリケーションのすべてのブランチに拡張されます。ビルドインスタンスタイプには、次のキーの詳細が適用されます。

  • アプリケーション用に設定したビルドインスタンスタイプは、自動作成されたブランチとプルリクエストのプレビューに自動的に適用されます。

  • 同時ジョブサービスクォータは、AWS アカウント のすべてのビルドインスタンスタイプに適用されます。たとえば、同時ジョブの制限が 5 の場合、AWS アカウント のすべてのインスタンスタイプで最大 5 つのビルドを実行できます。

  • 各ビルドインスタンスタイプのコストは、ビルド時間 (分) ごとに計算されます。ビルドインスタンスの割り当てプロセスでは、ビルドの開始前に追加のオーバーヘッド時間が必要になる場合があります。大規模なインスタンス、特に XLarge の場合、このオーバーヘッド時間が原因で、ビルドの開始前にビルドにレイテンシーが発生する可能性があります。ただし、オーバーヘッド時間ではなく、実際のビルド時間に対してのみ課金されます。

ビルドインスタンスタイプは、新しいアプリケーションを作成するときに設定することも、既存のアプリケーションでインスタンスタイプを更新することもできます。Amplify コンソールでこの設定を構成する手順については、「Amplify コンソールでのビルドインスタンスタイプの設定」を参照してください。SDK を使用してこの設定を更新することもできます。詳細については、「Amplify API リファレンス」の「CreateApp」および「UpdateApp API」を参照してください。

カスタマイズ可能なビルドインスタンスタイプの機能のリリース前に作成された既存のアプリケーションがアカウントにある場合、デフォルトの Standard インスタンスタイプを使用しています。既存のアプリケーションのビルドインスタンスタイプを更新すると、更新前にキューに入っているか進行中のビルドは、以前に設定したビルドインスタンスタイプを使用します。たとえば、main ブランチが Amplify にデプロイされた既存のアプリケーションがあり、そのビルドインスタンスタイプを Standard から Large に更新した場合、main ブランチから開始したすべての新しいビルドは Large ビルドインスタンスタイプを使用します。ただし、ビルドインスタンスタイプを更新したときに進行中のビルドは、引き続き Standard インスタンスで実行されます。

Amplify コンソールでのビルドインスタンスタイプの設定

新しい Amplify アプリケーションを作成するときにビルドインスタンスタイプを設定するには、次の手順に従います。

新しいアプリケーションのビルドインスタンスタイプを設定するには
  1. AWS マネジメントコンソール にサインインし、Amplify コンソールを開きます。

  2. [すべてのアプリ] ページで、[アプリの新規作成] を選択します。

  3. [Amplify で構築を開始] ページで、自分の Git リポジトリプロバイダーを選択し、[次へ] を選択します。

  4. [リポジトリブランチを追加] ページで、次の操作を行います。

    1. 最近更新されたリポジトリ」リストで、接続するリポジトリの名前を選択します。

    2. ブランチ」リストで、接続するリポジトリブランチの名前を選択します。

    3. [次へ]をクリックします。

  5. [アプリ設定] ページで、[詳細設定] セクションを開きます。

  6. [ビルドインスタンスタイプ] で、リストから目的のインスタンスタイプを選択します。

  7. Node.js ランタイムベースのアプリケーションをデプロイする場合は、大規模なインスタンスタイプを効果的に利用するようにヒープメモリサイズを設定します。これを行うには、[アプリ設定] で環境変数を設定するか、ビルド設定を更新します。詳細については、「大規模なインスタンスタイプを利用するようにアプリケーションのヒープメモリを設定する 」を参照してください。

    • 環境変数を設定する

      1. [詳細設定][環境変数] セクションで、[新規追加] (Add new) を選択します。

      2. [Key] (キー) に「NODE_OPTIONS」と入力します。

      3. [] に「--max-old-space-size=memory_size_in_mb」と入力します。memory_size_in_mb を目的のヒープメモリサイズにメガバイト単位で置き換えます。

    • ビルド設定の更新

      1. [ビルド設定] セクションで、[YML ファイルの編集] を選択します。

      2. 次のコマンドを preBuild フェーズに追加します。memory_size_in_mb を目的のヒープメモリサイズにメガバイト単位で置き換えます。

        export NODE_OPTIONS='--max-old-space-size=memory_size_in_mb'
      3. [保存] を選択します。

  8. [次へ]をクリックします。

  9. [レビュー]ページで、[保存してデプロイ] を選択します。

次の手順で、既存の Amplify アプリケーションのビルドインスタンスタイプを設定します。

既存のアプリケーションのビルドインスタンスタイプを設定するには
  1. AWS マネジメントコンソール にサインインし、Amplify コンソールを開きます。

  2. ビルドインスタンスタイプを設定するアプリを選択します。

  3. ナビゲーションペインで、[ホスティング] を選択し、[ビルド設定] を選択します。

  4. [ビルド設定] ページの [詳細設定] セクションで、[編集] を選択します。

  5. [設定の編集] ページの [ビルドインスタンスタイプ] で、リストから目的のインスタンスタイプを選択します。

  6. [保存] を選択します。この変更は、次回アプリケーションをデプロイするときに有効になります。

  7. (オプション) 更新されたアプリケーションをすぐにデプロイするには、次の手順を実行します。

    1. ナビゲーションペインで、[Overview (概要)] を選択します。

    2. アプリケーションの概要ページで、再デプロイするブランチを選択します。

    3. [デプロイ] ページで、最新のデプロイなどのデプロイを選択します。次に、[このバージョンを再デプロイ] を選択します。新しいデプロイが開始します。

    4. デプロイが完了すると、アプリケーションのビルド設定に、ブランチが更新されたビルドインスタンスタイプを使用していることが示されます。

大規模なインスタンスタイプを利用するようにアプリケーションのヒープメモリを設定する

メモリを大量に消費するアプリケーションを構築する場合は、このセクションを使用して、大規模なインスタンスタイプを利用するようにアプリケーションを設定する方法を確認してください。プログラミング言語とフレームワークは、アプリケーションのメモリ要件を管理するために、ランタイム時にヒープメモリとも呼ばれる動的メモリの割り当てに依存することがよくあります。ヒープメモリはランタイム環境によってリクエストされ、ホストオペレーティングシステムによって割り当てられます。デフォルトでは、ランタイム環境はアプリケーションで使用可能なヒープサイズの上限を適用します。つまり、ホストオペレーティングシステムまたはコンテナで使用可能なメモリ量が多い場合でも、ヒープサイズを超える追加のメモリをアプリケーションに使用することはできません。

たとえば、JavaScript Node.js v8 ランタイム環境では、ホストメモリサイズなど、いくつかの要因に応じてデフォルトのヒープサイズ制限が適用されます。その結果、Standard および Large ビルドインスタンスのデフォルトの Node.js ヒープサイズは 2096 MB で、XLarge インスタンスのデフォルトのヒープサイズは 4144 MB になります。したがって、Amplify ビルドインスタンスタイプでデフォルトの Node.js ヒープサイズを使用してメモリ要件が 6000 MB のアプリケーションを構築すると、メモリ不足エラーによりビルドが失敗します。

Node.js のデフォルトのヒープサイズのメモリ制限を回避するには、次のいずれかを実行します。

  • Amplify アプリケーションの NODE_OPTIONS 環境変数を値 --max-old-space-size=memory_size_in_mb に設定します。memory_size_in_mb では、必要なヒープメモリサイズをメガバイト単位で指定します。

    手順については、「環境変数の設定」を参照してください。

  • Amplify アプリケーションのビルド仕様の preBuild フェーズに次のコマンドを追加します。

    export NODE_OPTIONS='--max-old-space-size=memory_size_in_mb'

    ビルド仕様は、Amplify コンソールまたはプロジェクトリポジトリのアプリケーションの amplify.yml ファイルで更新できます。手順については、「Amplify アプリケーションのビルド設定の構成」を参照してください。

    次の Amplify ビルド仕様の例では、React フロントエンドアプリケーションを構築するために Node.js ヒープメモリサイズを 7000 MB に設定します。

    version: 1 frontend: phases: preBuild: commands: # Set the heap size to 7000 MB - export NODE_OPTIONS='--max-old-space-size=7000' # To check the heap size memory limit in MB - node -e "console.log('Total available heap size (MB):', v8.getHeapStatistics().heap_size_limit / 1024 / 1024)" - npm ci --cache .npm --prefer-offline build: commands: - npm run build artifacts: baseDirectory: build files: - '**/*' cache: paths: - .npm/**/*

大規模なインスタンスタイプを効果的に活用するには、十分なヒープメモリサイズを設定することが重要です。メモリを大量に使用するアプリケーション用にヒープサイズを小さく設定すると、ビルドが失敗する可能性があります。アプリケーションのランタイムが予期せずクラッシュする可能性があるため、アプリケーションのビルドログはメモリ不足エラーを直接示していない可能性があります。ホストメモリと同じサイズのヒープサイズを設定すると、ホストオペレーティングシステムが他のプロセスをスワップまたは終了し、ビルドプロセスが中断される可能性があります。参考として、Node.js では、メモリが約 2000 MB のマシンで最大ヒープサイズを 1536 MB に設定して、他の用途にメモリを残すことをお勧めします。

最適なヒープサイズは、アプリケーションのニーズとリソースの使用状況によって異なります。メモリ不足エラーが発生した場合は、中程度のヒープサイズから始めて、必要に応じて徐々に増やします。ガイドラインとして、Standard インスタンスタイプでは 6000 MB、Large インスタンスタイプでは 12000 MB、XLarge インスタンスタイプでは 60000 MB から開始することをお勧めします。