Zum Inhalt springen
Aback Tools Logo

Lambda@Edge-Komprimierungsskriptgenerator

Generieren Sie eine produktionsbereite Lambda@Edge-Funktion, die Brotli- und GZIP-Komprimierung zu CloudFront-Antworten hinzufügt – für Ursprünge, die keine native Komprimierung unterstützen. Konfigurieren Sie den Ereignistyp (Origin Response oder Viewer Response), den Komprimierungsalgorithmus und optionale Header. Der Lambda@edge-Komprimierungsskriptgenerator erstellt den Funktionscode, die IAM-Vertrauensrichtlinie, die IAM-Ausführungsrichtlinie und schrittweise AWS CLI-Bereitstellungsbefehle. Die gesamte Generierung erfolgt in Ihrem Browser, ohne dass eine Anmeldung erforderlich ist.

Lambda@Edge Compression Script Generator

Configure the options below to generate a Lambda@Edge function that adds Brotli and GZIP compression to CloudFront responses. The lambda@edge compression script generator produces the function code, IAM trust policy, IAM execution policy, and deployment steps. All generation happens in your browser - no signup required.

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.

Warum sollten Sie unseren Lambda@Edge-Komprimierungsskriptgenerator verwenden?

  • Sofortiges Lambda@Edge-Komprimierungsskript: Generieren Sie sofort eine produktionsbereite Lambda@Edge-Komprimierungsfunktion – kein Durchsuchen der AWS-Dokumentation, keine Node.js-zlib-API-Recherche. Unser lambda@edge-Komprimierungsskriptgenerator erstellt in Sekundenschnelle korrekt formatierten Funktionscode, IAM-Richtlinien und Bereitstellungsschritte.
  • Sicherer Lambda@Edge-Komprimierungsskriptgenerator online: Ihre Konfigurationsoptionen verlassen nie Ihr Gerät, wenn Sie diesen Lambda@Edge-Komprimierungsskriptgenerator verwenden. Die gesamte Skripterstellung läuft vollständig in Ihrem Browser – keine Serveranfragen, keine Datenspeicherung, 100 % privat. Sicher für die Konfiguration von CloudFront-Produktionsverteilungen.
  • Lambda@Edge-Komprimierungsskriptgenerator – keine Installation: Generieren Sie Lambda@Edge-Komprimierungsskripts direkt in jedem modernen Browser, ohne AWS CLI-Installation, ohne Node.js-Setup und ohne erforderliches Konto. Der Lambda@edge-Komprimierungsskriptgenerator funktioniert unter Windows, macOS, Linux und Mobilgeräten.
  • Komplettpaket: Skript, IAM-Richtlinien und Bereitstellungsschritte: Der Lambda@edge-Komprimierungsskriptgenerator erstellt alles, was Sie benötigen – den Funktionscode, die IAM-Vertrauensrichtlinie, die IAM-Ausführungsrichtlinie und schrittweise AWS CLI-Bereitstellungsbefehle. Enthält Echtzeitwarnungen für häufige Fehlkonfigurationen wie fehlende Vary-Header.

Häufige Anwendungsfälle für den Lambda@Edge-Komprimierungsskriptgenerator

  • CloudFront-Verteilungskomprimierung: Fügen Sie Brotli- und GZIP-Komprimierung zu einer CloudFront-Verteilung hinzu, die Inhalte aus einem S3-Bucket oder einem benutzerdefinierten Ursprung bereitstellt, der keine Komprimierung unterstützt. Der lambda@edge-Komprimierungsskriptgenerator erzeugt eine Origin-Antwortfunktion, die Antworten komprimiert, bevor CloudFront sie zwischenspeichert – die Komprimierung wird also einmal pro Cache-Fehler ausgeführt, nicht bei jeder Anfrage.
  • API Gateway + CloudFront-Komprimierung: Komprimieren Sie API Gateway-Antworten, die über CloudFront bereitgestellt werden. API Gateway unterstützt GZIP, aber nicht Brotli – der Lambda@edge-Komprimierungsskriptgenerator fügt Brotli-Unterstützung für moderne Browser hinzu und greift für ältere Clients auf GZIP zurück, wodurch die Übertragungsgrößen der API-Antworten im Vergleich zu GZIP allein um 15–25 % verbessert werden.
  • Statische S3-Site-Komprimierung: Fügen Sie dynamische Komprimierung zu einer statischen Site hinzu, die auf S3 gehostet und über CloudFront bereitgestellt wird. S3 komprimiert keine Antworten – der Lambda@edge-Komprimierungsskriptgenerator fügt eine Origin-Antwortfunktion hinzu, die HTML, CSS, JavaScript und JSON komprimiert, bevor CloudFront die komprimierte Version zwischenspeichert.
  • Multiregionale CDN-Optimierung: Reduzieren Sie die Bandbreitenkosten an allen CloudFront-Edge-Standorten durch Komprimierung der Antworten am Ursprung. Der Lambda@edge-Komprimierungsskriptgenerator erzeugt eine Funktion, die in us-east-1, aber an CloudFront-Edge-Standorten weltweit ausgeführt wird, wodurch die Übertragungsgröße für textbasierte Inhalte um 60–80 % reduziert wird.
  • Upgrade der Legacy-Origin-Komprimierung: Fügen Sie die Brotli-Komprimierung zu einem Legacy-Origin-Server hinzu, der nur GZIP oder keine Komprimierung unterstützt. Der lambda@edge-Komprimierungsskriptgenerator fängt Origin-Antwortereignisse ab und wendet die Brotli-Komprimierung für moderne Browser an – es sind keine Änderungen am Ursprungsserver erforderlich.
  • Sicherheits-Header + Komprimierungspaket: Kombinieren Sie Komprimierung mit Sicherheits-Headern in einer einzigen Lambda@Edge-Funktion. Der Lambda@Edge-Komprimierungsskriptgenerator fügt neben der Komprimierung optional X-Content-Type-Options-, X-Frame-Options- und

Was ist Lambda@Edge-Komprimierung?

Lambda@Edge ist ein AWS-Dienst, der Node.js-Funktionen an CloudFront-Edge-Standorten weltweit ausführt. Eine Lambda@Edge-Komprimierungsfunktion fängt CloudFront-Antworten ab und wendet GZIP- oder Brotli-Komprimierung an, bevor die Antwort zwischengespeichert oder an den Betrachter übermittelt wird. Dies ist nützlich, wenn Ihr Ursprungsserver (S3, API Gateway, EC2 oder ein benutzerdefinierter Server) keine Komprimierung unterstützt – die Lambda@Edge-Funktion fügt die Komprimierung transparent auf der CDN-Ebene hinzu. Unser lambda@edge-Komprimierungsskriptgenerator erzeugt mithilfe des integrierten zlib-Moduls (keine externen Abhängigkeiten) eine vollständige Node.js-Funktion, die die Accept-Encoding-Aushandlung, Inhaltstypfilterung, Vary-Header-Verwaltung und Cache-Control-Header übernimmt.

So funktioniert unser Lambda@Edge-Komprimierungsskriptgenerator

  1. 1 Konfigurieren Sie Ihre Optionen: Wählen Sie den CloudFront-Ereignistyp (Origin Response oder Viewer Response), die Node.js-Laufzeit, den Komprimierungsalgorithmus (Brotli bevorzugt, nur GZIP oder nur Brotli) und optionale Funktionen wie Vary-Header, Cache-Control und Sicherheitsheader aus. Der Lambda@edge-Komprimierungsskriptgenerator aktualisiert die Ausgabe in Echtzeit.
  2. 2 Kopieren Sie das Skript, die IAM-Richtlinien und die Bereitstellungsschritte: Der Generator erzeugt vier Ausgaben – den Funktionscode (index.js), die IAM-Vertrauensrichtlinie, die IAM-Ausführungsrichtlinie und AWS CLI-Bereitstellungsbefehle. Die gesamte Generierung läuft in Ihrem Browser – es werden keine Daten irgendwohin gesendet.
  3. 3 Auf AWS bereitstellen und mit CloudFront verknüpfen: Erstellen Sie die Lambda-Funktion in us-east-1, veröffentlichen Sie eine Version und verknüpfen Sie sie mit Ihrem CloudFront-Verteilungsverhalten. Die Registerkarte „Bereitstellungsschritte“ bietet die genauen AWS CLI-Befehle mit Platzhaltern für Ihre Konto-ID und Verteilungs-ID.

Ursprungsantwort vs. Zuschauerantwort

  • Ursprungsantwort (empfohlen): Wird ausgeführt, nachdem CloudFront die Antwort von Ihrem Ursprung erhalten hat, bevor sie zwischengespeichert wird. Die komprimierte Antwort wird im CloudFront-Cache gespeichert – nachfolgende Anfragen für dasselbe Objekt werden aus dem Cache bedient, ohne die Lambda-Funktion aufzurufen. Dies ist der kostengünstigste Ansatz: Die Komprimierung wird einmal pro Cache-Fehler ausgeführt.
  • Viewer-Antwort: Wird ausgeführt, bevor CloudFront nach der Cache-Suche die Antwort an den Viewer sendet. Das bedeutet, dass die Lambda-Funktion bei jeder Anfrage ausgeführt wird – einschließlich Cache-Treffern. Verwenden Sie die Viewer-Antwort nur, wenn Sie Antworten ändern müssen, die bereits zwischengespeichert sind, oder wenn Sie pro Viewer-Header hinzufügen müssen, die nicht zwischengespeichert werden können.
  • Lambda@Edge-Grenzwerte: Funktionen müssen in us-east-1 bereitgestellt werden. Maximale Ausführungszeit: 5 Sekunden (Viewer) oder 30 Sekunden (Origin). Maximale Größe des Antworttextes: 1 MB (Viewer) oder 1 MB (Origin). Keine Umgebungsvariablen oder VPC-Zugriff. Keine externen npm-Pakete – verwenden Sie nur integrierte Node.js-Pakete.
  • CloudFront-Komprimierung vs. Lambda@Edge: CloudFront verfügt über eine integrierte Komprimierungsfunktion (in den Verteilungseinstellungen aktiviert), die GZIP und Brotli unterstützt. Verwenden Sie nach Möglichkeit die integrierte Komprimierung von CloudFront – sie ist kostenlos und es fallen keine Lambda-Aufrufkosten an. Verwenden Sie die Lambda@Edge-Komprimierung nur, wenn Sie benutzerdefinierte Logik benötigen (Inhaltstypfilterung, Sicherheitsheader oder Komprimierung für Ursprünge, die falsche Content-Type-Header senden).

Wichtige Lambda@Edge-Einschränkungen

Für Lambda@Edge-Funktionen gelten strenge Einschränkungen: Sie müssen unabhängig von Ihrer Ursprungsregion in us-east-1 (Nord-Virginia) bereitgestellt werden. Sie können keine Umgebungsvariablen, VPC-Verbindungen oder externen npm-Pakete verwenden – das generierte Skript verwendet nur das integrierte zlib-Modul von Node.js. Die maximale Größe des Antworttextes beträgt 1 MB – Antworten, die größer als 1 MB sind, können von Lambda@Edge nicht geändert werden. Erwägen Sie bei großen Antworten die Verwendung von CloudFront Functions (nur zur Header-Manipulation) oder aktivieren Sie stattdessen die integrierte Komprimierung von CloudFront. Lambda@Edge hat außerdem eine Kaltstartlatenz von 100–500 ms beim ersten Aufruf an jedem Edge-Standort.

Häufig gestellte Fragen

Ein Lambda@Edge-Komprimierungsskriptgenerator erstellt eine einsatzbereite Node.js-Funktion für AWS Lambda@Edge, die Brotli- und GZIP-Komprimierung zu CloudFront-Antworten hinzufügt. Unser kostenloser Lambda@edge-Komprimierungsskriptgenerator online erstellt den Funktionscode, die IAM-Vertrauensrichtlinie, die IAM-Ausführungsrichtlinie und die AWS CLI-Bereitstellungsschritte.

Verwenden Sie die Lambda@Edge-Komprimierung, wenn Ihr Ursprung falsche Content-Type-Header sendet, wenn Sie eine benutzerdefinierte Inhaltstypfilterung benötigen, wenn Sie Komprimierung mit Sicherheitsheadern kombinieren möchten oder wenn Sie eine Komprimierung für Ursprünge benötigen, die die integrierte Komprimierung von CloudFront nicht unterstützt.

Verwenden Sie Origin Response – es wird einmal pro Cache-Fehler ausgeführt und speichert die komprimierte Antwort im CloudFront-Cache. Viewer Response wird bei jeder Anfrage ausgeführt, einschließlich Cache-Treffern, was deutlich teurer ist und die Latenz bei jeder Antwort erhöht.

Ja. Die gesamte Skripterstellung läuft vollständig in Ihrem Browser unter Verwendung von JavaScript. Es werden keine Konfigurationsdaten an einen Server gesendet, remote gespeichert oder über das Netzwerk übertragen.

Ja – 100 % kostenlos, für immer. Keine Anmeldung, kein Konto, keine Premium-Stufe und keine Werbung. Generieren Sie völlig kostenlos unbegrenzt viele Lambda@Edge-Komprimierungsskripte.

AWS erfordert, dass alle Lambda@Edge-Funktionen in der Region us-east-1 (Nord-Virginia) erstellt werden. AWS repliziert die Funktion automatisch an alle CloudFront-Edge-Standorte weltweit, wenn Sie sie einer Verteilung zuordnen.

Das generierte Skript verwendet nur das integrierte zlib-Modul von Node.js – es sind keine externen Pakete erforderlich. Dadurch bleibt das Bereitstellungspaket unter 1 KB. Lambda@Edge unterstützt npm-Pakete, wenn Sie eine ZIP-Datei mit node_modules bereitstellen, aus Gründen der Einfachheit werden jedoch integrierte Module bevorzugt.

Lambda@Edge kann nur Antworttexte mit einer Größe von bis zu 1 MB ändern. Antworten, die größer als 1 MB sind, werden unverändert zurückgegeben. Verwenden Sie für große Antworten die integrierte Komprimierung von CloudFront oder komprimieren Sie auf dem Ursprungsserver.

Testen Sie mit Curl: „curl -H „Accept-Encoding: br, gzip“ -I https://your-cloudfront-domain.com/“. Suchen Sie in den Antwortheadern nach Content-Encoding: br oder Content-Encoding: gzip. Überprüfen Sie CloudWatch Logs in us-east-1 auf Lambda@Edge-Ausführungsprotokolle.