Wie übermittle ich benutzerdefinierte Header durch ein API Gateway an eine Lambda-Funktion mit einer benutzerdefinierten Lambda-Integration?

Letzte Aktualisierung: 27. 07. 2021

Ich möchte eine AWS-Lambda-Funktion konfigurieren, um die benutzerdefinierten Header zu verarbeiten, die über meine Amazon-API-Gateway-API übergeben werden. Wie richte ich das ein?

Kurzbeschreibung

Standardmäßig verarbeitet eine Lambda-Funktion nur den Methodenanforderungstext, den sie von einer API-Gateway-API-Anforderung erhält. Um benutzerdefinierte Header von einer API-Gateway-API an eine Lambda-Funktion zu übergeben, verwenden Sie eine Test-Mapping-Vorlage. Die API sendet die aktualisierte API-Anfrage an eine Lambda-Funktion, um die Header zu verarbeiten. Anschließend gibt die Lambda-Funktion einen oder mehrere Header-Werte aus der ursprünglichen API-Anfrage zurück.

Auflösung

Richten Sie die erforderlichen IAM-Berechtigungen ein

Befolgen Sie die Anweisungen unter Kontrolle des Zugriffs auf eine API mit IAM-Berechtigungen.

Zum Testen dieses Verfahrens können Sie eine IAM-Rolle erstellen und die folgenden von AWS verwalteten Richtlinien anfügen:

  • AmazonAPIGatewayInvokeFullAccess
  • AmazonAPIGatewayPushToCloudWatchLogs

Erstellen Sie eine Lambda-Funktion, um benutzerdefinierte Header von Ihrer API-Gateway-API zu verarbeiten

1.    Öffnen Sie die Lambda-Konsole.

2.    Wählen Sie Funktion erstellen. Die Seite Funktion erstellen wird mit ausgewählter Option Von Grund auf neu erstellen geöffnet.

3.    Gehen Sie im Bereich Basisinformationen wie folgt vor:
Geben Sie für Funktionsname einen Namen ein, der den Zweck Ihrer Funktion beschreibt. Beispiel: CustomHeaders.
Wählen Sie bei Laufzeit die Option Node.js 14.x aus.

4.    Erweitern Sie unter Berechtigungen die Option Standardausführungsrolle ändern.

5.    Wählen Sie Vorhandene Rolle verwenden. Eine Dropdown-Liste mit vorhandenen Rollen wird angezeigt.

6.    Wählen Sie für Vorhandene Rolle die Lambda-Ausführungsrolle aus, die Sie zuvor erstellt haben.

7.    Wählen Sie Funktion erstellen.

8.    Ersetzen Sie im Konfigurationsbereich unter Funktionscode den Code im Editorbereich ( index.js) durch Folgendes:

exports.handler = (event, context, callback) => {
// TODO implement
callback(null, "This message header was processed by Amazon " +event.headers["header1"]);
};

9.    Wählen Sie Speichern aus.

Weitere Informationen finden Sie unter Erstellen von Lambda-Funktionen mit Node.js.

Erstellen Sie eine API-Gateway-REST-API

1.    Öffnen Sie die API-Gateway-Konsole.

2.    Wählen Sie API erstellen aus

-oder-

(Wenn Sie API Gateway zum ersten Mal verwenden) Eine Seite mit einer Einführung in die Funktionen des Services wird angezeigt. Wählen Sie unter REST-API die Option Entwickeln aus. Wenn das Popup-Fenster Beispiel-API erstellen angezeigt wird, wählen Sie OK.

3.    Wählen Sie für Einen API-Typ wählen im REST-API-Bereich die Option Entwickeln aus.

4.    Wählen Sie unter Neue API erstellen die Option Neue API aus.

5.    Führen Sie die folgenden Schritte in Settings (Einstellungen) aus:
Geben Sie für API-Name einen Namen ein, der den Zweck Ihrer API beschreibt. Beispiel: SendtoLambda.
(Optional) Geben Sie für Beschreibung eine kurze Beschreibung des Zwecks Ihrer API ein.
Wählen Sie als Endpunkttyp Regional aus.

6.    Wählen Sie API erstellen aus

Konfigurieren Sie den Integrationspunkt und die Text-Mapping-Vorlage Ihrer API

1.    Wählen Sie in der API-Gateway-Konsole den Namen der API aus, die Sie im vorherigen Schritt erstellt haben. Die Ressourcenseite Ihrer API wird geöffnet.

2.    Wählen Sie auf der Seite Ressourcen die Option Aktionen aus. Wählen Sie dann Ressource erstellen.

3.    Gehen Sie im Bereich Neue untergeordnete Ressource wie folgt vor:
Geben Sie für Ressourcenname einen Namen ein, der die Ressource beschreibt. Beispiel: HeadersResource.
Wählen Sie Ressource erstellen.

4.    Wählen Sie Aktionen aus. Wählen Sie dann Methode erstellen aus.

5.    Wählen Sie aus der Dropdown-Liste unter /headersresource POST aus. Wählen Sie dann das Häkchensymbol.

6.    Gehen Sie auf der Seite /headersresource – POST – Setup wie folgt vor:
Wählen Sie als Integrationstyp Lambda-Funktion.
Wählen Sie für Lambda-Region die AWS-Region aus, die Ihre Funktion hostet.
Geben Sie für Lambda-Funktion den Namen Ihrer Funktion ein.
Wählen Sie Speichern aus. Ein Popup-Fenster Berechtigung zur Lambda-Funktion hinzufügen wird angezeigt.
Wählen Sie im Popup-Fenster OK aus.

7.    Wählen Sie auf der Seite /headersresource - POST - Methodenausführung die Option Integrationsanfrage.

8.    Gehen Sie auf der Seite /headersresource – POST – Integrationsanfrage wie folgt vor:
Erweitern Sie Mapping-Vorlagen.
Wählen Sie für Anforderungstext-Durchleitung die Option Wenn keine Vorlagen definiert sind (empfohlen).
Wählen Sie Mapping-Vorlage hinzufügen.
Geben Sie für Inhaltstyp application/json ein. Wählen Sie dann das Häkchensymbol.

9.    Geben Sie im Mapping-Vorlagen-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ählen Sie Speichern aus.

Stellen Sie Ihre API für eine neue Stufe bereit

1.    Befolgen Sie die Anweisungen unter Bereitstellen einer REST-API für eine Stufe. Weitere Informationen finden Sie unter Einrichten einer Stufe mithilfe der API-Gateway-Konsole.

2.    Kopieren Sie im Bereich Stufeneditor die Aufruf-URL in Ihre Zwischenablage.

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

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

Testen der Konfiguration

Führen Sie den folgenden curl-Befehl aus, um zu bestätigen, dass Nachrichten-Header von Ihrer API und Lambda-Funktion verarbeitet werden:

Wichtig: Ersetzen Sie https://restApiId.execute-api.region.amazonaws.com/stageName durch die Aufruf-URL Ihrer API.

curl -H "Content-Type: application/json" -H "header1: API Gateway and AWS Lambda" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/headersresource

Beispiel für eine Befehlsausgabe

"This message header was processed by Amazon API Gateway and AWS Lambda"

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