-
Notifications
You must be signed in to change notification settings - Fork 11
/
template.yml
146 lines (137 loc) · 4.19 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'
Parameters:
Environment:
Type: String
Description: Environment to deploy resources to
AllowedValues:
- staging
- production
Conditions:
IsProduction: !Equals [ !Ref Environment, production ]
Globals:
Function:
Runtime: nodejs12.x
MemorySize: 128
Timeout: 5
Resources:
BookEventsQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: !Sub 'book-events-${Environment}'
KmsMasterKeyId: alias/aws/sqs
Tags:
- Key: project
Value: my-project
- Key: environment
Value: !Ref Environment
PutBookFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub 'put-book-${Environment}'
CodeUri: ./src/put-book/
Handler: index.handler
AutoPublishAlias: !Ref Environment
DeploymentPreference:
Type: !If [IsProduction, Canary10Percent5Minutes, AllAtOnce]
Alarms:
- !Ref AliasErrorMetricGreaterThanZeroAlarm
Hooks:
PreTraffic: !Ref PreTrafficCheckFunction
Environment:
Variables:
TABLE: !Ref BooksTable
Tags:
project: my-project
environment: !Ref Environment
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref BooksTable
- SQSPollerPolicy:
QueueName: !Ref BookEventsQueue
Events:
NewBookEvent:
Type: SQS
Properties:
Queue: !GetAtt BookEventsQueue.Arn
BatchSize: 5
Enabled: true
BooksTable:
Type: AWS::Serverless::SimpleTable
Properties:
PrimaryKey:
Name: isbn
Type: String
TableName: !Sub 'books-${Environment}'
Tags:
project: my-project
environment: !Ref Environment
SSESpecification:
SSEEnabled: true
PreTrafficCheckFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub 'CodeDeployHook_put-book-${Environment}-pre-traffic-check'
CodeUri: ./src/pre-traffic-check/
Handler: index.handler
Environment:
Variables:
TABLE: !Ref BooksTable
FN_NEW_VERSION: !Ref PutBookFunction.Version
Tags:
project: my-project
environment: !Ref Environment
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref BooksTable
- 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: !Ref PutBookFunction.Version
AliasErrorMetricGreaterThanZeroAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Lambda Function Error > 0
ComparisonOperator: GreaterThanThreshold
Dimensions:
- Name: Resource
Value: !Sub '${PutBookFunction}:${Environment}'
- Name: FunctionName
Value: !Ref PutBookFunction
EvaluationPeriods: 2
MetricName: Errors
Namespace: AWS/Lambda
Period: 60
Statistic: Sum
Threshold: 0
Outputs:
BookEventsQueueUrl:
Description: SQS queue url for new book events to be left in
Value: !Ref BookEventsQueue
BookEventsQueueArn:
Description: SQS queue ARN for new book events to be left in
Value: !GetAtt BookEventsQueue.Arn
PutBookFunctionArn:
Description: "Put book function ARN"
Value: !GetAtt PutBookFunction.Arn
PutBookFunctionIamRole:
Description: "IAM Role for Put Book function"
Value: !GetAtt PutBookFunctionRole.Arn
BooksTable:
Description: DynamoDB table where books are stored
Value: !Ref BooksTable
PreTrafficCheckFunctionArn:
Description: "Pre Traffic check function function ARN"
Value: !GetAtt PreTrafficCheckFunction.Arn
PreTrafficCheckFunctionIamRole:
Description: "IAM Role for Put Book Pre Traffic Check function"
Value: !GetAtt PreTrafficCheckFunctionRole.Arn