javascript - 为什么我的代码可以在标准 Node.js 文件中运行,但不能在 AWS Lambda 函数中运行?
问题描述
我要做的是创建一个 lambda 函数,该函数在 ec2 实例上调用两个命令。当我在 lambda 函数中运行此代码时遇到问题时,我从 exports.handler() 方法中删除了代码,并在同一个 ec2 实例中的独立 node.js 文件中运行了代码,我能够让代码工作. 我运行的命令是“node app.js”。
exports.handler = async (event) => {
const AWS = require('aws-sdk')
AWS.config.update({region:'us-east-1'});
var ssm = new AWS.SSM();
var params = {
DocumentName: 'AWS-RunShellScript', /* required */
InstanceIds: ['i-xxxxxxxxxxxxxxxx'],
Parameters: {
'commands': [
'mkdir /home/ec2-user/testDirectory',
'php /home/ec2-user/helloWorld.php'
/* more items */
],
/* '<ParameterName>': ... */
}
};
ssm.sendCommand(params, function(err, data) {
if (err) {
console.log("ERROR!");
console.log(err, err.stack); // an error occurred
}
else {
console.log("SUCCESS!");
console.log(data);
} // successful response
});
const response = {
statusCode: 200,
ssm: ssm
};
return response;
};
我认为这可能是与权限相关的问题,但 lambda 是 ec2 实例所在的同一 vpc 的一部分。
解决方案
您正在尝试将async
/await
与回调结合起来。这在 Node.js 的 lambda AWS Lambda 函数处理程序中不起作用。它在本地或节点服务器中工作的原因是因为当函数退出时服务器仍在运行,所以回调仍然发生。在 Lambda 中,如果您正在使用(或 Promises),则一旦 lambda 退出,节点进程就会消失async
,因此无法触发回调。
推荐阅读
- asp.net - 网站发布到 IIS 后 XSRF 令牌过期
- html - 页面未正确重定向错误 http - https 自动重定向在网站中显示错误
- java - 如何通过 selenium、appium、java 和 android 以更快的方式多次点击一个元素
- php - 如何在通过 php 在网站中显示时将默认高度和宽度设置为来自 ckeditor(所见即所得文本编辑器)的数据
- sql - Derby 中正确的 SQL 命令是什么?
- c# - Tran_Venue_GetVenueOccupancyReports 需要参数“@StartDate”,但未提供该参数
- php - PHP命令返回函数堆栈
- javascript - 如何使用 SMIL/CSS 按顺序在饼图/甜甜圈图中为多个 SVG 路径设置动画
- python - Python中字符串的“in”函数的时间复杂度是多少?
- socket.io - 如何修复 Android 9.0 中的套接字 IO 异常?