AWS SNS, отправка «непрерывных» уведомлений на слабину - PullRequest
0 голосов
/ 29 сентября 2019

На высоком уровне я написал лямбду, которая уведомляет слабину, когда есть ошибка или нет.

С точки зрения цепочки инструментов aws технический дизайн выглядит следующим образом:

enter image description here

Я собираюсь написать ПриемкуКритерии в стиле BDD.

 Scenario: As an engineer I want to get notified if my lambda PASSED or FAILED whenever it executes
    Given I have a lambda function that runs on a schedule (9am everyday)
    Given I have a metric filter that looks for the string "error" in the logs
      And I created an alarm that does the following:
  # +------------------------+--------------+
  # |         ALARM                         |
  # +------------------------+--------------+
  # | Statistic              | Sum          |
  # | Period                 | 5 minutes    |
  # | Threshold type         | Static       |
  # | Alarm condition        | >= threshold |
  # | Threshold value        | 1            |
  # | Datapoints to Alarm    | 1 of 1       |
  # | missing data treatment | ignore       |
  # | Alarm State            | in Alarm     |
  # +------------------------+--------------+
      And I created another alarm that does the following:
  # +------------------------+--------------+
  # |           OK                          |
  # +------------------------+--------------+
  # | Statistic              | Sum          |
  # | Period                 | 5 minutes    |
  # | Threshold type         | Static       |
  # | Alarm condition        | <= threshold |
  # | Threshold value        | 1            |
  # | Datapoints to Alarm    | 1 of 1       |
  # | missing data treatment | good         |
  # | Alarm State            | OK           |
  # +------------------------+--------------+
     Then EVERY TIME time my function executes without "error" Then I should get "OK" 
     Then EVERY TIME time my function executes with "error" then I should get "ALARM"

Фактическое поведение - отправка уведомления только ОДНАЖДЫ и повторная отправка только при изменении типа тревоги, т. Е.

  ALARM -> OK
  OK -> ALARM

Донкажется, что я не получаю уведомления для этого шаблона

  ALARM -> ALRM
  OK -> OK

В идеале я хочу получать уведомления каждый раз, когда функция выполняется

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Согласно документации AWS :

Сигналы тревоги вызывают действия только для устойчивых изменений состояния. Аварийные сигналы CloudWatch не вызывают действия просто потому, что они находятся в определенном состоянии, это состояние должно было изменяться и поддерживаться в течение определенного числа периодов.

Одно из решений заключается в передаче журналов CW вЛямбда-функция, которая отправляет сообщения SNS. При быстром поиске я нашел этот код, который делает именно это (я сам не пробовал): https://github.com/codemonauts/aws-cloudwatch-stream-filter-sns-gateway

1 голос
/ 30 сентября 2019

Нет необходимости использовать сигнал тревоги CloudWatch. Если вам нужно одно сообщение каждый раз, когда Lambda выполняется, вы должны просто опубликовать сообщение SNS как последнее, что есть в вашей функции Lambda.

try {

    // existing code goes here...

    snsClient.publish("my-chatbot-topic", "Some success message");
} catch (Exception e) {
    snsClient.publish("my-chatbot-topic", "Some error message");
    // rethrow the exception so that the lambda still fails for this
    throw e;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...