So führen Sie JavaScript am Edge mit AWS CloudFront-Funktionen aus

0
138

Viele Anwendungen benötigen die geringstmögliche Latenz, möchten aber trotzdem eine Form ausführen der Logik. Während Content Delivery Networks (CDNs) traditionell statisch sind, wird Code immer häufiger am Rand des Netzwerks ausgeführt, in der Nähe des Nutzers.

VERWANDTE: Ein CDN kann Ihre Website beschleunigen. Das müssen Sie wissen!

Verfügt AWS nicht bereits über Lambda@Edge?

CloudFront Functions ist nicht die erste oder einzige Möglichkeit, Ihren benutzerdefinierten Code am Rand eines CDN auszuführen. AWS hat seit einiger Zeit Lambda@Edge, mit dem Sie jede Lambda-Funktion auf einem CDN-Edge ausführen können, wenn auch zum Dreifachen der Kosten.

Diese Kosten verhindern, dass viele einfache Transformationsfunktionen sehr praktikabel sind am Rand laufen. In vielen Fällen müssen Sie nicht mehr tun als eine einfache String-Manipulation oder einfache Anfrage/Antwort. Diese können stattdessen durch kurzlebige Grundfunktionen ausgeführt werden.

Daher die Notwendigkeit für CloudFront-Funktionen. Sie können nur leichtgewichtigen JavaScript-Code ausführen, aber sie laufen auf allen CloudFront-CDN-Edge-Knoten für 1/6 des Preises von Lambda@Edge. Tatsächlich ist das sogar billiger als Lambda selbst.

Da es nur leichtes JS ist, sind die Verwendungen dafür viel enger. Es gibt jedoch noch einige Operationen, für die es gut ist, wie zum Beispiel:

  • Header-Manipulation
  • URL-Weiterleitungen oder -Neuschreibungen
  • Autorisierung anfordern
  • Cache-Schlüssel-Normalisierung

Werbung

Sie haben zwei Möglichkeiten, wann CloudFront Functions ausgeführt werden soll: entweder bevor oder nachdem CloudFront die Antwort vom CDN abruft. Wenn Sie URLs ändern oder Authentifizierungstoken validieren, sollten Sie es vorher ausführen. Wenn Sie nur ausgehende Header ändern, spielt dies möglicherweise keine Rolle.

Eine Sache, die es nicht tun kann, ist die Manipulation des Inhalts vom Ursprungsserver, bevor er zwischengespeichert wird, d. h. in der Ursprungsantwort; Sie können Funktionen nur auf Viewer-Anfrage oder Viewer-Antwort ausführen. Für alles andere müssen Sie Lambda@Edge verwenden.

Funktionen sollten für eine maximale Ausführungszeit von weniger als 1 Millisekunde ausgeführt werden. Dies gewährleistet eine gute Leistung auch bei Millionen von Anfragen. CloudFront-Funktionen verwenden ein neues prozessbasiertes Isolationsmodell mit begrenztem Dateisystem- und Netzwerkzugriff, was eine Leistungsverbesserung gegenüber der traditionellen VM-Lösung von Lambda darstellen sollte.

Im Austausch für 1/6 der Kosten Sie erhalten eine Gesamtpaketgröße von 10 KB und 2 MB Arbeitsspeicher. Verwenden Sie es mit Bedacht.

CloudFront-Funktionen verwenden

Zu Beginn müssen Sie natürlich ein CloudFront-CDN verwenden. Wenn Sie dies nicht sind und mit einem beginnen möchten, können Sie unseren Leitfaden zum Einrichten eines solchen lesen.

VERWANDTE: Erste Schritte mit AWS CloudFront CDN

Klicken Sie in der CloudFront-Konsole auf “Funktionen” in der Seitenleiste und erstellen Sie eine neue Funktion:

Werbung

Geben Sie ihm einen Namen und Sie werden zu einem Bildschirm weitergeleitet, auf dem Sie die Funktion erstellen, testen, veröffentlichen und bereitstellen können.

Natürlich variiert der Code, den Sie schreiben, je nach Ihren Zielen stark. Für dieses Tutorial mache ich einfach eine völlig nutzlose Funktion, die jeden Statuscode auf 404 ändert und die Website abschaltet, weil das einfach zu testen ist.

Klicken Sie auf “Speichern” nach dem Schreiben von Code, bevor Sie mit dem nächsten Schritt, dem Testen, fortfahren. Sie erhalten einige Beispieltestereignisse basierend auf verschiedenen Ereignistypen, für die Sie die URL und die Anforderungsheader auswählen können, die der Client sendet.

Es ruft eine Antwort vom CDN ab, wie es der Fall wäre in Produktion. Dies sollte es einfach machen, jede Funktion zu testen, bevor sie live geht.

Klicken Sie dann auf der nächsten Seite auf “Veröffentlichen” um Ihre Änderungen an der Produktionsversion der Funktion zu speichern. Dies wendet es jedoch nicht automatisch auf das CDN an; Sie müssen es mit einer CloudFront-Verteilung oder mehreren Verteilungen verknüpfen.

Sie werden natürlich testen wollen, ob die Produktionsversion richtig funktioniert. Gehen Sie zu Ihrem CDN und Sie sollten sehen, dass die Funktion angewendet wird. In diesem Fall erledigt die Funktion ihre Aufgabe, meine Beispiel-Website vollständig unbrauchbar zu machen.

Werbung

Wenn es nicht funktioniert, sollten Sie in Erwägung ziehen, console.log()-Anweisungen hinzuzufügen, die direkt an AWS CloudWatch gesendet werden. Dies ist neben grundlegenden Metriken die einzige verfügbare Form der Protokollierung, da die Funktionen sehr leicht sind. Weitere Informationen finden Sie im AWS-Leitfaden zur Anmeldung bei CloudFront Functions.