如何通过 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可以连接到端口,不会超时。
我觉得这可能吗? 我在 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可以连接到端口,不会超时。