AWS & Typescript Masterclass - 11. Application Development

September 16th, 2022

(Section 11 of Course: AWS & Typescript Masterclass - CDK, Serverless, React)

94-97


(95) Deployment to S3 and Cloudfront

 

// create bucket

this.deploymentBucket = new Bucket(

this.stack,

'space-app-web-id', {

bucketName: bucketName,

publicReadAccess: true,

websiteIndexDocument: 'index.html'

}

);

new CfnOutput(this.stack, 'spaceFinderWebAppS3Url', {

value: this.deploymentBucket.bucketWebsiteUrl

});

 

// upload build folder to the bucket

new BucketDeployment(

this.stack,

'space-app-web-id-deployment', {

destinationBucket: this.deploymentBucket,

sources: [

Source.asset(

join(__dirname, '..', '..', 'space-finder-frontend', 'build')

)

]

}

);

 

// cloudfront

const cloudFront = new CloudFrontWebDistribution(

this.stack,

'space-app-web-destribution', {

originConfigs:[

{

behaviors: [{isDefaultBehavior: true}],

s3OriginSource: {s3BucketSource: this.deploymentBucket}

}

]

}

);

new CfnOutput(this.stack, 'spaceFinderWebAppCloudFrontUrl', {

value: cloudFront.distributionDomainName

})

-> bucket does not require https

?? can a public bucket handle https?

 

?? does the bucket still need to be public, if it's going through CloudFront anyway?

-> cloudfront has https


(97) Exploring the finished app

https://github.com/barosanuemailtest/space-finder-backend.git

https://github.com/barosanuemailtest/space-finder-frontend.git

 

API integration with CORS

const optionsWithCors: ResourceOptions = {

defaultCorsPreflightOptions: {

allowOrigins: Cors.ALL_ORIGINS,

allowMethods: Cors.ALL_METHODS,

}

}

 

const spaceResource = this.api.root.addResource('spaces', optionsWithCors);

spaceResource.addMethod('POST', this.spacesTable.createLambdaIntegration, optionsWithAuthorizer);

...

?? did this move out of the lambdas?

  • no

?? is the one in the lambda now redundant?

  • [ ] todo: find out