AWS Beanstalk - уведомление SNS для Lambda при создании новой среды

Я использую шаблон CF для создания сред Beanstalk. Я хотел бы запускать лямбда-код через SNS при создании среды, чтобы я мог использовать лямбда для запуска задания Дженкинса с интеграционными тестами для новой среды.

Есть ли способ отправить сообщение SNS после успешного создания env в Beanstalk? Я уже определил тему, на которую подписан лямбда-код.

API beanstalk позволяет определить конечную точку уведомления. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.sns.html

Но для чего это, если я могу указать только адрес электронной почты и мне нужно подтвердить подписку? Как я могу использовать его для автоматического запуска сообщения SNS?

      {
        "OptionName": "Notification Endpoint",
        "Namespace": "aws:elasticbeanstalk:sns:topics",
        "Value": "[email protected]"
      },
      {
        "OptionName": "Notification Protocol",
        "Namespace": "aws:elasticbeanstalk:sns:topics",
        "Value": "email"
      },

Обходной путь, который я нашел, немного взломан. Я создаю экземпляр EC2 в конце процесса создания стека и запускаю несколько команд AWS для отправки уведомления SNS через оболочку UserData. Это единственный способ?


comment
Имейте в виду, что синтаксис JSON, представленный в этом сообщении, НЕ соответствует синтаксису в последнем справочном документе Amazon: (docs.aws.amazon.com/elasticbeanstalk/latest/dg/). У вас есть (OptionName, Namespace, Value); у них есть (option_name, namespace, value). Это похоже на билет в безумие.   -  person doer    schedule 03.06.2016


Ответы (2)


Я отвечаю на свой вопрос. Мне удалось выяснить, как использовать SNS для запуска лямбда-кода после создания нового окружения Beanstalk.

Я создал sns-тему service-configurator

и добавил его ARN и имя в шаблон.

    {
      "OptionName": "Notification Topic ARN",
      "Namespace": "aws:elasticbeanstalk:sns:topics",
      "Value": "arn:aws:sns:us-east-1:273218181234:service-configurator"
    },
    {
      "OptionName": "Notification Topic Name",
      "Namespace": "aws:elasticbeanstalk:sns:topics",
      "Value": "service-configurator"
    }

Затем я устанавливаю тему sns как источник событий для моего лямбда-кода.

Теперь лямбда срабатывает каждый раз, когда что-то происходит с окружающей средой (экземпляры добавлены / удалены, созданы env и т. Д.)

person maestr0    schedule 10.09.2015
comment
вам не нужно имя темы уведомления, достаточно указать ARN темы уведомления. - person hellomichibye; 27.06.2017
comment
Привет, у меня возникли проблемы с использованием социальных сетей. Только о некоторых событиях сообщается через социальные сети. Некоторые важные сообщения, такие как «сервер перезапущен», никогда не появляются. - person Drake .C; 09.03.2019
comment
@across Я не мог вспомнить подробностей. Вообще говоря, общая структура - это EBeanstalk to sns to lambda. EBeanstalk позволяет настроить адрес электронной почты для получения определенных событий, вам просто нужно указать тему sns вместо сообщения электронной почты. - person Drake .C; 21.01.2020
comment
@ChenLin да, дело в том, что он работает нормально. Но я получаю не все события, а только их часть. Как вы упомянули, перезапуск сервера не работает - person across; 22.01.2020

Хотя Настройка уведомлений с помощью Elastic Beanstalk позволяет не предоставляет конкретный пример отправки уведомлений Amazon SNS, email просто значение по умолчанию для соотв. AWS Elastic Beanstalk, а также вы можете создавать подписки для большинства / всех других протоколов, см. вариант aws: elasticbeanstalk: sns: themes :

  • Допустимые значения: http https email email-json sqs

Очевидно, что AWS Lambda там еще не упоминается, но это просто еще один протокол SNS, поэтому я предполагаю / надеюсь, что таблица просто еще не обновлена ​​и что-то вроде следующее должно работать соответственно (хотя сам еще не пробовал):

  {
    "OptionName": "Notification Endpoint",
    "Namespace": "aws:elasticbeanstalk:sns:topics",
    "Value": "<Your Lambda function ARN>"
  },
  {
    "OptionName": "Notification Protocol",
    "Namespace": "aws:elasticbeanstalk:sns:topics",
    "Value": "lambda"
  },
person Steffen Opel    schedule 10.09.2015
comment
Не боюсь! В любом случае с Terraform: ConfigurationValidationException: Configuration validation exception: Invalid option value: 'lambda' (Namespace: 'aws:elasticbeanstalk:sns:topics', OptionName: 'Notification Protocol'): Value is not one of the allowed values: [http, https, email, email-json, sqs] - person Blair Nangle; 05.04.2021