mirror of
https://github.com/ivabus/www
synced 2024-11-30 04:05:07 +03:00
65 lines
2 KiB
TypeScript
65 lines
2 KiB
TypeScript
|
import * as cloudfront from "@aws-cdk/aws-cloudfront";
|
||
|
import * as cloudfrontOrigins from "@aws-cdk/aws-cloudfront-origins";
|
||
|
import * as s3 from "@aws-cdk/aws-s3";
|
||
|
import * as lambda from "@aws-cdk/aws-lambda";
|
||
|
import * as s3Deployment from "@aws-cdk/aws-s3-deployment";
|
||
|
import * as cdk from "@aws-cdk/core";
|
||
|
|
||
|
/**
|
||
|
* The CloudFormation stack holding all our resources
|
||
|
*/
|
||
|
export default class TeaXYZ extends cdk.Stack {
|
||
|
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
|
||
|
super(scope, id, props);
|
||
|
|
||
|
/**
|
||
|
* The S3 Bucket hosting our build
|
||
|
*/
|
||
|
const bucket = new s3.Bucket(this, "Bucket", {
|
||
|
autoDeleteObjects: true,
|
||
|
removalPolicy: cdk.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 cdk.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: ["/", "/index.html"],
|
||
|
sources: [s3Deployment.Source.asset('./public')],
|
||
|
});
|
||
|
}
|
||
|
}
|