Générateur de scripts de compression Lambda@Edge
Générez une fonction Lambda@Edge prête pour la production qui ajoute la compression Brotli et GZIP aux réponses CloudFront - pour les origines qui ne prennent pas en charge la compression de manière native. Configurez le type d'événement (Origin Response ou Viewer Response), l'algorithme de compression et les en-têtes facultatifs. Le générateur de script de compression lambda@edge produit le code de fonction, la stratégie de confiance IAM, la stratégie d'exécution IAM et les commandes de déploiement AWS CLI étape par étape. Toute génération s'effectue dans votre navigateur sans aucune inscription requise.
Lambda@Edge Compression Script Generator
Node.js 20.x is recommended. Lambda@Edge supports Node.js 18.x and 20.x.
Response Headers
Skip Conditions
/**
* Lambda@Edge Compression Script
* Event type: origin-response
* Runtime: nodejs20.x
* Generated by AbackTools - https://abacktools.com
*/
'use strict';
// Content types that benefit from compression
const COMPRESSIBLE_TYPES = [
'text/html', 'text/css', 'text/plain', 'text/xml', 'text/javascript',
'application/javascript', 'application/x-javascript', 'application/json',
'application/ld+json', 'application/xml', 'application/rss+xml',
'application/atom+xml', 'image/svg+xml', 'font/ttf', 'font/otf',
];
// Already-compressed formats - skip to avoid overhead
const SKIP_TYPES = [
'image/jpeg', 'image/png', 'image/webp', 'image/avif', 'image/gif',
'image/bmp', 'video/mp4', 'video/webm', 'audio/mpeg', 'audio/ogg',
'application/zip', 'application/gzip', 'application/x-brotli',
'font/woff2',
];
exports.handler = async (event) => {
const { request, response } = event.Records[0].cf;
// Get the Accept-Encoding header from the viewer request
const acceptEncoding =
(request.headers['accept-encoding'] || [{ value: '' }])[0].value.toLowerCase();
// Get the Content-Type of the response
const contentType =
(response.headers['content-type'] || [{ value: '' }])[0].value.split(';')[0].trim().toLowerCase();
// Skip if already compressed
const alreadyEncoded = response.headers['content-encoding'];
if (alreadyEncoded && alreadyEncoded[0]?.value) {
return response;
}
// Skip already-compressed content types
if (SKIP_TYPES.some(t => contentType.startsWith(t))) {
return response;
}
// Only compress compressible content types
const isCompressible = COMPRESSIBLE_TYPES.some(t => contentType.startsWith(t));
if (!isCompressible) {
return response;
}
// Skip small responses (compression overhead not worth it)
const bodyLength = response.body ? Buffer.byteLength(response.body, 'utf8') : 0;
if (bodyLength < 1024) {
return response;
}
// Determine the best encoding to use
let encoding = null;
if (acceptEncoding.includes('br')) {
encoding = 'br';
} else if (acceptEncoding.includes('gzip')) {
encoding = 'gzip';
}
if (!encoding) {
return response;
}
// Compress the response body
try {
const zlib = require('zlib');
const body = Buffer.from(
response.body,
response.bodyEncoding === 'base64' ? 'base64' : 'utf8'
);
let compressed;
if (encoding === 'br') {
compressed = zlib.brotliCompressSync(body, {
params: { [zlib.constants.BROTLI_PARAM_QUALITY]: 6 },
});
} else {
compressed = zlib.gzipSync(body, { level: 6 });
}
// Only use compressed version if it's actually smaller
if (compressed.length < body.length) {
response.body = compressed.toString('base64');
response.bodyEncoding = 'base64';
response.headers['content-encoding'] = [{ key: 'Content-Encoding', value: encoding }];
response.headers['content-length'] = [{ key: 'Content-Length', value: String(compressed.length) }];
}
} catch (err) {
console.error('Compression failed:', err);
// Return uncompressed response on error
}
// Add Vary: Accept-Encoding so CloudFront caches separate variants
const existingVary = (response.headers['vary'] || [{ value: '' }])[0].value;
if (!existingVary.toLowerCase().includes('accept-encoding')) {
response.headers['vary'] = [{
key: 'Vary',
value: existingVary ? `${existingVary}, Accept-Encoding` : 'Accept-Encoding',
}];
}
// Set Cache-Control for compressed assets
if (!response.headers['cache-control']) {
response.headers['cache-control'] = [{
key: 'Cache-Control',
value: 'public, max-age=31536000, stale-while-revalidate=86400',
}];
}
return response;
};Lambda@Edge requirement: Functions must be deployed in us-east-1(N. Virginia) regardless of your CloudFront distribution's origin region. Lambda@Edge does not support environment variables or VPC access.
Pourquoi utiliser notre générateur de scripts de compression Lambda@Edge ?
- Script de compression Lambda@Edge instantané : générez instantanément une fonction de compression Lambda@Edge prête pour la production - pas de plongée dans la documentation AWS, pas de recherche d'API zlib Node.js. Notre générateur de scripts de compression lambda@edge produit un code de fonction, des politiques IAM et des étapes de déploiement correctement formatés en quelques secondes.
- Générateur de scripts de compression Lambda@Edge sécurisé en ligne : vos choix de configuration ne quittent jamais votre appareil lorsque vous utilisez ce générateur de scripts de compression lambda@edge. Toute la génération de scripts s'exécute entièrement dans votre navigateur - aucune requête de serveur, aucune conservation de données, 100 % privé. Coffre-fort pour configurer les distributions CloudFront de production.
- Générateur de scripts de compression Lambda@Edge - Aucune installation : générez des scripts de compression Lambda@Edge directement dans n'importe quel navigateur moderne sans installation AWS CLI, sans configuration Node.js et sans compte requis. Le générateur de scripts de compression lambda@edge fonctionne sur Windows, macOS, Linux et mobile.
- Package complet : script, politiques IAM et étapes de déploiement : le générateur de script de compression lambda@edge produit tout ce dont vous avez besoin : le code de fonction, la stratégie de confiance IAM, la stratégie d'exécution IAM et les commandes de déploiement étape par étape de l'AWS CLI. Comprend des avertissements en temps réel pour les erreurs de configuration courantes telles que les en-têtes Vary manquants.
Cas d'utilisation courants du générateur de scripts de compression Lambda@Edge
- Compression de distribution CloudFront : ajoutez la compression Brotli et GZIP à une distribution CloudFront qui diffuse du contenu à partir d'un compartiment S3 ou d'une origine personnalisée qui ne prend pas en charge la compression. Le générateur de script de compression lambda@edge produit une fonction Origin Response qui compresse les réponses avant que CloudFront ne les mette en cache – de sorte que la compression s'exécute une fois par échec de cache, et non à chaque requête.
- API Gateway + CloudFront Compression : compressez les réponses API Gateway servies via CloudFront. API Gateway prend en charge GZIP mais pas Brotli - le générateur de scripts de compression lambda@edge ajoute la prise en charge de Brotli pour les navigateurs modernes tout en revenant à GZIP pour les clients existants, améliorant ainsi les tailles de transfert de réponse API de 15 à 25 % par rapport à GZIP seul.
- Compression de site statique S3 : ajoutez une compression dynamique à un site statique hébergé sur S3 et servi via CloudFront. S3 ne compresse pas les réponses : le générateur de script de compression lambda@edge ajoute une fonction Origin Response qui compresse HTML, CSS, JavaScript et JSON avant que CloudFront ne mette en cache la version compressée.
- Optimisation CDN multirégion : réduisez les coûts de bande passante sur tous les emplacements périphériques CloudFront en compressant les réponses à l'origine. Le générateur de script de compression lambda@edge produit une fonction qui s'exécute dans us-east-1 mais s'exécute sur les emplacements périphériques CloudFront dans le monde entier, réduisant ainsi la taille des transferts de 60 à 80 % pour le contenu textuel.
- Mise à niveau de la compression d'origine héritée : ajoutez la compression Brotli à un serveur d'origine hérité qui prend uniquement en charge GZIP ou aucune compression. Le générateur de script de compression lambda@edge intercepte les événements Origin Response et applique la compression Brotli pour les navigateurs modernes - aucune modification n'est requise sur le serveur d'origine.
- Ensemble d'en-têtes de sécurité + compression : combinez la compression avec les en-têtes de sécurité dans une seule fonction Lambda@Edge. Le générateur de script de compression lambda@edge ajoute éventuellement les en-têtes X-Content-Type-Options, X-Frame-Options et X-XSS-Protection aux côtés de la compression, réduisant ainsi le nombre de fonctions Lambda@Edge nécessaires par comportement CloudFront.
Qu'est-ce que la compression Lambda@Edge ?
Lambda@Edge est un service AWS qui exécute les fonctions Node.js sur les emplacements périphériques CloudFront dans le monde entier. Une fonction de compression Lambda@Edge intercepte les réponses CloudFront et applique la compression GZIP ou Brotli avant que la réponse ne soit mise en cache ou transmise au visualiseur. Ceci est utile lorsque votre serveur d'origine (S3, API Gateway, EC2 ou un serveur personnalisé) ne prend pas en charge la compression : la fonction Lambda@Edge ajoute la compression de manière transparente au niveau de la couche CDN. Notre générateur de script de compression lambda@edge produit une fonction Node.js complète à l'aide du module zlib intégré (pas de dépendances externes) qui gère la négociation Accept-Encoding, le filtrage des types de contenu, la gestion des en-têtes Vary et les en-têtes Cache-Control.
Comment fonctionne notre générateur de scripts de compression Lambda@Edge
- 1 Configurez vos options : sélectionnez le type d'événement CloudFront (Origin Response ou Viewer Response), le runtime Node.js, l'algorithme de compression (Brotli préféré, GZIP uniquement ou Brotli uniquement) et des fonctionnalités facultatives telles que les en-têtes Vary, Cache-Control et les en-têtes de sécurité. Le générateur de script de compression lambda@edge met à jour la sortie en temps réel.
- 2 Copiez le script, les stratégies IAM et les étapes de déploiement : le générateur produit quatre sorties : le code de fonction (index.js), la stratégie de confiance IAM, la stratégie d'exécution IAM et les commandes de déploiement AWS CLI. Toute la génération s'exécute dans votre navigateur - aucune donnée n'est envoyée nulle part.
- 3 Déployez sur AWS et associez-le à CloudFront : créez la fonction Lambda dans us-east-1, publiez une version et associez-la à votre comportement de distribution CloudFront. L'onglet Étapes de déploiement fournit les commandes AWS CLI exactes avec des espaces réservés pour votre ID de compte et votre ID de distribution.
Réponse de l'origine par rapport à la réponse du spectateur
- Réponse d'origine (recommandé) : s'exécute après que CloudFront ait reçu la réponse de votre origine, avant qu'elle ne soit mise en cache. La réponse compressée est stockée dans le cache CloudFront : les requêtes ultérieures pour le même objet sont servies à partir du cache sans appeler la fonction Lambda. Il s'agit de l'approche la plus rentable : la compression s'exécute une fois par échec de cache.
- Réponse de la visionneuse : s'exécute avant que CloudFront envoie la réponse à la visionneuse, après la recherche du cache. Cela signifie que la fonction Lambda s'exécute à chaque requête, y compris les accès au cache. Utilisez Viewer Response uniquement lorsque vous devez modifier des réponses déjà mises en cache ou lorsque vous devez ajouter des en-têtes par visualiseur qui ne peuvent pas être mis en cache.
- Limites Lambda@Edge : les fonctions doivent être déployées dans us-east-1. Temps d'exécution maximum : 5 secondes (Viewer) ou 30 secondes (Origin). Taille maximale du corps de la réponse : 1 Mo (Viewer) ou 1 Mo (Origin). Aucune variable d'environnement ni accès au VPC. Aucun package npm externe - utilisez uniquement les éléments intégrés Node.js.
- Compression CloudFront vs Lambda@Edge : CloudFront dispose d'une fonctionnalité de compression intégrée (activée dans les paramètres de distribution) qui prend en charge GZIP et Brotli. Utilisez la compression intégrée de CloudFront lorsque cela est possible : elle est gratuite et n'entraîne aucun coût d'invocation Lambda. Utilisez la compression Lambda@Edge uniquement lorsque vous avez besoin d'une logique personnalisée (filtrage de type de contenu, en-têtes de sécurité ou compression pour les origines qui envoient des en-têtes Content-Type incorrects).
Limites importantes de Lambda@Edge
Les fonctions Lambda@Edge ont des contraintes strictes : elles doivent être déployées en us-east-1 (Virginie du Nord) quelle que soit votre région d'origine. Ils ne peuvent pas utiliser de variables d'environnement, de connexions VPC ou de packages npm externes - le script généré utilise uniquement le module zlib intégré de Node.js. La taille maximale du corps de la réponse est de 1 Mo. Les réponses supérieures à 1 Mo ne peuvent pas être modifiées par Lambda@Edge. Pour les réponses volumineuses, envisagez d'utiliser CloudFront Functions (pour la manipulation d'en-tête uniquement) ou d'activer la compression intégrée de CloudFront. Lambda@Edge a également une latence de démarrage à froid de 100 à 500 ms lors de la première invocation à chaque emplacement périphérique.
Foire aux questions
Un générateur de script de compression lambda@edge produit une fonction Node.js prête à déployer pour AWS Lambda@Edge qui ajoute la compression Brotli et GZIP aux réponses CloudFront. Notre générateur de script de compression lambda@edge gratuit en ligne produit le code de fonction, la politique de confiance IAM, la politique d'exécution IAM et les étapes de déploiement de l'AWS CLI.
Utilisez la compression Lambda@Edge lorsque votre origine envoie des en-têtes Content-Type incorrects, lorsque vous avez besoin d'un filtrage de type de contenu personnalisé, lorsque vous souhaitez combiner la compression avec des en-têtes de sécurité ou lorsque vous avez besoin d'une compression pour des origines que la compression intégrée de CloudFront ne prend pas en charge.
Utilisez Origin Response : il s'exécute une fois par échec de cache et stocke la réponse compressée dans le cache de CloudFront. Viewer Response s'exécute sur chaque requête, y compris les accès au cache, ce qui est nettement plus coûteux et ajoute de la latence à chaque réponse.
Oui. Toute génération de scripts s'exécute entièrement dans votre navigateur à l'aide de JavaScript. Aucune donnée de configuration n'est envoyée à un serveur, stockée à distance ou transmise sur le réseau.
Oui, 100 % gratuit, pour toujours. Pas d'inscription, pas de compte, pas de niveau premium et pas de publicité. Générez des scripts de compression Lambda@Edge illimités et entièrement gratuits.
AWS exige que toutes les fonctions Lambda@Edge soient créées dans la région us-east-1 (Virginie du Nord). AWS réplique automatiquement la fonction sur tous les emplacements périphériques CloudFront dans le monde lorsque vous l'associez à une distribution.
Le script généré utilise uniquement le module zlib intégré de Node.js – aucun package externe n'est nécessaire. Cela maintient le package de déploiement sous 1 Ko. Lambda@Edge prend en charge les packages npm si vous déployez un ZIP avec node_modules, mais les modules intégrés sont préférés pour des raisons de simplicité.
Lambda@Edge ne peut modifier que des corps de réponse d'une taille maximale de 1 Mo. Les réponses supérieures à 1 Mo sont renvoyées sans modification. Pour les réponses volumineuses, utilisez la compression intégrée de CloudFront ou compressez-la sur le serveur d'origine.
Testez avec curl : "curl -H "Accept-Encoding: br, gzip" -I https://your-cloudfront-domain.com/". Recherchez Content-Encoding: br ou Content-Encoding: gzip dans les en-têtes de réponse. Vérifiez CloudWatch Logs dans us-east-1 pour les journaux d'exécution Lambda@Edge.