Функция AwsListGroupsFunction (err, data) используется в качестве обратного вызова для iam.listGroups.Таким образом, вы не можете вернуть значение из функции AwsListGroupsFunction в этом контексте.Это относится и к другим функциям обратного вызова.
Вы можете решить эту проблему многими способами, поэтому лучшим выбором будут методы асинхронной библиотеки, такие как mapSeries. Это псевдокод для простого решения.Вы можете улучшить его с помощью дальнейшего рефакторинга.
var aws = require('aws-sdk');
var ses = new aws.SES({region: 'us-east-1'});
var iam = new aws.IAM({apiVersion: '2010-05-08'});
var async = require('async');
exports.handler = function (event, context) {
console.log("Incoming: ", event);
var message = "";
function AwsListGroupsFunction(err, data)
{
if (err) console.log(err, err.stack); // an error occurred
else
{
//Get AWS Groups from AWS Account
var dataCount = data.Groups.length-1;
async.mapSeries(data.Groups, function(group, cb) {
var partialMessage = group.GroupName;
// Then get all users associated to the GroupName
var groupParams = { GroupName: group.GroupName};
iam.getGroup(groupParams, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
cb(err, "");
}
else{
// successful response
partialMessage+= "<br/>";
for (var userKey in data.Users) {
partialMessage += data.Users[userKey].UserName + ' and PasswordLastUsed: ' + data.Users[userKey].PasswordLastUsed + ' , ';
}
cb(null, partialMessage);
}
});
}, function(err, result) {
if (err) {
//handle error. Expected message is not ready
}
else {
/*
Here result contains array of partial messages; ie [partial message for group1, partial message for group2, ...]
concatinate partial messages and send email.
*/
}
});
}
};
function SendEmail(message){
console.log('===SENDING EMAIL HERE using message variable===');
}
// This is the only function called which calls other functions
var params = {};
iam.listGroups(params, AwsListGroupsFunction);
};