Ste*_*eve 9 debugging amazon-web-services node.js aws-lambda
我们几个月来一直在Node JS中开发AWS Lambda函数.我们可以调试,即在Visual Studio中使用.Net C#代码逐步执行Node JS代码吗?
小智 6
对于许多Lambda函数,默认情况下不提供基于IDE的开发工具.有一些插件,例如AWS在其博客上引入的Visual Studio支持,网址为https://aws.amazon.com/blogs/developer/aws-lambda-support-in-visual-studio/,但这些插件会有所不同功能集和支持级别.
为了使用步骤调试来测试Lambda,您需要关注两个域 - 运行它的硬件以及调用Lambda函数的方式.由于AWS保留了运行lambda函数的机器实例的细节,因此硬件难以模拟.因此,当涉及到模拟硬件时,您只需要保持在您的语言和操作系统的合理范围内 - 确保安装正确的运行时间(如同,请不要在安装时使用NodeJS 4.X) "使用版本6运行时",确保不超过存储要求(Lambda的AMI在/ tmp中获得500 MB的临时存储空间),并确保在运行之前不在本地保存任何状态码.
一旦确定了您的机器要求(或者决定传递它们,因为您的代码不执行任何特定于硬件的工作),那么您将需要编写一个测试工具来调用您的AWS Lambda函数.此测试工具充当调试器的入口点,尽管AWS调用Lambda的方式很可能不是100%准确(例如,该context参数包含有关当前Lambda调用的信息,这些调用本质上会因执行而异. ),它使您可以调用所有标准编码支持工具.
注意:为Node.JS编写以下简单测试工具,但您可以将概念调整为Lambda执行的运行时
我们要做的第一件事是创建一个新文件 - debug.js - 并导入处理函数原型.假设您已经在handler.js中定义了处理程序并调用了它handler,那么您可以按如下方式执行:
var handler = require('./handler.js').handler;
接下来,我们需要调用处理函数.如上所述,每个参数都有不同的用途.处理程序的第一个参数event- 具有导致调用的事件的详细信息.注意:这还包括您的函数参数.正如我们所讨论的,第二个参数包含有关运行函数的上下文的信息.还有第三个参数,回调,可用于在Lambda执行完成后调用回调.在此处查看AWS文档:http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
因此,对于我们的目的,对于简单的测试工具,我们只需要在参数中发送event参数.我们暂时保留context和callback参数(稍作修改,下面更多),但如果你想提供额外的数据,你的函数依赖于那就好 - 只要确保它不与任何一个冲突自动数据放在AWS中.所以我们定义参数hash,并使用以下代码调用该函数debug.js:
var parameters = {
"key1":"val1",
"object" :{},
// other keys as necessary
};
handler(parameters, {succeed:function(result){
console.log("success: ", JSON.stringify(result, null, 2));
process.exit(0);
}, fail:function(error){
console.error("error: ", error);
process.exit(1);
}});
Run Code Online (Sandbox Code Playgroud)
这段代码做了一些有趣的事情:
context.succeed(message)或在您的Lambda代码中调用它们context.fail(error).这些不是Lambda正式支持的,而是在我们的代码中用作变通方法来访问成功/失败行为
一旦你编写了这个简单的测试工具,并调整了你的Lambda代码来调用成功/失败处理程序(如果它们已经if(context.success){context.success(args);}足够简单),你现在可以调用lambda函数node debug.js并查看结果.安慰.
我在Lambda函数中进行单元测试也很幸运.由于您现在有一个入口点,以及如何调用Lambda函数的示例,您应该能够编写表达所有功能的合适的单元和函数测试.
正如我所提到的,这种方法并不完美.以下是可能出现的测试工具的一些问题:
context对象,则此方法可能会遇到问题但是,尽管如此,您现在应该能够使用本地调试工具来测试和调试Lambda函数.我们在Backand使用类似的框架 - https://www.backand.com - 用于我们的Lambda函数开发工具,它大大提高了我们的Lambda开发速度.
您无法像在 VS 中那样调试 lambda 代码,但您可以调用一些测试数据并检查一切是否正常。
| 归档时间: |
|
| 查看次数: |
6736 次 |
| 最近记录: |