2015-11-11 17 views
11

Tôi đang trải qua một AWS cơ bản về cách tạo một hàm lambda:Gọi chức năng amazon lambda từ ứng dụng nút

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

Trong ví dụ này, chúng ta đang tạo ra một dịch vụ hình ảnh tái định cỡ, một cách để kích hoạt nó là để nghe một số hình ảnh được đẩy vào một thùng S3 và sau đó hàm lambda sẽ được thực thi.

Nhưng tôi đang cố gắng tìm hiểu cách gọi hàm lambda này từ ứng dụng nodejs của tôi, khi người dùng gửi hình ảnh đến máy chủ nút của tôi, tôi gửi hình ảnh này đến awda lambda qua REST API để được kích thước lại và sau đó nhận vị trí hình ảnh mới làm phản hồi.

Có loại ví dụ nào tôi có thể làm theo không? Tôi quan tâm nhiều hơn đến phần yêu cầu thực tế, vì tôi đã có dịch vụ lambda của tôi và hoạt động.

Cảm ơn

Trả lời

22

Vì bạn đang sử dụng một máy chủ Node.js bạn chỉ có thể gọi lambda của bạn trực tiếp với AWS Javascript SDK (https://www.npmjs.com/package/aws-sdk). Bằng cách này bạn không phải lo lắng về việc sử dụng API Gateway.

Gọi từ máy chủ của bạn cũng đơn giản như:

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

Xem phần còn lại của các tài liệu SDK ở đây: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

+1

vâng, nhận ra rằng không có điểm sử dụng điểm cuối API. – inside

0

Dưới đây là một câu trả lời đó là hơn idomatic cho JavaScript mới nhất.

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)); 
Các vấn đề liên quan