3

看起來非常簡單,但很難找到它的好例子。
因此,任務如下:AWS lambda將一些消息放入AWS-SQS。AWS lambda從CloudFormation讀取參數或輸出

AWS的代碼拉姆達包含了這樣一行:

var QUEUE_URL = 'https://sqs.us-west-2.amazonaws.com/ID/QUEUE_NAME';", 

爲了擺脫這種代碼有可能的兩種選擇:

  1. 創建查詢,將查找基於區域這個隊列隊列名稱SQS has predictable names;
  2. 創建Cloud Formaion腳本並在其中指定這些依賴關係。

基於這個事實,週期性觸發器(lambda)每天將工作很多次,所以最好指定這個依賴關係duting部署。

一般來說,它看起來像直線前進的任務,雲的形成腳本創建:

"Resources": { 
"LF2HNR1": { 
    "Type": "AWS::Lambda::Function", 
    "Properties": { 
    "Description": "This is lambda trigger", 
    "Handler": "index.myHandler", 
    "Runtime": "nodejs", 
    "Timeout": "300", 

而且還依賴指定了拉姆達取決於SQS:

"DependsOn": [ 
    "SQSQ562D4" 
    ] 
}, 
"SQSQ562D4": { 
    "Type": "AWS::SQS::Queue", 
    "Properties": {}, 

    } 

Hovewer它沒有挺直前進任務如何以編程方式獲得Lambda代碼中的SQS網址:

exports.handler = function(event, context) { 
var params = { 
    MessageBody: JSON.stringify(event), 
var QUEUE_URL = ???? 
+0

如果你滿意我的回答,可以請你接受嗎?謝謝! – kixorz

回答

2

我建議你檢索SQS URL並把它作爲CloudFormation輸出:

"Outputs" : { 
    "SQSQ562D4" : { 
     "Description" : "URL of the source queue", 
     "Value" : { "Ref" : "SQSQ562D4" } 
    } 
} 

授予您Lambda功能cloudformation:DescribeStacks權限讀取您的CloudFormation堆輸出並在運行時在代碼加載此輸出訪問SQS URL

+0

主要問題是如何在我的代碼中加載cloudformation輸出。任何好的引用(nodejs是可取的)? – user1459144

+0

基本上你的回答幫助我理解如何去做:) – user1459144

6

主要的複雜性是正確使用CloudFormaion API來獲取SQS URL。

爲了做到這一點我用下面的代碼主要是驅動形式,這API

var queueURL; 
cloudFormation.describeStackResource(cloudFormationParams, function(err, data) { 
    if (err){ 
     console.log(err, err.stack); // an error occurred 
    } 
    else { 
    var queueURL =data.StackResourceDetail.PhysicalResourceId;  
var params = { 
    MessageBody: JSON.stringify(event),  
    QueueUrl: queueURL 
    }; 

    sqs.sendMessage(params, function(err,data){ 
    if(err) {  
     context.done('error', "ERROR Put SQS"); // ERROR with message 
    }else{ 
     console.log('data:',data.MessageId); 
     context.done(null,''); // SUCCESS 
    } 
    });