Übersicht

Edge-Funktionen sind leistungsstarke Entwicklertools, mit denen Sie mithilfe von CloudFront benutzerdefinierte Logik am Edge hinzufügen können. Edge-Funktionen ermöglichen es Entwicklern, Webanwendungen mit erweiterten Funktionen auszustatten und gleichzeitig die Latenzzeit zu verringern und vollständig verteilte Anwendungen zu erstellen. Edge-Funktionen können für Folgendes verwendet werden:

  • Implementierung erweiterter HTTP-Logik. CloudFront bietet native Regeln wie die Umleitung von HTTP zu HTTPS, das Routing an verschiedene Ursprünge basierend auf dem Anfragenpfad usw. Mit Edge-Funktionen können Sie über die Standardfunktionen von CloudFront hinausgehen und erweiterte HTTP-Logik wie das Normalisieren von Cache-Schlüsseln, das Umschreiben von URLs, HTTP-CRUD-Operationen usw. implementieren.
  • Reduzierung der Anwendungslatenz. Ein Teil der Anwendungslogik kann vom Ursprung zum Edge verlagert werden, um vom Caching zu profitieren (z. B. A/B-Tests) oder um sie näher am Benutzer auszuführen (z. B. HTTP-Umleitungen, URL-Kürzung, HTML-Rendering). In Microservices- oder Microfront-Architekturen können Sie Edge-Funktionen verwenden, um eine gemeinsame Logik (z. B. Autorisierung und Authentifizierung) einmal am Einstiegspunkt der Anwendung zu implementieren, anstatt sie in jeder Komponente separat zu implementieren.
  • Schutz des Anwendungsperimeters. Edge-Funktionen können verwendet werden, um Sicherheitskontrollen wie Zugangskontrolle und fortschrittliches Geoblocking am Edge durchzusetzen. Auf diese Weise können Sie die Angriffsfläche Ihres Ursprungs reduzieren und unnötige Skalierungskosten vermeiden.
  • Routing von Anfragen. Sie können Edge-Funktionen verwenden, um jede HTTP-Anfrage basierend auf der Anwendungslogik an einen bestimmten Ursprung weiterzuleiten. Dies kann für Szenarien wie erweitertes Failover, das Ursprungs-Load-Balancing, Multi-Region-Architekturen, Migrationen, Anwendungsrouting usw. nützlich sein.
     

Arten von Edge-Funktionen mit CloudFront

CloudFront bietet zwei Varianten von Edge-Funktionen: CloudFront-Funktionen und Lambda@Edge. CloudFront-Funktionen zeichnen sich durch Startzeiten von unter einer Millisekunde aus und lassen sich unmittelbar skalieren, um Millionen von Anfragen pro Sekunde zu verarbeiten. Dadurch eignen sie sich perfekt für einfache Logik (Cache-Normalisierung, URL-Rewrite, Manipulation von Anfragen, Autorisierung usw.). Lambda@Edge ist eine Erweiterung von AWS Lambda, die verteilt über regionale Edge-Caches ausgeführt wird. Lambda@Edge bietet mehr Rechenleistung und erweiterte Funktionen wie externe Netzwerkaufrufe, allerdings verbunden mit höheren Kosten und einer höheren Latenz. Diese Dokumentation enthält ausführliche Informationen zu den Unterschieden zwischen beiden Laufzeiten.

Edge-Funktionen können verwendet werden, um HTTP-Anfragen und -Antworten zur Laufzeit zu manipulieren oder, um Anfragen zu beenden und Antworten zu generieren, anstatt sie nach oben an CloudFront weiterzuleiten. Edge-Funktionen können so konfiguriert werden, dass sie bei verschiedenen Ereignissen während des Lebenszyklus einer Anfrage auf CloudFront ausgeführt werden:

  • Viewer-Ereignisse: Wird für jede Anfrage ausgeführt, bevor der CloudFront-Cache überprüft wird. Ideal für die Cache-Normalisierung, Autorisierung oder das Platzieren individueller Cookies. CloudFront-Funktionen sind nur bei Viewer-Ereignissen zulässig.
  • Ursprungsereignisse: Wird bei Cache-Fehlern ausgeführt, bevor am Ursprung Dateien abgerufen werden. Ideal, um Inhalte zu generieren oder Antworten zu manipulieren, bevor sie zwischengespeichert werden, und um Anfragen dynamisch an verschiedene Ursprünge weiterzuleiten.

Berücksichtigen Sie die folgenden Best Practices:

  • Ordnen Sie Edge-Funktionen immer dem am besten passenden Cache-Verhalten zu, um unnötige Kosten für die Ausführung der Funktionen zu vermeiden.
  • Nutzen Sie CloudFront-Funktionen für Fälle, die bei Viewer-Ereignissen ausgeführt werden, und Lambda@Edge für Fälle, die bei Ursprungsereignissen ausgeführt werden.
  • Greifen Sie bei Viewer-Ereignissen nur dann auf Lambda@Edge zurück, wenn die Funktionen von CloudFront-Funktionen die Anforderungen Ihrer Logik nicht erfüllen können.
  • Bei Viewer-Ereignissen können Sie entweder Lambda@Edge oder CloudFront-Funktionen verwenden, aber nicht beides (z. B. Lambda@Edge beim Viewer-Anforderungsereignis und CloudFront-Funktionen beim Viewer-Antwortereignis).
  • Informieren Sie sich beim Planen Ihrer Anwendung über die Einschränkungen von Edge-Funktionen.

CloudFront-Funktionen

CloudFront-Funktionen sind in JavaScript geschrieben, können vollständig in der CloudFront-Konsole und den APIs erstellt und getestet werden und können in CloudWatch-Protokollen in der Region us-east-1 protokolliert werden. Als Entwickler müssen Sie Funktionen mit einer Rechenauslastung von weniger als 80 % schreiben. Ausführungen, die die Vorgaben für die Rechenauslastung überschreiten, werden von CloudFront gedrosselt, was mithilfe von CloudWatch-Metriken überwacht werden kann.

Dieser Leitfaden zum Programmiermodell hilft Ihnen beim Schreiben von CloudFront-Funktionen. Nachfolgend finden Sie eine Beispielfunktion, mit der Benutzer aus Deutschland zu lokalisierten deutschen Inhalten weitergeleitet werden:

function handler(event) {
  var request = event.request;
  var headers = request.headers;
  var host = request.headers.host.value;
  var country = 'DE';
  var newurl = `https://${host}/de/index.html`;

  if (headers['cloudfront-viewer-country']) {
    var countryCode = headers['cloudfront-viewer-country'].value;
    if (countryCode === country) {
      var response = {
        statusCode: 302,
        statusDescription: 'Found',
        headers: { location: { value: newurl } },
      };

      return response;
    }
  }
  return request;
}

CloudFront-Funktionen bietet auch die Möglichkeit, persistente Daten über CloudFront KeyValueStore getrennt von Ihrem Code zu entkoppeln und zu speichern. KeyValueStore eignet sich besonders hervorragend für Situationen, in denen eingebettete Daten, wie z. B. Massenumleitungszuordnungen, das Größenkontingent der Funktion überschreiten würden. KeyValueStore bietet außerdem den Vorteil, dass Sie Ihre persistenten Daten aktualisieren können, ohne Ihre Funktion ändern zu müssen.

Edge-Anpassung mit den Amazon-CloudFront-Funktionen

Lambda@Edge

Lambda@Edge-Funktionen können in NodeJS oder Python geschrieben werden. Sie ermöglichen die Nutzung eines Lambda-Containers mit konfigurierbarem Speicher (bis zu 10 GB). Lambda@Edge-Funktionen basieren auf AWS Lambda und werden daher in der Lambda-Konsole und ausschließlich in us-east-1 erstellt. Wenn Sie die Funktion erstellt und in Ihrer CloudFront-Distribution bereitgestellt haben, repliziert CloudFront diese global in den regionalen Edge-Caches. Um eine Lambda@Edge-Funktion mit einem CloudFront-Cache-Verhalten zu verknüpfen, müssen Sie zuerst eine neue Version davon veröffentlichen und sie dann für Ihr Ziel-Cache-Verhalten bereitstellen. Jedes Update einer Lambda@Edge-Funktion löst eine neue CloudFront-Bereitstellung aus (im Gegensatz zu CloudFront-Funktionen, bei denen nur die erste Zuordnung eine CloudFront-Bereitstellung auslöst). Beachten Sie bei der Entwicklung von Lambda@Edge-Funktionen Folgendes:

  • Beachten Sie die Best Practices zur Verwendung von Lambda@Edge, insbesondere zur Verwaltung der parallelen Ausführung. Die Parallelität misst die Anzahl der gleichzeitig ausgeführten Lambda-Container pro Regional Edge Cache-Region. In jeder Region gibt es Quoten für die Parallelität von Lambda@Edge in Bezug auf die Burst-Geschwindigkeit und die absolute Obergrenze.
  • Informieren Sie sich über die Best Practices zum Abrufen externer Daten aus Ihrer Lambda@Edge-Funktion.
  • Lambda@Edge-Protokolle werden an CloudWatch Logs in der Region gesendet, in der sie ausgeführt wurden. Dem Protokollgruppennamen wird us-east-1 vorangestellt. Wenn Sie Lambda@Edge-Protokolle in einer einzelnen Region zentralisieren müssen, sollten Sie die folgende Lambda@Edge-Protokoll-Aggregator-Lösung in Betracht ziehen. Beachten Sie, dass jede Funktionsausführung Protokolle für CloudWatch Logs erzeugt (im Gegensatz zu CloudFront-Funktionen, bei denen Protokolle nur dann erzeugt werden, wenn sie explizit in den Funktionscode geschrieben werden). Sie können die Lambda@Edge-Protokolle deaktivieren, indem Sie der zugehörigen IAM-Rolle die Berechtigung zum Senden von Protokollen an CloudWatch entziehen.

Dieser Leitfaden zum Programmiermodell hilft Ihnen beim Schreiben von Lambda@Edge-Funktionen. Nachfolgend finden Sie eine Beispielfunktion, die Anfragen von deutschen Nutzern aus rechtlichen Gründen an einen Server in Deutschland weiterleitet:

'use strict';

exports.handler = (event, context, callback) => {
  const request = event.Records[0].cf.request;

  if (request.headers['cloudfront-viewer-country']) {
    const countryCode = request.headers['cloudfront-viewer-country'][0].value;
    if (countryCode === 'DE') {
      const domainName = 'origin.example.de';
      request.origin.custom.domainName = domainName;
      request.headers['host'] = [{ key: 'host', value: domainName }];
    }
  }

  return request;
};
So richten Sie eine Lambda@Edge-Funktion ein

Ressourcen

War diese Seite hilfreich?