Distribution
The Distribution resource lets you manage AWS CloudFront Distributions and their configuration settings for content delivery.
Minimal Example
Section titled “Minimal Example”Create a basic CloudFront Distribution with default settings and a sample origin.
import AWS from "alchemy/aws/control";
const cloudFrontDistribution = await AWS.CloudFront.Distribution("basicDistribution", { DistributionConfig: { Origins: { Items: [{ Id: "myOrigin", DomainName: "example.com", OriginPath: "", CustomOriginConfig: { HTTPPort: 80, HTTPSPort: 443, OriginProtocolPolicy: "https-only", OriginSslProtocols: { Quantity: 1, Items: ["TLSv1.2"] } } }], Quantity: 1 }, DefaultCacheBehavior: { TargetOriginId: "myOrigin", ViewerProtocolPolicy: "redirect-to-https", AllowedMethods: ["GET", "HEAD"], CachedMethods: ["GET", "HEAD"], MinTtl: 0, DefaultTtl: 86400, MaxTtl: 31536000 }, Enabled: true, PriceClass: "PriceClass_All", ViewerCertificate: { CloudFrontDefaultCertificate: true } }, Tags: [{ Key: "Environment", Value: "Production" }]});
Advanced Configuration
Section titled “Advanced Configuration”Configure a CloudFront Distribution with multiple origins and advanced cache settings.
const advancedDistribution = await AWS.CloudFront.Distribution("advancedDistribution", { DistributionConfig: { Origins: { Items: [{ Id: "myOrigin1", DomainName: "origin1.example.com", CustomOriginConfig: { HTTPPort: 80, HTTPSPort: 443, OriginProtocolPolicy: "match-viewer", OriginSslProtocols: { Quantity: 3, Items: ["TLSv1.2", "TLSv1.1", "TLSv1"] } } }, { Id: "myOrigin2", DomainName: "origin2.example.com", CustomOriginConfig: { HTTPPort: 80, HTTPSPort: 443, OriginProtocolPolicy: "http-only", OriginSslProtocols: { Quantity: 1, Items: ["TLSv1.2"] } } }], Quantity: 2 }, DefaultCacheBehavior: { TargetOriginId: "myOrigin1", ViewerProtocolPolicy: "allow-all", AllowedMethods: ["GET", "HEAD", "OPTIONS"], CachedMethods: ["GET", "HEAD"], MinTtl: 3600, DefaultTtl: 86400, MaxTtl: 31536000, Compress: true }, CacheBehaviors: { Items: [{ PathPattern: "/images/*", TargetOriginId: "myOrigin2", ViewerProtocolPolicy: "redirect-to-https", AllowedMethods: ["GET", "HEAD"], CachedMethods: ["GET", "HEAD"], MinTtl: 600, DefaultTtl: 86400, MaxTtl: 31536000, Compress: true }], Quantity: 1 }, Enabled: true, PriceClass: "PriceClass_200" }});
Custom Error Responses
Section titled “Custom Error Responses”Set up custom error responses for better user experience.
const customErrorResponseDistribution = await AWS.CloudFront.Distribution("customErrorResponseDistribution", { DistributionConfig: { Origins: { Items: [{ Id: "myOrigin", DomainName: "example.com", CustomOriginConfig: { HTTPPort: 80, HTTPSPort: 443, OriginProtocolPolicy: "https-only" } }], Quantity: 1 }, DefaultCacheBehavior: { TargetOriginId: "myOrigin", ViewerProtocolPolicy: "redirect-to-https", AllowedMethods: ["GET", "HEAD"], CachedMethods: ["GET", "HEAD"], MinTtl: 0, DefaultTtl: 86400, MaxTtl: 31536000 }, CustomErrorResponses: { Items: [{ ErrorCode: 404, ResponsePagePath: "/404.html", ResponseCode: "404", ErrorCachingMinTtl: 300 }], Quantity: 1 }, Enabled: true }});
Distribution with Lambda@Edge
Section titled “Distribution with Lambda@Edge”Create a CloudFront Distribution that integrates with Lambda@Edge for custom processing.
const edgeLambdaDistribution = await AWS.CloudFront.Distribution("edgeLambdaDistribution", { DistributionConfig: { Origins: { Items: [{ Id: "myOrigin", DomainName: "example.com", CustomOriginConfig: { HTTPPort: 80, HTTPSPort: 443, OriginProtocolPolicy: "https-only" } }], Quantity: 1 }, DefaultCacheBehavior: { TargetOriginId: "myOrigin", ViewerProtocolPolicy: "redirect-to-https", AllowedMethods: ["GET", "HEAD", "OPTIONS"], CachedMethods: ["GET", "HEAD"], MinTtl: 0, DefaultTtl: 86400, MaxTtl: 31536000, LambdaFunctionAssociations: { Items: [{ LambdaFunctionARN: "arn:aws:lambda:us-east-1:123456789012:function:myEdgeFunction:1", EventType: "viewer-request" }], Quantity: 1 } }, Enabled: true }});