Tutorial: API Gateway REST-API mit Lambda Nicht-Proxy-Integration erstellen - Amazon API Gateway

Tutorial: API Gateway REST-API mit Lambda Nicht-Proxy-Integration erstellen

In dieser exemplarischen Vorgehensweise verwenden wir die API Gateway-Konsole zur Erstellung einer API, die es einem Client ermöglicht, Lambda-Funktionen über die Lambda Nicht-Proxy-Integration (auch als benutzerdefinierte Integration bekannt) aufzurufen. Weitere Informationen zu AWS Lambda und Lambda-Funktionen finden Sie im AWS Lambda-Entwicklerhandbuch.

Um das Lernen zu erleichtern, haben wir eine einfache Lambda-Funktion mit minimaler API-Einrichtung ausgewählt, um Sie durch die Schritte zur Erstellung einer API Gateway-API mit der benutzerdefinierten Lambda-Integration zu führen. Bei Bedarf werden wir Teile der Logik beschreiben. Ein ausführlicheres Beispiel für die benutzerdefinierte Lambda-Integration finden Sie unter Tutorial: Erstellen einer Calc-REST-API mit zwei AWS-Service Integrationen und einer Nicht-Proxy-Lambda-Integration.

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

Lambda-Funktion für die Nicht-Proxy-Integration von Lambda erstellen

Anmerkung

Die Erstellung von Lambda-Funktionen kann zu Kosten in Ihrem AWS-Konto führen.

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

Die Node.js-Implementierung dieser GetStartedLambdaIntegration Lambda-Funktion sieht wie folgt aus:

'use strict'; var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; var times = ['morning', 'afternoon', 'evening', 'night', 'day']; console.log('Loading function'); export const 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 }); };

Für die benutzerdefinierte Lambda-Integration übergibt API Gateway die Eingabe an die Lambda-Funktion vom Client als Integrationsanforderungsdaten. Das event-Objekt des Lambda-Funktionshandlers ist die Eingabe.

Unsere Lambda-Funktion ist einfach. 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 angenommen, dass die Eingabe an die Lambda-Funktion das folgenden JSON-Objekt ist:

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

Weitere Informationen finden Sie im AWS Lambda-Entwicklerhandbuch.

Darüber hinaus protokolliert die Funktion ihre Ausführung über den Aufruf von console.log(...) bei Amazon CloudWatch. Dies ist hilfreich, wenn Sie die Funktionsaufrufe zum Debuggen nachverfolgen möchten. Damit die GetStartedLambdaIntegration-Funktion den Aufruf protokollieren kann, legen Sie eine IAM-Rolle mit entsprechenden Richtlinien für die Lambda-Funktion fest, um die CloudWatch-Streams zu erstellen und Protokolleinträge zu den Streams hinzuzufügen. Die Lambda-Konsole führt Sie durch die Erstellung der erforderlichen IAM-Rollen und Richtlinien.

Wenn Sie die API einrichten, ohne die API Gateway-Konsole zu verwenden, wie z. B. beim Import einer API aus einer OpenAPI-Datei, müssen Sie, falls erforderlich, explizit eine Aufrufrolle und Richtlinien für API Gateway erstellen und einrichten, um die Lambda-Funktionen aufzurufen. Weitere Informationen über das Einrichten 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 GetStartedLambdaProxyIntegration, der Lambda-Proxy-Integration, nimmt die GetStartedLambdaIntegration Lambda-Funktion für die benutzerdefinierte Lambda-Integration nur Eingaben aus den API Gateway API-Integrationsanforderungsdaten 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 Lambda-Proxy-Integration kann dagegen die Eingabe von beliebigen Anfragedaten entgegennehmen, muss aber ein bestimmtes JSON-Objekt zurückgeben. Die GetStartedLambdaIntegration-Funktion für die benutzerdefinierte Lambda-Integration kann API-Anfrageparameter als Eingabe nutzen, sofern API Gateway die erforderlichen API-Anfrageparameter vor dem Weiterleiten der Anfrage an das Backend zum Anfragetext zuordnet. Hierzu muss der API-Entwickler beim Erstellen der API eine Mapping-Vorlage 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 Integration von Lambda
  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 (Jetzt beginnen) und dann Create function (Funktion erstellen) aus.

    • Wenn die Listenseite Lambda > Functions (Lambda > Funktionen) angezeigt wird, wählen Sie Create function (Funktion erstellen).

  3. Wählen Sie Author from scratch aus.

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

    1. Geben Sie für Name GetStartedLambdaIntegration als Namen der Lambda-Funktion ein.

    2. Wählen Sie unter Ausführungsrolle die Option Neue Rolle aus AWS-Richtlinienvorlagen erstellen aus.

    3. Geben Sie unter Role name (Rollenname) einen Namen für die Rolle ein (z. B. GetStartedLambdaIntegrationRole).

    4. Wählen Sie für Policy templates (Richtlinienvorlagen) die Option Simple microservice permissions (Einfache Microservice-Berechtigungen).

    5. Wählen Sie Create function (Funktion erstellen).

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

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

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

    3. Wählen Sie Deploy (Bereitstellen) 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 Create new event (Neues Ereignis erstellen) alle Standard-Codeanweisungen durch Folgendes, geben Sie HelloWorldTest als Ereignisnamen ein und wählen Sie Create (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 Logs 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 legt die grundlegenden Berechtigungen für die Ausführung von Lambda fest. Sie erlaubt den Aufruf von CloudWatch CreateLogGroup für alle CloudWatch-Ressourcen Ihres Kontos in der Region, in der die Lambda-Funktion erstellt wird. Diese Richtlinie erlaubt außerdem die Erstellung der CloudWatch-Streams und die Protokollierung von Ereignissen für die HelloWorldForLambdaIntegration Lambda-Funktion.

{ "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 aus dieser Vertrauensbeziehung und der Inline-Richtlinie ermöglicht es der Lambda-Funktion, eine console.log()-Funktion aufzurufen, um Ereignisse in CloudWatch Logs zu protokollieren.

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.

API mit Lambda Nicht-Proxy-Integration erstellen

Wenn die Lambda-Funktion (GetStartedLambdaIntegration) erstellt und getestet ist, können Sie die Funktion über eine API Gateway-API zur Verfügung stellen. Zur Veranschaulichung stellen wir die Lambda-Funktion mit einer generischen HTTP-Methode bereit. Wir verwenden den Anforderungstext, eine URL-Pfadvariable, eine Abfragezeichenfolge und einen Header für den Empfang der erforderlichen Eingabedaten vom Client. Wir schalten den API Gateway-Anfragevalidierer für die API ein, um sicherzustellen, dass alle erforderlichen Daten korrekt definiert und spezifiziert sind. Wir konfigurieren eine Zuordnungsvorlage für API Gateway, um die vom Kunden bereitgestellten Anfragedaten in das Format zu transformieren, das von der Backend-Lambda-Funktion benötigt wird.

So erstellen Sie eine API mit benutzerdefinierter Lambda-Integration mit einer Lambda-Funktion:
  1. Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway an.

  2. Wenn Sie API Gateway zum ersten Mal verwenden, sehen Sie eine Seite, die Sie mit den Funktionen des Service vertraut macht. Wählen Sie unter REST-API die Option Build (Erstellen) aus. Wenn das Popup-Fenster Create Exampe API (Beispiel-API erstellen) angezeigt wird, klicken Sie auf OK.

    Wenn Sie API Gateway nicht zum ersten Mal verwenden, wählen Sie Create API (API erstellen). Wählen Sie unter REST-API die Option Build (Erstellen) aus.

    1. Klicken Sie auf New API (Neue API).

    2. Geben Sie in API Name (API-Name) einen Namen ein.

    3. Geben Sie optional in das Feld Description (Beschreibung) eine kurze Beschreibung ein.

    4. Wählen Sie Create API (API erstellen) 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 Mapping-Vorlage zuweisen.

    3. Wählen Sie die Option Enable API Gateway Cors (API Gateway-Cors aktivieren).

    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. Dieses Beispiel zeigt, dass die ANY-Methode sowohl für die benutzerdefinierte Integration von Lambda als auch für die Integration von Lambda-Proxys 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, in der Sie die Lambda-Funktion erstellt haben, z. B, us-west-2.

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

    5. Lassen Sie den Kasten Use Default timeout aktiviert.

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

    7. Wählen Sie im Popup-Fenster Add Permission to Lambda Function (Berechtigung zu Lambda-Funktion hinzufügen) OK aus, damit API Gateway die zum Aufrufen der integrierten Lambda-Funktion erforderlichen Zugriffsberechtigungen für die API einrichtet.

  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. Sie können die Warnmeldung über einen Anforderungsvalidator ignorieren. 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. Sie können die Warnmeldung über einen Anforderungsvalidator ignorieren. 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. Um ein Modell zu definieren, wählen Sie Models (Modelle) unter der API im primären Navigationsbereich von API Gateway aus. Wählen Sie dann Create (Erstellen).

      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": "GetStartedLambdaIntegrationUserInput", "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 GetStartedLambdaIntegrationUserInput 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-Anfrageparameter 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 angezeigten Popup-Fenster wählen Sie Yes, secure this integration (Ja, diese Integration schützen) aus.

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

    4. Wählen Sie in Generate template GetStartedLambdaIntegrationUserInput aus, um eine erste Mapping-Vorlage 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 (Speichern) aus.

Testaufruf der API-Methode

Die API Gateway-Konsole bietet Ihnen eine Testmöglichkeit, mit der Sie den Aufruf der API testen können, bevor sie bereitgestellt wird. 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 außerdem die Protokolle anzeigen, um zu untersuchen, wie API Gateway die Anfrage 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 Mapping-Vorlage 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) aus. 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.

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 abzuschließen, löschen Sie weder die Lambda-Ausführungsrolle noch die Lambda-Aufruf-Rolle. 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 erneut verwenden möchten, müssen Sie die Funktion neu erstellen.

Wenn Sie eine IAM-Ressource löschen, auf die eine Lambda-Funktion angewiesen ist, funktioniert diese Lambda-Funktion nicht mehr, und alle APIs, die auf dieser Funktion beruhen, funktionieren 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.

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

  2. Wählen Sie aus der Liste der Funktionen GetHelloWorld, wählen Sie Actions (Aktionen) und wählen Sie dann Delete function (Funktion löschen). Wählen Sie bei Aufforderung erneut Löschen aus.

  3. Wählen Sie aus der Liste der Funktionen HelloMitName, wählen Sie Actions (Aktionen) und wählen Sie dann Delete function (Funktion löschen). 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 aus der Liste der Rollen APIGatewayLambdaExecRole, wählen Sie Role Actions (Rollenaktionen) und wählen Sie dann Delete role (Rolle löschen). Wählen Sie bei Aufforderung Yes, Delete.

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

  5. Wählen Sie aus der Liste der Richtlinien APIGatewayLambdaExecPolicy, wählen Sie Policy actions (Richtlinienaktionen) und wählen Sie dann Delete (Löschen). Wählen Sie bei Aufforderung Löschen.