A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources with infrastructure-as-code.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Amazon CloudFront is a fast CDN service that securely delivers data, videos, applications, and APIs globally.
Create a distribution for an S3 bucket
const distribution = new aws.cloudfront.Distribution("cdn", {
enabled: true,
origins: [{ domainName: bucket.bucketRegionalDomainName, originId: "S3" }],
defaultCacheBehavior: {
targetOriginId: "S3",
viewerProtocolPolicy: "redirect-to-https",
forwardedValues: { queryString: false, cookies: { forward: "none" } },
},
viewerCertificate: { cloudfrontDefaultCertificate: true },
restrictions: { geoRestriction: { restrictionType: "none" } },
});Set up custom domain with SSL certificate
const distribution = new aws.cloudfront.Distribution("cdn", {
enabled: true,
aliases: ["cdn.example.com"],
origins: [{ domainName: bucket.bucketRegionalDomainName, originId: "S3" }],
defaultCacheBehavior: { /* ... */ },
viewerCertificate: {
acmCertificateArn: cert.arn,
sslSupportMethod: "sni-only",
minimumProtocolVersion: "TLSv1.2_2021",
},
restrictions: { geoRestriction: { restrictionType: "none" } },
});Configure multiple origins with path patterns
const distribution = new aws.cloudfront.Distribution("cdn", {
enabled: true,
origins: [
{ originId: "S3", domainName: bucket.bucketRegionalDomainName },
{ originId: "API", domainName: "api.example.com", customOriginConfig: {
originProtocolPolicy: "https-only",
httpsPort: 443,
}},
],
defaultCacheBehavior: { targetOriginId: "S3", /* ... */ },
orderedCacheBehaviors: [{
pathPattern: "/api/*",
targetOriginId: "API",
viewerProtocolPolicy: "https-only",
}],
/* ... */
});CloudFront distributions for content delivery.
class Distribution extends pulumi.CustomResource {
constructor(name: string, args: DistributionArgs, opts?: pulumi.CustomResourceOptions);
readonly arn: pulumi.Output<string>;
readonly domainName: pulumi.Output<string>;
readonly id: pulumi.Output<string>;
}
interface DistributionArgs {
enabled: pulumi.Input<boolean>;
origins: pulumi.Input<pulumi.Input<DistributionOrigin>[]>;
defaultCacheBehavior: pulumi.Input<DistributionDefaultCacheBehavior>;
orderedCacheBehaviors?: pulumi.Input<pulumi.Input<DistributionOrderedCacheBehavior>[]>;
priceClass?: pulumi.Input<string>;
aliases?: pulumi.Input<pulumi.Input<string>[]>;
viewerCertificate?: pulumi.Input<DistributionViewerCertificate>;
restrictions?: pulumi.Input<DistributionRestrictions>;
comment?: pulumi.Input<string>;
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
interface DistributionOrigin {
domainName: pulumi.Input<string>;
originId: pulumi.Input<string>;
originPath?: pulumi.Input<string>;
customHeaders?: pulumi.Input<pulumi.Input<{
name: pulumi.Input<string>;
value: pulumi.Input<string>;
}>[]>;
s3OriginConfig?: pulumi.Input<{
originAccessIdentity: pulumi.Input<string>;
}>;
customOriginConfig?: pulumi.Input<{
httpPort?: pulumi.Input<number>;
httpsPort?: pulumi.Input<number>;
originProtocolPolicy: pulumi.Input<"http-only" | "https-only" | "match-viewer">;
originSslProtocols?: pulumi.Input<pulumi.Input<string>[]>;
originReadTimeout?: pulumi.Input<number>;
originKeepaliveTimeout?: pulumi.Input<number>;
}>;
}
interface DistributionDefaultCacheBehavior {
targetOriginId: pulumi.Input<string>;
viewerProtocolPolicy: pulumi.Input<"allow-all" | "https-only" | "redirect-to-https">;
allowedMethods?: pulumi.Input<pulumi.Input<string>[]>;
cachedMethods?: pulumi.Input<pulumi.Input<string>[]>;
compress?: pulumi.Input<boolean>;
defaultTtl?: pulumi.Input<number>;
maxTtl?: pulumi.Input<number>;
minTtl?: pulumi.Input<number>;
forwardedValues?: pulumi.Input<{
queryString: pulumi.Input<boolean>;
cookies: pulumi.Input<{
forward: pulumi.Input<"none" | "whitelist" | "all">;
whitelistedNames?: pulumi.Input<pulumi.Input<string>[]>;
}>;
headers?: pulumi.Input<pulumi.Input<string>[]>;
}>;
cachePolicyId?: pulumi.Input<string>;
originRequestPolicyId?: pulumi.Input<string>;
responseHeadersPolicyId?: pulumi.Input<string>;
}
interface DistributionOrderedCacheBehavior {
pathPattern: pulumi.Input<string>;
targetOriginId: pulumi.Input<string>;
viewerProtocolPolicy: pulumi.Input<"allow-all" | "https-only" | "redirect-to-https">;
allowedMethods?: pulumi.Input<pulumi.Input<string>[]>;
cachedMethods?: pulumi.Input<pulumi.Input<string>[]>;
compress?: pulumi.Input<boolean>;
defaultTtl?: pulumi.Input<number>;
maxTtl?: pulumi.Input<number>;
minTtl?: pulumi.Input<number>;
forwardedValues?: pulumi.Input<{
queryString: pulumi.Input<boolean>;
cookies: pulumi.Input<{
forward: pulumi.Input<"none" | "whitelist" | "all">;
whitelistedNames?: pulumi.Input<pulumi.Input<string>[]>;
}>;
headers?: pulumi.Input<pulumi.Input<string>[]>;
}>;
cachePolicyId?: pulumi.Input<string>;
originRequestPolicyId?: pulumi.Input<string>;
}
interface DistributionViewerCertificate {
cloudfrontDefaultCertificate?: pulumi.Input<boolean>;
acmCertificateArn?: pulumi.Input<string>;
iamCertificateId?: pulumi.Input<string>;
minimumProtocolVersion?: pulumi.Input<string>;
sslSupportMethod?: pulumi.Input<"sni-only" | "vip">;
}
interface DistributionRestrictions {
geoRestriction: pulumi.Input<{
restrictionType: pulumi.Input<"none" | "whitelist" | "blacklist">;
locations?: pulumi.Input<pulumi.Input<string>[]>;
}>;
}const distribution = new aws.cloudfront.Distribution("cdn", {
enabled: true,
origins: [{
domainName: bucket.bucketRegionalDomainName,
originId: "S3-my-bucket",
}],
defaultCacheBehavior: {
allowedMethods: ["GET", "HEAD"],
cachedMethods: ["GET", "HEAD"],
targetOriginId: "S3-my-bucket",
viewerProtocolPolicy: "redirect-to-https",
forwardedValues: {
queryString: false,
cookies: { forward: "none" },
},
},
priceClass: "PriceClass_100",
restrictions: {
geoRestriction: {
restrictionType: "none",
},
},
viewerCertificate: {
cloudfrontDefaultCertificate: true,
},
});
export const cdnDomain = distribution.domainName;Install with Tessl CLI
npx tessl i tessl/npm-pulumi--aws