AWS Stepfunction,ValidationException

AWS Stepfunction, ValidationException

我在使用 stepfunction 从 AWS dynamoDB 获取数据时收到错误“提供的关键元素与模式不匹配”​​。

stepfunction 定义

{
  "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", "cause": "The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: a78c3d7a-ca3f-4483-b986-1735201d4ef2; Proxy: null)" }

AWS documentation 相比,我发现 getItem 任务存在一些潜在问题。

  • 我认为 Key 字段需要 S.$ 类似于您在 putItem 任务中的内容。
  • 没有 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
    },

老实说,我不确定是否所有这些因素之一都导致了验证错误,这些是一些可以试验的东西。

另一方面,Amazon State Language 有一些开源 validators,但对于这种情况,它们不是很有帮助,并说您的代码是有效的。

它的工作原理,在 JD D 上面提到了步骤,并且还通过在步骤函数定义中添加了两个键。 DynamoDb 有两个键。

  1. 主分区键
  2. 主排序键