Skip to content

Instantly share code, notes, and snippets.

@anaarezo
Last active June 28, 2024 10:01
Show Gist options
  • Save anaarezo/470b18f6341d45df349f75dda0a2fcc8 to your computer and use it in GitHub Desktop.
Save anaarezo/470b18f6341d45df349f75dda0a2fcc8 to your computer and use it in GitHub Desktop.
WAF CDK examples with WAF Stack.
import * as cdk from "aws-cdk-lib";
import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
import * as origins from "aws-cdk-lib/aws-cloudfront-origins";
import * as acm from "aws-cdk-lib/aws-certificatemanager";
import { ApplicationStack, ApplicationStackProps } from "./application";
export function createCDN(
stack: ApplicationStack,
props: ApplicationStackProps
) {
const cdnOrigin = new origins.LoadBalancerV2Origin(stack.publicAlb.alb, {
connectionAttempts: 3,
connectionTimeout: cdk.Duration.seconds(10),
readTimeout: cdk.Duration.seconds(30),
keepaliveTimeout: cdk.Duration.seconds(5),
protocolPolicy: cloudfront.OriginProtocolPolicy.HTTPS_ONLY,
});
const anCert = acm.Certificate.fromCertificateArn(
stack,
"CDNCertificateARN",
"arn"
);
const cdn = new cloudfront.Distribution(stack, "DemoDistribution", {
defaultBehavior: {
origin: cdnOrigin,
allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD,
cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
originRequestPolicy: cloudfront.OriginRequestPolicy.ALL_VIEWER,
compress: true,
},
webAclId: stack.webApplicationFirewall.attrArn,
domainNames: ["example.com"],
certificate: anCert,
priceClass: cloudfront.PriceClass.PRICE_CLASS_ALL,
});
return cdn;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment