提问者:小点点

AWS步进函数,验证异常


在使用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;代理:空)" }


共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有两个键。

    < li >主分区密钥 < li >主要排序关键字