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

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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 Lambda-Nicht-Proxy-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

Das Erstellen von Lambda-Funktionen kann zu Gebühren für Ihr 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 Implementierung dieser GetStartedLambdaIntegration-Lambda-Funktion sieht wie folgt aus:

Node.js
'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 }); };
Python
import json days = { 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'} times = {'morning', 'afternoon', 'evening', 'night', 'day'} def lambda_handler(event, context): print(event) # parse the input for the name, city, time, and day property values try: if event['name']: name = event['name'] except KeyError: name = 'you' try: if event['city']: city = event['city'] except KeyError: city = 'World' try: if event['time'] in times: time = event['time'] else: time = 'day' except KeyError: time = 'day' try: if event['day'] in days: day = event['day'] else: day = '' except KeyError: day = '' # Generate a greeting greeting = 'Good ' + time + ', ' + name + ' of ' + \ city + '.' + ['', ' Happy ' + day + '!'][day != ''] # Log the greeting to CloudWatch print(greeting) # Return a greeting to the caller return {"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 in Amazon, CloudWatch indem sie aufruftconsole.log(...). 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 den 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 Aktionen 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 für Laufzeit die neueste unterstützte Node.js- oder Python-Laufzeit aus.

    3. Erweitern Sie unter Berechtigungen die Option Standardausführungsrolle ändern. Wählen Sie in der Dropdown-Liste Ausführungsrolle die Option Neue Rolle aus AWS -Richtlinienvorlagen erstellen aus.

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

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

    6. 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 die Registerkarte Test aus.

    1. Geben Sie für Event name (Ereignisname) HelloWorldTest ein.

    2. Ersetzen Sie für Ereignis-JSON den Standardcode durch den folgenden Code.

      { "name": "Jonny", "city": "Seattle", "time": "morning", "day": "Wednesday" }
    3. Wählen Sie Test, um die Funktion aufzurufen. Der Abschnitt Execution result: succeeded wird angezeigt. Erweitern Sie Details 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. Es erlaubt den CloudWatch Aufruf der CreateLogGroup für alle CloudWatch Ressourcen Ihres Kontos in der Region, in der die Lambda-Funktion erstellt wird. Diese Richtlinie ermöglicht auch das Erstellen der CloudWatch Streams und das Protokollieren 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:*" ] } ] }

Das andere Richtliniendokument 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 Vertrauensstellung und der Inline-Richtlinie ermöglicht es der Lambda-Funktion, eine console.log() Funktion aufzurufen, um Ereignisse in - CloudWatch Protokollen zu protokollieren.

Wenn Sie die nicht AWS Management Console zum Erstellen der Lambda-Funktion verwendet haben, müssen Sie diese Beispiele befolgen, um die erforderliche IAM-Rolle und die Richtlinien zu erstellen und die Rolle dann manuell an Ihre 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.

Eine API mit einer Lambda Nicht-Proxy-Integration erstellen
  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 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.

  3. Geben Sie in API name (API-Name) LambdaNonProxyAPI ein.

  4. (Optional) Geben Sie unter Description (Beschreibung) eine Beschreibung ein.

  5. Lassen Sie die Einstellung für API-Endpunkttyp bei Regional.

  6. Wählen Sie Create API (API erstellen) aus.

Nachdem Sie eine API erstellt haben, können Sie nun eine /{city}-Ressource erstellen. Dies ist ein Beispiel für eine Ressource mit einer Pfadvariablen, die Eingaben vom Client annimmt. In einem späteren Schritt werden Sie diese Pfadvariable der Lambda-Funktionseingabe mittels einer Zuordnungsvorlage zuweisen.

Erstellen Sie eine Ressource
  1. Wählen Sie Create Resource (Ressource erstellen) aus.

  2. Die Proxy-Ressource bleibt ausgeschaltet.

  3. Ressourcenpfad wird als / beibehalten.

  4. Geben Sie für Resource name (Ressourcenname) {city} ein.

  5. CORS (Cross Origin Resource Sharing) bleibt ausgeschaltet.

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

Nachdem Sie eine /{city}-Ressource erstellt haben, können Sie nun eine ANY-Methode erstellen. 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.

Erstellen einer ANY-Methode
  1. Wählen Sie die /{city}-Ressource aus und klicken Sie dann auf Methode erstellen.

  2. Wählen Sie als Methodentyp die Option BELIEBIG aus.

  3. Wählen Sie für den Integration type (Integrationstyp) die Option Lambda function (Lambda-Funktion) aus.

  4. Lassen Sie Lambda proxy integration (Lambda-Proxyintegration) deaktiviert.

  5. Wählen Sie für Lambda-Funktion die aus, AWS-Region in der Sie Ihre Lambda-Funktion erstellt haben, und geben Sie dann den Funktionsnamen ein.

  6. Wenn Sie die Standardzeitüberschreitung von 29 Sekunden verwenden möchten, lassen Sie das Kontrollkästchen Default timeout (Standardzeitüberschreitung) aktiviert. Wenn Sie einen benutzerdefinierten Zeitüberschreitungswert festlegen möchten, wählen Sie Default timeout (Standardzeitüberschreitung) aus und geben Sie einen Zeitüberschreitungswert zwischen 50 und 29000 Millisekunden ein.

  7. Wählen Sie Methode erstellen aus.

Nach der Erstellung Ihrer ANY-Methode aktivieren Sie einen Anforderungs-Validator für eine URL-Pfadvariable, eine Abfragezeichenfolge sowie einen Header, um sicherzugehen, dass alle erforderlichen Daten korrekt definiert und vorgegeben wurden. Für dieses Beispiel erstellen Sie einen time-Abfragezeichenfolgenparameter und einen day-Header.

Aktivieren eines Anforderungsvalidierers
  1. Wählen Sie auf der Registerkarte Methodenanfrage unter Methodenanfrage-Einstellungen die Option Bearbeiten aus.

  2. Wählen Sie für Anforderungs-Validierer die Option Abfragezeichenfolgeparameter und -Header validieren aus.

  3. Wählen Sie URL query string parameters (URL-Abfragezeichenfolgen-Parameter) und gehen Sie wie folgt vor:

    1. Wählen Sie Abfragezeichenfolge hinzufügen aus.

    2. Geben Sie unter Name time ein.

    3. Aktivieren Sie die Option Erforderlich.

    4. Caching bleibt ausgeschaltet.

  4. Klicken Sie auf HTTP-Anforderungs-Header und gehen Sie dann wie folgt vor:

    1. Wählen Sie Add header.

    2. Geben Sie unter Name day ein.

    3. Aktivieren Sie die Option Erforderlich.

    4. Caching bleibt ausgeschaltet.

  5. Wählen Sie Speichern.

Nachdem Sie einen Anforderungs-Validator aktiviert haben, konfigurieren Sie die Integrationsanforderung für die ANY-Methode, indem Sie eine Textzuordnungsvorlage hinzufügen, um die eingehende Anfrage in eine JSON-Nutzlast umzuwandeln, wie es die Backend-Lambda-Funktion erfordert.

Konfigurieren der Integrationsanforderung
  1. Wählen Sie auf der Registerkarte Integrationsanforderung unter den Einstellungen für Integrationsanfragen die Option Bearbeiten aus.

  2. Wählen Sie für Anforderungstext-Pass-Through die Option Wenn keine Vorlagen definiert sind (empfohlen) aus.

  3. Wählen Sie Zuordnungsvorlagen aus.

  4. Wählen Sie Add mapping template.

  5. Geben Sie für Content type (Inhaltstyp) application/json ein.

  6. Geben Sie für Vorlagentext den folgenden Code ein:

    #set($inputRoot = $input.path('$')) { "city": "$input.params('city')", "time": "$input.params('time')", "day": "$input.params('day')", "name": "$inputRoot.callerName" }
  7. 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 testen Sie die ANY-Methode
  1. Wählen Sie die Registerkarte Test. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.

  2. Wählen Sie als Methodentyp die Option POST aus.

  3. Geben Sie für Pfad unter Stadt den Wert Seattle ein.

  4. Für Abfrage-Zeichenketten geben Sie time=morning ein.

  5. Für Headers geben Sie den Wert day:Wednesday ein.

  6. Geben Sie für Anforderungstext { "callerName": "John" } ein

  7. Wählen Sie Test aus.

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

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

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. Klicken Sie auf Deploy API.

  2. Wählen Sie für Stufe die Option Neue Stufe aus.

  3. Geben Sie für Stage name (Stufenname) test ein.

    Anmerkung

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

  4. (Optional) Geben Sie unter Description (Beschreibung) eine Beschreibung ein.

  5. Wählen Sie Bereitstellen.

Wählen Sie unter Stufendetails das Kopiersymbol aus, um die Aufruf-URL Ihrer API zu kopieren. 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 an AWS Management Console 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 API GatewayLambdaExecRole, Rollenaktionen und dann Rolle löschen aus. 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 API GatewayLambdaExecPolicy, Richtlinienaktionen und dann Löschen aus. Wählen Sie bei Aufforderung Löschen.