【问题标题】:AWS Stepfunction, ValidationExceptionAWS Stepfunction,验证异常
【发布时间】:2022-02-02 09:20:32
【问题描述】:

我在使用 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", "cause": "提供的密钥 元素与架构不匹配(服务:AmazonDynamoDBv2;状态 代码:400;错误代码:验证异常;请求编号: a78c3d7a-ca3f-4483-b986-1735201d4ef2;代理:null)" }

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb aws-step-functions dynamodb-queries


    【解决方案1】:

    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
        },
    

    老实说,我不确定所有这些中的一个是否会导致验证错误,这些都是要试验的东西。

    另一方面,亚马逊状态语言有一些开源 validators,但对于这种情况,它们不是很有帮助,并说您的代码是有效的。

    【讨论】:

    • 错误还在出现,$.data.Email 是对的
    • 嗨,它现在可以工作了,通过在步骤函数定义中添加两个键。 dynamodb 有两个键。 1) 主分区键 2) 主排序键。而且你提到的步骤也是对的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      相关资源
      最近更新 更多