-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserverless.yml
More file actions
129 lines (121 loc) · 4.16 KB
/
serverless.yml
File metadata and controls
129 lines (121 loc) · 4.16 KB
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
service: node-ts-react-example-hello-world
plugins:
- serverless-finch
provider:
name: aws
runtime: nodejs8.10
profile: serverless
stage: test
region: us-east-1
custom:
stage: ${opt:stage, self:provider.stage}
client:
bucketName: ${self:service.name}-${self:custom.stage}
distributionFolder: dist
indexDocument: index.html
errorDocument: index.html
uploadOrder:
- .*
- index\.html
objectHeaders:
'*.bundle.*':
- name: Cache-Control
value: max-age=2592000 # 30 days
index.html:
- name: Cache-Control
value: no-cache
domainName: ${self:custom.domainNameStage.${self:custom.stage}}
domainNameStage:
test: test.${self:custom.baseDomainName}
prod: www.${self:custom.baseDomainName}
baseDomainName: hello-world.${self:custom.hostedZone}
hostedZone: codesaplings.com
logs:
bucket: codesaplings-logs
path: websites/${self:service.name}/${self:custom.stage}/cloudfront
resources:
Resources:
## Specifying the S3 Bucket
WebAppS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.client.bucketName}
## Specifying the CloudFront Distribution to serve your Web Application
WebAppCloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Origins:
- DomainName: ${self:custom.client.bucketName}.s3.amazonaws.com
## An identifier for the origin which must be unique within the distribution
Id: WebApp
CustomOriginConfig:
HTTPPort: 80
HTTPSPort: 443
OriginProtocolPolicy: https-only
Enabled: 'true'
HttpVersion: http2
Aliases:
- ${self:custom.domainName}
DefaultRootObject: index.html
## Since the Single Page App is taking care of the routing we need to make sure every path is served with index.html
## The only exception are files that actually exist e.g. app.js, reset.css
CustomErrorResponses:
- ErrorCode: 404
ResponseCode: 200
ResponsePagePath: /index.html
- ErrorCode: 403
ResponseCode: 200
ResponsePagePath: /index.html
DefaultCacheBehavior:
AllowedMethods:
- GET
- HEAD
## The origin id defined above
TargetOriginId: WebApp
## Defining if and how the QueryString and Cookies are forwarded to the origin which in this case is S3
ForwardedValues:
QueryString: false
Cookies:
Forward: none
## The protocol that users can use to access the files in the origin. To allow HTTP use `allow-all`
ViewerProtocolPolicy: redirect-to-https
## The certificate to use when viewers use HTTPS to request objects.
ViewerCertificate:
AcmCertificateArn:
Ref: WebAppCertificate
SslSupportMethod: sni-only
Logging:
IncludeCookies: false
Bucket: ${self:custom.logs.bucket}.s3.amazonaws.com
Prefix: ${self:custom.logs.path}
WebAppCertificate:
Type: AWS::CertificateManager::Certificate
Properties:
DomainName: ${self:custom.domainName}
ValidationMethod: DNS
WebAppDomainName:
Type: AWS::Route53::RecordSetGroup
Properties:
HostedZoneName: ${self:custom.baseDomainName}.
RecordSets:
- Name: ${self:custom.domainName}.
Type: CNAME
TTL: 60
ResourceRecords:
- Fn::GetAtt:
- WebAppCloudFrontDistribution
- DomainName
## In order to print out the hosted domain via `serverless info` we need to define the DomainName output for CloudFormation
Outputs:
WebAppS3BucketOutput:
Value:
Ref: WebAppS3Bucket
WebAppCloudFrontDistributionOutput:
Value:
Fn::GetAtt:
- WebAppCloudFrontDistribution
- DomainName
WebAppCloudFrontDistributionRef:
Value:
Ref: WebAppCloudFrontDistribution