

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 Amplify 應用程式的建置執行個體
<a name="custom-build-instance"></a>

Amplify Hosting 提供可設定的建置執行個體大小，可讓您提供應用程式的建置執行個體所需的 CPU、記憶體和磁碟空間資源。在發行此功能之前，Amplify 提供了 8 GiB 記憶體和 4 個 vCPUs的固定大小建置執行個體組態。

Amplify 支援三種建置執行個體類型：Standard、 Large和 XLarge。如果您未指定執行個體類型，Amplify 會使用預設Standard執行個體。您可以使用 Amplify 主控台 AWS CLI、 或 SDKs 來設定應用程式的建置執行個體類型。

每個組建執行個體類型的成本會按組建分鐘計算。如需定價詳細資訊，請參閱 [AWS Amplify 定價](https://aws.amazon.com/amplify/pricing/)。

下表說明每個建置執行個體類型的運算規格：


| 組建執行個體類型 | vCPUs | 記憶體 | 磁碟空間 | 
| --- | --- | --- | --- | 
| Standard | 4 vCPUs | 8 GiB | 128 GB | 
| Large | 8 vCPUs | 16 GiB | 128 GB | 
| XLarge | 36 vCPUs | 72 GiB | 256 GB | 

**Topics**
+ [了解建置執行個體類型](#understanding-build-instance-sizes)
+ [在 Amplify 主控台中設定建置執行個體類型](#configure-build-instance-type)
+ [設定應用程式的堆積記憶體以利用大型執行個體類型](#configuring-heap-memory)

## 了解建置執行個體類型
<a name="understanding-build-instance-sizes"></a>



建置執行個體類型設定是在應用程式層級設定，並延伸至應用程式的所有分支。下列金鑰詳細資訊適用於建置執行個體類型：
+ 您為應用程式設定的建置執行個體類型會自動套用至自動建立的分支和提取請求預覽。
+ *並行任務*服務配額適用於您 中的所有建置執行個體類型 AWS 帳戶。例如，如果您*的並行任務*限制為 5，您最多可以在 中的所有執行個體類型中執行 5 個組建 AWS 帳戶。
+ 每個組建執行個體類型的成本會按組建分鐘計算。建置執行個體配置程序可能需要額外的額外額外負荷時間，才能開始建置。對於較大的執行個體，特別是 XLarge，由於此額外負荷時間，您的建置可能會在建置開始之前遇到延遲。不過，您只需支付實際建置時間的費用，而非額外負荷時間。

您可以在建立新應用程式時設定建置執行個體類型，也可以更新現有應用程式的執行個體類型。如需在 Amplify 主控台中設定此設定的說明，請參閱 [在 Amplify 主控台中設定建置執行個體類型](#configure-build-instance-type)。您也可以使用 SDKs更新此設定。如需詳細資訊，請參閱 Amplify APIs 參考中的 [CreateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_CreateApp.html) 和 [UpdateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_UpdateApp.html) API。 **

如果您的帳戶中有在可自訂建置執行個體類型功能發行之前建立的現有應用程式，則會使用預設Standard執行個體類型。當您更新現有應用程式的建置執行個體類型時，任何在更新之前排入佇列或進行中的建置都會使用先前設定的建置執行個體類型。例如，如果您有部署到 Amplify 的`main`分支的現有應用程式，並且將其建置執行個體類型從**標準**更新為**大型**，則從`main`分支啟動的所有新建置將使用**大型**建置執行個體類型。不過，在您更新組建執行個體類型時正在進行的任何組建都會繼續在**標準**執行個體上執行。

## 在 Amplify 主控台中設定建置執行個體類型
<a name="configure-build-instance-type"></a>

當您建立新的 Amplify 應用程式時，請使用下列程序來設定建置執行個體類型。

**設定新應用程式的建置執行個體類型**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. **在所有應用程式**頁面上，選擇**建立新應用程式**。

1. 在**開始使用 Amplify 建置**頁面上，選擇您的 Git 儲存庫提供者，然後選擇**下一步**。

1. 在**新增儲存庫分支**頁面上，執行下列動作：

   1. 在**最近更新的儲存庫**清單中，選取要連線的儲存庫名稱。

   1. 在**分支**清單中，選取要連線的儲存庫分支名稱。

   1. 選擇**下一步**。

1. 在**應用程式設定**頁面上，開啟**進階設定**區段。

1. 針對**建置執行個體類型**，從清單中選擇所需的執行個體類型。

1. 如果您要部署以 Node.js 執行期為基礎的應用程式，請設定堆積記憶體大小，以有效利用大型執行個體類型。您可以透過設定環境變數或更新建置設定，在**應用程式**設定頁面上執行此操作。如需詳細資訊，請參閱[設定應用程式的堆積記憶體以利用大型執行個體類型](#configuring-heap-memory)。
   + 設定環境變數

     1. 在**進階設定****、環境變數**區段中，選擇**新增**。

     1. 針對**金鑰**輸入 **NODE\$1OPTIONS**。

     1. 針對**數值**，輸入 `--max-old-space-size=memory_size_in_mb`。將 *memory\$1size\$1in\$1mb* 取代為所需的堆積記憶體大小，以 MB 為單位。
   + 更新建置設定

     1. 在**建置設定**區段中，選擇**編輯 YML 檔案**。

     1. 將下列命令新增至 `preBuild`階段。將 *memory\$1size\$1in\$1mb* 取代為所需的堆積記憶體大小，以 MB 為單位。

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

     1. 選擇**儲存**。

1. 選擇**下一步**。

1. 在**檢閱**頁面上，選擇**儲存並部署**。

使用下列程序來設定現有 Amplify 應用程式的建置執行個體類型。

**設定現有應用程式的建置執行個體類型**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要為其設定建置執行個體類型的應用程式。

1. 在導覽窗格中，選擇**託管**，選擇**建置設定**。

1. 在**建置設定**頁面的**進階設定**區段中，選擇**編輯**。

1. 在**編輯設定**頁面上，針對**建置執行個體類型**，從清單中選擇所需的執行個體類型。

1. 選擇**儲存**。此變更將在您下次部署應用程式時生效。

1. （選用） 若要立即部署更新的應用程式，請執行下列動作：

   1. 在導覽窗格中，選擇**概觀**。

   1. 在應用程式的概觀頁面上，選擇要重新部署的分支。

   1. 在**部署**頁面上，選擇部署，例如最新的部署。然後，選擇**重新部署此版本**。新的部署將會開始。

   1. 部署完成時，應用程式的建置設定會顯示分支正在使用更新的建置執行個體類型。

## 設定應用程式的堆積記憶體以利用大型執行個體類型
<a name="configuring-heap-memory"></a>

如果您要建置記憶體密集型應用程式，請使用本節了解如何設定應用程式以利用大型執行個體類型。在執行時間期間，程式設計語言和架構通常依賴配置動態記憶體，也稱為堆積記憶體，以管理應用程式記憶體需求。堆積記憶體由執行時間環境請求，並由主機作業系統配置。根據預設，執行時間環境會強制執行應用程式可用的堆積大小上限。這表示即使主機作業系統或容器有較多的記憶體可用，應用程式也無法使用超過堆積大小的額外記憶體。

例如，JavaScript Node.js v8 執行時間環境會強制執行預設堆積大小限制，這取決於多種因素，包括主機記憶體大小。因此， Standard和 Large 組建執行個體的預設 Node.js 堆積大小為 2096 MB，而XLarge執行個體的預設堆積大小為 4144 MB。因此，在任何 Amplify 建置執行個體類型上使用預設 Node.js 堆積大小，以 6000 MB 記憶體需求建置應用程式，將導致因out-of-memory錯誤而導致建置失敗。

若要解決 Node.js 預設堆積大小記憶體限制，您可以執行下列其中一項作業：
+ 將 Amplify 應用程式中`NODE_OPTIONS`的環境變數設定為值 `--max-old-space-size=memory_size_in_mb`。針對 `memory_size_in_mb`，以 MB 為單位指定您想要的堆積記憶體大小。

  如需說明，請參閱[設定環境變數](setting-env-vars.md)。
+ 將下列命令新增至 Amplify 應用程式建置規格中的 `preBuild`階段。

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

  您可以在 Amplify 主控台或專案儲存庫的應用程式`amplify.yml`檔案中更新建置規格。如需說明，請參閱[設定 Amplify 應用程式的建置設定](build-settings.md)。

  下列範例 Amplify 建置規格會將 Node.js 堆積記憶體大小設定為 7000 MB，以建置 React 前端應用程式：

  ```
  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/**/*
  ```

若要有效利用大型執行個體類型，請務必設定足夠的堆積記憶體大小。為記憶體密集型應用程式設定小型堆積大小可能會導致建置失敗。應用程式建置日誌可能不會直接指出out-of-memory錯誤，因為應用程式執行時間可能會意外當機。將堆積大小設定為主機記憶體的大小，可能會導致主機作業系統交換或終止其他程序，並可能中斷您的建置程序。作為參考，Node.js 建議在具有大約 2000 MB 記憶體的機器上設定最大堆積大小為 1536 MB，以保留一些記憶體供其他用途使用。

最佳堆積大小取決於應用程式的需求和資源用量。如果您遇到out-of-memory錯誤，請從中等堆積大小開始，然後視需要逐漸增加。作為準則，我們建議從Standard執行個體類型的 6000 MB、Large執行個體類型的 12000 MB 和XLarge執行個體類型的 60000 MB 開始。