我正在为阶跃函数计算机创建基础结构即代码。其中一个状态的类型为“任务”,它在DynamoDB表上执行DynamoUpdateItem。
代码如下所示:
const updateDDB = new tasks.DynamoUpdateItem(this, 'Update item into DynamoDB', {
key: { ['Task'] : tasks.DynamoAttributeValue.fromString('Processing') },
table: table,
updateExpression: 'SET LastRun = :label',
expressionAttributeValues: {
':label.$': DynamoAttributeValue.fromString(JsonPath.stringAt('$$.Execution.StartTime')),
},
resultPath: JsonPath.DISCARD,
});
但是,我一直收到一个错误消息,说模式验证失败,
“字段”:label.$“的值必须是包含JSONPath的字符串,但该字符串是DynamoDB/Parameters中的/States/Update项处的对象”
怎么可能不是字符串!
我尝试过将其编写为[':label.$'],甚至在JsonPath方法的末尾编写.toString()函数
expressionAttributeValues: {
':label.$': (DynamoAttributeValue.fromString(JsonPath.stringAt('$$.Execution.StartTime').toString())),
},
但似乎没有什么工作。我一直得到同样的问题,声称它不是一个字符串。
使用JSON.stringify()也不起作用,因为expressionAttributeValues接受一个键,并将其与DynamoAttributeValue匹配。
1条答案
按热度按时间wgx48brx1#
TL;DR删除表达式属性值定义中
':label.$': DynamoAttributeValue(...)
的后缀.$
。键应该简单地为':label'
。正如@TobiasS在评论中所说,问题出在状态机任务语法上。
:label.$
上的.$
后缀告诉AWS需要一个表示值路径的JSONPath字符串。但是字符串不是该字段的有效状态机语法。需要一个键值对。CDK文档中有一个语法正确的示例。您的CDK代码合成为:
AWS期望合成状态机定义为: