-
Notifications
You must be signed in to change notification settings - Fork 1
/
push-sns-messages-to-cloudwatch-logs.py
101 lines (74 loc) · 2.9 KB
/
push-sns-messages-to-cloudwatch-logs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
import boto3
import string
import random
import json
import time
cwlogs = boto3.client('logs')
def createLogGroup(logGroupName):
createLogGroupResponse = cwlogs.create_log_group(
logGroupName=logGroupName,
tags={
"Owner": "TrendMicro",
"Product": "CloudOneApplicationSecurity",
"Name": logGroupName
}
)
print("createLogGroupResponse - " + str(createLogGroupResponse))
def ifLogGroupExists(logGroupName):
listLogGroupsResponse = cwlogs.describe_log_groups()
for logGroup in listLogGroupsResponse["logGroups"]:
if logGroupName in logGroup["logGroupName"]:
return True
return False
def createLogStream(logGroupName, logStreamName):
createLogStreamResponse = cwlogs.create_log_stream(
logGroupName=logGroupName,
logStreamName=logStreamName
)
print("createLogStreamResponse - " + str(createLogStreamResponse))
if createLogStreamResponse["ResponseMetadata"]["HTTPStatusCode"] == 200:
return logStreamName
return ""
def putLogEvents(logGroupName, logStreamName, logEvent, nextSequenceToken=None):
if nextSequenceToken:
putLogEventsResponse = cwlogs.put_log_events(
logGroupName=logGroupName,
logStreamName=logStreamName,
logEvents=logEvent,
sequenceToken=nextSequenceToken
)
else:
putLogEventsResponse = cwlogs.put_log_events(
logGroupName=logGroupName,
logStreamName=logStreamName,
logEvents=logEvent
)
print("putLogEventsResponse - " + str(putLogEventsResponse))
if "rejectedLogEventsInfo" not in putLogEventsResponse:
return putLogEventsResponse["nextSequenceToken"]
return None
def lambda_handler(event, context):
nextSequenceToken = None
logGroupName = str(os.environ.get("CloudWatchLogGroupName"))
logStreamNamePrefix = str(os.environ.get("CloudWatchLogStreamNamePrefix"))
nonce = ''.join(random.choices(
string.ascii_letters + string.digits, k=8)).upper()
logEvents = json.loads(event["Records"][0]["Sns"]["Message"])
if len(logEvents) > 0:
if ifLogGroupExists(logGroupName):
logStreamName = createLogStream(
logGroupName, logStreamNamePrefix + "-" + nonce)
else:
createLogGroup(logGroupName)
logStreamName = createLogStream(
logGroupName, logStreamNamePrefix + "-" + nonce)
print(str(logGroupName) + " - " + str(logStreamName))
for message in logEvents:
epoch_time = int(round(time.time() * 1000))
logEvent = []
logEvent.append({"timestamp": epoch_time, "message": str(message)})
nextSequenceToken = putLogEvents(
logGroupName, logStreamName, logEvent, nextSequenceToken)
if nextSequenceToken == None:
return False