Параметр чтения лямбда-выражения AWS или выходные данные CloudFormation

Выглядит как действительно простая задача, но трудно найти на ней хороший пример.
Итак, задача следующая: AWS lambda отправляет какое-то сообщение в AWS-SQS.

Код AWS lambda содержит такую ​​строку:

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

Чтобы избавиться от этого кода, есть два варианта:

  1. Создайте запрос, который будет искать эту очередь на основе региона и имени очереди. SQS имеет предсказуемые имена;
  2. Создайте скрипт Cloud Formaion и укажите там эти зависимости.

Основываясь на том факте, что периодический триггер (лямбда) будет срабатывать много раз в день, лучше указать эту зависимость во время развертывания.

В общем, похоже, что прямая задача и скрипт облачных образований были созданы:

 "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": {},

  }

Но это непростая задача, как программно получить URL-адрес SQS в лямбда-коде:

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

person user1459144    schedule 03.03.2016    source источник
comment
Если вы удовлетворены моим ответом, не могли бы вы принять его? Спасибо!   -  person adamkonrad    schedule 05.03.2016


Ответы (2)


Я предлагаю вам получить SQS URL и использовать его как результат CloudFormation:

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

Предоставьте вашей Lambda функции cloudformation:DescribeStacks разрешение на чтение выходных данных вашего CloudFormation стека и загрузите эти выходные данные в свой код во время выполнения, чтобы получить доступ к SQS URL.

Изменить: не используйте подход из ответа ниже. Он загружает конфигурацию ресурса (URI очереди) во время выполнения функции, а не вводит ее во время развертывания лямбда-функции. Нижеприведенный подход увеличивает задержку, может иметь случайные проблемы с ограничением скорости обслуживания AWS и может зависеть от API AWS CloudFormation.

person adamkonrad    schedule 04.03.2016
comment
Главный вопрос - как загрузить вывод облачной информации в мой код. Любые хорошие ссылки (предпочтительнее nodejs)? - person user1459144; 06.03.2016
comment
В основном ваш ответ помог мне понять, как это сделать :) - person user1459144; 06.03.2016