我在本地运行DynamoDB:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
我试图运行lambda-local
示例:
lambda-local -f aws -e event.json
但是,我根本没有得到dynamodb的任何输出。 没有错误,似乎跳过/忽略对dynamodb.listTables()
的调用。怎么了?
我的aws.js
如下:
var AWS = require("aws-sdk");
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000",
accessKeyId: "BLAH",
secretAccessKey: "BLAH"
});
var dynamodb = new AWS.DynamoDB();
exports.handler = function(event, context) {
console.log("EVENT: ", event);
event.int++;
console.log("LIST TABLES:");
dynamodb.listTables(function(err, data) {
if (err) {
console.log("Error: ", err.code);
} else {
console.log("Table names are: ", data.TableNames);
}
});
console.log("---SUCCEED:---");
context.succeed(event);
};
和event.json
:
{
"obj" : { "a" : "b" },
"int" : 1,
"str" : "qwerty",
"arr" : [ 1, 2, 3, 4 ]
}
输出是:
EVENT: { obj: { a: 'b' }, int: 1, str: 'qwerty', arr: [ 1, 2, 3, 4 ] }
LIST TABLES:
---SUCCEED:---
OUTPUT
--------------------------------
{
"obj": {
"a": "b"
},
"int": 2,
"str": "qwerty",
"arr": [
1,
2,
3,
4
]
}
我期待在LIST TABLES和--SUCCEED之间至少看到一些东西:---
然而,没有输出也没有错误。我还检查了DynamoDB日志,那里什么都没有。行event.int++
工作正常,我看到所有其他console.log()
次来电。
此外,我从节点运行此代码只是为了证明DynamoDB正在运行,它确实列出了表格:
node ListTables.js
ListTables.js的内容(基本上与上面的代码相同):
var AWS = require("aws-sdk");
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000",
accessKeyId: "BLAH",
secretAccessKey: "BLAH"
});
var dynamodb = new AWS.DynamoDB();
dynamodb.listTables(function(err, data) {
if (err) {
console.log("Error: ", err.code);
} else {
console.log("Table names are: ", data.TableNames);
}
});
按预期输出: 表名是:['电影']
我之前创建该表只是为了证明DynamoDB实际上正在运行并接受来自node
的连接。
答案 0 :(得分:0)
问题和解决方案是DynamoDB函数被称为异步,因此脚本早先完成。
我将context.succeed(event);
行从dynamodb.listTables(function(err, data) {
的末尾移到内部后,我的输出正常:
dynamodb.listTables(function(err, data) {
console.log("INSIDE");
if (err) {
console.log("Error: ", err.code);
} else {
console.log("Table names are: ", data.TableNames);
}
context.succeed(event);
});
lambda-local -f aws -e event.json
输出:
EVENT: { obj: { a: 'b' }, int: 1, str: 'qwerty', arr: [ 1, 2, 3, 4 ] }
LIST TABLES:
---SUCCEED:---
INSIDE
Table names are: [ 'Image', 'Movies' ]
OUTPUT
--------------------------------
...