【问题标题】:Lambda AWS Rekognition to DynamoDB - ErrorLambda AWS Rekognition 到 DynamoDB - 错误
【发布时间】:2019-02-22 23:55:11
【问题描述】:

我正在使用 this tutorial 将 Rekognition 结果链接到 DynamoDB 表。 它给了我这个错误:

{
"errorMessage": "Unable to get object metadata from S3. Check object key, region and/or access permissions.",
"errorType": "InvalidS3ObjectException",
"stackTrace": [
    "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)",
    "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
    "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
    "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
    "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
    "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
    "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
    "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
    "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
    "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
]
}

来自 GitHub 的代码是this

我确保 lambda-bucket 和表的区域名称相同。

我是这方面的初学者,所以任何帮助将不胜感激!

谢谢!

编辑: 我做了一些修改,现在它给了我这个:

{
"errorMessage": "Requested resource not found",
"errorType": "ResourceNotFoundException",
"stackTrace": [
    "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)",
    "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
    "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
    "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
    "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
    "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
    "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
    "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
    "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
    "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
]

}

【问题讨论】:

  • 包含对象的 S3 存储桶是否与您正在调用的 Rekognition API 端点位于同一区域?
  • @jarmod 是的 - lambda、table 和 bucket 都是 us-east-1
  • 请使用文件名是一个简单单词的图像进行测试,例如 faces.jpg 而不是“test faces.jpg”。如果您使用 S3 控制台上传后一个文件,那么它将显示在您的 Lambda 函数中,键为 test+faces.jpg(空格转义为加号),Rekognition 不会找到该文件,导致原始ResourceNotFoundException。
  • @jarmod 我做了,我不认为这是问题
  • 那个 github 项目在这里运行良好(在 us-east-1 中)。我按照 Medium 文章中的说明操作,确保 Lambda 的 IAM 角色同时具有 AWSLambdaFullAccess 和 AmazonRekognitionFullAccess,使用 DynamoDB 表名修改 config.js,部署代码,并将图像放入 S3 存储桶。这触发了 Lambda 函数,该函数进行了必要的 Rekognition 调用并将结果正确地保存到 DynamoDB 中。我确实 最初遇到了 ResourceNotFoundException,但那是因为我的文件名是“test faces.jpg”,如前所述。所以它确实有效。

标签: node.js amazon-web-services amazon-s3


【解决方案1】:

您看到 ResourceNotFoundException 的事实表明了几个潜在的原因:

  • Lambda 函数找不到 DynamoDB 表:确保您修改了 config,js 以正确包含 DynamoDB 表的名称,方法是设置 config.dynamo.tableName = '&lt;your table&gt;'
  • Rekognition 无法从 S3 读取图像:确保图像文件名的格式为 faces.jpg 而不是 test faces.jpg(转义为 test+faces.jpg

【讨论】:

    【解决方案2】:

    发生这种情况的原因有几个:

    1) 资源肯定不存在。三重检查 Bucket 名称、DynamoDB 表名称、区域等。

    2) 您的函数很可能缺少权限。检查您的 Lambda 函数正在使用的 IAM 角色并将正确的策略附加到它。在这种情况下,您的函数需要访问 S3、DynamoDB 和 Rekognition。确保所有这些策略都附加到 IAM 角色。

    【讨论】:

    • 感谢您的回答-我检查了所有这些,我什至公开了存储桶,但它仍然给我同样的错误-
    • 您是否已将 SDK 配置为指向特定区域?类似 AWS.config.update({region: 'my-region'})
    • 我没有 - 仍然没有 - 抱歉
    • 如果我是你,我会尝试通过减少代码以仅连接到 DynamoDB 表来隔离问题。如果您仍然继续获取 resourceNotFoundException,则更容易跟踪。
    • 这不起作用,因为我使用的是现成的 json 代码(我对 nodejs 一无所知)。我现在正在使用我熟悉的 python 来尝试这个。我刚刚发布了这个问题:stackoverflow.com/questions/54824911/…你能帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多