AWS Amplify
Source: Dev.to
概述
我想抽出一点时间,在之前的文章提到 AWS Amplify 后再深入探讨一下,并分享我在前端开发过程中学到的经验。Amplify 确实兑现了快速部署的承诺:就像我用 Copilot 脚手架创建一个 React 应用一样快,Amplify 立即完成了构建并部署。开启自动检测分支和自动构建后,任何一次能够编译的 push 都会触发完整的构建和部署流水线,全部由系统处理。
选择不集成 Amplify 后端功能
我刻意避免将 Amplify 直接绑定到函数、存储和数据服务。虽然 Amplify 能为你预置并管理许多 AWS 资源,但我希望拥有更细粒度的控制。于是我选择使用 API Gateway 作为 Lambda 的入口,以便实现自定义的验证和错误处理。受管授权器保护调用 Bedrock 模型和从 S3 获取对象的 Lambda。我也更倾向于不使用 TypeScript 编写后端——在 2026 年,React 已经足够让我学习,后端我会使用更熟悉的语言来实现。
Terraform 与手动部署 对比
在之前的文章中,我询问大家如何为个人项目部署资源。这篇文章说明了我为何从手动控制台配置转向 Terraform,尽管我对 provider 暴露的 Amplify 资源了解有限。实践中暴露出一个常见的摩擦点:当前的 AWS Terraform provider 并未提供 Amplify 应用的监控或告警资源,因此这些方面仍需在控制台手动配置。
示例 Terraform 配置
resource "aws_amplify_app" "homeschool_app" {
name = "homeschool-app"
repository = "https://github.com/homeschool-app" # Replace with your GH repository
build_spec = <<-EOT
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
EOT
enable_auto_branch_creation = true
auto_branch_creation_patterns = [
"*",
"*/**",
]
auto_branch_creation_config {
enable_auto_build = true
}
environment_variables = {
# Cognito User Pool Domain (without the .auth.region.amazoncognito.com part)
VITE_COGNITO_DOMAIN = "your-cognito-domain"
# Cognito User Pool App Client ID
VITE_COGNITO_CLIENT_ID = "your-cognito-client-id"
# Example: VITE_COGNITO_CLIENT_ID=1a2b3c4d5e6f7g8h9i0j1k2l3m
# AWS Region (optional - defaults to us-east-1)
VITE_AWS_REGION = "us-east-1"
# Redirect URI after successful login (optional - defaults to current origin)
VITE_COGNITO_REDIRECT_URI = "http://localhost:3000"
# For production: VITE_COGNITO_REDIRECT_URI=https://your-domain.com
# API Configuration
# Main API Gateway URL for general endpoints
VITE_API_ENDPOINT = "https://your-api-gateway.execute-api.us-east-1.amazonaws.com/prod"
}
}
结论
Amplify 让前端部署变得轻而易举,但当你需要对后端服务进行更严格的控制时,将 API Gateway、Lambda 与 Terraform 结合使用,能够提供目前完全托管的 Amplify 堆栈所缺乏的灵活性和可视性。这种做法也会暴露出 Terraform provider 的不足,需要手动处理的地方——在未来的项目中需要特别留意。