![](/img/trans.png)
[英]What is the difference between passing in argument as object vs string into a function
[英]What counts as an object vs a string in Typescript?
我正在為 Step Functions 機器創建基礎架構即代碼。 這些狀態之一是“任務”類型,它在 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 的字符串,但在 /States/Update 項目到 DynamoDB/Parameters 中是 OBJECT”
它怎么不是字符串?!
我嘗試將其寫為 [':label.$'],甚至在 JsonPath 方法的末尾寫 a.toString() function
expressionAttributeValues: {
':label.$': (DynamoAttributeValue.fromString(JsonPath.stringAt('$$.Execution.StartTime').toString())),
},
但似乎沒有任何效果。 我一直遇到同樣的問題,聲稱它不是字符串。
使用 JSON.stringify() 之類的東西也不起作用,因為 expressionAttributeValues 獲取一個鍵並將其與 DynamoAttributeValue 匹配。
TL;DR在表達式屬性值定義中刪除':label.$': DynamoAttributeValue(...)
中的.$
后綴。 鍵應該只是':label'
。
正如@TobiasS 在評論中所說,問題出在您的 State 機器任務語法上。 :label.$
上的.$
后綴告訴 AWS 需要一個表示值路徑的 JSONPath 字符串。 但字符串無效 State 此字段的機器語法。 需要鍵值對。 CDK 文檔有一個語法正確的示例。
❌ 你的 CDK 代碼綜合成什么:
{
"ExpressionAttributeValues": {
":label.$": { "S.$": "$$.Execution.StartTime" }
},
}
✅ AWS 期望合成的 State 機器定義為:
{
"ExpressionAttributeValues": {
":label": { "S.$": "$$.Execution.StartTime" }
},
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.