AWS SDK - 编写一个 lambda 来获取当前账户的所有角色

AWS SDK - Writing a lambda to get all roles for the current account

正在使用为 Javascript 提供的 AWS SDK 文档编写 lambda 以获取当前账户中的所有 IAM 角色:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/IAM.html

但是,我的 lambda 保持 return 空值,而我期望它 return 响应主体中的现有角色列表:

const AWS = require("aws-sdk");

exports.handler = async (event) => {
    var iam = new AWS.IAM();

    var roles = [];
    iam.listRoles(function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else roles.push(data);           // successful response
        const response = {
          statusCode: 200,
          body: JSON.stringify(roles)
      };
      return response;
    });
 
};

我显然在这里遗漏了一些东西。任何见解将不胜感激。

您正在为 JavaScript 使用旧版本的 AWS SDK。您引用的文档不是最新的。

尝试使用此 适用于 JavaScript 开发指南 V3 的 AWS SDK 中所述的最新版本:

https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/iam-examples-managing-users.html

问题是混淆了异步和回调,你可以使用 promise 来处理 listRoles。

const AWS = require('aws-sdk');

exports.handler = async event => {
  try {
    const iam = new AWS.IAM();
    const roles = await iam.listRoles().promise();

    return {
      statusCode: 200,
      body: JSON.stringify(roles)
    };
  } catch (err) {
    console.log(err, err.stack);
    return {
      statusCode: 200, // might change to error code here
      body: []
    };
  }
};