in packages/blueprints/gen-ai-chatbot/static-assets/chatbot-genai-cdk/lib/constructs/frontend.ts [31:101]
constructor(scope: Construct, id: string, props: FrontendProps) {
super(scope, id);
const assetBucket = new Bucket(this, "AssetBucket", {
bucketName: `${
this.node.tryGetContext("bucketNamePrefix") ?? "chatbot-frontend-assets"
}-${props.env.account}-${props.env.region}`,
encryption: BucketEncryption.S3_MANAGED,
blockPublicAccess: BlockPublicAccess.BLOCK_ALL,
enforceSSL: true,
removalPolicy:
(this.node.tryGetContext("bucketRemovalPolicy") ?? "DESTROY") ===
"RETAIN"
? RemovalPolicy.RETAIN
: RemovalPolicy.DESTROY,
autoDeleteObjects: true,
serverAccessLogsBucket: props.accessLogBucket,
serverAccessLogsPrefix: "AssetBucket",
});
const originAccessIdentity = new OriginAccessIdentity(
this,
"OriginAccessIdentity"
);
const distribution = new CloudFrontWebDistribution(this, "Distribution", {
originConfigs: [
{
s3OriginSource: {
s3BucketSource: assetBucket,
originAccessIdentity,
},
behaviors: [
{
isDefaultBehavior: true,
},
],
},
],
errorConfigurations: [
{
errorCode: 404,
errorCachingMinTtl: 0,
responseCode: 200,
responsePagePath: "/",
},
{
errorCode: 403,
errorCachingMinTtl: 0,
responseCode: 200,
responsePagePath: "/",
},
],
...(!this.shouldSkipAccessLogging() && {
loggingConfig: {
bucket: props.accessLogBucket,
prefix: "Frontend/",
},
}),
webACLId: props.webAclId,
});
NagSuppressions.addResourceSuppressions(distribution, [
{
id: "AwsPrototyping-CloudFrontDistributionGeoRestrictions",
reason: "this asset is being used all over the world",
},
]);
this.assetBucket = assetBucket;
this.cloudFrontWebDistribution = distribution;
}