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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:42:45