AWS CloudFormation CloudFront CDN
Overview
Create production-ready CDN infrastructure using AWS CloudFormation templates. This skill covers CloudFront distributions, multiple origins (ALB, S3, API Gateway, Lambda@Edge, VPC Origins), CacheBehaviors, Functions, SecurityHeaders, and best practices for parameters, outputs, and cross-stack references.
When to Use
- Creating CloudFront distributions with CloudFormation
- Configuring origins (ALB, S3, Lambda@Edge, VPC Origins) with path patterns
- Implementing caching with CacheBehaviors and Cache Policies
- Configuring custom domains with ACM and SecurityHeaders
- Integrating WAF with CloudFront distributions
Instructions
Follow these steps to create CloudFront distributions with CloudFormation:
1. Define Distribution Parameters
Validate before deploying:
aws cloudformation validate-template --template-body file://template.yaml
cfn-lint template.yaml
Specify domain names, ACM certificates, price class, and origin settings:
Parameters:
DomainName:
Type: String
Default: cdn.example.com
Description: Custom domain name for CloudFront distribution
CertificateArn:
Type: AWS::ACM::Certificate::Arn
Description: ACM certificate ARN for HTTPS
PriceClass:
Type: String
Default: PriceClass_All
AllowedValues:
- PriceClass_All
- PriceClass_100
- PriceClass_200
Description: CloudFront price class
OriginDomainName:
Type: String
Description: Domain name of the origin (ALB or S3)
2. Configure Origins
Add S3 buckets, ALBs, API Gateway, or custom origins. For S3 origins, use OAI (legacy) or OAC (recommended):
Resources:
# S3 Bucket
StaticBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "static-assets-${AWS::AccountId}-${AWS::Region}"
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
# Origin Access Control (recommended)
OriginAccessControl:
Type: AWS::CloudFront::OriginAccessControl
Properties:
OriginAccessControlConfig:
Name: !Sub "${AWS::StackName}-oac"
OriginAccessControlOriginType: s3
SigningBehavior: always
SigningProtocol: sigv4
3. Set Up Default Cache Behavior
Configure viewer request/response policies and caching:
Resources:
CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Origins:
- Id: S3Origin
DomainName: !GetAtt StaticBucket.RegionalDomainName
AccessControlId: !Ref OriginAccessControl
S3OriginConfig:
OriginAccessIdentity: ""
DefaultCacheBehavior:
TargetOriginId: S3Origin
ViewerProtocolPolicy: redirect-to-https
AllowedMethods:
- GET
- HEAD
CachedMethods:
- GET
- HEAD
Compress: true
CachePolicyId: !Ref CachePolicy
4. Add Additional Cache Behaviors
Create path-specific caching rules for different content types:
Resources:
ApiCachePolicy:
Type: AWS::CloudFront::CachePolicy
Properties:
CachePolicyConfig:
Name: !Sub "${AWS::StackName}-api-cache"
DefaultTTL: 300
MaxTTL: 600
MinTTL: 60
CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
CacheBehaviors:
- PathPattern: "/api/*"
TargetOriginId: ApiOrigin
CachePolicyId: !GetAtt ApiCachePolicy.Id
AllowedMethods:
- GET
- HEAD
- OPTIONS
- PUT
- POST
5. Configure Security Settings
Implement security headers and WAF integration:
Resources:
SecurityHeadersPolicy:
Type: AWS::CloudFront::ResponseHeadersPolicy
Properties:
ResponseHeadersPolicyConfig:
Name: !Sub "${AWS::StackName}-security-headers"
SecurityHeadersConfig:
StrictTransportSecurity:
AccessControlMaxAgeSec: 31536000
IncludeSubdomains: true
Override: true
FrameOptions:
FrameOption: DENY
Override: true
WAFWebACL:
Type: AWS::WAFv2::WebACL
Properties:
Name: !Sub "${AWS::StackName}-waf"
Scope: CLOUDFRONT
DefaultAction:
Allow: {}
6. Add CloudFront Functions
Configure functions for request/response manipulation:
Resources:
RewritePathFunction:
Type: AWS::CloudFront::Function
Properties:
Name: !Sub "${AWS::StackName}-rewrite-path"
FunctionCode: |
function handler(event) {
var request = event.request;
// Function code here
return request;
}
Runtime: cloudfront-js-1.0
AutoPublish: true
7. Configure Monitoring
Set up logging and access logs to S3:
Resources:
AccessLogsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "cloudfront-logs-${AWS::AccountId}"
CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Logging:
Bucket: !Ref AccessLogsBucket
Prefix: cloudfront-logs/
IncludeCookies: false
8. Create Outputs
Export distribution details for cross-stack references:
Outputs:
DistributionDomainName:
Description: CloudFront distribution domain name
Value: !GetAtt CloudFrontDistribution.DomainName
Export:
Name: !Sub "${AWS::StackName}-DistributionDomainName"
DistributionId:
Description: CloudFront distribution ID
Value: !Ref CloudFrontDistribution
Export:
Name: !Sub "${AWS::StackName}-DistributionId"
Best Practices
Security
- Always use HTTPS with minimum TLS 1.2
- Implement SecurityHeaders with HSTS, XSS protection
- Use WAF for protection against common attacks
- Configure appropriate Access-Control for CORS
- Limit origin access with OAI/OAC
- Use Signed URLs for private content
- Implement rate limiting
- Configure geo-restrictions if needed
Performance
- Use appropriate PriceClass to optimize costs
- Configure Cache TTL based on content type
- Enable compression (Gzip/Brotli)
- Use CloudFront Functions for lightweight operations
- Optimize header forwarding (do not forward unnecessary headers)
- Consider Origin Shield to reduce load on origins
- Use multiple origins with path patterns
Monitoring
- Enable CloudWatch metrics and alarms
- Configure real-time logs for troubleshooting
- Monitor cache hit ratio
- Configure alerts for error rate and latency
- Use CloudFront reports for traffic analysis
Deployment
- Use change sets before deployment
- Test templates with cfn-lint
- Organize stacks by lifecycle and ownership
- Implement blue/green deployments with weighted aliases
- Use StackSets for multi-region deployment
Template Structure
- Use AWS-specific parameter types (AWS::ACM::Certificate::Arn, AWS::S3::Bucket::RegionalDomainName)
- Implement parameter constraints (MinLength, MaxLength, AllowedValues, AllowedPattern)
- Use Conditions for environment-specific configuration
- Leverage Mappings for region-specific configuration
- Apply Metadata for parameter grouping and labels
- Use nested stacks for modularity
Cache Strategy
- Use Cache Policies for different content types
- Configure Origin Request Policies to control what's sent to origin
- Set appropriate TTL values:
- Static assets: 86400-31536000 seconds (1 day to 1 year)
- API responses: 60-600 seconds (1-10 minutes)
- Dynamic content: 0 seconds (no caching)
- Enable compression for text-based content
- Use versioned paths for cache busting
Constraints and Warnings
- ACM certificates: Must be in
us-east-1 (N. Virginia) for CloudFront
- Limits: Max 200 distributions per AWS account, 25 origins per distribution, 25 cache behaviors per distribution
- Deployment time: CloudFront distributions take up to 30 minutes to deploy; plan accordingly
- Certificate requirements: Max 100 alternate domain names per distribution; include default domain for SSL
- OAI deprecation: Prefer Origin Access Control (OAC) over Origin Access Identity (OAI) for S3 origins
- Lambda@Edge limits: 128MB memory, 30s timeout for viewer request/response; separate limits apply for origin requests
- Change sets: Always use change sets before deploying to preview resource changes and avoid accidental deletions
- Drift detection: CloudFormation does not detect drift for CloudFront distributions — manage all settings in templates
Examples
Minimal S3 Static Site Distribution
AWSTemplateFormatVersion: "2010-09-09"
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "cdn-static-${AWS::AccountId}"
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
OriginAccessControl:
Type: AWS::CloudFront::OriginAccessControl
Properties:
OriginAccessControlConfig:
Name: !Sub "${AWS::StackName}-oac"
OriginAccessControlOriginType: s3
SigningBehavior: always
SigningProtocol: sigv4
CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Enabled: true
DefaultRootObject: index.html
Origins:
- Id: S3Origin
DomainName: !GetAtt S3Bucket.RegionalDomainName
AccessControlId: !Ref OriginAccessControl
DefaultCacheBehavior:
TargetOriginId: S3Origin
ViewerProtocolPolicy: redirect-to-https
Compress: true
CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6
PriceClass: PriceClass_All
HttpVersion: http2and3
Outputs:
DistributionDomainName:
Value: !GetAtt CloudFrontDistribution.DomainName
Multi-Origin with Cache Behaviors
Resources:
CachePolicyApi:
Type: AWS::CloudFront::CachePolicy
Properties:
CachePolicyConfig:
Name: !Sub "${AWS::StackName}-api"
DefaultTTL: 300
MaxTTL: 600
MinTTL: 60
CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Origins:
- Id: S3Origin
DomainName: !GetAtt StaticBucket.RegionalDomainName
AccessControlId: !Ref OriginAccessControl
- Id: ApiOrigin
DomainName: !GetAtt ApiLoadBalancer.DNSName
CustomOriginConfig:
OriginProtocolPolicy: https-only
HTTPPort: 80
HTTPSPort: 443
CacheBehaviors:
- PathPattern: "/api/*"
TargetOriginId: ApiOrigin
CachePolicyId: !GetAtt CachePolicyApi.Id
ViewerProtocolPolicy: https-only
- PathPattern: "/static/*"
TargetOriginId: S3Origin
CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6
References
For detailed implementation guidance, see:
template-structure.md - Complete template structure, AWS-specific parameter types, parameter constraints, SSM parameter references, metadata for parameter grouping, transform for macros, conditions for environment-specific configuration, nested stacks, and cross-stack references with export/import patterns
origins.md - Origin configuration including S3 origins with OAI/OAC, ALB origins with security groups, API Gateway origins (REST and HTTP APIs), Lambda@Edge origins, VPC origins with Global Accelerator, custom origins, and multi-origin configurations with path patterns
caching.md - Cache policies (managed, custom, images, videos), origin request policies, response headers policies, cache behaviors configuration, forwarded values (query strings, headers, cookies), cache key configuration, and TTL configuration best practices
security.md - Security headers (CSP, HSTS, XSS protection), CORS configuration, WAF integration with managed and custom rules, origin access control (OAI vs OAC), signed URLs and signed cookies, geo-restrictions, HTTPS enforcement, TLS configuration, and field-level encryption
advanced-features.md - CloudFront Functions (viewer request, viewer response, origin request), Lambda@Edge for authentication and URL rewriting, geo-restrictions, price class optimization, compression (Gzip and Brotli), real-time logs to Kinesis and S3, custom error pages, function associations, and Origin Shield configuration
constraints.md - Resource limits (200 distributions max, 25 origins max, 25 cache behaviors max), DNS and certificate constraints (ACM in us-east-1, 300 alternate domain names), operational constraints (15 invalidations max, 30 min deployment), security constraints (HTTPS, CSP, WAF), and cost considerations (data transfer, regional pricing, Lambda@Edge costs)
Related Resources
1---2name: aws-cloudformation-cloudfront3description: Provides AWS CloudFormation patterns for CloudFront distributions, origins (ALB, S3, Lambda@Edge, VPC Origins), CacheBehaviors, Functions, SecurityHeaders, parameters, Outputs and cross-stack references. Use when creating CloudFront distributions with CloudFormation, configuring multiple origins, implementing caching strategies, managing custom domains with ACM, configuring WAF, and optimizing performance.4---5
6# AWS CloudFormation CloudFront CDN
7
8## Overview
9
10Create production-ready CDN infrastructure using AWS CloudFormation templates. This skill covers CloudFront distributions, multiple origins (ALB, S3, API Gateway, Lambda@Edge, VPC Origins), CacheBehaviors, Functions, SecurityHeaders, and best practices for parameters, outputs, and cross-stack references.
11
12## When to Use
13
14- Creating CloudFront distributions with CloudFormation
15- Configuring origins (ALB, S3, Lambda@Edge, VPC Origins) with path patterns
16- Implementing caching with CacheBehaviors and Cache Policies
17- Configuring custom domains with ACM and SecurityHeaders
18- Integrating WAF with CloudFront distributions
19
20## Instructions
21
22Follow these steps to create CloudFront distributions with CloudFormation:
23
24### 1. Define Distribution Parameters
25
26**Validate before deploying:**
27```bash
28aws cloudformation validate-template --template-body file://template.yaml
29cfn-lint template.yaml
30```
31
32Specify domain names, ACM certificates, price class, and origin settings:
33
34```yaml
35Parameters:
36 DomainName:
37 Type: String
38 Default: cdn.example.com
39 Description: Custom domain name for CloudFront distribution
40
41 CertificateArn:
42 Type: AWS::ACM::Certificate::Arn
43 Description: ACM certificate ARN for HTTPS
44
45 PriceClass:
46 Type: String
47 Default: PriceClass_All
48 AllowedValues:
49 - PriceClass_All
50 - PriceClass_100
51 - PriceClass_200
52 Description: CloudFront price class
53
54 OriginDomainName:
55 Type: String
56 Description: Domain name of the origin (ALB or S3)
57```
58
59### 2. Configure Origins
60
61Add S3 buckets, ALBs, API Gateway, or custom origins. For S3 origins, use OAI (legacy) or OAC (recommended):
62
63```yaml
64Resources:
65 # S3 Bucket
66 StaticBucket:
67 Type: AWS::S3::Bucket
68 Properties:
69 BucketName: !Sub "static-assets-${AWS::AccountId}-${AWS::Region}"
70 PublicAccessBlockConfiguration:
71 BlockPublicAcls: true
72 BlockPublicPolicy: true
73
74 # Origin Access Control (recommended)
75 OriginAccessControl:
76 Type: AWS::CloudFront::OriginAccessControl
77 Properties:
78 OriginAccessControlConfig:
79 Name: !Sub "${AWS::StackName}-oac"
80 OriginAccessControlOriginType: s3
81 SigningBehavior: always
82 SigningProtocol: sigv4
83```
84
85### 3. Set Up Default Cache Behavior
86
87Configure viewer request/response policies and caching:
88
89```yaml
90Resources:
91 CloudFrontDistribution:
92 Type: AWS::CloudFront::Distribution
93 Properties:
94 DistributionConfig:
95 Origins:
96 - Id: S3Origin
97 DomainName: !GetAtt StaticBucket.RegionalDomainName
98 AccessControlId: !Ref OriginAccessControl
99 S3OriginConfig:
100 OriginAccessIdentity: ""
101 DefaultCacheBehavior:
102 TargetOriginId: S3Origin
103 ViewerProtocolPolicy: redirect-to-https
104 AllowedMethods:
105 - GET
106 - HEAD
107 CachedMethods:
108 - GET
109 - HEAD
110 Compress: true
111 CachePolicyId: !Ref CachePolicy
112```
113
114### 4. Add Additional Cache Behaviors
115
116Create path-specific caching rules for different content types:
117
118```yaml
119Resources:
120 ApiCachePolicy:
121 Type: AWS::CloudFront::CachePolicy
122 Properties:
123 CachePolicyConfig:
124 Name: !Sub "${AWS::StackName}-api-cache"
125 DefaultTTL: 300
126 MaxTTL: 600
127 MinTTL: 60
128
129 CloudFrontDistribution:
130 Type: AWS::CloudFront::Distribution
131 Properties:
132 DistributionConfig:
133 CacheBehaviors:
134 - PathPattern: "/api/*"
135 TargetOriginId: ApiOrigin
136 CachePolicyId: !GetAtt ApiCachePolicy.Id
137 AllowedMethods:
138 - GET
139 - HEAD
140 - OPTIONS
141 - PUT
142 - POST
143```
144
145### 5. Configure Security Settings
146
147Implement security headers and WAF integration:
148
149```yaml
150Resources:
151 SecurityHeadersPolicy:
152 Type: AWS::CloudFront::ResponseHeadersPolicy
153 Properties:
154 ResponseHeadersPolicyConfig:
155 Name: !Sub "${AWS::StackName}-security-headers"
156 SecurityHeadersConfig:
157 StrictTransportSecurity:
158 AccessControlMaxAgeSec: 31536000
159 IncludeSubdomains: true
160 Override: true
161 FrameOptions:
162 FrameOption: DENY
163 Override: true
164
165 WAFWebACL:
166 Type: AWS::WAFv2::WebACL
167 Properties:
168 Name: !Sub "${AWS::StackName}-waf"
169 Scope: CLOUDFRONT
170 DefaultAction:
171 Allow: {}
172```
173
174### 6. Add CloudFront Functions
175
176Configure functions for request/response manipulation:
177
178```yaml
179Resources:
180 RewritePathFunction:
181 Type: AWS::CloudFront::Function
182 Properties:
183 Name: !Sub "${AWS::StackName}-rewrite-path"
184 FunctionCode: |
185 function handler(event) {
186 var request = event.request;
187 // Function code here
188 return request;
189 }
190 Runtime: cloudfront-js-1.0
191 AutoPublish: true
192```
193
194### 7. Configure Monitoring
195
196Set up logging and access logs to S3:
197
198```yaml
199Resources:
200 AccessLogsBucket:
201 Type: AWS::S3::Bucket
202 Properties:
203 BucketName: !Sub "cloudfront-logs-${AWS::AccountId}"
204
205 CloudFrontDistribution:
206 Type: AWS::CloudFront::Distribution
207 Properties:
208 DistributionConfig:
209 Logging:
210 Bucket: !Ref AccessLogsBucket
211 Prefix: cloudfront-logs/
212 IncludeCookies: false
213```
214
215### 8. Create Outputs
216
217Export distribution details for cross-stack references:
218
219```yaml
220Outputs:
221 DistributionDomainName:
222 Description: CloudFront distribution domain name
223 Value: !GetAtt CloudFrontDistribution.DomainName
224 Export:
225 Name: !Sub "${AWS::StackName}-DistributionDomainName"
226
227 DistributionId:
228 Description: CloudFront distribution ID
229 Value: !Ref CloudFrontDistribution
230 Export:
231 Name: !Sub "${AWS::StackName}-DistributionId"
232```
233
234## Best Practices
235
236### Security
237
238- Always use HTTPS with minimum TLS 1.2
239- Implement SecurityHeaders with HSTS, XSS protection
240- Use WAF for protection against common attacks
241- Configure appropriate Access-Control for CORS
242- Limit origin access with OAI/OAC
243- Use Signed URLs for private content
244- Implement rate limiting
245- Configure geo-restrictions if needed
246
247### Performance
248
249- Use appropriate PriceClass to optimize costs
250- Configure Cache TTL based on content type
251- Enable compression (Gzip/Brotli)
252- Use CloudFront Functions for lightweight operations
253- Optimize header forwarding (do not forward unnecessary headers)
254- Consider Origin Shield to reduce load on origins
255- Use multiple origins with path patterns
256
257### Monitoring
258
259- Enable CloudWatch metrics and alarms
260- Configure real-time logs for troubleshooting
261- Monitor cache hit ratio
262- Configure alerts for error rate and latency
263- Use CloudFront reports for traffic analysis
264
265### Deployment
266
267- Use change sets before deployment
268- Test templates with cfn-lint
269- Organize stacks by lifecycle and ownership
270- Implement blue/green deployments with weighted aliases
271- Use StackSets for multi-region deployment
272
273### Template Structure
274
275- Use AWS-specific parameter types (AWS::ACM::Certificate::Arn, AWS::S3::Bucket::RegionalDomainName)
276- Implement parameter constraints (MinLength, MaxLength, AllowedValues, AllowedPattern)
277- Use Conditions for environment-specific configuration
278- Leverage Mappings for region-specific configuration
279- Apply Metadata for parameter grouping and labels
280- Use nested stacks for modularity
281
282### Cache Strategy
283
284- Use Cache Policies for different content types
285- Configure Origin Request Policies to control what's sent to origin
286- Set appropriate TTL values:
287 - Static assets: 86400-31536000 seconds (1 day to 1 year)
288 - API responses: 60-600 seconds (1-10 minutes)
289 - Dynamic content: 0 seconds (no caching)
290- Enable compression for text-based content
291- Use versioned paths for cache busting
292
293## Constraints and Warnings
294
295- **ACM certificates**: Must be in `us-east-1` (N. Virginia) for CloudFront
296- **Limits**: Max 200 distributions per AWS account, 25 origins per distribution, 25 cache behaviors per distribution
297- **Deployment time**: CloudFront distributions take up to 30 minutes to deploy; plan accordingly
298- **Certificate requirements**: Max 100 alternate domain names per distribution; include default domain for SSL
299- **OAI deprecation**: Prefer Origin Access Control (OAC) over Origin Access Identity (OAI) for S3 origins
300- **Lambda@Edge limits**: 128MB memory, 30s timeout for viewer request/response; separate limits apply for origin requests
301- **Change sets**: Always use change sets before deploying to preview resource changes and avoid accidental deletions
302- **Drift detection**: CloudFormation does not detect drift for CloudFront distributions — manage all settings in templates
303
304## Examples
305
306### Minimal S3 Static Site Distribution
307
308```yaml
309AWSTemplateFormatVersion: "2010-09-09"
310Resources:
311 S3Bucket:
312 Type: AWS::S3::Bucket
313 Properties:
314 BucketName: !Sub "cdn-static-${AWS::AccountId}"
315 PublicAccessBlockConfiguration:
316 BlockPublicAcls: true
317 BlockPublicPolicy: true
318
319 OriginAccessControl:
320 Type: AWS::CloudFront::OriginAccessControl
321 Properties:
322 OriginAccessControlConfig:
323 Name: !Sub "${AWS::StackName}-oac"
324 OriginAccessControlOriginType: s3
325 SigningBehavior: always
326 SigningProtocol: sigv4
327
328 CloudFrontDistribution:
329 Type: AWS::CloudFront::Distribution
330 Properties:
331 DistributionConfig:
332 Enabled: true
333 DefaultRootObject: index.html
334 Origins:
335 - Id: S3Origin
336 DomainName: !GetAtt S3Bucket.RegionalDomainName
337 AccessControlId: !Ref OriginAccessControl
338 DefaultCacheBehavior:
339 TargetOriginId: S3Origin
340 ViewerProtocolPolicy: redirect-to-https
341 Compress: true
342 CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6
343 PriceClass: PriceClass_All
344 HttpVersion: http2and3
345
346Outputs:
347 DistributionDomainName:
348 Value: !GetAtt CloudFrontDistribution.DomainName
349```
350
351### Multi-Origin with Cache Behaviors
352
353```yaml
354Resources:
355 CachePolicyApi:
356 Type: AWS::CloudFront::CachePolicy
357 Properties:
358 CachePolicyConfig:
359 Name: !Sub "${AWS::StackName}-api"
360 DefaultTTL: 300
361 MaxTTL: 600
362 MinTTL: 60
363
364 CloudFrontDistribution:
365 Type: AWS::CloudFront::Distribution
366 Properties:
367 DistributionConfig:
368 Origins:
369 - Id: S3Origin
370 DomainName: !GetAtt StaticBucket.RegionalDomainName
371 AccessControlId: !Ref OriginAccessControl
372 - Id: ApiOrigin
373 DomainName: !GetAtt ApiLoadBalancer.DNSName
374 CustomOriginConfig:
375 OriginProtocolPolicy: https-only
376 HTTPPort: 80
377 HTTPSPort: 443
378 CacheBehaviors:
379 - PathPattern: "/api/*"
380 TargetOriginId: ApiOrigin
381 CachePolicyId: !GetAtt CachePolicyApi.Id
382 ViewerProtocolPolicy: https-only
383 - PathPattern: "/static/*"
384 TargetOriginId: S3Origin
385 CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6
386```
387
388## References
389
390For detailed implementation guidance, see:
391
392- **[template-structure.md](references/template-structure.md)** - Complete template structure, AWS-specific parameter types, parameter constraints, SSM parameter references, metadata for parameter grouping, transform for macros, conditions for environment-specific configuration, nested stacks, and cross-stack references with export/import patterns
393
394- **[origins.md](references/origins.md)** - Origin configuration including S3 origins with OAI/OAC, ALB origins with security groups, API Gateway origins (REST and HTTP APIs), Lambda@Edge origins, VPC origins with Global Accelerator, custom origins, and multi-origin configurations with path patterns
395
396- **[caching.md](references/caching.md)** - Cache policies (managed, custom, images, videos), origin request policies, response headers policies, cache behaviors configuration, forwarded values (query strings, headers, cookies), cache key configuration, and TTL configuration best practices
397
398- **[security.md](references/security.md)** - Security headers (CSP, HSTS, XSS protection), CORS configuration, WAF integration with managed and custom rules, origin access control (OAI vs OAC), signed URLs and signed cookies, geo-restrictions, HTTPS enforcement, TLS configuration, and field-level encryption
399
400- **[advanced-features.md](references/advanced-features.md)** - CloudFront Functions (viewer request, viewer response, origin request), Lambda@Edge for authentication and URL rewriting, geo-restrictions, price class optimization, compression (Gzip and Brotli), real-time logs to Kinesis and S3, custom error pages, function associations, and Origin Shield configuration
401
402- **[constraints.md](references/constraints.md)** - Resource limits (200 distributions max, 25 origins max, 25 cache behaviors max), DNS and certificate constraints (ACM in us-east-1, 300 alternate domain names), operational constraints (15 invalidations max, 30 min deployment), security constraints (HTTPS, CSP, WAF), and cost considerations (data transfer, regional pricing, Lambda@Edge costs)
403
404## Related Resources
405
406- [AWS CloudFront Documentation](https://docs.aws.amazon.com/cloudfront/)
407- [AWS CloudFormation User Guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)
408- [CloudFront Developer Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/)
409- [CloudFront Best Practices](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)
410- [CloudFormation Stack Policies](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html)
411- [CloudFormation Drift Detection](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/detect-drift-stack.html)
412- [CloudFormation Change Sets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html)