You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:42:55