从节点应用程序调用amazon lambda函数
Invoke amazon lambda function from node app
我正在学习如何创建lambda函数的基本AWS:将AWS lambda与Amazon S3 一起使用
在这个例子中,我们正在创建一个映像重新调整服务,触发它的一种方法是侦听某个映像被推送到S3存储桶,然后执行lambda函数。
但我正在尝试理解如何从我的nodejs应用程序调用这个lambda函数,当用户将图像发送到我的节点服务器时,我通过REST API将该图像发送到aws-lambda以进行重新大小化,然后接收新的图像位置作为响应。
有什么我可以效仿的榜样吗?我对实际的调用部分更感兴趣,因为我已经启动并运行了lambda服务。
感谢
由于您使用的是node.js服务器,因此您可以直接使用AWS JavaScript SDK调用lambda(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
以下是最新JavaScript的一个更具idomatic的答案。
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));
更新
高兴!AWS SDK现在支持承诺:
import AWS from 'aws-sdk';
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 params = {
FunctionName: 'my-lambda-function',
Payload: JSON.stringify({
'x': 1,
'y': 2,
'z': 3,
}),
};
const result = await (new AWS.Lambda().invoke(params).promise());
console.log('Success!');
console.log(result);
};
main().catch(error => console.error(error));
2023更新
您可以使用AWS JavaScript SDK 调用Lambda函数
let bucketRegion = "AWS_BUCKET_REGION";
let IdentityPoolId = "IDENTITY_POOLID";
AWS.config.update({
region: bucketRegion,
credentials: new AWS.CognitoIdentityCredentials({
IdentityPoolId: IdentityPoolId
})
});
let lambda = new AWS.Lambda();
let params = {
FunctionName: 'LAMBDA_FUNCTION_NAME', /* required */
Payload: JSON.stringify( {
parameter1: value,
parameter2: value
})
};
lambda.invoke(params, function (err, data){
if (err) {
// an error occurred
}else{
// successful response
console.log('Success, payload', data);
}
});
AWS SDK v3更新
与文档和Isaac的回答类似,只是包括导入,以避免混淆AWS SDK v2和v3。
import { InvokeCommand, LambdaClient, LogType } from "@aws-sdk/client-lambda";
async function executeMyLambda() {
const client = new LambdaClient({ region: "YOURREGION" });
const command = new InvokeCommand({
FunctionName: "YOURLAMBDANAME",
Payload: JSON.stringify(YOURJSONINPUTOBJECT),
LogType: LogType.Tail,
});
const { Payload, LogResult } = await client.send(command);
const result = Buffer.from(Payload).toString();
const logs = Buffer.from(LogResult, "base64").toString();
}
相关文章:
- lambda函数中未定义的变量
- QML:Lambda 函数意外工作
- Alexa API通过lambda函数请求
- AWS Lambda 函数和 S3 - 仅当对象发生更改时,才会更改 S3 中对象的元数据
- 由挂起导致的 AWS Lambda 函数“进程在完成请求之前退出”
- 为aws lambda函数传递查询参数
- 获取 lambda 函数的返回值
- 从节点应用程序调用amazon lambda函数
- aws lambda函数如何使用响应来执行计算
- 使用Lambda函数在AmazonS3中发出Ajax请求
- 如何在aws lambda函数中使用setInterval
- javascript中的Lambda函数
- 如何在Javascript/Nodejs Lambda函数中获取AWS区域:
- 与lambda函数参数混淆
- 如何检查AWS Lambda函数中的文件类型
- 运行AWS Lambda函数一段时间
- 使用MongoDB中的lambda函数在Java中的$where子句
- AWS链接Lambda函数与SNS
- Typescript:如何创建'lambda函数调用'用于外部方法
- 用于Alexa Javascript的AWS Lambda函数中的MQTT