-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathtemplate.yaml
133 lines (127 loc) · 3.73 KB
/
template.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Chat bot for reInvent trivia game
Parameters:
TriviaBackendEndpoint:
Type: String
Default: 'https://api.reinvent-trivia.com'
Resources:
BotFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./bot
Handler: bot.handler
Runtime: nodejs14.x
Timeout: 60
Environment:
Variables:
API_ENDPOINT: !Ref TriviaBackendEndpoint
Events:
Canary:
Type: Schedule
Properties:
Schedule: rate(1 minute)
Input: >-
{
"bot": {
"name": "TriviaGame",
"alias": "$LATEST",
"version": "$LATEST"
},
"currentIntent": {
"name": "LetsPlay",
"slots": {
}
}
}
AutoPublishAlias: live
DeploymentPreference:
Enabled: true
Type: Canary10Percent5Minutes
Alarms:
- !Ref BotLatestVersionErrorMetricGreaterThanZeroAlarm
- !Ref BotAliasErrorMetricGreaterThanZeroAlarm
Hooks:
PreTraffic: !Ref PreTrafficHook
BotAliasErrorMetricGreaterThanZeroAlarm:
Type: "AWS::CloudWatch::Alarm"
Properties:
AlarmName: !Sub ${AWS::StackName}-BotAliasErrors
AlarmDescription: Lambda Function Error > 0
ComparisonOperator: GreaterThanThreshold
Dimensions:
- Name: Resource
Value: !Sub "${BotFunction}:live"
- Name: FunctionName
Value: !Ref BotFunction
EvaluationPeriods: 2
MetricName: Errors
Namespace: AWS/Lambda
Period: 60
Statistic: Sum
Threshold: 0
BotLatestVersionErrorMetricGreaterThanZeroAlarm:
Type: "AWS::CloudWatch::Alarm"
Properties:
AlarmName: !Sub ${AWS::StackName}-BotLatestVersionErrors
AlarmDescription: Lambda Function Error > 0
ComparisonOperator: GreaterThanThreshold
Dimensions:
- Name: Resource
Value: !Sub "${BotFunction}:live"
- Name: FunctionName
Value: !Ref BotFunction
- Name: ExecutedVersion
Value: !GetAtt BotFunction.Version.Version
EvaluationPeriods: 2
MetricName: Errors
Namespace: AWS/Lambda
Period: 60
Statistic: Sum
Threshold: 0
PreTrafficHook:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Join
- '-'
- - 'CodeDeployHook_'
- !Ref "AWS::StackName"
- 'pre-traffic-hook'
CodeUri: ./hook
Timeout: 300
Handler: pre-traffic-hook.handler
Policies:
- Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "codedeploy:PutLifecycleEventHookExecutionStatus"
Resource:
!Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*'
- Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "lambda:InvokeFunction"
Resource: !Sub "${BotFunction.Arn}:*"
Runtime: nodejs14.x
DeploymentPreference:
Enabled: false
Role: ""
Environment:
Variables:
CurrentVersion: !Ref BotFunction.Version
LexPermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !Ref BotFunction.Alias
Action: "lambda:invokeFunction"
Principal: lex.amazonaws.com
SourceArn: !Join
- ':'
- - 'arn'
- !Ref "AWS::Partition"
- 'lex'
- !Ref "AWS::Region"
- !Ref "AWS::AccountId"
- 'intent:LetsPlay:*'