我试图从Lambda函数中查询一个DynamoDB表(对于Alexa技能),但是当我发送调用require('aws-sdk')的意图时,这个技能似乎是挂起和超时的。Alexa测试页面只是说“所请求的技能的响应出现了问题”,我在CloudWatch日志中没有看到任何错误。我具备捕捉任何错误并将其作为口头回应的技能,所以我确信这不是一个不寻常的例外。我也尝试过将require封装在一个try/catch块中,但这也不起作用。
如果接收到测试数据库意图请求,则使用require加载该模块:
const AWS = require('aws-sdk');
module.exports = () => {
return 'Success!';
};如果我注释掉了require('aws-sdk'),这个函数就能正常工作,Alexa用“成功”来回应。
当我所做的只是需要aws-sdk模块时,为什么我的技能会中断呢?
我对AWS非常陌生,这是我第一次尝试访问Lambda函数中的DynamoDB表。
Lambda函数被上传为一个zip,其中包含我的源代码、package.json (包括aws-sdk作为依赖项)和node_modules文件夹。
发布于 2018-08-24 17:23:53
经过几个小时的调试,我发现将import * as AWS from 'aws-sdk';更改为import {DynamoDB} from 'aws-sdk'; (或{CloudFront}或您实际使用的任何东西)使超时问题消失。请注意,真正连接到DynamoDB的时间对我来说从来都不是问题,超时总是发生在import行上。
发布于 2019-10-02 08:00:08
可以通过增加超时或分配给lambda函数的内存来解决。。
这可能是因为SDK太大,无法通过3秒的默认超时值和128 MB的默认内存值导入。这就是为什么如果您尝试导入更小的组件(比如只导入DynamoDB ),它可能会起作用。
发布于 2018-04-19 00:08:51
Lambda在使用NodeJS时使用回调延续模型。您的模块应该导出一个包含三个参数的函数:事件、上下文和回调。
Event提供输入参数。
另外两个用于从处理程序函数返回控件,具体取决于您使用的NodeJS版本。
尝试添加我提到的三个参数,并从导出的处理程序函数中调用:
module.export = function(event, context, callback) {
callback(‘success’);
}请记住,我是在手机上写的,所以你可能需要对代码做一些小修改,但想法是一样的。不要直接从函数返回,而是调用回调作为延续来提供响应。注意,在早期版本的NodeJS中,在版本4之前,您必须使用上下文来设置成功或失败,而不是调用回调。
有关更多细节,请参见AWS上的Lambda与NodeJS技术文档。
另外要记住的是,对于Alexa来说,响应应该是正确的格式。这是一个包含所有必要元素的JSON响应,如Alexa技能工具包技术博士中所解释的那样。
您所包含的Alexa生成了这些响应,但我想我应该向您指出实际的文档,以防您尝试手工构建响应以了解它是如何工作的。
https://stackoverflow.com/questions/49907830
复制相似问题