mirror of
https://github.com/ivabus/www
synced 2024-11-10 14:55:14 +03:00
70 lines
2 KiB
TypeScript
70 lines
2 KiB
TypeScript
import {
|
|
aws_cloudfront as cloudfront,
|
|
aws_cloudfront_origins as cloudfrontOrigins,
|
|
aws_s3 as s3,
|
|
aws_lambda as lambda,
|
|
aws_s3_deployment as s3Deployment,
|
|
Stack,
|
|
StackProps,
|
|
RemovalPolicy,
|
|
CfnOutput } from "aws-cdk-lib";
|
|
import { Construct } from "constructs";
|
|
|
|
/**
|
|
* The CloudFormation stack holding all our resources
|
|
*/
|
|
export default class TeaXYZ extends Stack {
|
|
constructor(scope: Construct, id: string, props?: StackProps) {
|
|
super(scope, id, props);
|
|
|
|
/**
|
|
* The S3 Bucket hosting our build
|
|
*/
|
|
const bucket = new s3.Bucket(this, "Bucket", {
|
|
autoDeleteObjects: true,
|
|
removalPolicy: RemovalPolicy.DESTROY,
|
|
});
|
|
|
|
const edgeLambda = lambda.Version.fromVersionArn(this, "Lambda", "arn:aws:lambda:us-east-1:640264234305:function:www-redirect:10");
|
|
|
|
/**
|
|
* The CloudFront distribution caching and proxying our requests to our bucket
|
|
*/
|
|
const distribution = new cloudfront.Distribution(this, "Distribution", {
|
|
defaultBehavior: {
|
|
origin: new cloudfrontOrigins.S3Origin(bucket),
|
|
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
edgeLambdas: [
|
|
{
|
|
eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST,
|
|
functionVersion: edgeLambda,
|
|
},
|
|
],
|
|
},
|
|
defaultRootObject: "index.html",
|
|
errorResponses: [
|
|
{
|
|
httpStatus: 403,
|
|
responsePagePath: "/404.html"
|
|
},
|
|
],
|
|
});
|
|
|
|
/**
|
|
* Output the distribution's url so we can pass it to external systems
|
|
*/
|
|
new CfnOutput(this, "DeploymentUrl", {
|
|
value: "https://" + distribution.distributionDomainName
|
|
});
|
|
|
|
/**
|
|
* Upload our build to the bucket and invalidate the distribution's cache
|
|
*/
|
|
new s3Deployment.BucketDeployment(this, "BucketDeployment", {
|
|
destinationBucket: bucket,
|
|
distribution,
|
|
distributionPaths: ["/*"],
|
|
sources: [s3Deployment.Source.asset('../public')],
|
|
});
|
|
}
|
|
} |