如何通过API Gateway的VTL映射模板与PartiQL查询DynamoDB数据
直接通过API Gateway用PartiQL查询DynamoDB的正确实现方案
一、修正VTL请求模板
你的现有模板存在参数解析问题,API Gateway直接集成DynamoDB时,需要用正确的VTL语法解析请求体参数,修正后的模板如下:
{ "Statement": "SELECT * FROM \"table\" WHERE name = ?", "Parameters": [ { "S": "$input.json('$.name')" } ] }
说明:用
$input.json('$.name')替代$input.path('$.name'),前者会直接提取请求体中name字段的字符串值,符合DynamoDB PartiQL参数的格式要求。
二、API Gateway集成配置步骤
- 新建POST方法,集成类型选择AWS Service
- 服务选DynamoDB,区域选择你的表所在的AWS区域
- HTTP方法设为POST,动作类型选Use action name,动作填写
ExecuteStatement - 进入集成请求的Mapping Templates,添加
application/json类型模板,使用上面修正后的VTL代码 - 配置API Gateway执行角色,确保该角色拥有
dynamodb:ExecuteStatement权限,示例权限策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:ExecuteStatement", "Resource": "arn:aws:dynamodb:你的区域ID:你的账号ID:table/table" } ] }
三、Postman测试规范
- 请求方法选POST,URL填写API Gateway部署后的Invoke URL
- 请求头添加
Content-Type: application/json - 请求体使用你提供的JSON:
{ "name": "polly" }
- 成功请求后会返回DynamoDB的查询结果,格式示例:
{ "Items": [ { "name": {"S": "polly"}, "age": {"N": "25"} } ] }
四、常见问题排查
- 若返回
ValidationException:检查表名转义是否正确、参数类型是否与表中字段类型匹配 - 若返回
AccessDeniedException:检查API Gateway执行角色的权限策略,确认资源ARN和动作配置正确 - 若返回空结果:验证DynamoDB表中确实存在
name为polly的条目
内容的提问来源于stack exchange,提问作者CloudLearner
相关产品推荐
相关产品推荐

