7

Làm cách nào để kết nối báo thức đồng hồ đám mây aws với lời gọi hàm lambda?cách kết nối báo thức đồng hồ điện toán đám mây với chức năng lambda

Tôi đang lập trình thêm báo thức đồng hồ trên đám mây vào ELB mà chúng tôi tạo ra như một phần của ngăn xếp hình đám mây thông qua Mẫu CloudFormation AWS. Tôi muốn có các cảnh báo được gửi đến một hàm lambda sẽ gửi thông báo tới Slack. Mặc dù cảnh báo hoạt động, và cấu hình SNS có vẻ đúng với tôi, hàm lambda không bao giờ được gọi.

Chức năng lambda sau những ví dụ:

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/

Chức năng lambda hoạt động, và tôi có thể gửi nó kiểm tra dữ liệu thông qua giao diện điều khiển AWS kết quả trong một thông điệp được đưa lên Slack.

Bộ cân bằng tải được tạo ra với một đám mây báo động đồng hồ đúng-looking:

enter image description here

Các báo động dường như được cấu hình để gửi cảnh báo đến đúng SNS chủ đề:

enter image description here enter image description here

Có đăng ký SNS cho chủ đề đó, với hàm lambda là điểm cuối:

enter image description here

Báo động được kích hoạt và thông điệp gửi đến các chủ đề chính xác khi các đám cháy báo động:

enter image description here

Nhưng chức năng lambda không bao giờ gọi:

enter image description here

Tuy nhiên , nếu tôi thêm chủ đề SNS làm "nguồn sự kiện" theo cách thủ công trên hàm lambda, nó là được gọi khi báo thức phát ra và tin nhắn Slack được đăng.

enter image description here

Am Tôi hiểu lầm như thế nào để kết nối một báo động đồng hồ đám mây để một hàm lambda? Hoặc là có một chi tiết nhỏ tôi đang mất tích?

Nếu cách tiếp cận này không thể hoạt động và cách duy nhất để kết nối chức năng lambda với báo thức trên đám mây là thêm chủ đề SNS làm "nguồn sự kiện", cách thích hợp để thực hiện điều đó thông qua Mẫu CloudFormation AWS là gì? Tôi không thấy một cách rõ ràng để sửa đổi một nguồn tài nguyên hiện có như một hàm lambda cố định.

Đây là Template CloudFormation tôi:

"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" 
    } 
} 

Cảm ơn!

-neil

+0

Tôi đã thiết lập bản thân mình ngày hôm nay để có thể xác nhận nó hoạt động. Tôi không hiểu tại sao những gì bạn đã làm không mặc dù. –

+0

Cảm ơn. Nó không phải là một nấc cục tạo CloudFormation, tôi đã xếp chồng lên một chồng ~ 10 lần, và kết quả là như nhau (tức là, không có lời gọi hàm lambda.) –

+0

Đi vào CloudFormation trong bảng điều khiển và xác minh rằng Chủ đề SNS được thiết lập. Nếu xảy ra lỗi, nó sẽ xuất hiện ở đó. Bên cạnh đó, điều này có vẻ đúng với tôi ... –

Trả lời

4

AWS phát hành (~ 3 ngày trước) một kế hoạch chi tiết cho việc lồng ghép chùng với AWS Cloudwatch sử dụng lambda cả trong python và nodejs: https://aws.amazon.com/blogs/aws/new-slack-integration-blueprints-for-aws-lambda/

Being nói rằng, tôi cũng có cùng một vấn đề như bạn, làm theo các bước được đề cập trong kế hoạch chi tiết, tôi không nhận được báo thức cho đến khi tôi thêm chủ đề SNS theo cách thủ công dưới dạng "nguồn sự kiện" trên hàm lambda. tiếp tục điều tra đưa tôi đến với câu hỏi này: Can't create a SNS Event source on a Lambda function using CloudFormation

Và cuối cùng đọc tài liệu AWS: 1) http://docs.aws.amazon.com/lambda/latest/dg/intro-core-components.html

Amazon SNS duy trì ánh xạ nguồn sự kiện thông qua thuê bao chủ đề cấu hình (không có AWS Lambda API để định cấu hình ánh xạ này).

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

Cấu hình Amazon SNS với Lambda thiết bị đầu cuối với AWS Quản lý điều khiển

Kết luận rằng các thuê bao vào lúc này nên được thực hiện thông qua giao diện điều khiển quản lý AWS

Tóm tắt: tại thời điểm này, cách duy nhất để cấu hình Amazon SNS với Lambda Endpoints là thông qua AWS Management Console

Bonus: câu hỏi tương tự với câu trả lời giống nhau: AWS Lambda scheduled event source via cloudformation

0

CloudWatch theo lịch trình sự kiện hiện nay có Lambda một mục tiêu có nguồn gốc. enter image description here

Ngoài ra bạn có thể thêm một sự kiện dự kiến ​​sẽ cloudformation cho lambda

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

Hãy chắc chắn rằng bạn cung cấp cho các SNS cho phép chủ đề để gọi chức năng Lambda của bạn. CloudFormation cho phép sẽ trông giống như thế này:

"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" } 
    } 
} 
Các vấn đề liên quan