/
assets.py
91 lines (80 loc) · 2.13 KB
/
assets.py
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
from troposphere import (
Join,
Output,
GetAtt,
)
from troposphere.s3 import (
Bucket,
CorsConfiguration,
CorsRules,
PublicRead,
VersioningConfiguration,
)
from troposphere.cloudfront import (
DefaultCacheBehavior,
Distribution,
DistributionConfig,
ForwardedValues,
Origin,
S3Origin,
)
from .template import template
from .domain import domain_name
# Create an S3 bucket that holds statics and media
assets_bucket = template.add_resource(
Bucket(
"AssetsBucket",
AccessControl=PublicRead,
VersioningConfiguration=VersioningConfiguration(
Status="Enabled"
),
DeletionPolicy="Retain",
CorsConfiguration=CorsConfiguration(
CorsRules=[CorsRules(
AllowedOrigins=[Join("", [
"https://*.",
domain_name,
])],
AllowedMethods=["POST", "PUT", "HEAD", "GET", ],
AllowedHeaders=[
"*",
]
)]
),
)
)
# Output S3 asset bucket name
template.add_output(Output(
"AssetsBucketDomainName",
Description="Assets bucket domain name",
Value=GetAtt(assets_bucket, "DomainName")
))
# Create a CloudFront CDN distribution
distribution = template.add_resource(
Distribution(
'AssetsDistribution',
DistributionConfig=DistributionConfig(
Origins=[Origin(
Id="Assets",
DomainName=GetAtt(assets_bucket, "DomainName"),
S3OriginConfig=S3Origin(
OriginAccessIdentity="",
),
)],
DefaultCacheBehavior=DefaultCacheBehavior(
TargetOriginId="Assets",
ForwardedValues=ForwardedValues(
QueryString=False
),
ViewerProtocolPolicy="allow-all",
),
Enabled=True
),
)
)
# Output CloudFront url
template.add_output(Output(
"AssetsDistributionDomainName",
Description="The assest CDN domain name",
Value=GetAtt(distribution, "DomainName")
))