Ваша проблема в том, что функция lambda.invoke()
неблокирующая, поэтому Lambda_A завершает свое выполнение до того, как она вызовет Lambda_B.Вы можете использовать обещания, чтобы справиться с этим.Если вы используете Node.js 8.10 + , вы можете сделать это:
Lambda_A:
let AWS = require('aws-sdk');
let lambda = new AWS.Lambda();
exports.handler = async (event) => {
let params = {
FunctionName: 'Lambda_B',
InvocationType: 'RequestResponse',
Payload: '{ "foo" : "bar" }'
};
return await lambda.invoke(params, function(err, data) {
if (err) {
throw err;
} else {
console.log('LambdaB invoked: ' + data.Payload);
}
}).promise();
};
Lambda_B:
exports.handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify('Hello from Lambda_B!'),
};
};
Ответ при вызове Lambda_A:
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST",
"Payload": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda_B!\\\"\"}"
}
Вывод на консоль Lambda_A при вызове:
START RequestId: 016a763d-c79e-4d72-bd44-0aaa89a5efaf Version: $LATEST
2019-02-07T08:07:11.154Z 016a763d-c79e-4d72-bd44-0aaa89a5efaf LambdaB invoked: {"statusCode":200,"body":"\"Hello from Lambda_B!\""}
END RequestId: 016a763d-c79e-4d72-bd44-0aaa89a5efaf
REPORT RequestId: 016a763d-c79e-4d72-bd44-0aaa89a5efaf Duration: 717.40 ms Billed Duration: 800 ms Memory Size: 128 MB Max Memory Used: 30 MB