保留AWS AppSync的AWS Amplify中,能否用Amazon Aurora替代DynamoDB?
可行,具体实现步骤如下
1. 初始化Amplify并配置Cognito认证
先完成基础的Amplify初始化和用户认证配置:
amplify init amplify add auth # 按提示选择默认配置或自定义Cognito用户池,完成后执行 amplify push
2. 创建并配置Amazon Aurora集群
- 登录AWS控制台,创建Aurora Serverless v2(或普通)集群,选择兼容PostgreSQL/MySQL的引擎
- 启用Data API(无需VPC配置,AppSync可通过HTTP直接访问),并创建数据库和对应的数据表:
CREATE TABLE posts ( id VARCHAR(255) PRIMARY KEY, title VARCHAR(255) NOT NULL, owner VARCHAR(255) NOT NULL -- 存储Cognito用户的sub标识 ); - 记录集群ARN、数据库名称,以及存储数据库账号密码的Secrets Manager密钥ARN
3. 添加AppSync GraphQL API
通过Amplify CLI添加API,选择手动配置以避开默认的DynamoDB绑定:
amplify add api # 选择GraphQL # 选择"Manual configuration" # 配置API名称,授权类型选择"Amazon Cognito User Pools" # 按需配置其他选项后,打开自动生成的schema.graphql文件
4. 配置AppSync与Aurora的数据源连接
可以通过AWS控制台操作:
- 打开AWS AppSync控制台,找到Amplify创建的API
- 进入数据源页面,点击“创建数据源”,选择“关系数据库”类型
- 选择你的Aurora集群,启用Data API,填入数据库名称、Secrets Manager密钥ARN,测试连接确认可用
5. 编写GraphQL Schema与Resolver
修改amplify/backend/api/<你的API名称>/schema.graphql,定义类型、操作和订阅:
type Post { id: ID! title: String! owner: String! } type Query { getPost(id: ID!): Post listPosts: [Post] } type Mutation { createPost(title: String!): Post updatePost(id: ID!, title: String!): Post deletePost(id: ID!): Post } type Subscription { onCreatePost: Post @aws_subscribe(mutations: ["createPost"]) onUpdatePost: Post @aws_subscribe(mutations: ["updatePost"]) onDeletePost: Post @aws_subscribe(mutations: ["deletePost"]) }
然后为每个操作配置VTL解析器(以核心操作为例):
createPost 请求模板
# 自动注入当前登录用户的sub作为owner $util.qr($context.args.put("owner", $context.identity.sub)) { "version": "2018-05-29", "statements": [ "INSERT INTO posts (id, title, owner) VALUES ('$util.autoId()', '$context.args.title', '$context.args.owner') RETURNING *" ] }
createPost 响应模板
$utils.toJson($context.result[0])
getPost 请求模板(实现owner权限控制)
{ "version": "2018-05-29", "statements": [ "SELECT * FROM posts WHERE id = '$context.args.id' AND owner = '$context.identity.sub'" ] }
getPost 响应模板
$utils.toJson($context.result[0])
同理编写listPosts、updatePost、deletePost的解析器,确保所有操作都验证owner = $context.identity.sub,实现仅所有者可访问的权限逻辑。
6. 部署并测试
执行部署命令将配置同步到AWS:
amplify push
之后可以通过Amplify客户端调用GraphQL操作,测试认证、数据读写和订阅功能,确认只有登录用户能操作自己的Post数据。
内容的提问来源于stack exchange,提问作者jonathan
相关产品推荐
相关产品推荐

