Amazon API Gateway
Entwicklerhandbuch

TUTORIAL: Erstellen einer API Gateway-API mit Lambda-Nicht-Proxy-Integration

In dieser schrittweisen Anleitung verwenden wir die API Gateway-Konsole, um eine API zu erstellen, mit der ein Client Lambda-Funktionen über die Lambda-Nicht-Proxy-Integration (auch als benutzerdefinierte Integration bezeichnet) aufrufen kann. Weitere Informationen über AWS Lambda und Lambda-Funktionen finden Sie im AWS Lambda Developer Guide.

Zum einfacheren Lernen haben wir eine einfache Lambda-Funktion mit minimaler API-Einrichtung gewählt. Diese führt Sie schrittweise durch die Erstellung einer API Gateway-API mit der benutzerdefinierten Lambda-Integration. Bei Bedarf werden wir Teile der Logik beschreiben. Ein detailliertes Beispiel zur benutzerdefinierten Lambda-Integration finden Sie unter TUTORIAL: Erstellen einer Calc-REST-API mit zwei AWS-Service-Integrationen und einer Lambda-Nicht-Proxy-Integration.

Bevor Sie die API erstellen, richten Sie die Lambda Backend-Funktion ein, indem Sie wie unten beschrieben eine Lambda-Funktion in AWS Lambda einrichten.

Erstellen einer Lambda-Funktion für die Lambda-Nicht-Proxy-Integration

Anmerkung

Für das Erstellen von Lambda-Funktionen können in Ihrem AWS-Konto Gebühren anfallen.

In diesem Schritt erstellen Sie eine Lambda-Funktion wie "Hello, World!" für die benutzerdefinierte Lambda-Integration. In dieser schrittweisen Anleitung heißt die Funktion GetStartedLambdaIntegration.

Die Node.js-Implementierung dieser GetStartedLambdaIntegration Lambda-Funktion sieht folgendermaßen aus:

'use strict'; var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; var times = ['morning', 'afternoon', 'evening', 'night', 'day']; console.log('Loading function'); exports.handler = function(event, context, callback) { // Parse the input for the name, city, time and day property values let name = event.name === undefined ? 'you' : event.name; let city = event.city === undefined ? 'World' : event.city; let time = times.indexOf(event.time)<0 ? 'day' : event.time; let day = days.indexOf(event.day)<0 ? null : event.day; // Generate a greeting let greeting = 'Good ' + time + ', ' + name + ' of ' + city + '. '; if (day) greeting += 'Happy ' + day + '!'; // Log the greeting to CloudWatch console.log('Hello: ', greeting); // Return a greeting to the caller callback(null, { "greeting": greeting }); };

Bei der benutzerdefinierten Lambda-Integration übergibt API Gateway die Eingabe des Clients als Integrations-Anforderungstextkörper an die Lambda-Funktion. Das event-Objekt des Handlers der Lambda-Funktion ist die Eingabe.

Unsere Lambda-Funktion ist einfach aufgebaut. Sie analysiert das event-Objekt mit der Eingabe auf die Eigenschaften name, city, time und day. Sie gibt anschließend ein JSON-Objekt {"message":greeting} an den Aufrufer zurück. Die Nachricht nutzt das "Good [morning|afternoon|day], [name|you] in [city|World]. Happy day!"-Muster. Es wird davon ausgegangen, dass die Eingabe für die Lambda Funktion das folgende JSON-Objekt nutzt:

{ "city": "...", "time": "...", "day": "...", "name" : "..." }

Weitere Informationen hierzu finden Sie im AWS Lambda Developer Guide.

Darüber hinaus protokolliert die Funktion ihren Aufruf in Amazon CloudWatch, indem sie console.log(...) aufruft. Dies ist hilfreich, wenn Sie die Funktionsaufrufe zum Debuggen nachverfolgen möchten. Damit die GetStartedLambdaIntegration-Funktion den Anruf protokollieren kann, legen Sie eine IAM-Rolle mit den entsprechenden Richtlinien für die Lambda-Funktion zum Erstellen der CloudWatch-Streams und zum Hinzufügen von Protokolleinträgen zu den Streams fest. Die Lambda-Konsole führt Sie durch die Erstellung der erforderliche IAM-Rollen und -Richtlinien.

Wenn Sie die API ohne die API Gateway-Konsole einrichten, z. B. beim Importieren einer API aus OpenAPI, müssen Sie, sofern erforderlich, explizit eine Aufrufrolle/-richtlinie für API Gateway erstellen und einrichten, um die Lambda-Funktionen aufzurufen. Weitere Informationen zur Einrichtung von Lambda-Aufruf- und Ausführungsrollen für eine API Gateway-API finden Sie unter Kontrollieren des Zugriffs auf eine API mit IAM-Berechtigungen.

Im Vergleich mit GetStartedLambdaProxyIntegation, der Lambda-Funktion für die Lambda-Proxy-Integration, nimmt die GetStartedLambdaIntegration-Lambda-Funktion für die benutzerdefinierte Lambda-Integration nur die Eingabe aus dem API Gateway-API-Integrations-Anforderungstext entgegen. Die Funktion kann eine Ausgabe als beliebiges JSON-Objekt, als Zeichenfolge, als Boolean oder sogar Binär-Blob zurückgeben. Die Lambda-Funktion für die LambdaProxy-Integration nimmt hingegen jegliche Anforderungsdaten als Eingabe entgegen. Sie muss jedoch ein bestimmtes JSON-Objekt ausgeben. Die GetStartedLambdaIntegration-Funktion für die benutzerdefinierte Lambda-Integration kann API-Anforderungsparameter als Eingabe nutzen, sofern API Gateway die erforderlichen API-Anforderungsparameter vor dem Weiterleiten der Anforderung an das Backend zum Anforderungstext zuordnet. Hierzu muss der API-Entwickler beim Erstellen der API eine Zuweisungsvorlage für die API-Methode erstellen und konfigurieren.

Erstellen Sie jetzt die GetStartedLambdaIntegration Lambda-Funktion.

So erstellen Sie die -GetStartedLambdaIntegration Lambda-Funktion für die benutzerdefinierte Lambda-Integration

  1. Öffnen Sie die AWS Lambda-Konsole unter https://console.aws.amazon.com/lambda/.

  2. Führen Sie eine der folgenden Aufgaben aus:

    • Wenn die Willkommensseite angezeigt wird, wählen Sie Get Started Now und dann Create a function aus.

    • Wenn die Listenseite Lambda> Functions angezeigt wird, wählen Sie Create a function.

  3. Wählen Sie Author from scratch aus.

  4. Verfahren Sie im Bereich Author from scratch wie folgt:

    1. Geben Sie unter Name GetStartedLambdaIntegration für die Funktion Lambda ein.

    2. Wählen Sie unter Runtime (Laufzeit) die Option Node.js 8.10 aus.

    3. Wählen Sie für Role (Rolle) Create new role from template(s) aus.

    4. Geben Sie in Role name (Rollenname) einen Namen für die Rolle ein, z. B. GetStartedLambdaIntegrationRole.

    5. Wählen Sie in Policy templates Simple Microservice permissions.

    6. Wählen Sie Create function.

  5. Legen Sie im Bereich Configuration function (Konfiguration) unter Function code (Funktionscode) die Folgendes fest:

    1. Wählen Sie Edit code inline unter Content entry type, falls dies nicht schon angezeigt wird.

    2. Lassen Sie Handler auf index.handler.

    3. Stellen Sie Runtime (Laufzeit) auf Node.js 8.10 ein.

    4. Kopieren Sie den Code in der Lambda-Funktion am Anfang dieses Abschnitts und fügen Sie ihn in den Inline-Codeeditor ein.

    5. Akzeptieren Sie die Standardwerte für alle anderen Felder in diesem Abschnitt.

    6. Wählen Sie Save aus.

  6. Um die neu erstellte Funktion zu testen, wählen Sie Configure test events von Select a test event....

    1. Ersetzen Sie für Neues Ereignis erstellen alle Standard-Codeanweisungen durch Folgendes, geben Sie HellowWorldTest für das Ereignis Anam ein, und wählen Sie Erstellen.

      { "name": "Jonny", "city": "Seattle", "time": "morning", "day": "Wednesday" }
    2. Wählen Sie Test, um die Funktion aufzurufen. Der Abschnitt Execution result: succeeded wird angezeigt. Erweitern Sie Detail und diese Ausgabe wird angezeigt.

      { "greeting": "Good morning, Jonny of Seattle. Happy Wednesday!" }

      Die Ausgabe wird auch in CloudWatch-Protokolle geschrieben.

Als Zusatzaufgabe können Sie die IAM-Konsole verwenden, um die IAM-Rolle (GetStartedLambdaIntegrationRole) anzuzeigen, die bei der Erstellung der Lambda-Funktion erstellt wurde. An diese IAM-Rolle sind zwei Inline-Richtlinien angehängt. Eine ist für die grundlegenden Berechtigungen für die Lambda-Ausführung. Sie ermöglicht das Aufrufen von CloudWatch CreateLogGroup für alle CloudWatch-Ressourcen Ihres Kontos in der Region, in der die Lambda-Funktion erstellt haben. Diese Richtlinie ermöglicht der HelloWorldForLambdaIntegration-Lambda-Funktion auch die Erstellung der CloudWatch-Streams und -Protokollierungsereignisse.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "arn:aws:logs:region:account-id:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:/aws/lambda/GetStartedLambdaIntegration:*" ] } ] }

Die andere Richtlinie gilt für den Aufruf eines anderen AWS-Services, der in diesem Beispiel nicht verwendet wird. Sie können sie überspringen.

Der IAM-Rolle ist eine vertrauenswürdige Entität zugeordnet. Diese ist lambda.amazonaws.com. Hier ist die Vertrauensstellung:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Die Kombination dieser Vertrauensstellung und der Inline-Richtlinie sorgt dafür, dass die Lambda-Funktion eine console.log()-Funktion aufrufen und Ereignisse in CloudWatch Logs protokollieren kann.

Wenn Sie nicht die AWS Management Console zum Erstellen der Lambda-Funktion verwendet haben, müssen Sie nach diesen Beispielen vorgehen, um die erforderliche IAM-Rolle und die Richtlinien zu erstellen und dann der Rolle manuell Ihrer Funktion anzufügen.

Erstellen einer API mit Lambda-Nicht-Proxy-Integration

Wenn die Lambda-Funktion (GetStartedLambdaIntegration) erstellt und getestet ist, können Sie die Funktion über eine API Gateway-API bereitstellen. Zur Veranschaulichung machen wir die Lambda-Funktion mit einer allgemeinen HTTP-Methode verfügbar. Wir verwenden den Anforderungstext, eine URL-Pfadvariable, eine Abfragezeichenfolge und einen Header für den Empfang der erforderlichen Eingabedaten vom Client. Wir aktivieren den API Gateway Anforderungs-Validator für die API, um sicherzustellen, dass alle erforderlichen Daten ordnungsgemäß definiert und angegeben sind. Wir konfigurieren eine Zuweisungsvorlage für API Gateway, um die vom Client bereitgestellten Anforderungsdaten in das gültige Format für die Lambda-Backend-Funktion umzuwandeln.

So erstellen Sie eine API mit benutzerdefinierter Lambda-Integration mit einer Lambda-Funktion

  1. Starten Sie die API Gateway-Konsole.

  2. Wählen Sie Create new API.

    1. Geben Sie GetStartedLambdaNonProxyIntegration bei API name ein.

    2. Geben Sie eine Beschreibung der API in Description ein oder lassen Sie das Feld leer.

    3. Wählen Sie Create API aus.

  3. Wählen Sie eine Root-Ressource (/) unter Resources aus. Wählen Sie im Menü Actions die Option Create Ressource aus.

    1. Geben Sie city bei Resource Name ein.

    2. Ersetzen Sie Resource Path durch {city}. Dies ist ein Beispiel für die Vorlagenpfadvariablen zum Abrufen der Eingabe vom Client. Später zeigen wir, wie Sie diese Pfadvariable der Lambda-Funktionseingabe mittels einer Zuweisungsvorlage zuweisen.

    3. Wählen Sie die Option EnableAPI Gateway Cors aus.

    4. Wählen Sie Create Resource (Ressource erstellen) aus.

  4. Mit der markierten, neu erstellten /{city}-Ressource wählen Sie Create-Methode in Actions aus.

    1. Wählen Sie ANY im Dropdown-Menü für die HTTP-Methode aus. Das ANY HTTP-Verb ist ein Platzhalter für eine gültige HTTP-Methode, die ein Client zur Laufzeit sendet. In diesem Beispiel wird gezeigt, dass die ANY-Methode zur benutzerdefinierten Lambda-Integration sowie für die Lambda Proxy-Integration verwendet werden kann.

    2. Klicken Sie auf das Häkchen, um die Einstellung zu speichern.

  5. Führen Sie Folgendes in Method Execution für die /{city} ANY-Methode aus:

    1. Wählen Sie Lambda Function für Integration type.

    2. Lassen Sie das Feld Use Lambda Proxy integration deaktiviert.

    3. Wählen Sie die Region aus, in der Sie die Lambda-Funktion erstellt haben (z. B. us-west-2).

    4. Geben Sie den Namen der Lambda-Funktion in Lambda Function ein (z. B. GetStartedLambdaIntegration).

    5. Lassen Sie den Kasten Use Default timeout aktiviert.

    6. Wählen Sie Save aus.

    7. Klicken Sie in Add Permission to Lambda Function auf OK, um API Gateway; die für die API zum Aufrufen der integrierten Lambda-Funktion erforderlichen Berechtigungen einrichten zu lassen.

  6. In diesem Schritt konfigurieren Sie Folgendes:

    • Ein Parameter für Abfragezeichenfolgen (time)

    • Ein Anforderungs-Parameter (day)

    • Eine Nutzlast-Eigenschaft (callerName)

    Zur Laufzeit kann der Client diese Anforderungsparameter und den Anforderungstext nutzen, um die Tageszeit, den Wochentag und den Namen des Aufrufers bereitzustellen. Sie haben die /{city} Pfadvariable bereits konfiguriert.

    1. Wählen Sie im Bereich Method Execution (Methodenausführung) die Option Method Request (Methodenanforderung) aus.

    2. Erweitern Sie den Abschnitt URL Query String Parameters. Wählen Sie Add query string aus. Geben Sie für Name time ein. Wählen Sie die Option Required aus. Zur Bestätigung klicken Sie dann auf das Häkchensymbol. Lassen Sie Caching leer, um unnötige Kosten für diese Übung zu vermeiden.

    3. Erweitern Sie den Abschnitt HTTP Request Headers. Wählen Sie Add header. Geben Sie für Name day ein. Wählen Sie die Option Required aus. Zur Bestätigung klicken Sie dann auf das Häkchensymbol. Lassen Sie Caching leer, um unnötige Kosten für diese Übung zu vermeiden.

    4. Um die Methoden-Anforderungsnnutzlast zu definieren, führen Sie die folgenden Schritte aus:

      1. Zum Definieren eines Modells wählen Sie im primären Navigationsbereich von API Gateway unter der API Models und dann Create aus.

      2. Geben Sie für Model name GetStartedLambdaIntegrationUserInput ein.

      3. Geben Sie für Content-Type application/json ein.

      4. Lassen Sie das Feld Model description leer.

      5. Kopieren Sie die folgende Schemadefinition in den Model schema-Editor:

        { "$schema": "http://json-schema.org/draft-04/schema#", "title": "GetStartedLambdaIntegrationInputModel", "type": "object", "properties": { "callerName": { "type": "string" } } }
      6. Wählen Sie Create model aus, um die Definition des Eingabemodells abzuschließen.

      7. Wählen Sie Resources, wählen Sie die /{city} ANY Methode, wählen Sie Method Request, und erweitern Sie Request body. Wählen Sie Add model aus. Geben Sie für Content-Type application/json ein. Wählen Sie für Model name GetStartedLambdaIntegrationInput aus. Klicken Sie auf das Häkchen-Symbol, um die Einstellung zu speichern.

  7. Wählen Sie die Methode aus und wählen Sie Integrationsanforderung/{city} ANY, um eine Body-Mapping-Vorlage einzurichten. Dadurch wird in diesem Schritt der zuvor konfigurierte Methoden-Anforderungsparameter nameQuery oder nameHeader der JSON-Nutzlast zugeordnet (wird von der Backend-Lambda-Funktion benötigt).

    1. Erweitern Sie den Abschnitt Mapping Templates. Wählen Sie Add mapping template. Geben Sie für Content-Type application/json ein. Klicken Sie auf das Häkchen-Symbol, um die Einstellung zu speichern.

    2. Im Popup-Fenster, das angezeigt wird, wählen Sie Yes, secure this integration.

    3. Aktivieren Sie die empfohlene Option When there are no templates defined für Request body passthrough.

    4. Wählen Sie in Generate template GetStartedLambaIntegrationUserInput aus, um eine erste Zuweisungsvorlage zu generieren. Diese Option ist verfügbar, da Sie ein Modellschema definiert haben. Ohne dieses müssen Sie die Zuordnungsvorlage komplett selbst schreiben.

    5. Ersetzen Sie das generierte Zuordnungsskript im Zuordnungsvorlageneditor durch Folgendes:

      #set($inputRoot = $input.path('$')) { "city": "$input.params('city')", "time": "$input.params('time')", "day": "$input.params('day')", "name": "$inputRoot.callerName" }
    6. Wählen Sie Save aus.

Testaufruf der API-Methode

Die API Gateway-Konsole bietet eine Testfunktion, über die Sie einen Testaufruf der API vor dem Bereitstellen durchführen können. Sie verwenden die Testfunktion der Konsole, um die API über das Senden der folgenden Anforderung zu testen:

POST /Seattle?time=morning day:Wednesday { "callerName": "John" }

In dieser Testanforderung legen Sie ANY auf POSTfest, {city} auf Seattle, weisen Wednesday als day-Header-Wert zu und weisen "John" als callerName-Wert zu.

So führen Sie einen Testaufruf der ANY /{city}-Methode durch

  1. Wählen Sie Test unter Method Execution.

  2. Wählen Sie POST aus der Dropdown-Liste Method aus.

  3. Geben Sie in Path Seattle ein.

  4. In Abfrage-Zeichenketten (Query Strings) geben Sietime=morning ein.

  5. In Header, geben Sie day:Wednesday ein.

  6. Geben Sie { "callerName":"John" } in Request Body ein.

  7. Wählen Sie Test aus.

  8. Überprüfen Sie, ob die zurückgegebene Antwortnutzlast wie folgt lautet:

    { "greeting": "Good morning, John of Seattle. Happy Wednesday!" }
  9. Sie können auch die Protokolle prüfen, um zu sehen, wie API Gateway die Anforderung und Antwort verarbeitet.

    Execution log for request test-request Thu Aug 31 01:07:25 UTC 2017 : Starting execution for request: test-invoke-request Thu Aug 31 01:07:25 UTC 2017 : HTTP Method: POST, Resource Path: /Seattle Thu Aug 31 01:07:25 UTC 2017 : Method request path: {city=Seattle} Thu Aug 31 01:07:25 UTC 2017 : Method request query string: {time=morning} Thu Aug 31 01:07:25 UTC 2017 : Method request headers: {day=Wednesday} Thu Aug 31 01:07:25 UTC 2017 : Method request body before transformations: { "callerName": "John" } Thu Aug 31 01:07:25 UTC 2017 : Request validation succeeded for content type application/json Thu Aug 31 01:07:25 UTC 2017 : Endpoint request URI: https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:GetStartedLambdaIntegration/invocations Thu Aug 31 01:07:25 UTC 2017 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=****************************************************************************************************************************************************************************************************************************************************************************************************************************************338c72, X-Amz-Date=20170831T010725Z, x-amzn-apigateway-api-id=beags1mnid, X-Amz-Source-Arn=arn:aws:execute-api:us-west-2:123456789012:beags1mnid/null/POST/{city}, Accept=application/json, User-Agent=AmazonAPIGateway_beags1mnid, X-Amz-Security-Token=FQoDYXdzELL//////////wEaDMHGzEdEOT/VvGhabiK3AzgKrJw+3zLqJZG4PhOq12K6W21+QotY2rrZyOzqhLoiuRg3CAYNQ2eqgL5D54+63ey9bIdtwHGoyBdq8ecWxJK/YUnT2Rau0L9HCG5p7FC05h3IvwlFfvcidQNXeYvsKJTLXI05/yEnY3ttIAnpNYLOezD9Es8rBfyruHfJfOqextKlsC8DymCcqlGkig8qLKcZ0hWJWVwiPJiFgL7laabXs++ZhCa4hdZo4iqlG729DE4gaV1mJVdoAagIUwLMo+y4NxFDu0r7I0/EO5nYcCrppGVVBYiGk7H4T6sXuhTkbNNqVmXtV3ch5bOlh7 [TRUNCATED] Thu Aug 31 01:07:25 UTC 2017 : Endpoint request body after transformations: { "city": "Seattle", "time": "morning", "day": "Wednesday", "name" : "John" } Thu Aug 31 01:07:25 UTC 2017 : Sending request to https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:GetStartedLambdaIntegration/invocations Thu Aug 31 01:07:25 UTC 2017 : Received response. Integration latency: 328 ms Thu Aug 31 01:07:25 UTC 2017 : Endpoint response body before transformations: {"greeting":"Good morning, John of Seattle. Happy Wednesday!"} Thu Aug 31 01:07:25 UTC 2017 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=c0475a28-8de8-11e7-8d3f-4183da788f0f, Connection=keep-alive, Content-Length=62, Date=Thu, 31 Aug 2017 01:07:25 GMT, X-Amzn-Trace-Id=root=1-59a7614d-373151b01b0713127e646635;sampled=0, Content-Type=application/json} Thu Aug 31 01:07:25 UTC 2017 : Method response body after transformations: {"greeting":"Good morning, John of Seattle. Happy Wednesday!"} Thu Aug 31 01:07:25 UTC 2017 : Method response headers: {X-Amzn-Trace-Id=sampled=0;root=1-59a7614d-373151b01b0713127e646635, Content-Type=application/json} Thu Aug 31 01:07:25 UTC 2017 : Successfully completed execution Thu Aug 31 01:07:25 UTC 2017 : Method completed with status: 200

    Die Protokolle zeigen die eingehende Anforderung vor der Zuordnung und die Integrationsanforderung nach der Zuordnung. Wenn ein Test fehlschlägt, sind die Protokolle nützlich, um zu prüfen, ob die ursprüngliche Eingabe korrekt ist oder ob die Zuweisungsvorlage ordnungsgemäß funktioniert.

Bereitstellen der API

Der Testaufruf ist eine Simulation und hat Einschränkungen. Beispielsweise umgeht er alle Autorisierungsmechanismen für die API. Zum Testen der API-Ausführung in Echtzeit müssen Sie die API bereitstellen. Um eine API bereitzustellen, können Sie einen Snapshot der API erstellen. Der Stufenname definiert den Basispfad entsprechend dem standardmäßigen Hostnamen der API. Die Root-Ressource der API wird nach dem Stufenamen angehängt. Wenn Sie die API ändern, müssen Sie sie erneut für eine neue oder bestehende Stufe bereitstellen, bevor die Änderungen wirksam werden.

So stellen Sie die API für eine Stufe bereit

  1. Wählen Sie im Bereich APIs die API oder wählen Sie im Bereich Resources eine Ressource oder Methode. Wählen Sie Deploy API im Dropdown-Menü Aktionen.

  2. Wählen Sie für Deployment stage New Stage.

  3. Geben Sie unter Stage name einen Namen (z. B. test) ein.

    Anmerkung

    Die Eingabe muss als UTF-8-kodierter (also nicht lokalisierter) Text erfolgen.

  4. Geben Sie eine Beschreibung in Stage description ein oder lassen Sie das Feld leer.

  5. Geben Sie eine Beschreibung in Deployment description ein oder lassen Sie das Feld leer.

  6. Wählen Sie Deploy (Bereitstellen). Nachdem die API erfolgreich bereitgestellt wurde, finden Sie die API-Basis-URL (der Standardhostname plus dem Stufenamen) als Invoke URL oben im Stage Editor wieder. Das allgemeine Muster der Basis-URL lautet https://api-id.region.amazonaws.com/stageName. Wenn beispielsweise die Basis-URL der API (beags1mnid) in der Region us-west-2 erstellt und für die Stufe test bereitgestellt wird, lautet der Name https://beags1mnid.execute-api.us-west-2.amazonaws.com/test.

Testen der API in einer Bereitstellungsstufe

Es gibt mehrere Möglichkeiten zum Testen einer bereitgestellten API. Für GET-Anforderungen mit nur URL-Pfadvariablen oder Parameter für Abfragezeichenfolgen können Sie die API-Ressourcen-URL in einem Browser eingeben. Für andere Methoden müssen Sie erweiterte REST-API-Testtools wie POSTMAN oder cURL verwenden.

So testen Sie die API mithilfe von cURL

  1. Öffnen Sie ein Terminalfenster auf Ihrem lokalen Computer, der mit dem Internet verbunden ist.

  2. So können Sie dies testen POST /Seattle?time=evening:

    Kopieren Sie den folgenden cURL-Befehl und fügen Sie ihn in das Terminalfenster ein.

    curl -v -X POST \ 'https://beags1mnid.execute-api.us-west-2.amazonaws.com/test/Seattle?time=evening' \ -H 'content-type: application/json' \ -H 'day: Thursday' \ -H 'x-amz-docs-region: us-west-2' \ -d '{ "callerName": "John" }'

    Als Ergebnis sollten Sie eine erfolgreiche Antwort mit der folgenden Nutzlast erhalten:

    {"greeting":"Good evening, John of Seattle. Happy Thursday!"}

    Wenn Sie diese Methode POST zu PUT ändern, erhalten Sie dieselbe Antwort.

  3. So können Sie dies testen GET /Boston?time=morning:

    Kopieren Sie den folgenden cURL-Befehl und fügen Sie ihn in das Terminalfenster ein.

    curl -X GET \ 'https://beags1mnid.execute-api.us-west-2.amazonaws.com/test/Boston?time=morning' \ -H 'content-type: application/json' \ -H 'day: Thursday' \ -H 'x-amz-docs-region: us-west-2' \ -d '{ "callerName": "John" }'

    Sie erhalten eine 400 Bad Request-Antwort mit der folgenden Fehlermeldung:

    {"message": "Invalid request body"}

    Der Grund hierfür ist, dass die gesendete GET-Anforderung keine Nutzlast aufnimmt und die Anforderungsvalidierung fehlschlägt.

Bereinigen

Wenn Sie die für diese Anleitung erstellten Lambda-Funktionen nicht mehr benötigen, können Sie diese nun löschen. Sie können auch die zugehörigen IAM-Ressourcen löschen.

Warnung

Wenn Sie vorhaben, die anderen exemplarischen Vorgehensweisen in dieser Reihe durchzuführen, löschen Sie nicht die Lambda-Ausführungsrolle und die Lambda-Aufrufrolle. Wenn Sie eine Lambda-Funktion löschen, die von APIs benötigt wird, funktionieren diese APIs nicht mehr. Das Löschen einer Lambda-Funktion kann nicht rückgängig gemacht werden. Wenn Sie die Lambda-Funktion wieder nutzen möchten, müssen Sie diese Funktion neu erstellen.

Wenn Sie eine IAM-Ressource löschen, die für eine Lambda-Funktion erforderlich ist, funktioniert diese Lambda-Funktion nicht mehr und alle APIs, für die diese Funktion benötigt wird, funktionieren ebenfalls nicht mehr. Das Löschen einer IAM-Ressource kann nicht rückgängig gemacht werden. Wenn Sie die IAM-Ressource wieder nutzen möchten, müssen Sie diese neu erstellen.

Löschen Sie die Lambda-Funktionen wie folgt:

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

  2. Wählen Sie in der Liste der Funktionen GetHelloWorld, Aktionen und anschließend Delete function. Wählen Sie bei Aufforderung erneut Löschen aus.

  3. Wählen Sie in der Liste der Funktionen GetHelloWithName, Aktionen und anschließend Delete function. Wählen Sie bei Aufforderung erneut Löschen aus.

Löschen Sie die zugehörigen IAM-Ressourcen wie folgt:

  1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie in Details Roles.

  3. Wählen Sie in der Liste der Rollen APIGatewayLambdaExecRole, Role Actions und anschließend Delete role. Wählen Sie bei Aufforderung Yes, Delete.

  4. Wählen Sie in Details die Option Policies.

  5. Wählen Sie in der Liste der Richtlinien APIGatewayLambdaExecPolicy, Richtlinien Actions und anschließend Delete . Wählen Sie bei Aufforderung Löschen.

Sie haben jetzt das Ende dieser exemplarischen Vorgehensweise erreicht.