当前位置: 首页 > 知识库问答 >
问题:

AWS步进函数,验证异常

萧懿轩
2023-03-14

在使用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个答案

蓟雪峰
2023-03-14

其工作原理,除了上述步骤外,还在步骤函数定义中增加了两个关键点。DynamoDb有两个键。

    < li >主分区密钥 < li >主要排序关键字
柳杰
2023-03-14

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

老实说,我不确定这些因素中是否有一个导致了验证错误,这是一些需要实验的东西。

另一方面,亚马逊国家语言有一些开源验证器,但在这种情况下,它们不是很有帮助,并说你的代码是有效的。

 类似资料:
  • 我在一个函数中有这样的代码块: 它获取一些数据,然后对数据运行验证()。 但是,我对数据的验证实际上也是异步的,因为它是根据一个json模式来验证数据的,而json模式位于一个独立的json文件中,所以它必须首先读取该文件。 我使用了一个承诺来读取文件内容,然后进行验证: 如何编辑此问题中的顶部代码块以解释if语句()中的异步函数?

  • 说明 支付宝境外在线支付-异步通知验证接口 官方文档:https://global.alipay.com/service/website_split_cn/21 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\Online\NotifyVerify\Request 属性 名称 类型 说明 $service string 接口名称 $notify_id

  • 粗略地说,异步函数 为使用 Promise 的代码提供了更好的语法。 38.1. 异步函数:基础知识 考虑以下异步函数: async function fetchJsonAsync(url) { try { const request = await fetch(url); // async const text = await request.text(); // as

  • 我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添

  • 问题内容: 我如何最好地处理以下情况? 我有一个构造函数,需要一些时间才能完成。 我看到了三个选项,每个选项似乎都与众不同。 一种 ,向构造函数添加回调。 第二 ,使用EventEmitter发出“已加载”事件。 或三 ,阻止构造函数。 但我以前从未见过任何完成的事情。 我还有什么其他选择? 问题答案: 鉴于有必要避免在Node中进行阻塞,事件或回调的使用并不奇怪(1)。 稍加修改为2,即可将其与

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 我有一个AWS lambda函数,它的工作是侦听传入的SNS事件,从Secrets Manager检索RDS秘密,并使用npm上的mssql库使用3个sql查询执行sql事务。 10次中有1次它正确地将所有3个查询提交到数据库。每隔一次,console.log消息就会乱序,有时lambda函数会在事务连接打开时终止,导致连接被阻塞。这绝对是一个同步问题,但无法判断它是来自AWS Lambda、ms

  • 问题内容: 首先,这是一个非常特殊的情况,它以错误的方式故意将异步调用改型为一个非常同步的代码库,该代码库长成千上万行,并且当前时间不具备进行更改的能力。对的。” 它伤害了我的每一个生命,但是现实和理想往往并没有相互融合。我知道这很糟糕。 好的,顺便说一句,我该如何做,这样我可以: 示例(或缺少示例)全部使用库和/或编译器,这两种库均不适用于此解决方案。我需要一个如何使其冻结的具体示例(例如,在调