it-swarm.com.ru

как подключить облачную тревогу к лямбда-функции

Как подключить тревогу наблюдения за облаком aws к вызову лямбда-функции?

Я программно добавляю аварийный сигнал наблюдения за облаком в ELB, которые мы создаем как часть стека формирования облаков с помощью шаблонов AWS CloudFormation. Я хочу, чтобы уведомления отправлялись лямбда-функции, которая будет публиковать сообщение в Slack. Хотя предупреждение работает, и конфигурация SNS мне кажется правильной, лямбда-функция никогда не вызывается.

Лямбда-функция следует следующим примерам: 

https://medium.com/cohealo-engineering/how-set-up-a-slack-channel-to-be-an-aws-sns-subscriber-63b4d57ad3ea#.x2j9apedu

http://inopinatus.org/2015/07/13/hook-aws-notifications-into-slack-with-a-lambda-function/

Лямбда-функция работает, и я могу отправить ей тестовые данные через консоль aws, что приведет к отправке сообщения в Slack.

Балансировщик нагрузки создается с правильно выглядящим сигналом тревоги наблюдения за облаком:

enter image description here

Похоже, что сигнал тревоги настроен на отправку предупреждений в правильную тему SNS:

enter image description here enter image description here

Существует подписка SNS на эту тему с лямбда-функцией в качестве конечной точки:

enter image description here

Сигналы тревоги срабатывают и сообщения отправляются в правильную тему, когда сигнал тревоги срабатывает:

enter image description here

Но лямбда-функция никогда не вызывается:

enter image description here

Однако, если я вручную добавлю тему SNS в качестве «источника событий» для лямбда-функции, она вызывается, когда срабатывает сигнализация и сообщения Slack.

enter image description here

Я неправильно понимаю, как подключить будильник облачного наблюдения к лямбда-функции? Или есть маленькая деталь, которую мне не хватает?

Если этот подход не работает, и единственный способ подключить лямбда-функцию к тревоге наблюдения за облаком - это добавить тему SNS в качестве «источника событий», каков подходящий способ сделать это с помощью шаблонов AWS CloudFormation? Я не вижу очевидного способа изменить существующий ресурс, такой как фиксированная лямбда-функция.

Вот мой шаблон CloudFormation:

"GenericSlackAlertSNSTopic" : {
    "Type" : "AWS::SNS::Topic",
    "Properties" : {
        "Subscription" : [ {
            "Endpoint" : "arn:aws:lambda:us-east-1:[...]:function:snsToSlack",
            "Protocol" : "lambda"
        } ]
    }
},
"ELBNoTrafficAlarm": {
    "Type": "AWS::CloudWatch::Alarm",
    "Properties": {
        "Namespace" : "AWS/ELB",
        "AlarmDescription": "Alarm for no apparent traffic on an ELB.",
        "AlarmActions": [{
            "Ref": "GenericSlackAlertSNSTopic"
        }],
        "InsufficientDataActions": [{
            "Ref": "GenericSlackAlertSNSTopic"
        }],
        "MetricName": "RequestCount",
        "Statistic": "Sum",
        "Dimensions" : [ {
            "Name" : "LoadBalancerName",
            "Value" : { "Ref" : "ElasticLoadBalancer" }
        } ],
        "Period": "60",
        "EvaluationPeriods": "3",
        "Threshold" : "10",
        "ComparisonOperator": "LessThanOrEqualToThreshold"
    }
}

Спасибо!

-neil

10
Neil Cronin

AWS выпустила (~ 3 дня назад) план слабой интеграции с AWS Cloudwatch с использованием лямбды как в python, так и в nodejs: https://aws.Amazon.com/blogs/aws/new-slack-integration-blueprints-for -aws-lambda/

Сказав это, я также столкнулся с той же проблемой, что и вы, выполнив шаги, упомянутые в проекте, я не получу сигналы тревоги, пока не добавлю тему SNS вручную в качестве «источника событий» в функцию лямбда-выражения. Дальнейшие исследования привели меня к этому вопросу: Невозможно создать источник событий SNS для функции Lambda с помощью CloudFormation

И, наконец, чтение документации AWS: 1) http://docs.aws.Amazon.com/lambda/latest/dg/intro-core-components.html

Amazon SNS поддерживает сопоставление источника событий посредством подписки на темы конфигурация (нет AWS Lambda API для настройки этого отображения).

2) http://docs.aws.Amazon.com/sns/latest/dg/sns-lambda.html

Настройка Amazon SNS с конечными точками Lambda с помощью AWS Management Приставка

Сделан вывод, что подписка на данный момент должна осуществляться через консоль управления AWS

Резюме: на данный момент единственный способ настроить Amazon SNS с конечными точками Lambda - через Консоль управления AWS.

Бонус: аналогичный вопрос с тем же ответом: Источник запланированных событий AWS Lambda через облачную информацию

5
Enrique Saez

Убедитесь, что вы даете теме разрешения SNS для вызова вашей лямбда-функции. CloudFormation для разрешения будет выглядеть примерно так:

"LambdaInvokePermission": {
    "Type": "AWS::Lambda::Permission",
    "Properties": {
        "FunctionName" : "arn:aws:lambda:us-east-1:[...]:function:snsToSlack",
        "Action": "lambda:InvokeFunction",
        "Principal": "sns.amazonaws.com",
        "SourceArn": { "Ref": "GenericSlackAlertSNSTopic" }
    }
}
0
BrianV

В запланированном событии CloudWatch Lambda является родной целью. enter image description here

Также вы можете добавить запланированное событие в cloudformation для лямбды

EventListFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    ...
    Events:
      Schedule1:
        Type: Schedule
        Properties:
          Schedule: rate(1 day)
0
Eric Nord