Настройка CloudFront для сжатия объектов в AWS CDK


CloudFront Обслуживание сжатых файлов

Вы можете использовать CloudFront для автоматического сжатия определенных типов объектов (файлов) и предоставлять сжатые объекты, когда зрители (веб-браузеры или другие клиенты) поддерживают их. Зрители указывают на свою поддержку сжатых объектов с помощью HTTP-заголовка Accept-Encoding. CloudFront может сжимать объекты с помощью форматов сжатия Gzip и Brotli. Если программа просмотра поддерживает оба формата, 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: Создайте CloudFront OAI (идентификатор доступа к источнику)

// 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: Создайте базу распределения cloudfront на основе ведра контента и 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,
  },
})
Войти в полноэкранный режим Выйти из полноэкранного режима

Код для этой статьи доступен на GitHub

Тестирование

Развертывание стека

yarn deploy
Вход в полноэкранный режим Выйти из полноэкранного режима

Дождитесь создания стека. После создания стека загрузите несколько файлов в ведро. Обратите внимание на типы файлов, которые CloudFront сжимает

Вы можете попробовать загрузить файл data/site.xml, а затем получить к нему доступ через CloudFront.

![подача сжата]] (https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6vrodd6lfgru1346xtj2.png).

Все, вы можете скачать пример исходного кода из моего git.

cdk-cloudfront-s3-compressed

Очистка

Не забудьте удалить стек, чтобы не оставлять ресурсы в вашем аккаунте.

npx cdk destroy
Вход в полноэкранный режим Выход из полноэкранного режима

Спасибо за прочтение! Надеюсь, вы нашли эту статью полезной. Если у вас возникли вопросы, пожалуйста, не стесняйтесь оставить комментарий.

Оцените статью
Procodings.ru
Добавить комментарий