为 Amplify 应用程序配置构建实例 - AWS Amplify 托管

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

为 Amplify 应用程序配置构建实例

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

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

每种构建实例类型的成本均按构建分钟数计算。有关定价的详细信息,请参阅 AWS Amplify 定价

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

构建实例类型

vCPU

内存

磁盘空间

Standard

4 个 vCPU

8 GiB

128 GB

Large

8 个 vCPU

16 GiB

128 GB

XLarge

36 vCPUs

72 GiB

256GB

了解构建实例类型

构建实例类型设置是在应用程序级别配置的,并适用于应用程序的所有分支。构建实例类型的关键细节如下:

  • 您为应用程序配置的构建实例类型会自动适用于自动创建的分支和拉取请求预览。

  • 并发作业服务配额适用于您 AWS 账户中的所有构建实例类型。例如,假设您的并发作业上限为五个,则在您的 AWS 账户中最多可以为所有实例类型运行 5 个构建作业。

  • 每种构建实例类型的成本均按构建分钟数计算。构建实例分配过程可能需要额外的开销时间,然后才能开始构建。对于较大的实例,尤其是 xLarge,这种开销时间可能会导致在构建开始之前出现构建延迟。不过您只需按实际构建时间付费,无需为开销时间付费。

您可以在创建新应用程序时配置构建实例类型,也可以为现有应用程序更新实例类型。有关在 Amplify 控制台中配置此设置的说明,请参阅在 Amplify 控制台中配置构建实例类型。还可以使用 SDK 更新此设置:有关更多信息,请参阅《Amplify API 参考》中的 CreateAppUpdateApp API。

如果您账户的现有应用程序是在可自定义构建实例类型功能发布之前创建的,则这些应用程序使用默认的 Standard 实例类型。更新现有应用程序的构建实例类型时,任何在更新之前已加入队列或正在运行的构建都将使用先前配置的构建实例类型。例如,假设您的一个现有应用程序已将其 main 分支部署到 Amplify,然后您将该应用程序的构建实例类型从标准更新为大型,则您从 main 分支启动的所有新构建都将使用大型构建实例类型。但您在更新构建实例类型时正在运行的任何构建,都将继续使用标准实例运行。

在 Amplify 控制台中配置构建实例类型

创建新的 Amplify 应用程序时,请使用以下过程配置构建实例类型。

为新应用程序配置构建实例类型
  1. 登录 AWS 管理控制台 并打开 Amplify 控制台

  2. 所有应用程序页面中,选择创建新应用程序

  3. 开始使用 Amplify 进行构建页面中选择您的 Git 存储库提供商,然后选择下一步

  4. 添加存储库分支页面上,执行以下操作:

    1. 最近更新的存储库列表中,选择要连接的存储库的名称。

    2. 分支列表中,选择要连接的存储库分支的名称。

    3. 选择下一步

  5. 应用程序设置页面中打开高级设置部分。

  6. 对于构建实例类型,从列表中选择所需的实例类型。

  7. 如果要部署基于 Node.js 运行时的应用程序,请配置堆内存大小以有效利用大型实例类型。您可以通过在应用程序设置页面上设置环境变量或更新构建设置来完成此操作。有关更多信息,请参阅 配置应用程序的堆内存以利用大型实例类型

    • 设置环境变量

      1. 高级设置环境变量部分,选择新增

      2. 对于,输入 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. 查看页面上,选择保存并部署

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

为现有应用程序配置构建实例类型
  1. 登录 AWS 管理控制台 并打开 Amplify 控制台

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

  3. 在导航窗格中,依次选择 Hosting构建设置

  4. 构建设置页面的高级设置部分中,选择编辑

  5. 编辑设置中,对于构建实例类型,从列表中选择所需的实例类型。

  6. 选择保存。此更改将在您下次部署应用程序时生效。

  7. (可选)要立即部署更新后的应用程序,请执行以下操作:

    1. 在导航窗格中,选择概述

    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 构建规范将 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/**/*

要有效利用大型实例类型,必须配置足够的堆内存大小。如果为内存密集型应用程序配置较小的堆大小,则可能会导致构建失败。应用程序的构建日志可能不会直接指示内存不足错误,因为应用程序运行时可能会意外崩溃。如果将堆大小配置为与主机内存一样大,则可能会导致主机操作系统交换或终止其他进程,并可能导致构建过程中断。作为参考,Node.js 建议在内存约为 2000 MB 的计算机上将最大堆大小设置为 1536 MB,以便为其他用途预留一些内存。

最佳堆大小取决于应用程序的需求和资源使用情况。如果遇到内存不足错误,请首先使用较小的堆大小,然后根据需要逐渐增加堆大小。作为指导原则,我们建议将 Standard 实例类型的起始堆大小设为 6000 MB,将 Large 实例类型的起始堆大小设为 12000 MB,将 XLarge 实例类型的起始堆大小设为 60000 MB。