AWS CDK에서 객체를 압축하도록 CloudFront 구성

8520 단어 cloudfrontcdk

CloudFront 압축 파일 제공



CloudFront를 사용하여 특정 유형의 객체(파일)를 자동으로 압축하고 최종 사용자(웹 브라우저 또는 기타 클라이언트)가 지원할 때 압축된 객체를 제공할 수 있습니다. 뷰어는 Accept-Encoding HTTP 헤더를 사용하여 압축된 개체에 대한 지원을 나타냅니다. CloudFront는 GzipBrotli 압축 형식을 사용하여 객체를 압축할 수 있습니다. 최종 사용자가 두 형식을 모두 지원하는 경우 CloudFront는 Brotli를 선호합니다.

AWS CDK에서 수행하는 방법



1단계: 콘텐츠 버킷 만들기




// content bucket
const bucket = new s3.Bucket(this, 'demo-bucket', {
  publicReadAccess: false, // no public access, user must access via cloudfront
  blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,

  /**
   * The default removal policy is RETAIN, which means that cdk destroy will not attempt to delete
   * the new bucket, and it will remain in your account until manually deleted. By setting the policy to
   * DESTROY, cdk destroy will attempt to delete the bucket, but will error if the bucket is not empty.
   */
  removalPolicy: RemovalPolicy.DESTROY, // NOT recommended for production code

  /**
   * For sample purposes only, if you create an S3 bucket then populate it, stack destruction fails.  This
   * setting will enable full cleanup of the demo.
   */
  autoDeleteObjects: true, // NOT recommended for production code
})


2단계: 클라우드프론트 OAI(원본 액세스 ID) 생성




// cloudfront OAI (origin access identity)
const cloudfrontOAI = new cloudfront.OriginAccessIdentity(this, 'my-oai', {
  comment: 'demo-bucket origin access identity',
})

// assign get object permission to cloudfront OAI
bucket.addToResourcePolicy(
  new iam.PolicyStatement({
    actions: ['s3:GetObject'],
    resources: [bucket.arnForObjects('*')],
    principals: [
      new iam.CanonicalUserPrincipal(cloudfrontOAI.cloudFrontOriginAccessIdentityS3CanonicalUserId),
    ],
  })
)


3단계: 콘텐츠 버킷 및 OAI에 클라우드프론트 배포 기반 생성




const distribution = new cloudfront.Distribution(this, 'my-distribution', {
  comment: 'demo-bucket distribution',
  defaultBehavior: {
    origin: new origins.S3Origin(bucket, {
      // Restrict viewer access, viewers must use CloudFront signed URLs or signed cookies to access your content.
      originAccessIdentity: cloudfrontOAI,
    }),
    // Serving compressed files
    compress: true,
    // Allowed GET HEAD and OPTIONS requests
    allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS,
    // redirects from HTTP to HTTPS, using a CloudFront distribution,
    viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
  },
})


The code for this article is available on GitHub



테스트



스택 배포




yarn deploy


스택이 생성될 때까지 기다립니다. 스택이 생성된 후 일부 파일을 버킷에 업로드합니다. 참고File types that CloudFront compresses

파일data/site.xml을 업로드한 다음 CloudFront를 통해 액세스할 수 있습니다.


![서빙 압축됨]]( https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6vrodd6lfgru1346xtj2.png )

즉, 내 git에서 샘플 소스 코드를 다운로드할 수 있습니다.

cdk-cloudfront-s3-compressed


청소



계정에 리소스가 남지 않도록 스택을 삭제하는 것을 잊지 마십시오.

npx cdk destroy


읽어 주셔서 감사합니다! 이 기사가 도움이 되었기를 바랍니다. 질문이 있으시면 언제든지 의견을 남겨주세요.

좋은 웹페이지 즐겨찾기