-
Notifications
You must be signed in to change notification settings - Fork 0
/
LambdaBackedCustomResourceWithPythonRuntime.template
112 lines (112 loc) · 3.72 KB
/
LambdaBackedCustomResourceWithPythonRuntime.template
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
{
"Description" : "This is a sample template for lambda-backed custom resource. Runtime for Lambda function is python",
"Parameters" : {
"Base" : {
"Type" : "String",
"Default" : "10"
},
"CustomResourceId" : {
"Type" : "String",
"Default" : "SomeCustomResourceId"
}
},
"Resources":{
"TestCustomResource" : {
"Type" : "Custom::TestCustomResourceWithLambda",
"Properties" : {
"ServiceToken" : { "Fn::GetAtt" : ["TestLambdaFunction", "Arn"] },
"Base" : { "Ref" : "Base" },
"Id" : { "Ref" : "CustomResourceId" }
}
},
"TestLambdaFunction" : {
"Type" : "AWS::Lambda::Function",
"Properties" : {
"Handler" : "index.handler",
"Role" : {"Fn::GetAtt" : ["TestLambdaExecutionRole", "Arn"]},
"Code" : {
"ZipFile" : { "Fn::Join" : ["\n", [
"from __future__ import print_function",
"import json",
"import cfnresponse",
"print('Loading function')",
"def handler(event, context):",
" base = event['ResourceProperties']['Base']",
" customId = event['ResourceProperties']['Id']",
" outputData = {}",
" isInt = True",
" try:",
" int(base)",
" except ValueError:",
" isInt = False",
" except Exception as e:",
" print(e)",
" cfnresponse.send(event, context, cfnresponse.FAILED, { 'error': str(e) }, customId)",
" return",
" if event['RequestType'] != 'Delete' and isInt:",
" outputData['Result'] = int(base) * 5",
" if event['RequestType'] == 'Delete' or isInt:",
" cfnresponse.send(event, context, cfnresponse.SUCCESS, outputData, customId)",
" else:",
" cfnresponse.send(event, context, cfnresponse.FAILED, outputData, customId)"
]]}
},
"Timeout" : "10",
"MemorySize" : "256",
"Runtime" : "python2.7"
}
},
"TestLambdaExecutionRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "cwlogs",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": { "Fn::Join" : [":", ["arn:aws:logs", { "Ref" : "AWS::Region" }, { "Ref" : "AWS::AccountId" }, "*" ]] }
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
{ "Fn::Join" : [":", ["arn:aws:logs", { "Ref" : "AWS::Region" }, { "Ref" : "AWS::AccountId" }, "log-group", "/aws/lambda/*", "*" ]] }
]
}
]
}
}
]
}
}
},
"Outputs" : {
"Result" : {
"Value" : { "Fn::GetAtt" : [ "TestCustomResource", "Result" ] }
}
}
}