5

我认为这可能吗?我在 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 之外运行,则可以正常工作

4

3 回答 3

7

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

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

于 2018-02-08T11:01:17.773 回答
6

我正在和你做同样的事情。但是我使用此命令在本地将我的 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 可以连接到端口并且不会超时。

于 2019-04-10T14:33:30.280 回答
0

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

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

于 2019-03-04T17:55:37.170 回答