Skip to content

Commit 9afaefa

Browse files
zjyedavidgf
authored andcommitted
Add sns subscription support (#55)
* sns subscription for alias mapping * Fn:GetAttr is not working for alias * wrap into function test case * remove arrow function direct point to the matchesProperty returned func * fixture event sns subscription
1 parent 9183acc commit 9afaefa

File tree

6 files changed

+769
-6
lines changed

6 files changed

+769
-6
lines changed
Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
{
2+
"AWSTemplateFormatVersion": "2010-09-09",
3+
"Description": "The AWS CloudFormation template for this Serverless application",
4+
"Resources": {
5+
"ServerlessDeploymentBucket": {
6+
"Type": "AWS::S3::Bucket"
7+
},
8+
"HelloLogGroup": {
9+
"Type": "AWS::Logs::LogGroup",
10+
"Properties": {
11+
"LogGroupName": "/aws/lambda/canary-deployments-test-dev-hello"
12+
}
13+
},
14+
"PreHookLogGroup": {
15+
"Type": "AWS::Logs::LogGroup",
16+
"Properties": {
17+
"LogGroupName": "/aws/lambda/canary-deployments-test-dev-preHook"
18+
}
19+
},
20+
"PostHookLogGroup": {
21+
"Type": "AWS::Logs::LogGroup",
22+
"Properties": {
23+
"LogGroupName": "/aws/lambda/canary-deployments-test-dev-postHook"
24+
}
25+
},
26+
"IamRoleLambdaExecution": {
27+
"Type": "AWS::IAM::Role",
28+
"Properties": {
29+
"AssumeRolePolicyDocument": {
30+
"Version": "2012-10-17",
31+
"Statement": [
32+
{
33+
"Effect": "Allow",
34+
"Principal": {
35+
"Service": ["lambda.amazonaws.com"]
36+
},
37+
"Action": ["sts:AssumeRole"]
38+
}
39+
]
40+
},
41+
"Policies": [
42+
{
43+
"PolicyName": {
44+
"Fn::Join": ["-", ["dev", "canary-deployments-test", "lambda"]]
45+
},
46+
"PolicyDocument": {
47+
"Version": "2012-10-17",
48+
"Statement": [
49+
{
50+
"Effect": "Allow",
51+
"Action": ["logs:CreateLogStream"],
52+
"Resource": [
53+
{
54+
"Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-hello:*"
55+
},
56+
{
57+
"Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-preHook:*"
58+
},
59+
{
60+
"Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-postHook:*"
61+
}
62+
]
63+
},
64+
{
65+
"Effect": "Allow",
66+
"Action": ["logs:PutLogEvents"],
67+
"Resource": [
68+
{
69+
"Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-hello:*:*"
70+
},
71+
{
72+
"Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-preHook:*:*"
73+
},
74+
{
75+
"Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/canary-deployments-test-dev-postHook:*:*"
76+
}
77+
]
78+
},
79+
{
80+
"Effect": "Allow",
81+
"Action": ["codedeploy:*"],
82+
"Resource": ["*"]
83+
}
84+
]
85+
}
86+
}
87+
],
88+
"Path": "/",
89+
"RoleName": {
90+
"Fn::Join": [
91+
"-",
92+
["canary-deployments-test", "dev", "us-east-1", "lambdaRole"]
93+
]
94+
}
95+
}
96+
},
97+
"BelloLambdaFunction": {
98+
"Type": "AWS::Lambda::Function",
99+
"Properties": {
100+
"Code": {
101+
"S3Bucket": {
102+
"Ref": "ServerlessDeploymentBucket"
103+
},
104+
"S3Key": "serverless/canary-deployments-test/dev/1520191533287-2018-03-04T19:25:33.287Z/canary-deployments-test.zip"
105+
},
106+
"FunctionName": "canary-deployments-test-dev-hello",
107+
"Handler": "handler.hello",
108+
"MemorySize": 1024,
109+
"Role": {
110+
"Fn::GetAtt": ["IamRoleLambdaExecution", "Arn"]
111+
},
112+
"Runtime": "nodejs6.10",
113+
"Timeout": 6
114+
},
115+
"DependsOn": ["HelloLogGroup", "IamRoleLambdaExecution"]
116+
},
117+
"BelloLambdaVersionFYAirphUvjV7H12yGxU1eQrqAiSBMjAi9hdLPgV62L8": {
118+
"Type": "AWS::Lambda::Version",
119+
"DeletionPolicy": "Retain",
120+
"Properties": {
121+
"FunctionName": {
122+
"Ref": "BelloLambdaFunction"
123+
},
124+
"CodeSha256": "sZvdDgxnAbKe1yaQga0XJPD82+o5jFWz+J3lR+q9UHU="
125+
}
126+
},
127+
"PreHookLambdaFunction": {
128+
"Type": "AWS::Lambda::Function",
129+
"Properties": {
130+
"Code": {
131+
"S3Bucket": {
132+
"Ref": "ServerlessDeploymentBucket"
133+
},
134+
"S3Key": "serverless/canary-deployments-test/dev/1520191533287-2018-03-04T19:25:33.287Z/canary-deployments-test.zip"
135+
},
136+
"FunctionName": "canary-deployments-test-dev-preHook",
137+
"Handler": "hooks.pre",
138+
"MemorySize": 1024,
139+
"Role": {
140+
"Fn::GetAtt": ["IamRoleLambdaExecution", "Arn"]
141+
},
142+
"Runtime": "nodejs6.10",
143+
"Timeout": 6
144+
},
145+
"DependsOn": ["PreHookLogGroup", "IamRoleLambdaExecution"]
146+
},
147+
"PreHookLambdaVersionIYyrXlfQM5jjU68REvnAzRxhgq9eoLqSsDjy0": {
148+
"Type": "AWS::Lambda::Version",
149+
"DeletionPolicy": "Retain",
150+
"Properties": {
151+
"FunctionName": {
152+
"Ref": "PreHookLambdaFunction"
153+
},
154+
"CodeSha256": "sZvdDgxnAbKe1yaQga0XJPD82+o5jFWz+J3lR+q9UHU="
155+
}
156+
},
157+
"PostHookLambdaFunction": {
158+
"Type": "AWS::Lambda::Function",
159+
"Properties": {
160+
"Code": {
161+
"S3Bucket": {
162+
"Ref": "ServerlessDeploymentBucket"
163+
},
164+
"S3Key": "serverless/canary-deployments-test/dev/1520191533287-2018-03-04T19:25:33.287Z/canary-deployments-test.zip"
165+
},
166+
"FunctionName": "canary-deployments-test-dev-postHook",
167+
"Handler": "hooks.post",
168+
"MemorySize": 1024,
169+
"Role": {
170+
"Fn::GetAtt": ["IamRoleLambdaExecution", "Arn"]
171+
},
172+
"Runtime": "nodejs6.10",
173+
"Timeout": 6
174+
},
175+
"DependsOn": ["PostHookLogGroup", "IamRoleLambdaExecution"]
176+
},
177+
"PostHookLambdaVersiondh0VUUAh9BrmvORqx3vDEIcHxolKWKCO1YL45mVTbg": {
178+
"Type": "AWS::Lambda::Version",
179+
"DeletionPolicy": "Retain",
180+
"Properties": {
181+
"FunctionName": {
182+
"Ref": "PostHookLambdaFunction"
183+
},
184+
"CodeSha256": "sZvdDgxnAbKe1yaQga0XJPD82+o5jFWz+J3lR+q9UHU="
185+
}
186+
},
187+
"BelloLambdahelloEventStream": {
188+
"Type": "AWS::SNS::Subscription",
189+
"Properties": {
190+
"TopicArn": {
191+
"Ref": "helloEventStream"
192+
},
193+
"Protocol": "lambda",
194+
"Endpoint": {
195+
"Fn::GetAtt": ["BelloLambdaFunction", "Arn"]
196+
},
197+
"FilterPolicy": {
198+
"eventType": ["HelloEvent"]
199+
}
200+
}
201+
},
202+
"BelloLambdaPermissionhelloEventStreamSNS": {
203+
"Type": "AWS::Lambda::Permission",
204+
"Properties": {
205+
"FunctionName": {
206+
"Fn::GetAtt": [
207+
"BelloLambdaFunction",
208+
"Arn"
209+
]
210+
},
211+
"Action": "lambda:InvokeFunction",
212+
"Principal": {
213+
"Fn::Join": [
214+
"",
215+
[
216+
"sns.",
217+
{
218+
"Ref": "AWS::URLSuffix"
219+
}
220+
]
221+
]
222+
},
223+
"SourceArn": {
224+
"Ref": "helloEventStream"
225+
}
226+
}
227+
}
228+
},
229+
"helloEventStream": {
230+
"Type": "AWS::SNS::Topic",
231+
"Properties": {
232+
"TopicName": "helloEventStream"
233+
}
234+
},
235+
"Outputs": {
236+
"ServerlessDeploymentBucketName": {
237+
"Value": {
238+
"Ref": "ServerlessDeploymentBucket"
239+
}
240+
},
241+
"BelloLambdaFunctionQualifiedArn": {
242+
"Description": "Current Lambda function version",
243+
"Value": {
244+
"Ref": "BelloLambdaVersionFYAirphUvjV7H12yGxU1eQrqAiSBMjAi9hdLPgV62L8"
245+
}
246+
},
247+
"PreHookLambdaFunctionQualifiedArn": {
248+
"Description": "Current Lambda function version",
249+
"Value": {
250+
"Ref": "PreHookLambdaVersionIYyrXlfQM5jjU68REvnAzRxhgq9eoLqSsDjy0"
251+
}
252+
},
253+
"PostHookLambdaFunctionQualifiedArn": {
254+
"Description": "Current Lambda function version",
255+
"Value": {
256+
"Ref": "PostHookLambdaVersiondh0VUUAh9BrmvORqx3vDEIcHxolKWKCO1YL45mVTbg"
257+
}
258+
}
259+
}
260+
}

0 commit comments

Comments
 (0)