如何在AWS Step Functions中实现DynamoDB GetItem动态键输入?
在AWS Step Functions中动态指定DynamoDB GetItem的主键名称
解决转义问题的正确写法
你的思路方向是对的,但之前的转义方式有误,主要需要修正两个关键点:一是States.Format中要输出字面量大括号{},必须写成{{}}进行转义;二是JSON字符串中的双引号需要用\转义。调整后的合法写法如下:
{ "TableName.$": "$.TableName", "Key.$": "States.StringToJson(States.Format('{{\"{}\": {{\"S.$\": \"{}\"}}}}', $.PrimaryKeyName, $.PrimaryKeyValue))" }
这个表达式会先通过States.Format生成包含动态主键名和值的JSON字符串,再用States.StringToJson将其转换为合法的JSON对象,Step Functions就能正确解析执行。
替代方案:拆分步骤简化逻辑
如果觉得单步表达式过于繁琐,可以拆分为两个步骤来实现:
- Pass状态构造Key字符串:先生成带动态主键信息的字符串,暂存到临时字段
{ "Type": "Pass", "Parameters": { "KeyStr.$": "States.Format('{{\"{}\": {{\"S.$\": \"{}\"}}}}', $.PrimaryKeyName, $.PrimaryKeyValue)", "TableName.$": "$.TableName" }, "ResultPath": "$.temp", "Next": "GetItemFromDynamoDB" }
- DynamoDB:GetItem状态:直接引用转换后的Key对象执行查询
{ "Type": "Task", "Resource": "arn:aws:states:::dynamodb:get-item", "Parameters": { "TableName.$": "$.temp.TableName", "Key.$": "States.StringToJson($.temp.KeyStr)" }, "End": true }
内容的提问来源于stack exchange,提问作者Tofig Hasanov
相关产品推荐
相关产品推荐

