Direkt zum Inhalt

Wie übergebe ich benutzerdefinierte Header über API Gateway an eine Lambda-Funktion mit benutzerdefinierter Lambda-Integration (ohne Proxy)?

Lesedauer: 5 Minute
0

Ich möchte eine AWS Lambda-Funktion über eine benutzerdefinierte Integration (ohne Proxy) konfigurieren, um benutzerdefinierte Header zu verarbeiten, die über meine Amazon API Gateway-API weitergeleitet werden.

Kurzbeschreibung

Standardmäßig verarbeitet eine Lambda-Funktion nur den Methodenanforderungstext, den sie von einer API-Gateway-API-Anforderung erhält. Verwende eine Textzuweisungsvorlage, um benutzerdefinierte Header von einer API Gateway-API an eine Lambda-Funktion zu übergeben. Die API sendet zuerst die aktualisierte API-Anforderung an eine Lambda-Funktion, um die Header zu verarbeiten. Dann gibt die Lambda-Funktion einen oder mehrere Header-Werte aus der ursprünglichen API-Anforderung zurück.

Lösung

Konfigurieren der erforderlichen IAM-Berechtigungen

Befolge die Anweisungen unter Steuern des Zugriffs auf eine REST-API mit IAM-Berechtigungen.

Um dieses Verfahren zu testen, erstelle eine AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Rolle und füge dann die von AWS verwalteten Richtlinien AmazonAPIGatewayInvokeFullAccess und AmazonAPIGatewayPushToCloudWatchLogs an. Weitere Informationen findest du unter Von AWS verwaltete Richtlinien.

Eine Lambda-Funktion erstellen, um benutzerdefinierte Header aus der API Gateway-API zu verarbeiten

Führe die folgenden Schritte aus:

  1. Öffne die Lambda-Konsole.
  2. Wähle Funktion erstellen aus. Die Seite Funktion erstellen wird geöffnet, wobei die Option Ohne Vorgabe erstellen ausgewählt ist.
  3. Führe im Bereich Grundlegende Informationen die folgenden Aktionen aus:
    Gib unter Funktionsname einen Namen ein, der den Zweck der Funktion beschreibt. Zum Beispiel: CustomHeaders.
    Wähle für Laufzeit****Node.js 20.x.
  4. Erweitere unter Berechtigungen die Option Standard-Ausführungsrolle ändern.
  5. Wähle Verwende einen vorhandenen Proxy aus. Eine Dropdown-Liste der vorhandenen Rollen wird angezeigt.
  6. Wähle für Vorhandene Rolle die Lambda-Ausführungsrolle aus, die du zuvor erstellt hast.
  7. Wähle Funktion erstellen aus.
  8. Ersetze im Bereich Codequelle den Code index.mjs im Editor-Bereich durch den folgenden Code:
    export const handler = async (event, context, callback) => {
      callback(null, "The custom header " +event.headers["header1"] +" has been processed successfully by AWS Lambda via Amazon API Gateway");
    };
    Wähle Bereitstellen aus.

Weitere Informationen findest du unter Erstellen von Lambda-Funktionen mit Node.js.

Erstellen einer API Gateway REST-API

Führe die folgenden Schritte aus:

  1. Öffne die API Gateway-Konsole.
  2. Wähle API erstellen aus.
    -oder-
    Wenn du API Gateway zum ersten Mal verwendest, wird eine Seite angezeigt, die dich in die Funktionen von API Gateway einführt. Wähle unter REST-API die Option Erstellen aus.
  3. Wähle im Abschnitt REST-API erstellen unter API-Details die Option Neue API aus.
  4. Gib als API-Name einen Namen ein, der den Zweck der API beschreibt. Zum Beispiel: SendtoLambda.
    (Optional) Gib unter Beschreibung eine kurze Beschreibung des Zwecks der API ein.
    Wähle für Endpunkttyp die Option Regional aus.
  5. Wähle API erstellen aus.

Den Integrationspunkt und die Textzuweisungsvorlage deiner API konfigurieren

Führe die folgenden Schritte aus:

  1. Öffne die API Gateway-Konsole.

  2. Wähle den Namen der API, die du zuvor erstellt hast. Die Seite Ressourcen der API wird geöffnet.

  3. Wähle auf der Seite Ressourcen die Option Ressource erstellen aus.

  4. Führe im Bereich Ressource erstellen die folgenden Aktionen aus:
    Gib als Ressourcennamen einen Namen ein, der die Ressource beschreibt. Zum Beispiel: HeadersResource.
    Wähle Ressource erstellen.

  5. Wähle die Ressource aus, die du erstellt hast, und klicke dann auf Methode erstellen.

  6. Führe im Bereich Methode erstellen die folgenden Aktionen aus:
    Wähle als Methodentyp POST aus der Dropdown-Liste aus.
    Wähle als Integrationstyp die Option Lambda-Funktion.
    Vergewissere dich, dass die Lambda-Proxy-Integration deaktiviert ist.
    Wähle für die Lambda-Funktion die AWS-Region aus, in der die Funktion gehostet wird, und gib dann den Namen der Lambda-Funktion oder den Amazon-Ressourcennamen (ARN) ein.
    Wähle Methode erstellen. Diese Aktion gewährt API Gateway automatisch die Erlaubnis, deine Lambda-Funktion aufzurufen.

  7. Wähle POST als Ressourcenmethode, die du im vorherigen Schritt erstellt hast. Wähle dann im Bereich Methodenausführung die Option Integrationsanforderung aus.

  8. Wähle im Bereich Integrationsanforderung die Option Bearbeiten aus und führe dann die folgenden Aktionen aus:
    Wähle für Pass-Through des Anforderungstexts When there are no templates defined (recommended) (Wenn keine Vorlagen definiert sind (empfohlen)).
    Erweitere unten im Bereich Zuweisungsvorlagen.
    Wähle Mapping-Vorlage hinzufügen.
    Gib als Inhaltstyp application/json ein.

  9. Gib im Vorlagentext-Editor Folgendes ein:

    {
      "method": "$context.httpMethod",
      "body" : $input.json('$'),
      "headers": {
        #foreach($param in $input.params().header.keySet())
        "$param": "$util.escapeJavaScript($input.params().header.get($param))"
        #if($foreach.hasNext),#end
        #end
      }
    }
  10. Wähle Speichern.

Die API in einer neuen Stufe bereitstellen

Führe die folgenden Schritte aus:

  1. Befolge die Anweisungen zum Bereitstellen einer REST-API für eine Stufe. Weitere Informationen findest du unter Einrichten einer Stufe für eine REST-API in API Gateway.
  2. Wähle die Schaltfläche API bereitstellen.
  3. Gib im Pop-up-Fenster API bereitstellen einen neuen Namen für die Stufe ein und wähle dann Bereitstellen aus.
  4. Erweitere die Stufe im Bereich Stufen, um die Ressource und Methode anzuzeigen, die du in den vorherigen Schritten erstellt hast.
  5. Wähle POST als deine Ressourcenmethode und kopiere die Aufruf-URL in die Zwischenablage.

Beispiel für eine Aufruf-URL der REST-API

https://1a2bc3d456.execute-api.region.amazonaws.com/stageName/resourceName

Setup testen

Führe den folgenden curl-Befehl aus, um dich zu vergewissern, dass die API und die Lambda-Funktion Header verarbeiten:

curl -H "Content-Type: application/json" -H "header1: value1" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName

Hinweis: Ersetze https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName durch die Aufruf-URL deiner API.

Beispielausgabe

"The custom header value1 has been processed successfully by AWS Lambda via Amazon API Gateway"

Hinweis: Informationen zur Installation von curl unter Windows findest du unter Downloads auf der Git-Website. Weitere Informationen zu curl findest du auf der Website des curl-Projekts.

Ähnliche Informationen

Einrichten der Datentransformationen in API Gateway

Verwaltung von Berechtigungen in AWS Lambda

Kontrolle des Zugriffs auf eine REST-API mit IAM-Berechtigungen