返回从lambda得到的值.调用(NodeJS / Typescript)



我基本上试图使用lambda调用lambda函数。调用我在这个问题中发现的函数(在NodeJs中),但我想返回值,这样我就可以在函数外部使用它并对其进行更改,而不仅仅是console.log输出。这是我正在尝试和不工作的代码:

var AWS = require('aws-sdk');
AWS.config.region = 'my region';
var lambda = new AWS.Lambda();
var params = {
FunctionName: 'arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:random-function', 
// the lambda function we are going to invoke
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify({"text": 'test 123'})
};
var output_lambda = 'output of lambda'
lambda.invoke(params, function(err, data) {
output_lambda = String(data.Payload)
return output_lambda
});  
console.log(output_lambda)
// returns 'output of lambda' instead of the actual output

我已经尝试了一些其他的方法,没有一个工作得很好,我是非常新的NodeJs和AWS,所以我很抱歉,如果这听起来像一个愚蠢的问题,提前谢谢你。

由于某些原因,我没有看到这个问题的答案:Nodejs -调用AWS。函数从另一个函数中得到,这回答了我的问题我所要做的就是稍微调整一下。这是我的新代码,感谢Oscar Fernandez Sierra的回答。

const g_LambdaFunctionName = 'name'; // <======= PUT THE DESIRED VALUE
const AWS    = require('aws-sdk');
AWS.config.region = 'us-east-1';
const lambda = new AWS.Lambda;
//
// Expected use:
//
//   // (payload can be an object or a JSON string, for example)
//   let var = await invokeLambda(lambdaFunctionName, payload);
//
const invokeLambda = async (lambdaFunctionName, payload) => {
let payloadStr;
if (typeof payload === 'string')
{
payloadStr = payload;
}
else
{
payloadStr = JSON.stringify(payload, null, 2);
}
let params = {
FunctionName   : lambdaFunctionName,               /* string type, required */
// ClientContext  : '',                               /* 'STRING_VALUE' */
InvocationType : 'RequestResponse',                /* string type: 'Event' (async)| 'RequestResponse' (sync) | 'DryRun' (validate parameters y permissions) */
// InvocationType : 'Event',
LogType        : 'None',                           /* string type: 'None' | 'Tail' */
// LogType        : 'Tail',
Payload        : payloadStr,                       /* Buffer.from('...') || 'JSON_STRING' */ /* Strings will be Base-64 encoded on your behalf */
//  Qualifier      : '',                             /* STRING_VALUE' */
};
//
// TODO/FIXME: add try/catch to protect this code from failures (non-existent lambda, execution errors in lambda)
//
const lambdaResult = await lambda.invoke(params).promise();
// The actual value returned by the lambda it is lambdaResult.Payload
// There are other fields (some of them are optional)
return lambdaResult;
};

var callingFunc = async () => {
//
// in this example We obtain the lambda name from a global variable
//
const lambdaFunctionName = 'ARN to my Lambda';
// const payload            = '{"param1" : "value1"}';
const payload            = JSON.stringify({"text": text});;
//
// invokeLambda has to be called from a async function
// (to be able to use await)
//
const result = await invokeLambda(lambdaFunctionName, payload);
return String((result.Payload))
};
callingFunc();

最新更新