Skip to content
This repository has been archived by the owner on Feb 3, 2021. It is now read-only.

Commit

Permalink
feat: add CloudFront distribution for app
Browse files Browse the repository at this point in the history
  • Loading branch information
coderbyheart committed Jul 17, 2019
1 parent ef4002a commit a2629d7
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 5 deletions.
55 changes: 50 additions & 5 deletions cdk/BifravstStack.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import * as CloudFormation from '@aws-cdk/core'
import { RemovalPolicy } from '@aws-cdk/core'
import * as Cognito from '@aws-cdk/aws-cognito'
import * as CloudFront from '@aws-cdk/aws-cloudfront'
import * as IAM from '@aws-cdk/aws-iam'
import * as S3 from '@aws-cdk/aws-s3'
import { HttpMethods } from '@aws-cdk/aws-s3'

export class BifravstStack extends CloudFormation.Stack {
public constructor(
Expand Down Expand Up @@ -100,13 +99,13 @@ export class BifravstStack extends CloudFormation.Stack {
cors: [
{
allowedHeaders: ['*'],
allowedMethods: [HttpMethods.GET],
allowedMethods: [S3.HttpMethods.GET],
allowedOrigins: ['*'],
exposedHeaders: ['Date'],
maxAge: 3600,
},
],
removalPolicy: RemovalPolicy.DESTROY,
removalPolicy: CloudFormation.RemovalPolicy.DESTROY,
websiteIndexDocument: 'index.html',
websiteErrorDocument: 'error.html',
})
Expand All @@ -116,8 +115,54 @@ export class BifravstStack extends CloudFormation.Stack {
exportName: `${this.stackName}:websiteBucketName`,
})

const distribution = new CloudFront.CfnDistribution(
this,
'websiteDistribution',
{
distributionConfig: {
enabled: true,
priceClass: 'PriceClass_100',
defaultRootObject: 'index.html',
defaultCacheBehavior: {
allowedMethods: ['HEAD', 'GET', 'OPTIONS'],
cachedMethods: ['HEAD', 'GET'],
compress: true,
forwardedValues: {
queryString: true,
headers: [
'Access-Control-Request-Headers',
'Access-Control-Request-Method',
'Origin',
],
},
smoothStreaming: false,
targetOriginId: 'S3',
viewerProtocolPolicy: 'redirect-to-https',
},
ipv6Enabled: true,
viewerCertificate: {
cloudFrontDefaultCertificate: true,
},
origins: [
{
domainName: `${websiteBucket.bucketName}.s3-website.${this.region}.amazonaws.com`,
id: 'S3',
customOriginConfig: {
originProtocolPolicy: 'http-only',
},
},
],
},
},
)

new CloudFormation.CfnOutput(this, 'cloudfrontDistributionId', {
value: distribution.ref,
exportName: `${this.stackName}:cloudFrontDistributionId`,
})

new CloudFormation.CfnOutput(this, 'websiteDomainName', {
value: `${websiteBucket.bucketName}.s3.${this.region}.amazonaws.com`,
value: distribution.attrDomainName,
exportName: `${this.stackName}:websiteDomainName`,
})
}
Expand Down
1 change: 1 addition & 0 deletions continuous-deployment-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ phases:
- export $(cat $CODEBUILD_SRC_DIR_BifravstApp/.env.production.local | xargs)
- cd $CODEBUILD_SRC_DIR_BifravstApp/; npm ci --no-audit; npm run build;
- aws s3 cp $CODEBUILD_SRC_DIR_BifravstApp/build s3://$REACT_APP_WEBSITE_BUCKET_NAME --recursive --metadata-directive REPLACE --cache-control 'public,max-age=600' --expires ''
- aws cloudfront create-invalidation --distribution-id $REACT_APP_CLOUDFRONT_DISTRIBUTION_ID --paths /,/index.html
39 changes: 39 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"aws-sdk": "^2.493.0"
},
"devDependencies": {
"@aws-cdk/aws-cloudfront": "^1.0.0",
"@aws-cdk/aws-codebuild": "^1.0.0",
"@aws-cdk/aws-codepipeline": "^1.0.0",
"@aws-cdk/aws-cognito": "^1.0.0",
Expand Down

0 comments on commit a2629d7

Please sign in to comment.