在本地调用函数时,AWS SAM CLI 无法访问 Dynamo DB

ree*_*ces 4 amazon-web-services amazon-dynamodb aws-lambda aws-sam-cli

我正在使用aws-sam-cli构建一个 AWS lambda 。在函数中,我想访问某个 DynamoDB 表。我的问题是,当我使用以下sam local invoke命令在本地调用该函数时,该函数会返回此错误:ResourceNotFoundException: Requested resource not found

const axios = require('axios')
const AWS = require('aws-sdk')
AWS.config.update({region: <MY REGION>})
const dynamo = new AWS.DynamoDB.DocumentClient()

exports.handler = async (event) => {
  const scanParams = {
    TableName: 'example-table'
  }
  const scanResult = await dynamo.scan(scanParams).promise().catch((error) => {
    console.log(`Scan error: ${error}`)
    // => Scan error: ResourceNotFoundException: Requested resource not found
  })

  console.log(scanResult)
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我真的将sam deploy它发送到 AWS 并在实际的 Lambda 控制台中对其进行测试,它会正确记录表信息。

{
  Items: <TABLE ITEMS>,
  Count: 1,
  ScannedCount: 1
}
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?或者我需要做一些额外的配置才能让它在本地工作吗?我的template.yaml看起来像这样:

{
  Items: <TABLE ITEMS>,
  Count: 1,
  ScannedCount: 1
}
Run Code Online (Sandbox Code Playgroud)

me2*_*esh 5

我相信当您在本地调用 Lambda 时,SAM 无法识别用于远程资源的配置文件,例如:DynamoDB

尝试传递远程 dynamoDB 的凭据配置文件

前任:

sam local invoke --profile default
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看命令文档:https : //docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-local-invoke.html

  • 太感谢了!我很困惑,因为带有“AWS_PROFILE=default”环境变量的“sam local invoke”也不起作用。您的解决方案完美运行。 (2认同)
  • @55Cancri 话虽这么说,如果您按照 @me2resh 的回答所述指定配置文件,您还可以从本地 lambda 访问云中真正的 DynamoDB(不是本地 DynamoDB)。在这种情况下,您不应将端点指定为“http://docker.for.mac.localhost:8000”。 (2认同)