-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsam-template-stage.yaml
226 lines (210 loc) · 7.49 KB
/
sam-template-stage.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
---
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Serverless Express Application/API powered by API Gateway and Lambda
Parameters:
DomainName:
Type: String
Description: API Domain name
Default: $DomainName
Certificate:
Type: String
Description: Certificate
Default: $Certificate
BucketNameImages:
Type: String
Description: Bucket for Images
Default: $BucketNameImages
Conditions:
UseDomainName: !Not
- !Equals
- !Ref DomainName
- ''
UseCertificate: !Not
- !Equals
- !Ref Certificate
- ''
Resources:
ExpressApi:
Type: AWS::Serverless::Api
Properties:
StageName: stage
BinaryMediaTypes:
- image/png
- image/jpg
- image/jpeg
- multipart/form-data
ExpressLambdaFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./dist
PackageType: Zip
Runtime: nodejs18.x
Handler: lambda.handler
MemorySize: 1024
Timeout: 30
Events:
Game:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/game
Method: ANY
Team:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/team
Method: ANY
User:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/user
Method: ANY
UserSignIn:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/user/sign-in
Method: ANY
UserSignUp:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/user/sign-up
Method: ANY
UserAvatar:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/user/avatar
Method: ANY
Gallery:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/gallery
Method: ANY
GalleryImage:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/gallery/image
Method: ANY
GalleryImages:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/gallery/images
Method: ANY
Mail:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/mail
Method: ANY
Event:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/event
Method: ANY
EventImport:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/event/import
Method: ANY
Roster:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/roster
Method: ANY
Access:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/access
Method: ANY
About:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/about
Method: ANY
Page:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/page
Method: ANY
Deploy:
Type: Api
Properties:
RestApiId: !Ref ExpressApi
Path: /api/v1/deploy
Method: ANY
Policies:
- SESBulkTemplatedCrudPolicy:
IdentityName: mamboleofc.ca
- SESEmailTemplateCrudPolicy: {}
- S3WritePolicy:
BucketName: !Ref BucketNameImages
MyApiCertificate:
Type: 'AWS::CertificateManager::Certificate'
Condition: UseCertificate
Properties:
DomainName: !Sub '*.${Certificate}'
DomainValidationOptions:
- DomainName: !Sub '*.${Certificate}'
ValidationDomain: !Ref Certificate
SubjectAlternativeNames:
- !Ref Certificate
- !Sub '*.${Certificate}'
MyApiDomainName:
Type: 'AWS::ApiGateway::DomainName'
Condition: UseDomainName
Properties:
CertificateArn: !Ref MyApiCertificate
DomainName: !Ref DomainName
MyApiBasePathMapping:
Type: 'AWS::ApiGateway::BasePathMapping'
Condition: UseDomainName
Properties:
RestApiId: !Ref ExpressApi
DomainName: !Ref MyApiDomainName
BasePath: '(none)'
Stage: stage
Route53HostedZone:
Type: AWS::Route53::HostedZone
Condition: UseDomainName
Properties:
Name: !Ref DomainName
MyApiRoute53RecordSetGroup:
Type: AWS::Route53::RecordSetGroup
Condition: UseDomainName
Properties:
HostedZoneId: !Ref Route53HostedZone
RecordSets:
- Name: !Sub ${DomainName}.
Type: A
AliasTarget:
EvaluateTargetHealth: false
HostedZoneId: !GetAtt MyApiDomainName.DistributionHostedZoneId
DNSName: !GetAtt MyApiDomainName.DistributionDomainName
Outputs:
LambdaFunctionConsoleUrl:
Description: Console URL for the Lambda Function.
Value: !Sub https://${AWS::Region}.console.aws.amazon.com/lambda/home?region=${AWS::Region}#/functions/${ExpressLambdaFunction}
ApiGatewayApiConsoleUrl:
Description: Console URL for the API Gateway API's Stage.
Value: !Sub https://${AWS::Region}.console.aws.amazon.com/apigateway/home?region=${AWS::Region}#/apis/${ExpressApi}/stages/stage
ApiUrl:
Description: Invoke URL for your API. Clicking this link will perform a GET request
on the root resource of your API.
Value: !Sub https://${ExpressApi}.execute-api.${AWS::Region}.amazonaws.com/
LambdaFunctionName:
Description: Name of the Serverless Express Lambda Function
Value: !Ref ExpressLambdaFunction