使用 AWS Amplify 开始全栈 Web 应用开发 - Git 集成部署与后端构建

通过 GitHub 集成构建每个分支的自动部署环境,并使用 Backend Gen 2 以 TypeScript 定义认证 / API / 存储。还支持 Next.js 的 SSR。

Amplify 概述

Amplify 是一项整合全栈 Web / 移动应用程序构建与托管的服务。Amplify Hosting 提供与 Git 存储库集成的 CI/CD 和全球 CDN 托管。Amplify Backend(Gen 2)则使用 TypeScript 和 CDK 定义 / 部署认证、API、存储等后端资源。与 Vercel 或 Netlify 相比,区别之一是与 AWS 服务(Cognito、AppSync、DynamoDB)的原生集成。它支持 React、Next.js、Vue、Nuxt、Angular 等主流框架,并同时支持 SSR 和 SSG。

Hosting 与 Backend

将 GitHub 存储库连接到 Amplify Hosting 后,会为每个分支准备自动部署的环境。可以将 main 分支作为生产环境,将 develop 分支作为预发布环境来运营。Amplify Backend 使用 TypeScript 定义后端资源。认证会自动构建 Cognito User Pool,API 会自动构建 AppSync(GraphQL)或 API Gateway(REST),存储会自动构建 S3 存储桶。使用 npx ampx sandbox 命令可以为每位开发者启动独立的后端环境,防止团队开发中的环境冲突。

自定义域名与 SSR

Amplify Hosting 提供自定义域名设置和 SSL 证书的自动签发。连接 Route 53 的域名后,DNS 设置会自动配置。SSR(Server-Side Rendering)支持 Next.js 和 Nuxt。在启用了预览的分支中,会为每个拉取请求创建预览环境,审核后合并即可自动部署到生产环境。环境变量可以按分支设置,从而在开发 / 预发布 / 生产中分别使用不同的 API 端点。

Amplify 的费用

Amplify Hosting 的构建费用约为每分钟 0.01 美元,托管费用约为每 GB 每月 0.023 美元,SSR 请求约为每 100 万次请求 0.30 美元(截至 2026 年 10 月)。在 SSR 中,除了请求数之外,处理时间(GB 小时)也会产生费用。属于 AWS 免费套餐的范围会因账户的创建时间和套餐的种类而不同。Amplify Backend(Gen 2)适用所使用的 AWS 服务(AppSync、DynamoDB、Cognito、S3)的单独费用。使用构建缓存可以缩短构建时间,有助于控制构建费用。

代表性用例

Amplify 特别适合希望将前端和后端作为一个整体快速启动的情况。对于只需推送到 Git 就能发布 React 或 Next.js 的 SPA / Jamstack 网站的用途,可以同时获得 CDN 分发和 CI/CD。对于带认证的会员网站或仪表板这样的全栈应用,可以根据 TypeScript 的定义构建基于 Cognito 的认证和 AppSync 的 GraphQL API。在初创企业的 MVP 开发、短期构建内部工具等希望减少基础设施构建工时的场景中,它也是易于使用的选择。

Backend Gen 2 的开发方式

Backend Gen 2 将后端资源声明为 TypeScript 代码。使用 defineAuth、defineData、defineStorage 等函数定义资源后,会在内部转换为 CDK 并进行部署。标准功能无法满足的部分可以直接编写 CDK 构造进行扩展,因此更容易兼顾 Amplify 的便捷和 CDK 的灵活性。启动 npx ampx sandbox 后,会为每位开发者准备隔离的云环境,本地的代码变更会反映到云端的资源中。可以在避免团队开发中环境冲突的同时,以接近生产的架构进行验证。

构建与分支策略的最佳实践

Amplify 的构建步骤在 amplify.yml 中以声明方式定义。可以为 preBuild / build / postBuild 各阶段指定命令,纳入依赖包的安装和测试的执行。在分支策略上,可以采用这样的做法:将生产分支和预发布分支分开,在拉取请求的预览环境中审核后再合并到生产分支。环境变量按分支设置,按环境切换 API 端点和功能标志。在 Monorepo 架构中,可以指定应用的根目录来缩小对象范围,启用构建缓存后可以避免重新获取依赖包,从而缩短构建时间。

与其他托管方式的选用

即使在 AWS 内部,Web 托管也有多种选择。对于静态网站或简单的 SPA,如果自行搭建 CI/CD 也无妨,那么 S3 和 CloudFront 的架构更容易控制费用,也能进行精细的控制。另一方面,如果希望让在容器中运行的 API 服务器持续运行,则 ECS,或在已经使用的情况下 App Runner(已停止接受新客户)会成为候选,这些都不在 Amplify 的职责范围之内。Amplify 适合希望一站式处理前端部署自动化和后端代码定义的情况。如果需求只是静态分发则用 S3 和 CloudFront,如果以服务器端逻辑为主则用 Lambda,如果已经在使用 App Runner 也可以用它,像这样根据应用的性质分别使用是合理的。

总结

Amplify 是一项整合 Web 应用程序前端托管与后端构建的服务。它通过与 Git 存储库的集成构建每个分支的自动部署环境,并且也支持 Next.js 的 SSR。在 Backend Gen 2 中可以用代码定义后端,有助于提升全栈开发的生产效率。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享