Вызвать функцию amazon lambda из приложения node
Я прохожу через базовую AWS о том, как создать лямбда-функцию:
http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function-create-function.html
В этом примере мы создаем сервис переопределения изображения, одним из способов его запуска является прослушивание какого-либо изображения, которое будет перенесено в ведро S3, и затем будет выполняться функция лямбда.
Но я пытаюсь понять, как вызвать эту лямбда-функцию из моего приложения nodejs, когда пользователь отправляет изображение на мой сервер node, я отправляю это изображение в aws lambda через REST API, чтобы изменить размер, а затем получить новое местоположение изображения в качестве ответа.
Есть ли какой-нибудь пример, который я могу выполнить? Меня больше интересует фактическая часть вызова, так как у меня уже есть моя лямбда-служба.
Спасибо
Ответы
Ответ 1
Поскольку вы используете сервер node.js, вы можете просто вызвать вашу лямбду непосредственно с помощью SDK JavaScript AWS (https://www.npmjs.com/package/aws-sdk). Таким образом, вам не нужно беспокоиться об использовании API-шлюза.
Вызов с вашего сервера прост как:
var AWS = require('aws-sdk');
// you shouldn't hardcode your keys in production! See http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html
AWS.config.update({accessKeyId: 'akid', secretAccessKey: 'secret'});
var lambda = new AWS.Lambda();
var params = {
FunctionName: 'myImageProcessingLambdaFn', /* required */
Payload: PAYLOAD_AS_A_STRING
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Смотрите остальные документы SDK здесь: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
Ответ 2
Вот ответ, который более логичен для последнего JavaScript.
import AWS from 'aws-sdk';
const invokeLambda = (lambda, params) => new Promise((resolve, reject) => {
lambda.invoke(params, (error, data) => {
if (error) {
reject(error);
} else {
resolve(data);
}
});
});
const main = async () => {
// You shouldn't hard-code your keys in production!
// http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html
AWS.config.update({
accessKeyId: 'AWSAccessKeyId',
secretAccessKey: 'AWSAccessKeySecret',
region: 'eu-west-1',
});
const lambda = new AWS.Lambda();
const params = {
FunctionName: 'my-lambda-function',
Payload: JSON.stringify({
'x': 1,
'y': 2,
'z': 3,
}),
};
const result = await invokeLambda(lambda, params);
console.log('Success!');
console.log(result);
};
main().catch(error => console.error(error));