Skip to content

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.

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",
},
});
// 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.