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