Tutorial: Schreiben einer einfachen Lambda@Edge-Funktion - Amazon CloudFront

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Schreiben einer einfachen Lambda@Edge-Funktion

Dieses Tutorial zeigt Ihnen, wie Sie mit Ihrer Arbeit mit Lambda@Edge beginnen können. Dazu erstellen Sie eine Node.js-Beispielfunktion, die in CloudFront läuft, und fügen sie hinzu. Das hier gezeigte Beispiel fügt HTTP-Sicherheitsheader zu einer Antwort hinzu, die die Sicherheit und den Datenschutz für eine Website verbessern können. Sie benötigen keine Website für diesen Walkthrough. Darin fügen wir einer Antwort einfach Sicherheits-Header hinzu, wenn eine Datei CloudFront abruft.

In diesem Beispiel werden die Schritte zum Erstellen und Konfigurieren einer Lambda@Edge-Funktion beschrieben. Wenn Sie Ihre eigene Lambda@Edge-Lösung erstellen, führen Sie ähnliche Schritte aus und wählen aus derselben Optionen aus.

Schritt 1: Registrieren für AWS-Konto

Registrieren Sie sich unter http://aws.amazon.com für Amazon Web Services, falls noch nicht geschehen. Wählen Sie Sign Up Now (Jetzt registrieren) und geben Sie die erforderlichen Informationen ein.

Schritt 2: Erstellen einer CloudFront-Verteilung

Bevor Sie die Lambda@Edge-Beispielfunktion erstellen, müssen Sie über eine CloudFront Umgebung verfügen, mit der Sie arbeiten können, die einen Ursprung für die Bereitstellung von Inhalten enthält.

Sie sind neu bei CloudFront? CloudFront stellt Inhalte über ein globales Netzwerk von Edge-Standorten bereit. Wenn Sie eine Lambda-Funktion mit einrichten CloudFront, kann die Funktion Inhalte näher an den Betrachtern anpassen, was die Leistung verbessert. Wenn Sie mit nicht vertraut sind CloudFront, nehmen Sie sich einige Minuten Zeit, bevor Sie das Tutorial abschließen, um eine kurze Übersicht zu lesen und etwas darüber zu erfahren, wie Inhalte CloudFront zwischenspeichert und bereitstellt.

In diesem Beispiel erstellen Sie eine CloudFront Verteilung, die einen Amazon S3-Bucket als Ursprung für die Verteilung verwendet. Wenn Sie bereits über eine Umgebung verfügen, die Sie benutzen können, können Sie diesen Schritt überspringen.

So erstellen Sie eine CloudFront Verteilung mit einem Amazon S3-Ursprung
  1. Erstellen Sie einen Amazon S3-Bucket mit einer oder zwei Dateien, z. B. Image-Dateien, als Beispielinhalt. Für Hilfe folgen Sie den Schritten unter Hochladen Ihrer Inhalte zu Amazon S3. Stellen Sie sicher, dass Sie Berechtigungen erteilen, um öffentliche Lesezugriff auf die Objekte in Ihrem Bucket zu gewähren.

  2. Erstellen Sie eine CloudFront Verteilung und fügen Sie Ihren S3-Bucket als Ursprung hinzu, indem Sie die Schritte unter Erstellen einer CloudFront Web-Verteilung befolgen. Wenn Sie bereits eine Verteilung haben, können Sie stattdessen den Bucket als Ursprung für diese Verteilung hinzufügen.

    Tipp

    Notieren Sie sich die ID Ihrer Verteilung. Wenn Sie später in diesem Tutorial einen CloudFront Auslöser für Ihre Funktion hinzufügen, müssen Sie die ID für Ihre Verteilung in einer Dropdown-Liste auswählen, z. B. E653W22221KDDL.

Schritt 3: Erstellen Ihrer Funktion

In diesem Schritt erstellen Sie eine Lambda-Funktion, beginnend mit einer Vorlage, die in der Lambda-Konsole bereitgestellt ist. Die Funktion fügt Code hinzu, um Sicherheits-Header in Ihrer CloudFront Verteilung zu aktualisieren.

Sie sind noch neu bei Lambda oder Lambda@Edge? Mit Lambda@Edge können Sie CloudFront Auslöser verwenden, um eine Lambda-Funktion aufzurufen. Wenn Sie eine CloudFront Verteilung mit einer Lambda-Funktion verknüpfen, CloudFront fängt Anfragen und Antworten an CloudFront Edge-Standorten ab und führt die Funktion aus. Lambda-Funktionen können die Sicherheit erhöhen oder Informationen besser an Ihre Viewer anpassen, um die Leistung zu verbessern. In diesem Tutorial aktualisiert die Funktion, die wir erstellen, die Sicherheitsheader in einer CloudFront-Antwort.

Es müssen mehrere Schritte befolgt werden, wenn Sie eine Lambda-Funktion erstellen. In diesem Tutorial verwenden Sie eine Vorlage als Grundlage für Ihre Funktion, und aktualisieren dann die Funktion mit Code, der die Sicherheitsheader festlegt. Schließlich fügen Sie einen CloudFront Auslöser hinzu und stellen ihn bereit, um die Funktion auszuführen.

Eine Lambda-Funktion erstellen
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die AWS Lambda-Konsole unter https://console.aws.amazon.com/lambda/.

    Wichtig

    Stellen Sie sicher, dass Sie sich in der Region US-East-1 (Nord-Virginia) (us-east-1) befinden. Sie müssen sich in dieser Region befinden, um Lambda@Edge-Funktionen erstellen zu können.

  2. Wählen Sie Funktion erstellen.

  3. Wählen Sie auf der Seite Funktion erstellen die Option Blueprint verwenden aus und filtern Sie dann nach den CloudFront Blueprints, indem Sie cloudfront in das Suchfeld eingeben. Das Schlüsselwort : cloudfront wird angezeigt, und alle Vorlagen, die für markiert sind CloudFront , werden aufgelistet.

    Anmerkung

    CloudFront Blueprints sind nur in der Region US-East-1 (Nord-Virginia) (us-east-1) verfügbar.

  4. Wählen Sie den cloudfront-modify-response-header Blueprint als Vorlage für Ihre Funktion aus.

  5. Geben Sie folgende Informationen zu Ihrer Funktion ein:

    Name

    Geben Sie einen Namen für die Funktion ein.

    Ausführungsrolle

    Wählen Sie, wie Sie die Berechtigungen für Ihre Funktion festlegen. Um die empfohlene grundlegende Lambda@Edge-Berechtigungsrichtlinienvorlage zu verwenden, wählen Sie Create a new role from AWS policy templates aus.

    Rollenname

    Geben Sie einen Namen für die Rolle ein, die von der Richtlinienvorlage erstellt wird.

    Richtlinienvorlagen

    Lambda fügt automatisch die Richtlinienvorlage Basic Edge Lambda-Berechtigungen hinzu, da Sie einen CloudFront Blueprint als Grundlage für Ihre Funktion ausgewählt haben. Diese Richtlinienvorlage fügt Ausführungsrollenberechtigungen hinzu, die es ermöglichen CloudFront , Ihre Lambda-Funktion für Sie an CloudFront Standorten auf der ganzen Welt auszuführen. Weitere Informationen finden Sie unter Festlegen von IAM-Berechtigungen und -Rollen für Lambda@Edge.

  6. Wählen Sie Funktion erstellen. Lambda erstellt die Funktion und auf der nächsten Seite sehen Sie Ihre Funktionskonfiguration.

  7. Wählen Sie im Abschnitt Designer der Seite Ihren Funktionsnamen aus, wie im folgenden Image dargestellt. In diesem Beispiel lautet der Funktionsname ExampleFunction.

    
								Lambda-Funktionsseite in der Lambda-Konsole, in der der Designer-Abschnitt mit dem ausgewählten Funktionsnamen angezeigt wird.
  8. Scrollen Sie nach unten zum Abschnitt Funktionscode der Seite, wie im folgenden Image gezeigt.

    
								Lambda-Funktionsseite in der Lambda-Konsole mit dem Funktionscode-Abschnitt.

    Ersetzen Sie den Vorlagencode durch eine Funktion, die die Sicherheits-Header ändert, die Ihren Ursprung zurückgibt. Beispielsweise könnten Sie Code wie den folgenden verwenden:

    'use strict'; exports.handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); };
  9. Wählen Sie Save (Speichern) aus, um Ihren aktualisierten Code zu speichern.

Fahren Sie mit dem nächsten Abschnitt fort, um einen CloudFront Auslöser zum Ausführen der Funktion hinzuzufügen.

Schritt 4: Hinzufügen eines CloudFront Auslösers zum Ausführen der Funktion

Nachdem Sie nun über eine Lambda-Funktion zum Aktualisieren von Sicherheits-Headern verfügen, konfigurieren Sie den - CloudFront Auslöser so, dass er Ihre Funktion ausführt, um die Header in jeder Antwort hinzuzufügen, die vom Ursprung für Ihre Verteilung CloudFront empfängt.

So konfigurieren Sie den CloudFront-Auslöser für Ihre Funktion
  1. Wählen Sie im Abschnitt Designer der Seite CloudFront aus, wie in der folgenden Abbildung gezeigt.

    
								Lambda-Funktionsseite in der Lambda-Konsole, auf der der Designer-Abschnitt mit  CloudFront ausgewählt angezeigt wird.
  2. Scrollen Sie nach unten zum Abschnitt Configure triggers (Auslöser konfigurieren) auf der Seite und wählen Sie Deploy to Lambda@Edge (Zu Lambda@Edge bereitstellen) aus.

  3. Geben Sie auf der Seite In Lambda@Edge bereitstellen unter Auslöser konfigurieren CloudFront die folgenden Informationen ein:

    Distribution

    Die CloudFront Verteilungs-ID, die Ihrer Funktion zugeordnet werden soll. Wählen Sie in der Dropdown-Liste die Verteilungs-ID aus.

    Cache-Verhalten

    Das Cache-Verhalten, das für den Auslöser verwendet werden soll. Behalten Sie in diesem Beispiel den Wert * bei, der das Standard-Cache-Verhalten Ihrer Verteilung bezeichnet. Weitere Informationen finden Sie unter Einstellungen für das Cache-Verhalten im Thema Werte, die Sie beim Erstellen oder Aktualisieren einer Verteilung angeben.

    CloudFront -Ereignis

    Der Auslöser, der angibt, wann Ihre Funktion ausgeführt wird. Wir möchten, dass die Sicherheits-Header-Funktion ausgeführt wird, wenn eine Antwort vom Ursprung CloudFront zurückgibt. Wählen Sie deshalb in der Dropdown-Liste Origin respons (Antwort vom Ursprung). Weitere Informationen finden Sie unter Hinzufügen von Auslösern für eine Lambda@Edge-Funktion.

  4. Aktivieren Sie unter Confirm deploy to Lambda@Edge (Bestätigen der Bereitstellung für Lambda@Edge) das Kontrollkästchen, um zu bestätigen, dass der Auslöser bereitgestellt wird und Ihre Funktion an allen AWS-Standorten ausführt.

  5. Wählen Sie Deploy (Bereitstellen) aus, um den Auslöser hinzuzufügen und die Funktion an AWS-Standorten weltweit zu replizieren. Schließen Sie dann, falls erforderlich, die Seite Deploy to Lambda @Edge (Lambda @Edge bereitstellen) .

  6. Warten Sie, bis die Funktion repliziert wurde. Dies dauert in der Regel mehrere Minuten.

    Sie können überprüfen, ob die Replikation abgeschlossen ist, indem Sie die - CloudFront Konsole aufrufen und Ihre Verteilung anzeigen. Warten Sie, bis sich der Status der Verteilung von In Progress (Läuft) zurück auf Deployed (Bereitgestellt) geändert hat, d. h. Ihre Funktion wurde repliziert. Zur Überprüfung der Funktionstätigkeit befolgen Sie die Schritte im nächsten Abschnitt.

Schritt 5: Überprüfen, ob die Funktion funktioniert

Nachdem Sie nun Ihre Lambda-Funktion erstellt und einen Auslöser konfiguriert haben, um sie für eine CloudFront Verteilung auszuführen, überprüfen Sie, ob die Funktion das erfüllt, was Sie von ihr erwarten. In diesem Beispiel überprüfen wir die HTTP-Header, die CloudFront zurückgibt, um sicherzustellen, dass die Sicherheitsheader hinzugefügt werden.

Überprüfen, ob Ihre Lambda@Edge-Funktion Sicherheitsheader hinzufügt
  1. Geben Sie in einem Browser die URL für eine Datei in Ihrem S3-Bucket ein. Sie können beispielsweise eine URL wie die folgende Verwenden: https://d111111abcdef8.cloudfront.net/image.jpg.

    Weitere Informationen zum CloudFront Domänennamen, der in der Datei-URL verwendet werden soll, finden Sie unter Anpassen des URL-Formats für Dateien in CloudFront.

  2. Öffnen Sie die Web-Developer-Symbolleiste Ihres Browsers. Öffnen Sie beispielsweise in Ihrem Browserfenster in Chrome das Kontextmenü (Rechtsklick) und wählen Sie Inspect (Untersuchen) aus.

  3. Wählen Sie die Registerkarte Network (Netzwerk) aus.

  4. Laden Sie die Seite, um Ihr Image anzuzeigen, und wählen Sie dann auf der linken Seite eine HTTP-Anforderung. Sie sehen die HTTP-Header in einem separaten Fenster.

  5. Sehen Sie sich die Liste der HTTP-Header an, um zu überprüfen, ob die erwarteten Sicherheitsheader in der Liste enthalten sind. Beispielsweise könnten Sie Header wie im folgenden Screenshot gezeigt sehen.

    
								HTTP-Header-Liste, in der die erwarteten Sicherheitsheader gekennzeichnet sind.

Wenn die Sicherheitsheader in Ihrem Header-Liste enthalten sind, dann ist das hervorragend! Sie haben erfolgreich Ihre erste Lambda@Edge-Funktion erstellt. Wenn Fehler CloudFront zurückgibt oder andere Probleme vorliegen, fahren Sie mit dem nächsten Schritt fort, um die Probleme zu beheben.

Schritt 6: Beheben von Problemen

Wenn Fehler CloudFront zurückgibt oder die Sicherheitsheader nicht wie erwartet hinzufügt, können Sie die Ausführung Ihrer Funktion untersuchen, indem Sie sich CloudWatch die Protokolle ansehen. Stellen Sie sicher, dass die Protokolle an dem AWS-Standort gespeichert werden, der dem Standort, an dem die Funktion ausgeführt wird, am nächsten liegt.

Wenn Sie die Datei beispielsweise von London aus anzeigen, versuchen Sie, die Region in der CloudWatch Konsole auf Europa (London) zu ändern.

So untersuchen Sie CloudWatch Protokolle für Ihre Lambda@Edge-Funktion
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die - CloudWatch Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Ändern Sie Region auf den Speicherort, der angezeigt wird, wenn Sie die Datei in Ihrem Browser anzeigen. Hier wird die Funktion ausgeführt.

  3. Klicken Sie im linken Bereich auf Logs (Protokolle), um die Protokolle für Ihre Verteilung anzuzeigen.

Weitere Informationen finden Sie unter Überwachen von CloudFront Metriken mit Amazon CloudWatch.

Schritt 7: Bereinigen der Ressourcen für Ihr Beispiel

Wenn Sie nur für dieses Tutorial einen Amazon S3-Bucket und eine CloudFront Verteilung erstellt haben, löschen Sie die AWS Ressourcen, die Sie zugewiesen haben, damit keine Gebühren mehr anfallen. Nachdem Sie Ihre AWS-Ressourcen gelöscht haben, ist der Inhalt, den Sie hinzugefügt haben, nicht mehr verfügbar.

Aufgaben

Löschen des S3-Buckets

Bevor Sie Ihren Amazon S3-Bucket löschen, stellen Sie sicher, dass die Protokollierung für den Bucket deaktiviert ist. Andernfalls schreibt AWS weiter Protokolle in Ihren Bucket, während Sie ihn löschen.

Deaktivieren Sie die Protokollierung für einen Bucket wie folgt:
  1. Öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie den Bucket aus, und wählen Sie dann Properties (Eigenschaften).

  3. Wählen Sie unter Properties (Eigenschaften) Logging (Protokollierung) aus.

  4. Deaktivieren Sie das Kontrollkästchen Enabled (Aktiviert).

  5. Wählen Sie Save (Speichern) aus.

Jetzt können Sie Ihren Bucket löschen. Weitere Informationen erhalten Sie unter Löschen eines Buckets im Amazon Simple Storage Service-Konsolenbenutzerhandbuch.

Löschen der CloudFront Verteilung

Bevor Sie eine CloudFront Verteilung löschen, müssen Sie sie deaktivieren. Eine deaktivierte Verteilung funktioniert nicht mehr und es fallen keine weiteren Kosten für sie an. Sie können eine deaktivierte Verteilung jederzeit wieder aktivieren. Nachdem Sie eine deaktivierte Verteilung gelöscht haben, ist sie nicht länger verfügbar.

Eine CloudFront-Verteilung deaktivieren und löschen
  1. Öffnen Sie die - CloudFront Konsole unter https://console.aws.amazon.com/cloudfront/v4/home.

  2. Klicken Sie mit der rechten Maustaste auf die Verteilung, die Sie deaktivieren möchten, und anschließend auf Disable (Deaktivieren).

  3. Wenn Sie zur Bestätigung aufgefordert werden, wählen Sie Yes, Disable (Ja, deaktivieren).

  4. Wählen Sie die deaktivierte Verteilung aus, und klicken Sie dann auf Delete (Löschen).

  5. Wenn Sie zur Bestätigung aufgefordert werden, wählen Sie Yes, Delete.

Ressourcen für weitere Informationen

Nun, da Sie eine grundlegende Vorstellung davon haben, wie Lambda@Edge-Funktionen funktionieren, können Sie hier weitere Informationen erhalten: