Amplify Hosting 问题排查 - AWS Amplify 托管

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

Amplify Hosting 问题排查

以下信息可帮助您解决与 Amplify Hosting 相关的一般性问题。

HTTP 429 状态码(请求过多)

Amplify 会根据传入请求耗费的处理时间和数据传输量来控制向您的网站发送的每秒请求数(RPS)。如果您的应用程序返回 HTTP 429 状态码,则传入请求将超过为您的应用程序分配的处理时间和数据传输量。此应用程序限制由 Amplify 的 REQUEST_TOKENS_PER_SECOND 服务配额管理。有关限额的更多信息,请参阅Amplify 托管服务限额

如果修复此问题,我们建议您优化应用程序以缩短请求持续时间、降低数据传输量,以提高应用程序的 RPS。例如,在同样使用 20,000 个词元的情况下,与延迟超过 200 毫秒的页面相比,在 100 毫秒内响应且高度优化的 SSR 页面可支持更高的 RPS。

同样,返回大小为 1 MB 的响应的应用程序将比返回 250 KB 响应大小的应用程序消耗更多的词元数。

我们还建议您配置 Cache-Control Headers Amazon CloudFront 缓存,以最大限度地延长给定响应在缓存中的保留时间。从 CloudFront 缓存传输的请求不会计入速率限制。每个 CloudFront 分配每秒最多可处理 250,000 个请求,使您能够利用缓存将应用程序扩展到极高的程度。有关 CloudFront 缓存的更多信息,请参阅 Amazon CloudFront 开发者指南中的优化缓存和可用性

Amplify 控制台不显示我的应用程序的构建状态和上次更新时间

当您在 Amplify 控制台中导航到 “所有应用程序” 页面时,系统会为当前区域中的每个应用程序显示一个图块。如果您看不到应用程序的构建状态(例如已部署)和上次更新时间,则表示该应用程序没有与之关联的Production阶段分支。

要在控制台中列出应用程序,Amplify 使用了 ListApps API。Amplify 使用该ProductionBranch.status属性来显示构建状态,使用该ProductionBranch.lastDeployTime属性来显示上次更新时间。有关此 API 的更多信息,请参阅 Amplify Hosting API 文档ProductionBranch中的。

按照以下说明操作来将Production阶段与应用程序的分支关联。

  1. 登录 Amplify 控制台

  2. 所有应用程序页面上,键入要更新的应用程序。

  3. 在导航窗格中,选择应用程序设置,然后选择分支设置

  4. “分支设置” 部分中,选择 “编辑”

  5. 对于生产分支,键入要使用的分支名称。

  6. 选择保存

  7. 返回 “所有应用程序” 页面。现在应该会显示您的应用程序的构建状态和上次更新时间。

未为新的拉取请求创建 Web 预览

Web 预览功能允许您在将拉取请求合并到集成分支之前预览拉取请求的更改。Web 预览会将向存储库发出的每个拉取请求部署到一个唯一的预览网址,该网址与您的主网站使用的网址不同。

如果您已为应用程序开启网络预览,但不是为新应用程序创建的 PRs,请调查以下原因是否是导致问题的原因。

  1. 查看您的应用程序是否已达到最大Branches per app服务配额。有关限额的更多信息,请参阅Amplify 托管服务限额

    要保持在每个应用程序 50 个分支的默认配额之内,请考虑在应用中启用自动删除分支。这将防止您在账户中积累仓库中已不存在的分支。

  2. 如果您使用的是公共 GitHub 仓库,并且您的 Amplify 应用程序附加了 IAM 服务角色,那么出于安全考虑,Amplify 不会创建预览。例如,带有后端的应用程序和部署到 WEB_COMPUTE 托管平台的应用程序需要一个 IAM 服务角色。因此,如果这些类型的应用程序存储库是公开的,则无法为其启用 Web 预览。

    要使网页预览适用于您的应用程序,您可以取消关联服务角色(如果应用程序没有后端或不是WEB_COMPUTE应用程序),也可以将 GitHub 存储库设为私有。

我的手动部署在 Amplify 控制台中一直处于待处理状态

通过手动部署,您可以在不连接 Git 提供程序的情况下,用 Amplify Hosting 发布您的 Web 应用程序。您可以使用以下四个部署选项之一。

  1. 将您的应用程序文件夹拖放到 Amplify 控制台中。

  2. 将.zip 文件(包含您网站的构建工件)拖放到 Amplify 控制台中。

  3. 将.zip 文件(包含您网站的构建项目)上传到 Amazon S3 存储桶,然后在 Amplify 控制台中将该存储桶连接到应用程序。

  4. 在 Amplify 控制台中使用指向.zip 文件(其中包含您网站的构建工件)的公共网址。

我们意识到,在 Amplify 控制台中使用应用程序文件夹进行手动部署时,拖放功能存在问题。由于以下原因,这些部署可能会失败。

  • 出现暂时性网络问题。

  • 在上传过程中,文件在本地会发生变化。

  • 浏览器会话尝试同时上传大量静态资源。

在我们努力提高拖放上传的可靠性的同时,我们建议您使用.zip 文件而不是拖放应用程序文件夹。

我们强烈建议将.zip 文件上传到 Amazon S3 存储桶,因为这样可以避免从 Amplify 控制台上传文件,并且可以提高手动部署的可靠性。Amplify 与 Amazon S3 的集成简化了这一过程。有关更多信息,请参阅 将 Amazon S3 存储桶中的静态网站部署到 Amplify

我需要更新我的应用程序的 Node.js 版本

对使用 Node.js 版本 16 和 18 的应用程序的 Amplify 支持将于 2025 年 9 月 15 日结束。已经部署的应用程序将继续运行。但是,在此日期之后,在升级到 Node.js 版本 20 或更高版本之前,您将无法为应用程序部署更新。

如果你使用的是亚马逊 Linux 2023 版本镜像,则默认支持 Node.js 版本 20。从 2025 年 9 月 15 日起, AL2023 图片将自动支持 Node.js 22,并将其默认 Node.js 版本从 18 更改为 22。

亚马逊 Linux 2 (AL2) 不自动支持 Node.js 版本 20 或更高版本。如果您目前使用的是 AL2,则建议您切换到 AL2 023。您可以在 Amplify 控制台中更改构建映像。您也可以使用支持您指定的 Node.js 版本的自定义编译映像。

在升级之前,我们建议您在一个新分支上测试应用程序,验证其是否正常运行。

升级选项

Amplify 控制台

你可以使用 Amplify 控制台中的实时包更新功能来指定要使用的 Node.js 版本。有关说明,请参阅在构建映像中使用特定程序包和依赖项版本

自定义构建映像

如果您使用的是自定义构建镜像,并且您的映像上安装了 NVM,则可以将其nvm install 20添加到您的 Dockerfile 中。要详细了解自定义编译映像的要求和配置说明,请参阅自定义构建映像

构建设置

通过将命令添加到 preB amplify.yml uild nvm use 命令部分,您可以指定要在应用程序的编译设置中使用的 Node.js 版本。有关更新应用程序编译设置的说明,请参阅为 Amplify 应用程序配置构建设置

以下示例演示如何自定义编译设置,以便在名为的测试分支上将默认 Node.js 版本设置为 Node.js 18 并升级到 Node.js 版本 20 node-20

frontend: phases: preBuild: commands: - nvm use 18 - if [ "${AWS_BRANCH}" = "node-20" ]; then nvm use 20; fi
警告

请注意,preBuild命令会在实时软件包更新后运行。该nvm use命令指定的 Node.js 版本将覆盖由实时软件包更新设置的 Node.js 版本。