web-dev-qa-db-fra.com

Limite gzip de 10 mégaoctets dans AWS Cloudfront?

Mon site Web est un blog statique de visualisations que je sers via AWS S3.

Certaines visualisations utilisent des fichiers CSV volumineux, allant de 1 à 20 mégaoctets.

J'ai configuré Cloudfront pour qu'il gère automatiquement les fichiers gzip, mais pour une raison quelconque, la taille maximale est de 10 mégaoctets.

Par conséquent, le chargement d'une page dépendant d'un fichier CSV de 20 mégaoctets prend environ 5 secondes, car Cloudfront ne le gzippe pas.

J'ai vérifié, et si ce fichier était compressé, il ne serait que d'environ 2 mégaoctets.

Existe-t-il une raison quelconque pour laquelle Cloudfront ne gzip pas les fichiers de plus de 10 mégaoctets, ou existe-t-il une solution de contournement que je puisse utiliser pour servir automatiquement une version compressée de ce fichier sans trop de tracas?

3
Chron Bag

Ceci est une limitation de conception:

La taille du fichier doit être comprise entre 1 000 et 10 000 000 octets.

https://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html

La compression de fichiers nécessite beaucoup de ressources. Les concepteurs de CloudFront ont donc placé une limite supérieure sur la taille des fichiers que CloudFront dépensera en ressources pour la compression à la volée.

Il n'y a pas de solution de contournement "automatique".

Si vos fichiers sont aussi volumineux et compressibles, il est probablement de votre intérêt de les stocker compressés au format S3 afin de réduire vos coûts de stockage.

Gzip les fichiers avec gzip -9 (ce qui peut entraîner des fichiers légèrement plus petits que ceux générés par CloudFront - gzip a différents niveaux de compression, -9 étant le plus agressif, et le niveau utilisé par CloudFront ne semble être documenté), puis supprimez l’extension .gz, puis transférez les fichiers sur S3 en définissant Content-Encoding: gzip dans les métadonnées de téléchargement.

5
Michael - sqlbot

Mon site est un blog statique

Étant donné que votre site est statique, il constitue un excellent candidat pour s3_website , qui gauchera automatiquement les fichiers localement avant le téléchargement et gérera également la définition du type de contenu et l'invalidation du cache sur CloudFront. Une fois que vous l'avez installé, c'est une évidence, et je le recommande vivement. C'est aussi gratuit et open-source.

Vous devez avoir installé Ruby et Java pour l'exécuter.

Pour vous aider à démarrer, voici un exemple de fichier de configuration _s3_website.yml_ que j'utilise pour un bucket S3 + un site statique fourni par Cloudfront qui est servi via HTTPS avec HTTP/2 activé:

_# S3 Credentials
s3_id: <redacted>
s3_secret: <redacted>

# Site URL
s3_bucket: www.example.com

# Config options
s3_endpoint: eu-west-1
index_document: index.html
cache_control:
  "assets/*": public, no-transform, max-age=1209600, s-maxage=1209600
  "*": no-cache, no-store
gzip:
  - .html
  - .css
  - .js
  - .ico
  - .svg

# CloudFront
cloudfront_distribution_id: AABBCC123456
cloudfront_wildcard_invalidation: true
cloudfront_invalidate_root: true
cloudfront_distribution_config:
  default_cache_behavior:
    min_ttl: <%= 60 * 60 * 24 %>
  http_version: http2
_
1
Tom Brossman