Distribution
Source:
src/AWS/CloudFront/Distribution.ts
A CloudFront distribution.
Distribution manages the CDN layer for static sites and HTTP origins such
as Lambda Function URLs and ALBs. It exposes the distribution domain and
hosted zone ID needed for Route 53 alias records.
Creating Distributions
Section titled “Creating Distributions”CDN in Front of an HTTP Origin
import * as AWS from "alchemy/AWS";
const distribution = yield* AWS.CloudFront.Distribution("ApiCdn", { origins: [ { id: "api", domainName: "abc123.lambda-url.us-west-2.on.aws", customOriginConfig: { originProtocolPolicy: "https-only" }, }, ], defaultCacheBehavior: { targetOriginId: "api", viewerProtocolPolicy: "redirect-to-https", cachePolicyId: AWS.CloudFront.MANAGED_CACHING_DISABLED_POLICY_ID, originRequestPolicyId: AWS.CloudFront.MANAGED_ALL_VIEWER_EXCEPT_HOST_HEADER_POLICY_ID, },});Private S3 Origin
const distribution = yield* Distribution("WebsiteCdn", { aliases: ["www.example.com"], origins: [ { id: "site", domainName: bucket.bucketRegionalDomainName, s3Origin: true, originAccessControlId: oac.originAccessControlId, }, ], defaultCacheBehavior: { targetOriginId: "site", viewerProtocolPolicy: "redirect-to-https", compress: true, }, viewerCertificate: { acmCertificateArn: certificate.certificateArn, sslSupportMethod: "sni-only", minimumProtocolVersion: "TLSv1.2_2021", },});Invalidating the Cache
Section titled “Invalidating the Cache”// declaratively, whenever `version` changes:yield* AWS.CloudFront.Invalidation("PurgeBlog", { distributionId: distribution.distributionId, paths: ["/blog/*"], version: buildId,});To purge at runtime from a Lambda Function, bind
CloudFront.CreateInvalidation(distribution) instead.