如何通过 Lambda 在本地使用 DynamoDB

How to use DynamoDB locally with Lambda

我觉得这可能吗? 我在 sam 模板中定义了一个 lambda 和 api 网关。我使用 sam-local 来启动它。在我的 lambda 中,我想连接到我的本地 dynamoDB,但 lambda 一直超时。 代码如下:

let AWS = require('aws-sdk')
let dyn= new AWS.DynamoDB({ endpoint: new AWS.Endpoint("http://localhost:8000") })

function handler(event, context, callback) {
  dyn.listTables({Limit: 10}, function(err, data) {
    if (err) {
      console.log("Error", err.code)
    } else {
      console.log("Table names are ", data.TableNames)
    }
  })

  let response = {
    statusCode: 200
  }
  callback(null, response)
}

如果此代码 运行 在 lambda 之外,它可以正常工作

您的 DynamoDB 运行在本地计算机上,而 SAM Local 运行在 Docker 容器内。

如果您为 DynamoDB 创建一个 Docker 容器到 运行 中,并将其与 SAM 本地容器放在同一个 Docker 网络中,您可能会取得更大的成功。

您可以 运行 在容器内本地调用 DynamoDB,但我想知道如何从 SAM 的 Lambda 容器(本地)调用它

docker 运行 -p 8000:8000 amazon/dynamodb-local

我和你在做同样的事情。但是我使用此命令 运行 在本地将我的 DynamoDB 作为 docker 图像。我 运行 这个 mac:

docker run -p 8000:8000 amazon/dynamodb-local

在您的代码中更改为:

endpoint: new AWS.Endpoint("http://localhost:8000")

对此:

endpoint: new AWS.Endpoint("http://docker.for.mac.localhost:8000")

现在lambda可以连接到端口,不会超时。