2015-01-12 74 views
3

我使用從AWS控制檯測試功能:AWS LAMBDA獲取上下文信息

console.log('Loading event'); 

exports.handler = function(event, context) { 
    console.log('value1 = ' + event.key1); 
    console.log('value2 = ' + event.key2); 
    console.log('value3 = ' + event.key3); 
    context.done(null, 'Hello World'); // SUCCESS with message 
}; 

,並呼籲它的NodeJS如下:

var params = { 
    FunctionName: 'MY_FUNCTION_NAME', /* required */ 
    InvokeArgs: JSON.stringify({ 
    "key1": "value1", 
    "key2": "value2", 
    "key3": "value3" 
    }) 
}; 

lambda.invokeAsync(params, function(err, data) { 
    if (err) { 
    // an error occurred 
    console.log(err, err.stack); 
    return cb(err); 
    } 
    // successful response 
    console.log(data); 
}); 

,一切工作正常:

//Console Output 
{ Status: 202 } 

但我期待從context.done(null,'Message')接收消息以及...

任何想法如何獲取消息?

回答

4

正如Eric所說,目前Lambda不提供REST端點來運行該功能並返回其結果,但可能在將來。

現在,您最好的選擇是使用像lambdaws這樣的庫,它爲您包裝函數的部署和執行,並通過SQS隊列處理返回的結果。如果您想通過滾動自己的解決方案更多的控制權,這個過程很簡單:

  1. 創建SQS隊列
  2. 讓你的lambda函數寫其結果到這個隊列
  3. 在您的客戶端,輪詢排隊結果
1

您正在調用invokeAsync,因此您的Lambda函數是異步運行的。這意味着你的成功意味着你的功能成功返回開始,而不是在它完成之後。

在撰寫本文時,AWS Lambda尚未提供同步調用某個函數的方法,它將函數中的信息直接返回給調用者。不過,這似乎是一個常見的要求,亞馬遜已公開表示他們正在考慮該功能。