在使用stepfunction从AWS dynamoDB获取数据时,我得到错误“提供的键元素与模式不匹配”。
阶跃函数定义
{
"Comment": "This is your state machine",
"StartAt": "Choice",
"States": {
"Choice": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.data.Type",
"StringEquals": "GET",
"Next": "DynamoDB GetItem"
},
{
"Variable": "$.data.Type",
"StringEquals": "PUT",
"Next": "DynamoDB PutItem"
}
]
},
"DynamoDB GetItem": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:getItem",
"Parameters": {
"TableName": "KeshavDev",
"Key": {
"Email": {
"S": "$.Email"
}
}
},
"End": true
},
"DynamoDB PutItem": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:putItem",
"Parameters": {
"TableName": "KeshavDev",
"Item": {
"City": {
"S.$": "$.City"
},
"Email": {
"S.$": "$.Email"
},
"Address": {
"S.$": "$.Address"
}
}
},
"InputPath": "$.data",
"End": true
}
}
}
输入
{
"data": {
"Type": "GET",
"Email": "demo@gmail.com"
}
}
错误
{ "resourceType": "dynamodb "," resource": "getItem "," error": "DynamoDB。AmazonDynamoDBException ","原因":"提供的键元素与架构不匹配(服务:AmazonDynamoDBv2状态码:400;错误代码:ValidationException请求ID:a 78 C3 D7 a-ca3f-4483-b986-1735201 D4 ef 2;代理:空)" }
与 AWS 文档相比,我发现 getItem
任务存在一些潜在问题。
Key
字段需要是S.$
类似于您在pu项目
任务中的内容。ResultPath
属性来告诉状态机将结果放在哪里。$. data. Email
"DynamoDB GetItem": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:getItem",
"Parameters": {
"TableName": "KeshavDev",
"Key": {
"Email": {
"S.$": "$.data.Email"
}
}
},
"ResultPath": "$.DynamoDB",
"End": true
},
老实说,我不确定这些因素中是否有一个导致了验证错误,这是一些需要实验的东西。
另一方面,亚马逊国家语言有一些开源验证器,但在这种情况下,它们不是很有帮助,并说你的代码是有效的。
其工作原理,除了上述步骤外,还在步骤函数定义中增加了两个关键点。DynamoDb有两个键。