【发布时间】:2023-03-29 18:30:01
【问题描述】:
我正在尝试按照 AWS 教程阅读 AWS Lambda 中的基本 DynamoDB 表。我有一些基本代码,似乎运行正常(我没有看到任何错误记录),但我无法获得任何输出:
const AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
const ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
function readData(){
console.log("In the readData() function");
var params = {
TableName: "desks",
Key: {
"desk_id": {N:'1'}
}
};
console.log("Set params");
// Call DynamoDB to read the item from the table
ddb.getItem(params, function(err, data) {
console.log("In getItem callback function");
if (err) {
console.log("Error", err);
}
else {
console.log("Success", data.Item);
}
});
console.log("Completed call");
}
当我上面的函数被调用时,日志显示输出“设置参数”和“完成调用”,但就像回调函数没有被执行。我是否遗漏了执行流程的某些内容?
编辑:我使用的是 Node.js 8.10,并且我相信我已经设置了适当的角色权限(对数据库的完全访问权限)。
【问题讨论】:
-
哪个节点版本?您是否已将相关角色附加到 lambda 以从 DyanmoDB 获取密钥?
-
您的“已完成通话”日志实际上是在
ddb.getItem通话仍在运行时发生的。您需要研究并了解 NodeJS 中的异步调用是如何工作的。在这之后的日志中还有什么?函数最终会超时吗?还是会引发某种类型的日志错误?另外,您是否已将 Lambda 函数配置为在 VPC 中运行? -
已更新节点版本和角色 - 相信这些都很好。我对 AWS 比较陌生,但根本没有尝试过使用 VPC 做任何聪明的事情。我刚刚创建了函数和相应的 dynamoDB。我知道异步调用是如何工作的(ish),但实际上日志中没有其他内容 - 没有错误,没有超时,没有任何内容。
-
最终,我要做的是将它连接到一个 API 触发器(我已经让那个位工作)并返回查询的输出。我怀疑问题与异步调用有关 - 有没有办法让进程等待 DynamoDB 的响应?在返回 DB 响应之前,lambda 函数是否已经执行并关闭,并且在执行查询时该函数不再存在?
-
嗨大卫,你试过我的解决方案了吗?如果我能提供帮助,请告诉我。
标签: node.js amazon-web-services aws-lambda amazon-dynamodb