

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 Amplify 应用程序配置构建实例
<a name="custom-build-instance"></a>

Amplify Hosting 提供可配置的构建实例大小，使您能够为应用程序的构建实例提供所需的 CPU、内存和磁盘空间资源。在此功能发布之前，Amplify 提供了 8 GiB 内存和 4 v 的固定大小的构建实例配置。CPUs

Amplify 支持三种构建实例类型：Standard、Large 和 XLarge。如果未指定实例类型，Amplify 将使用默认的 Standard 实例。您可以使用 Amplify 控制台 AWS CLI、或，为应用程序配置构建实例类型。 SDKs

每种构建实例类型的成本均按构建分钟数计算。有关定价的详细信息，请参阅 [AWS Amplify 定价](https://aws.amazon.com/amplify/pricing/)。

下表描述了每种构建实例类型的计算规范：


| 构建实例类型 | v CPUs | 内存 | 磁盘空间 | 
| --- | --- | --- | --- | 
| Standard | 4 v CPUs | 8 GiB | 128 GB | 
| Large | 8 v CPUs | 16 GiB | 128 GB | 
| XLarge | 36 v CPUs | 72 GiB | 256GB | 

**Topics**
+ [了解构建实例类型](#understanding-build-instance-sizes)
+ [在 Amplify 控制台中配置构建实例类型](#configure-build-instance-type)
+ [配置应用程序的堆内存以利用大型实例类型](#configuring-heap-memory)

## 了解构建实例类型
<a name="understanding-build-instance-sizes"></a>



构建实例类型设置是在应用程序级别配置的，并适用于应用程序的所有分支。构建实例类型的关键细节如下：
+ 您为应用程序配置的构建实例类型会自动适用于自动创建的分支和拉取请求预览。
+ 并*发任务*服务配额适用于您的所有构建实例类型 AWS 账户。例如，假设您的*并发作业*上限为五个，则在您的 AWS 账户中最多可以为所有实例类型运行 5 个构建作业。
+ 每种构建实例类型的成本均按构建分钟数计算。构建实例分配过程可能需要额外的开销时间，然后才能开始构建。特别是对于较大的实例 XLarge，由于这种开销时间，您的构建可能会在构建开始之前遇到延迟。不过您只需按实际构建时间付费，无需为开销时间付费。

您可以在创建新应用程序时配置构建实例类型，也可以为现有应用程序更新实例类型。有关在 Amplify 控制台中配置此设置的说明，请参阅[在 Amplify 控制台中配置构建实例类型](#configure-build-instance-type)。您也可以使用更新此设置 SDKs。有关更多信息，请参阅 *Amplify API* 参考[UpdateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_UpdateApp.html) APIs 中的[CreateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_CreateApp.html)、和。

如果您账户的现有应用程序是在可自定义构建实例类型功能发布之前创建的，则这些应用程序使用默认的 Standard 实例类型。更新现有应用程序的构建实例类型时，任何在更新之前已加入队列或正在运行的构建都将使用先前配置的构建实例类型。例如，假设您的一个现有应用程序已将其 `main` 分支部署到 Amplify，然后您将该应用程序的构建实例类型从**标准**更新为**大型**，则您从 `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*替换为所需的堆内存大小（以兆字节为单位）。
   + 更新构建设置

     1. 在**设置**部分中，选择**编辑 YML 文件**。

     1. 将以下命令添加到 `preBuild` 阶段。*memory\$1size\$1in\$1mb*替换为所需的堆内存大小（以兆字节为单位）。

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

     1. 选择**保存**。

1. 选择**下一步**。

1. 在**查看**页面上，选择**保存并部署**。

按以下过程为现有应用程序配置构建实例类型。

**为现有应用程序配置构建实例类型**

1. 登录 AWS 管理控制台 并打开 [Amplify](https://console.aws.amazon.com/amplify/) 控制台。

1. 选择要为其配置构建实例类型的应用程序。

1. 在导航窗格中，依次选择 **Hosting**、**构建设置**。

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`，请指定所需的堆内存大小（以兆字节为单位）。

  有关说明，请参阅[设置环境变量](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。