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

CDK V2中如何为AppSync DynamoDB查询Resolver配置ExpressionValues?

解决CDK V2 AppSync Resolver中设置expressionValues的问题

我懂你的痛点——CDK把很多AppSync的细节封装成便捷方法后,反而让人找不到对应CloudFormation里expressionValues的配置入口。针对你的需求,这里有两种靠谱的实现方式,完全匹配你原来的CloudFormation模板功能:

方法1:使用CDK封装的dynamoDbQuery便捷方法

CDK的dynamoDbQuery方法其实支持通过第三个参数(QueryOptions)传入表达式值。另外注意修正typeName——你原来的CloudFormation里是把Resolver挂载到Items类型上,但之前的CDK代码写的是Query,这会导致Resolver挂载位置错误。

完整代码如下:

import * as appsync from 'aws-cdk-lib/aws-appsync';

// ... 其他相关代码(比如定义tableDataSource、rGraphQLApi等) ...

const resolver = tableDataSource.createResolver({
  typeName: 'Items', // 与CloudFormation中的TypeName保持一致
  fieldName: 'getItems',
  requestMappingTemplate: appsync.MappingTemplate.dynamoDbQuery(
    appsync.KeyCondition.eq('itemId', ':itemId'),
    'itemId-index',
    {
      // 这里对应CloudFormation里的expressionValues
      expressionValues: {
        ':itemId': appsync.util.dynamodb.toDynamoDB(appsync.util.context.source('itemId'))
      }
    }
  ),
  responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(),
});

这里appsync.util.context.source('itemId')会生成对应VTL中的${context.source.itemId},appsync.util.dynamodb.toDynamoDB()则会把值转换成DynamoDB需要的格式(比如字符串类型的{ "S": "xxx" })。

方法2:直接复用原始VTL模板

如果你更习惯完全复刻CloudFormation的实现,不想依赖CDK的封装,可以直接用MappingTemplate.fromString()传入原始的VTL代码,这样和你原来的配置完全一致,没有学习成本:

import * as appsync from 'aws-cdk-lib/aws-appsync';

// ... 其他相关代码 ...

const resolver = tableDataSource.createResolver({
  typeName: 'Items',
  fieldName: 'getItems',
  requestMappingTemplate: appsync.MappingTemplate.fromString(`
    {
      "version" : "2017-02-28",
      "operation" : "Query",
      "query" : {
        "expression": "itemId = :itemId",
        "expressionValues" : {
          ":itemId" : { "S" : "${context.source.itemId}" }
        }
      },
      "index": "itemId-index"
    }
  `),
  responseMappingTemplate: appsync.MappingTemplate.fromString('$util.toJson($context.result.items)'),
});

两种方法都能实现你要的功能,你可以根据自己的习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:32:49