Дублирует ли AWS Lambda каждое сообщение? - PullRequest
0 голосов
/ 17 января 2019

У меня есть сборка CodePipeline, работающая в AWS, и все прекрасно работает, за исключением того, что внутри CodePipeline нет хорошего механизма уведомлений. Похоже, что принятым решением для этого является настройка CloudWatch для вызова Lambda или SNS для отправки вашего сообщения.

ОК, поэтому я создал небольшую Java-программу для отправки сообщения в Slack на основе событий CloudWatch CodePipeline. Это работает хорошо, за исключением того, что каждое отдельное сообщение повторяется полдюжины раз или больше. Кажется, это отличается от всех других постов, которые я читал о дублированных лямбда-казнях, где вы иногда получаете дубликат здесь или там.

Я знаю, что стандартный ответ заключается в том, что Lambda хочет обеспечить доставку, поэтому события могут быть повторены, что хорошо - если каждые 20 или 100 сообщений я получу дубликат, я буду в порядке. Но я не могу залить канал Slack более чем 50 сообщениями за каждый простой запуск CP. Не говоря уже о том, что я полагаю, что мне выставляют счета за каждое из этих лямбда-казней, тогда как на самом деле я должен получать только 4 за один запуск.

Я не хочу настраивать БД для отслеживания уникальных идентификаторов - опять же, это увеличивает сложность и стоимость (выполнение по-прежнему происходит). Такое ощущение, что что-то неправильно настроено. Например. Есть ли какая-то причина, по которой CloudWatch по каким-то причинам будет собирать то же сообщение и пересылать его в Lambda? Или причина, по которой Lambda считает, что выполнение нужно повторить, даже если оно успешно завершено?

1 Ответ

0 голосов
/ 17 января 2019

Полагаю, это зависит от того, как вы настроили прослушиватель событий CloudWatch. Если не соблюдать осторожность, вы будете запускать действия при переходах этапа CodePipeline или действия, а не изменения состояния CodePipeline. Скопировано из главы Обнаружение и реагирование на изменения в состоянии конвейера с помощью событий Amazon CloudWatch в руководстве пользователя CodePipeline:

Вы можете настроить отправку уведомлений при изменении состояния для:

  • Указанные конвейеры или все ваши конвейеры. Вы контролируете это с помощью "detail-type": "Изменение состояния выполнения конвейера CodePipeline".
  • Указанные этапы или все этапы в указанном конвейере или во всех ваших конвейерах. Вы управляете этим с помощью «detail-type»: «Изменение состояния выполнения этапа CodePipeline».
  • Указанные действия или все действия на указанном этапе или на всех этапах в указанном конвейере или всех ваших конвейерах. Вы управляете этим с помощью «detail-type»: «Изменение состояния выполнения действия CodePipeline».

Например, если вас интересует только завершение CodePipeline, вы должны настроить События CloudWatch следующим образом:

{
  "source": [
    "aws.codepipeline"
  ],
  "detail-type": [
    "CodePipeline Pipeline Execution State Change",
  ],
  "detail": {
    "state": [ 
      "SUCCEEDED", 
      "FAILED", 
      "CANCELED"
    ],
    "pipeline": [{ "Ref": "myPipeline" }]
  }
}

Комментарии:

  • Обратите внимание, что STARTED, RESUMED и SUPERSEDED были исключены из списка состояний выше (что может или не может быть тем, что вам нравится)
  • Имейте в виду, что Изменение состояния выполнения имеет различные состояния по сравнению с Изменение состояния выполнения этапа , которое, в свою очередь, отличается от Изменение состояния выполнения действия .
  • Не указывайте часть конфигурации pipeline для прослушивания событий со всех имеющихся у вас CodePipelines, а не с конкретными.
  • Подробнее в руководстве пользователя CodePipeline , упомянутом ранее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...