From 9229d32110d3797b329393f1d22e54fb4e66fba1 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Thu, 15 Jun 2023 12:20:10 +0000 Subject: [PATCH] Add support for RDS events --- app.py | 11 +++++++++++ tests/test_aws-lambda-rie.py | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/app.py b/app.py index 773f043..d1ec084 100644 --- a/app.py +++ b/app.py @@ -260,6 +260,17 @@ def handler(event, context): title = "ElastiCache fail over complete" body = "for node {}".format(msg["ElastiCache:FailoverComplete"]) + # RDS events + elif "Event Source" in msg and msg['Event Source'] == "db-instance": + try: + title = msg["Event Message"] + body = "for instance <{}|{}> - <{}|Event docs>".format( + msg["Identifier Link"], msg["Source ID"], msg["Event ID"]) + except KeyError: + msg_type = apprise.NotifyType.WARNING + body = sns["Message"] + pass + # Basic ASG events elif "Event" in msg and msg["Event"] in ["autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_LAUNCH"]: title = msg["Description"] diff --git a/tests/test_aws-lambda-rie.py b/tests/test_aws-lambda-rie.py index 9956a76..6b2b9cf 100755 --- a/tests/test_aws-lambda-rie.py +++ b/tests/test_aws-lambda-rie.py @@ -68,6 +68,13 @@ class Test: ) self.send_event(event) + # RDS + def test_rds_event(self): + event = json.loads( + r' {"Records": [{"Event Source":"db-instance","Event Time":"2023-06-15 06:13:18.237","Identifier Link":"https://console.aws.amazon.com/rds/home?region=us-west-2#dbinstance:id=vrv6b014c5jbdf","Source ID":"vrv6b014c5jbdf","Source ARN":"arn:aws:rds:us-west-2:123456789012:db:vrv6b014c5jbdf","Event ID":"http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html#RDS-EVENT-0001","Event Message":"Backing up DB instance","Tags":{"aws:cloudformation:stack-name":"postgres-rds","aws:cloudformation:stack-id":"arn:aws:cloudformation:us-west-2:123456789012:stack/postgres-rds/c7382650-46a7-11ea-bd3f-064fbe1c973c","Conglomerate":"test","aws:cloudformation:logical-id":"RdsDBInstance","Artifact":"postgres-rds","Name":"postgres-rds.DBInstance"}}]}' + ) + self.send_event(event) + def test_asg(self): event = json.loads( r' {"Records": [{"EventSource": "aws:sns", "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws:sns:eu-central-1:123456789012:AlertHub:0e7ce1ba-c3e4-4264-bae1-4eb71c91235a", "Sns": {"Type": "Notification", "MessageId": "10ae86eb-9ddc-5c2f-806c-df6ecb6bde42", "TopicArn": "arn:aws:sns:eu-central-1:123456789012:AlertHub", "Subject": null, "Message": "{\"Origin\":\"AutoScalingGroup\",\"Destination\":\"EC2\",\"Progress\":50,\"AccountId\":\"123456789012\",\"Description\":\"Terminating EC2 instance: i-023ca42b188ffd91d\",\"RequestId\":\"1764cac3-224b-46bf-8bed-407a5b868e63\",\"EndTime\":\"2023-05-15T08:51:16.195Z\",\"AutoScalingGroupARN\":\"arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:4a4fb6e3-22b4-487b-8335-3904f02ff9fd:autoScalingGroupName/powerbi\",\"ActivityId\":\"1764cac3-224b-46bf-8bed-407a5b868e63\",\"StartTime\":\"2023-05-15T08:50:14.145Z\",\"Service\":\"AWS Auto Scaling\",\"Time\":\"2023-05-15T08:51:16.195Z\",\"EC2InstanceId\":\"i-023ca42b188ffd91d\",\"StatusCode\":\"InProgress\",\"StatusMessage\":\"\",\"Details\":{\"Subnet ID\":\"subnet-fe2d6189\",\"Availability Zone\":\"us-west-2a\"},\"AutoScalingGroupName\":\"powerbi\",\"Cause\":\"At 2023-05-15T08:50:03Z the scheduled action end executed. Setting min size from 1 to 0. Setting desired capacity from 1 to 0. At 2023-05-15T08:50:03Z a scheduled action update of AutoScalingGroup constraints to min: 0, max: 1, desired: 0 changing the desired capacity from 1 to 0. At 2023-05-15T08:50:13Z an instance was taken out of service in response to a difference between desired and actual capacity, shrinking the capacity from 1 to 0. At 2023-05-15T08:50:14Z instance i-023ca42b188ffd91d was selected for termination.\",\"Event\":\"autoscaling:EC2_INSTANCE_TERMINATE\"}" }}]}'