-
Notifications
You must be signed in to change notification settings - Fork 69
/
External_Templates.yaml
114 lines (98 loc) · 3.74 KB
/
External_Templates.yaml
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
AWSTemplateFormatVersion: 2010-09-09
Description: External Amazon Pinpoint Campaign Templates
Parameters:
PinpointProjectId:
Type: String
Description: Amazon Pinpoint Project ID if one already exists, blank to create one
PinpointProjectName:
Type: String
Default: "My Pinpoint Project"
Description: "If no PinpointProjectId provided, name to be used to create the Pinpoint project"
Conditions:
NeedsPinpointProjectId: !Equals
- ''
- !Ref PinpointProjectId
Resources:
PinpointApplication:
Type: AWS::Pinpoint::App
Condition: NeedsPinpointProjectId
Properties:
Name: !Ref PinpointProjectName
PinpointApplicationSettings:
Type: AWS::Pinpoint::ApplicationSettings
Properties:
ApplicationId: !If
- NeedsPinpointProjectId
- !Ref PinpointApplication
- !Ref PinpointProjectId
CampaignHook:
LambdaFunctionName: !GetAtt FilterCampaignHookLambdaFunction.Arn
Mode: 'FILTER'
DependsOn: LambdaPermission
LambdaPermission:
Type: AWS::Lambda::Permission
Properties:
Action: 'lambda:InvokeFunction'
FunctionName: !GetAtt FilterCampaignHookLambdaFunction.Arn
Principal: !Sub 'pinpoint.${AWS::Region}.amazonaws.com'
SourceArn:
!Sub
- 'arn:aws:mobiletargeting:${AWS::Region}:${AWS::AccountId}:/apps/${ProjectId}*'
- {ProjectId: !If [NeedsPinpointProjectId, !Ref PinpointApplication, !Ref PinpointProjectId] }
FilterCampaignHookLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.lambda_handler
Role: !GetAtt FilterCampaignHookLambdaFunctionRole.Arn
Runtime: "python3.7"
Timeout: 60
MemorySize: 1024
Code:
ZipFile: |
import json
import logging
def lambda_handler(event, context):
logging.getLogger().setLevel('DEBUG')
logging.debug(json.dumps(event))
# Loop over each incoming Endpoint
for endpointId,endpoint in event['Endpoints'].items():
# Mock fetch html and subject
subject = mock_call_to_get_subjectline(endpointId)
html = mock_call_to_get_htmlbody(endpointId)
# Add subject and html to the Endpoint's Attributes
endpoint['Attributes']['subject'] = [subject]
endpoint['Attributes']['html'] = [html]
# Return the Mutated Endpoints
return event['Endpoints']
def mock_call_to_get_subjectline(endpoint_id):
#TODO - call a webservice, content management service, S3, to get a subject line for the endpoint
return 'Here is my subject line for endpointId: ' + endpoint_id
def mock_call_to_get_htmlbody(endpoint_id):
#TODO - call a webservice, content management service, S3, to get the html body for the endpoint
return '<html><body><p>Here is my html for EndpointID: ' + endpoint_id + '</p></body></html>';
FilterCampaignHookLambdaFunctionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Principal:
Service:
- "lambda.amazonaws.com"
Action:
- "sts:AssumeRole"
Policies:
-
PolicyName: "LambdaExecutionPolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:*"