带有 DynamoDb 的 AWS Lambda 没有结果
AWS Lambda with DynamoDb no results
我刚从 AWS
开始,根本无法获得 DynamoDB
运行。
我按照教程创建了所有 AWS
元素并为 lambda
基本配置文件中的 DynamoDB
设置了权限。
我想知道为什么我没有从 DB
或任何错误消息中得到任何结果。
我在代码中放置了一些控制台日志以进行故障排除:
var AWS = require("aws-sdk");
AWS.config.update({
region: "eu-west-1",
});
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "cooking_table",
Key:{
"data_type": "meal"
}
};
console.log("Scanning table.");
docClient.scan(params, onScan);
console.log("scan done");
function onScan(err, data) {
console.log("starting to scan");
if (err) {
console.error("Unable to scan the table. Error JSON:",
JSON.stringify(err, null, 2));
} else {
// print all the movies
console.log("Scan succeeded.");
data.Items.forEach(function(movie) {
console.log(movie.data_type);
});
// continue scanning if we have more movies, because
// scan can retrieve a maximum of 1MB of data
if (typeof data.LastEvaluatedKey != "undefined") {
console.log("Scanning for more...");
params.ExclusiveStartKey = data.LastEvaluatedKey;
docClient.scan(params, onScan);
}
}
}
令人惊讶的是,我在函数 onScan
.
中没有得到任何控制台日志条目
在日志中我只看到这些行的输出:
console.log("Scanning table.");
console.log("scan done");
但没有错误。
我没有看到我犯的大错。
出了什么问题?谢谢。
"Key" 不是有效的扫描参数。不完全确定您的数据是什么样的,但也许您想要:
var params = {
TableName: "cooking_table",
FilterExpression: "data_type = meal"
};
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property
此外,如另一个答案中所述,您想做这样的事情来实际调用扫描调用,returns 一个请求对象:
docClient.scan(params, onScan).send((err, data) =>
{
console.log("scan actually done for real");
});
扫描是异步操作,它在完成时调用回调,所以您的问题是您的 lambda 在该操作完成之前就结束了,这可能就是为什么您只看到那 2 个日志而没有任何 error/problems 或结果的原因。
我建议将 Promise 视为该问题的可能解决方案。
我刚从 AWS
开始,根本无法获得 DynamoDB
运行。
我按照教程创建了所有 AWS
元素并为 lambda
基本配置文件中的 DynamoDB
设置了权限。
我想知道为什么我没有从 DB
或任何错误消息中得到任何结果。
我在代码中放置了一些控制台日志以进行故障排除:
var AWS = require("aws-sdk");
AWS.config.update({
region: "eu-west-1",
});
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "cooking_table",
Key:{
"data_type": "meal"
}
};
console.log("Scanning table.");
docClient.scan(params, onScan);
console.log("scan done");
function onScan(err, data) {
console.log("starting to scan");
if (err) {
console.error("Unable to scan the table. Error JSON:",
JSON.stringify(err, null, 2));
} else {
// print all the movies
console.log("Scan succeeded.");
data.Items.forEach(function(movie) {
console.log(movie.data_type);
});
// continue scanning if we have more movies, because
// scan can retrieve a maximum of 1MB of data
if (typeof data.LastEvaluatedKey != "undefined") {
console.log("Scanning for more...");
params.ExclusiveStartKey = data.LastEvaluatedKey;
docClient.scan(params, onScan);
}
}
}
令人惊讶的是,我在函数 onScan
.
在日志中我只看到这些行的输出:
console.log("Scanning table.");
console.log("scan done");
但没有错误。
我没有看到我犯的大错。
出了什么问题?谢谢。
"Key" 不是有效的扫描参数。不完全确定您的数据是什么样的,但也许您想要:
var params = {
TableName: "cooking_table",
FilterExpression: "data_type = meal"
};
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property
此外,如另一个答案中所述,您想做这样的事情来实际调用扫描调用,returns 一个请求对象:
docClient.scan(params, onScan).send((err, data) =>
{
console.log("scan actually done for real");
});
扫描是异步操作,它在完成时调用回调,所以您的问题是您的 lambda 在该操作完成之前就结束了,这可能就是为什么您只看到那 2 个日志而没有任何 error/problems 或结果的原因。
我建议将 Promise 视为该问题的可能解决方案。