【问题标题】:Invoke amazon lambda function from node app从节点应用程序调用 amazon lambda 函数
【发布时间】:2016-02-13 01:06:49
【问题描述】:

我正在阅读关于如何创建 lambda 函数的基本 AWS:

http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function-create-function.html

在这个例子中,我们正在创建一个图像大小调整服务,触发它的一种方法是监听一些要推送到 S3 存储桶的图像,然后执行 lambda 函数。

但我试图了解如何从我的 nodejs 应用程序调用此 lambda 函数,当用户将图像发送到我的节点服务器时,我通过 REST API 将此图像发送到 aws lambda 以重新调整大小,然后接收新的图像位置作为响应。

有什么我可以效仿的例子吗?我对实际的调用部分更感兴趣,因为我已经启动并运行了我的 lambda 服务。

谢谢

【问题讨论】:

    标签: javascript node.js amazon-web-services aws-lambda


    【解决方案1】:

    由于您使用的是 node.js 服务器,您可以直接使用 AWS JavaScript 开发工具包 (https://www.npmjs.com/package/aws-sdk) 调用您的 lambda。这样您就不必担心使用 API Gateway。

    从您的服务器调用很简单:

    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));
    

    更新

    高兴! AWS 开发工具包现在支持 Promise:

    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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-29
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多