【问题标题】:How to use DynamoDB locally with Lambda如何通过 Lambda 在本地使用 DynamoDB
【发布时间】:2018-01-19 14:07:53
【问题描述】:

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

【问题讨论】:

  • 尝试添加更多调试行并将 lambda 超时设置为 300 秒(最大值)。如果缩小到一行,您应该能够缩小范围。
  • 我收到以下错误:{ 错误:在 Export._exceptionWithHostPort (util.js:1041: 20) 在 TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14) 消息:'connect ECONNREFUSED 127.0.0.1:8000',代码:'NetworkingError',errno:'ECONNREFUSED',系统调用:'connect',地址:'127.0.0.1',端口:8000,区域:'us-east-1',主机名:'localhost',可重试:true,时间:2018-01-22T08:54:57.175Z }
  • 听起来 DynamoDB 没有运行,或者在不同的端口上运行。您如何在本地启动 DynamoDB?
  • java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb 给出:使用以下配置初始化 DynamoDB Local:端口:8000 InMemory:false DbPath:null SharedDb:true shouldDelayTransientStatuses : 假 CorsParams: *

标签: lambda amazon-dynamodb aws-api-gateway dynamo-local


【解决方案1】:

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

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

【讨论】:

  • 能否详细说明如何让SAM本地容器和DynamoDB容器在同一个网络上运行?
【解决方案2】:

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

【讨论】:

  • 因此将端点更改为上述对我来说效果很好,但我很好奇如何确保我构建 SAM 服务的容器与 dynamodb 容器位于同一网络上?我宁愿能够将端点设置为http://localhost:8000 而不必担心...任何输入将不胜感激。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多