Verwenden von Amazon API Gateway-Stufenvariablen
Sie können API Gateway-Stufenvariablen verwenden, um auf HTTP- und Lambda-Backends für verschiedene API-Bereitstellungsstufen zuzugreifen. Sie können Stufenvariablen auch verwenden, um stufenbezogene Konfigurationsmetadaten an ein HTTP-Backend als Abfrageparameter und an eine Lambda-Funktion als Nutzlast, die in einer Eingabe-Mapping-Vorlage generiert wurde, zu übergeben.
Voraussetzungen
Sie müssen zwei Stufen mit einer url
-Variable, die auf zwei unterschiedliche HTTP-Endpunkte verweist, erstellen: Die function
-Stufenvariable wird zwei verschiedenen Lambda-Funktionen zugewiesen und die version
-Stufenvariable enthält stufenbezogene Metadaten. Folgen Sie den Anweisungen in Einrichten von Stufenvariablen mit der Amazon API Gateway-Konsole.
Zugreifen auf einen HTTP-Endpunkt über eine API mit einer Stufenvariable
-
Wählen Sie im Navigationsbereich Stages beta. Wählen Sie in beta Stage Editor den Link Invoke URL. Hierdurch wird die beta-Stufen-Anforderung
GET
für die Stammressource der API gestartet.Anmerkung Der Link Invoke URL verweist auf die Stammressource der API auf der beta-Stufe. Durch die Navigation zur URL durch Auswahl des Links wird die beta-Stufen-Methode
GET
für die Stammressource aufgerufen. Wenn Methoden für untergeordnete Ressourcen und nicht für die Stammressource selbst definiert sind, erhalten Sie bei Auswahl des Links Invoke URL die Fehlermeldung{"message":"Missing Authentication Token"}
. In diesem Fall müssen Sie dem Link Invoke URL den Namen einer spezifischen untergeordneten Ressource anfügen. -
Im Folgenden wird die Antwort angezeigt, die Sie von der beta-Stufen-Anforderung
GET
erhalten. Sie können das Ergebnis auch überprüfen, indem Sie in einem Browser zu http://httpbin.org/get navigieren. Dieser Wert wurde derurl
-Variablen in der beta-Stufe zugewiesen. Die beiden Antworten sind identisch. -
Wählen Sie im Navigationsbereich Stages die Stufe prod. Wählen Sie in prod Stage Editor den Link Invoke URL. Hierdurch wird die prod-Stufen-Anforderung
GET
für die Stammressource der API gestartet. -
Im Folgenden wird die Antwort angezeigt, die Sie von der prod-Stufen-Anforderung
GET
erhalten. Sie können das Ergebnis auch überprüfen, indem Sie in einem Browser zu http://petstore-demo-endpoint-execute-api.com/petstore/pets navigieren. Dieser Wert wurde derurl
-Variablen in der prod-Stufe zugewiesen. Die beiden Antworten sind identisch.
Übergeben von stufenbezogenen Metadaten an ein HTTP-Backend über eine Stufenvariable in einem Abfrageparameterausdruck
In diesem Verfahren wird beschrieben, wie stufenbezogene Metadaten mittels eines Stufenvariablenwerts in einem Abfrageparameterausdruck an ein HTTP-Backend übergeben werden. Sie verwenden die Stufenvariable version
, die in Einrichten von Stufenvariablen mit der Amazon API Gateway-Konsole deklariert wurde.
-
Wählen Sie im Navigationsbereich Resource die Methode GET. Um der URL der Methode einen Abfragezeichenfolge-Parameter hinzuzufügen, wählen Sie in Method Execution Method Request. Geben Sie
version
für den Parameternamen ein. -
Wählen Sie in Method Execution Integration Request. Bearbeiten Sie den Wert für Endpoint URL, um dem zuvor definierten URL-Wert
anzufügen, was in diesem Fall auch mit der Stufenvariable?version=${stageVariables.version}
url
ausgedrückt wird. Wählen Sie Deploy API, um diese Änderungen bereitzustellen. -
Wählen Sie im Navigationsbereich Stages die Stufe beta. Überprüfen Sie in beta Stage Editor, ob die aktuelle Stufe der aktuellen Bereitstellung entspricht, und wählen Sie anschließend den Link Invoke URL.
Anmerkung Sie verwenden hier die beta-Stufe, da der HTTP-Endpunkt (von der
url
-Variable mit "http://httpbin.org/get" angegeben) Abfrageparameterausdrücke annimmt und diese in der Antwort alsargs
-Objekt zurückgibt. -
Die Antwort wird nachstehend angezeigt. Beachten Sie, dass
v-beta
(zugeordnet zurversion
-Stufenvariable) alsversion
-Argument an das Backend übergeben wird.
Aufrufen einer Lambda-Funktion über eine API mit einer Stufenvariable
In diesem Verfahren wird beschrieben, wie Sie eine Stufenvariable verwenden, um eine Lambda-Funktion als Backend der API aufzurufen. Sie verwenden die zuvor deklarierte function
-Stufenvariable. Weitere Informationen finden Sie unter Einrichten von Stufenvariablen mit der Amazon API Gateway-Konsole.
-
Erstellen Sie im Bereich Resources die untergeordnete Ressource /lambdasv1 im Stammverzeichnis und anschließend eine
GET
-Methode für die untergeordnete Ressource. Legen Sie den Integrationstyp auf Lambda-Funktion fest und geben Sie in Lambda-Funktion${stageVariables.function}
ein. Wählen Sie Save (Speichern) aus.Tipp Wenn die Aufforderung Add Permission to Lambda Function (Der Lambda-Funktion eine Berechtigung hinzufügen) angezeigt wird, notieren Sie den AWS CLI-Befehl, bevor Sie OK auswählen. Sie müssen den Befehl für jede Lambda-Funktion ausführen, die der
function
-Stufenvariable zugewiesen ist oder dieser zugewiesen werden soll, und zwar für jede neu erstellte API-Methode. Beispielsweise müssen Sie den folgenden$stageVariables.function
-Befehl ausführen, wennHelloWorld
den Wert AWS CLI hat und Sie noch keine Berechtigung für diese Funktion hinzugefügt haben:aws lambda add-permission --function-name arn:aws:lambda:us-east-1:
account-id
:function:HelloWorld --source-arn arn:aws:execute-api:us-east-1:account-id
:api-id
/*/GET/lambdasv1 --principal apigateway.amazonaws.com --statement-idstatement-id-guid
--action lambda:InvokeFunctionFalls das nicht geschieht, führt der Aufruf der Methode zur Fehlermeldung
500 Internal Server Error
. Achten Sie darauf,${stageVariables.function}
durch den Lambda-Funktionsnamen zu ersetzen, der dieser Stufenvariable zugeordnet ist. -
Stellen Sie die API für die verfügbaren Stufen bereit.
-
Wählen Sie im Navigationsbereich Stages die Stufe beta. Überprüfen Sie, ob in beta Stage Editor die aktuelle Bereitstellung vorliegt. Kopieren Sie den Link Invoke URL, fügen Sie ihn in die Adresszeile Ihres Browsers ein und fügen Sie dieser URL
an. Hierdurch wird die zugrunde liegende Lambda-Funktion über die Methode/lambdasv1
GET
für die untergeordnete Ressource LambdaSv1 der API aufgerufen.Anmerkung Ihre
HelloWorld
-Lambda-Funktion implementiert folgenden Code.export const handler = function(event, context, callback) { if (event.version) callback(null, 'Hello, World! (' + event.version + ')' ); else callback(null, "Hello, world! (v-unknown)"); };
Diese Implementierung führt zu folgender Antwort.
"Hello, world! (v-unknown)"
Übergeben von stufenbezogenen Metadaten an eine Lambda-Funktion über eine Stufenvariable
In diesem Verfahren wird beschrieben, wie stufenbezogene Konfigurationsmetadaten mittels einer Stufenvariable an eine Lambda-Funktion übergeben werden. Sie verwenden eine POST
-Methode und eine Eingabe-Mapping-Vorlage, um Nutzlast mit der zuvor deklarierten version
-Stufenvariable zu generieren.
-
Wählen Sie im Bereich Resources die untergeordnete Ressource /lambdasv1. Erstellen Sie eine
POST
-Methode für die untergeordnete Ressource, legen Sie den Integrationstyp auf Lambda-Funktion fest und geben Sie
in Lambda-Funktion ein. Wählen Sie Save (Speichern) aus.${stageVariables.function}
Tipp Dieser Schritt entspricht der Vorgehensweise beim Erstellen der
GET
-Methode. Weitere Informationen finden Sie unter Aufrufen einer Lambda-Funktion über eine API mit einer Stufenvariable. -
Wählen Sie im Bereich /Method Execution Integration Request. Erweitern Sie im Bereich Integrationsanforderung die Option Mapping-Vorlagen und wählen Sie anschließend Mapping-Vorlage hinzufügen, um dem
application/json
-Inhaltstyp eine Vorlage hinzuzufügen, wie nachfolgend gezeigt.Anmerkung In einer Mapping-Vorlage muss eine Stufenvariable in Anführungszeichen (wie in
"$stageVariables.version"
oder"${stageVariables.version}"
) referenziert werden. An anderen Stellen muss sie ohne Anführungszeichen (wie in ) referenziert werd${stageVariables.function}
). -
Stellen Sie die API für die verfügbaren Stufen bereit.
-
Wählen Sie im Navigationsbereich Stages beta. Überprüfen Sie in beta-Stufen-Editor, ob die aktuelle Stufe über die neueste Bereitstellung verfügt. Kopieren Sie den Link Invoke URL (Aufruf-URL:), fügen Sie diesen in das URL-Eingabefeld eines REST-API-Clients ein, fügen Sie dieser URL
an und senden Sie anschließend eine/lambdasv1
POST
-Anforderung an die zugrunde liegende Lambda-Funktion ab.Anmerkung Sie erhalten die folgende Antwort.
"Hello, world! (v-beta)"