-
Notifications
You must be signed in to change notification settings - Fork 2
/
template.yml
146 lines (139 loc) · 3.45 KB
/
template.yml
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: Fan out sample using AWS Lambda, SQS, SNS and Go
Parameters:
WebhookURL:
Type: String
Channel:
Type: String
UserName:
Type: String
Icon:
Type: String
FileBucket:
Type: String
Resources:
WriteExtLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: artifact
Handler: write_ext
Runtime: go1.x
Timeout: 10
Tracing: Active
Events:
SQSEvent:
Type: SQS
Properties:
Queue: !GetAtt ForExtLambdaQueue.Arn
BatchSize: 10
WriteExtLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub /aws/lambda/${WriteExtLambda}
RetentionInDays: 1
WriteFileNameLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: artifact
Handler: write_file_name
Runtime: go1.x
Timeout: 10
Tracing: Active
Events:
SQSEvent:
Type: SQS
Properties:
Queue: !GetAtt ForFileNameLambdaQueue.Arn
BatchSize: 10
WriteFileNameLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub /aws/lambda/${WriteFileNameLambda}
RetentionInDays: 1
NotifierLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: artifact
Handler: notifier
Runtime: go1.x
Timeout: 10
Tracing: Active
Events:
SNSEvent:
Type: SNS
Properties:
Topic:
Ref: S3FileTopic
Environment:
Variables:
WEBHOOK_URL: !Ref WebhookURL
CHANNEL: !Ref Channel
USER_NAME: !Ref UserName
ICON: !Ref Icon
NotifierLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub /aws/lambda/${NotifierLambda}
RetentionInDays: 1
SQSLambdaSample:
Type: AWS::S3::Bucket
DependsOn: SNSTopicPolicy
Properties:
BucketName: !Ref FileBucket
NotificationConfiguration:
TopicConfigurations:
- Topic: !Ref S3FileTopic
Event: s3:ObjectCreated:Put
ForExtLambdaQueue:
Type: AWS::SQS::Queue
Properties:
VisibilityTimeout: 20
MessageRetentionPeriod: 60
ForFileNameLambdaQueue:
Type: AWS::SQS::Queue
Properties:
VisibilityTimeout: 20
MessageRetentionPeriod: 60
SQSPolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Statement:
Effect: Allow
Principal: "*"
Action: sqs:*
Resource: "*"
Condition:
StringEquals:
aws:SourceArn:
- !Ref S3FileTopic
Queues:
- !Ref ForExtLambdaQueue
- !Ref ForFileNameLambdaQueue
S3FileTopic:
Type: AWS::SNS::Topic
Properties:
Subscription:
- Endpoint: !GetAtt [ForExtLambdaQueue, Arn]
Protocol: sqs
- Endpoint: !GetAtt [ForFileNameLambdaQueue, Arn]
Protocol: sqs
TopicName: s3-file-topic
SNSTopicPolicy:
Type: AWS::SNS::TopicPolicy
Properties:
Topics:
- !Ref S3FileTopic
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: sns:Publish
Resource: !Ref S3FileTopic
Condition:
ArnLike:
aws:SourceArn: !Sub "arn:aws:s3:::${FileBucket}"
Principal:
AWS: '*'