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

AppSync中基于Cognito身份选择租户专属DynamoDB表的方案咨询

AppSync多租户单API对接独立租户DynamoDB表解决方案

最优实现方案(完全在解析器模板内完成逻辑)

你可以通过单个通用DynamoDB数据源实现动态路由到不同租户表,无需额外中间件或多套API,核心逻辑利用了AppSync DynamoDB数据源请求映射模板中TableName参数的优先级高于数据源绑定表配置的特性,具体操作步骤如下:

  • 第一步:创建一个通用DynamoDB数据源,创建时可随便绑定一张已存在的DynamoDB表(仅作为创建数据源的必填占位项,实际不会使用该表)
  • 第二步:为该数据源关联的IAM角色配置所有租户DynamoDB表的操作权限,建议你的租户表使用统一命名前缀(如tenant-xxx),权限资源可配置为通配符格式 arn:aws:dynamodb:<你的AWS区域>:<你的AWS账号ID>:table/tenant-*,避免后续新增租户需要重复修改权限
  • 第三步:在请求映射模板中,根据Cognito身份携带的租户ID动态拼接表名,示例模板如下:
{
  "version": "2018-05-29",
  "operation": "GetItem",
  "TableName": "tenant-${ctx.identity.claims['custom:tenantId']}",
  "Key": {
    "id": $util.dynamodb.toDynamoDBJson($ctx.args.id)
  }
}
  • 第四步:响应映射模板无需特殊修改,可正常使用$util.dynamodb.fromDynamoDB等工具类完成DynamoDB格式到普通JSON的转换

方案优势

完全匹配你的需求:

  • 各租户使用独立DynamoDB表,可单独配置吞吐量、索引规则,不会互相影响
  • 所有逻辑均在解析器模板内完成,无需额外引入Lambda,性能和原生DynamoDB数据源一致
  • 所有租户共用同一套AppSync API,无需维护多套端点配置

注意事项

  • 建议在Cognito用户池中将租户ID对应的自定义属性设置为不可修改,避免用户自行篡改属性越权访问其他租户数据
  • 可在解析器开头增加租户ID合法性校验逻辑,拦截非法请求
  • 租户表的命名规则需严格遵循权限配置的通配符规则,避免权限不足问题

内容的提问来源于stack exchange,提问作者zmthy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:48:03