javascript - 为什么我的代码可以在标准 Node.js 文件中运行,而不能在 AWS Lambda 函数中运行?

标签 javascript node.js amazon-web-services aws-lambda aws-sdk

我想要做的是创建一个 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带回调。这在 lambda 中不起作用 AWS Lambda Function Handler in Node.js .它在本地或 Node 服务器中工作的原因是因为函数退出时服务器仍在运行,因此回调仍然发生。在 Lambda 中,如果您使用 async,一旦 lambda 退出, Node 进程就会消失。 (或 promise ),因此无法触发回调。

关于javascript - 为什么我的代码可以在标准 Node.js 文件中运行,而不能在 AWS Lambda 函数中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470604/

相关文章:

javascript - CallCC 是 goto 的改进版本吗?

javascript - 在没有 HTML 文档的情况下实现 Google Maps JavaScript API

node.js - 无法在 NodeJS 上使用 post

amazon-web-services - 无法在 ec2 中启动 minikube 显示 "X Sorry, Kubernetes v1.18.0 requires conntrack to be installed in root' s 路径”

amazon-web-services - AWS ELB 不填充 x-forwarded-for header

amazon-web-services - AWS Cloudformation 创建没有容器定义的任务定义

javascript - Joomla 3.2.0 - 是否可以对每篇文章进行 Facebook 评论?

javascript - 如何将组件对象传递给 React.js 中的容器?

node.js - 如何使用node.js从数组中获取值?

javascript - Node.js 环回 : TypeError: Cannot read property 'createModel' of undefined