Skip to content
返回部署

AWS Amplify 全栈托管

Next.js SSR、Amplify 后端(鉴权、数据、存储)与 AWS 上 CI/CD 的 git 连接托管。

平台进阶

为什么

Amplify Hosting 在一个 git 连接管线中配对 Next.js/Astro/React 前端与 AWS 后端(Cognito 鉴权、AppSync GraphQL、S3 存储、DynamoDB)。避免手动接 8 个 AWS 服务,同时留在 AWS 享受合规、VPC 对等和企业 IAM。

何时使用

需要 AWS 后端服务(Cognito、AppSync、DynamoDB)配前端、企业合规(HIPAA、FedRAMP)或 VPC 集成时选 Amplify。纯静态站跳过(Cloudflare/Vercel 更便宜)或非 AWS 后端跳过。

如何做

1. 安装 CLI — npm i -g @aws-amplify/cli,然后 amplify configure 配 AWS 凭证 2. 初始化项目 — 前端仓库中 amplify init,创建 amplify/ 后端配置 + 环境 3. 加后端 — amplify add auth(Cognito)、add api(AppSync GraphQL)、add storage(S3) 4. 推后端 — amplify push 配置 CloudFormation 栈,输出 aws-exports.js 5. 连接托管 — Amplify 控制台 → 托管 web 应用 → 连接仓库,设构建 + 启动命令 6. 分支部署 — 每个 git 分支自动获独立后端环境(dev/staging/prod) 7. CI/CD — Amplify 控制台 push 时构建、测试、部署;用 amplify.yml 自定义 8. 自定义域名 — 控制台添加,Route53 或外部 DNS 用 CNAME 指向 amplifyapp.com

示例

# amplify.yml — CI/CD 构建规格(仓库根) version: 1 backend: phases: build: commands: - amplify push --yes frontend: phases: preBuild: commands: - npm ci build: commands: - npm run build artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/* - .next/cache/**/* # CLI 工作流 — 加鉴权 + GraphQL API # amplify add auth # > 默认配置(Cognito User Pool + Identity Pool) # amplify add api # > GraphQL # > 继续编辑?是 — 编辑 schema.graphql # amplify push // schema.graphql — AppSync schema type Todo @model @auth(rules: [{allow: owner}]) { id: ID! title: String! completed: Boolean! owner: String } // 前端用法 — 生成的 hooks import { withAuthenticatorator } from "@aws-amplify/ui-react"; import { listTodos } from "./graphql/queries"; function App({ signOut, user }) { const { data } = useQuery(listTodos); return <div>你好 {user.username} <button onClick={signOut}>登出</button></div>; } export default withAuthenticatorator(App);

常见问题

  • ⚠amplify push 报 CloudFormation 错 — 通常是名称冲突或部署角色 IAM 权限缺口
  • ⚠Next.js SSR 路由 502 — Amplify 托管需计算角色,或应用用了不支持的 Node API
  • ⚠aws-exports.js 每次 push 重新生成 — 提交它导致合并冲突,gitignore 它
  • ⚠Lambda 解析器冷启动 — 首次 GraphQL 查询 2-3s,用预置并发

最佳实践

  • ✓用 amplify env 按阶段隔离 — dev/staging/prod 获独立 Cognito + DynamoDB
  • ✓gitignore aws-exports.js — 按环境重新生成,提交导致漂移
  • ✓设 IAM 部署角色最小权限 — 避免 CI 用管理员凭证
  • ✓热 Lambda 解析器启用预置并发 — 消除 GraphQL 冷启动

常见问题解答

Amplify Hosting 和 S3+CloudFront 有什么不同?

Amplify Hosting 是 S3+CloudFront 上的托管层,加 git 部署、PR 预览、即时缓存失效。S3+CloudFront 更灵活但自管管线。求快用 Amplify,求控用原始 S3+CF。

为什么 Next.js 在 Amplify 上不工作?

Amplify Hosting 通过 Amplify compute 支持 Next.js SSR,但仅特定版本。查框架支持矩阵。App Router 或边缘运行时用 amplifyHosting compute 模式或部署到 Vercel。

如何按分支设环境变量?

Amplify Console 中设 Branch 作用域。后端环境(amplify push)与前端托管环境变量分开——两者都配。密钥用 AWS Secrets Manager。

为什么部署卡在 Provisioning?

Amplify 在配置 CloudFront 和 Lambda 资源,首次部署可能 5-15 分钟。后续部署更快。卡超 20 分钟时在 AWS 控制台查 CloudFormation 失败堆栈。

如何自定义 Amplify 创建的 CloudFront 分配?

不能直接改——Amplify 管理它。自定义头或重定向用应用根的 customHttp.yml 文件。需完全 CloudFront 控制时弹出到 S3+CloudFront 手动管理。