如何在AWS CDK AppSync的KeyCondition中传入context.args的变量
解决方案
你需要使用appsync.AttributeValue.raw()方法包裹VTL变量字符串,告诉CDK不要对该值做字符串转义处理,正确写法如下:
requestMappingTemplate: appsync.MappingTemplate.dynamoDbQuery( appsync.KeyCondition.eq("id", appsync.AttributeValue.raw("$ctx.args.id")) ),
错误原因说明
你之前直接传入"$ctx.args.id"字符串时,CDK会将其识别为普通字符串值,生成模板时自动添加双引号转义,最终会生成类似"S": "\"$ctx.args.id\""的异常代码,无法正常解析为上下文参数。raw()方法的作用就是标记该值为原生VTL表达式,直接原样输出到生成的模板中。
更推荐的写法
如果你使用的是v2.20.0及以上版本的AWS CDK,可以直接使用内置的上下文参数读取方法,无需手动写VTL字符串,类型安全性更高:
requestMappingTemplate: appsync.MappingTemplate.dynamoDbQuery( appsync.KeyCondition.eq("id", appsync.Context.argument('id')) ),
内容的提问来源于stack exchange,提问作者plutolaser
相关产品推荐
相关产品推荐

