You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js开发的AWS Lambda函数无法查询EC2实例列表问题求助

问题原因

你代码存在两个问题导致无日志输出:

  1. 异步逻辑未等待完成就提前返回:你声明了async类型的Lambda handler,但是调用ec2.describeInstances时用了回调模式,代码不会等待回调执行完成,就直接执行了return "Done"。Lambda函数在收到返回值后会立即冻结执行环境,回调里的日志打印逻辑根本没有运行机会,和你配置的权限、VPC无关。
  2. 回调参数顺序错误:AWS SDK for JavaScript v2的所有回调方法统一遵循(err, data)的参数顺序,你原代码里写反为(data, err),就算回调能执行也会拿到错误的参数值,无法正常打印结果或报错。
解决方案

推荐使用async/await适配AWS SDK的Promise调用,逻辑更清晰,修改后的代码如下:

var AWS = require('aws-sdk');
AWS.config.update({region: 'ap-southeast-1'});

exports.handler = async function(event) {
  var ec2 = new AWS.EC2({apiVersion: '2016-11-15'});
  var params = {
    DryRun: false
  };
  try {
    // 调用.promise()将回调方法转为Promise,用await等待执行完成
    const data = await ec2.describeInstances(params).promise();
    console.log(data);
  } catch (err) {
    console.log(err);
  }
  return "Done"
}

如果你要保留回调写法,需要去掉handler的async声明,用Lambda原生的callback参数控制返回时机,确保回调执行完成后再结束函数运行:

var AWS = require('aws-sdk');
AWS.config.update({region: 'ap-southeast-1'});

// 新增context和callback参数
exports.handler = function(event, context, callback) {
  var ec2 = new AWS.EC2({apiVersion: '2016-11-15'});
  var params = {
    DryRun: false
  };
  // 修正回调参数顺序
  ec2.describeInstances(params, (err, data) => {
    if(err){
      console.log(err)
      callback(null, "Done")
    }else{
      console.log(data)
      callback(null, "Done")
    }
  });
}

内容的提问来源于stack exchange,提问作者rachit_verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 02:18:02