Ich möchte eine API ohne Verwendung eines Servers erstellen. Stellen Sie sicher, dass die Anforderung von der EC2-Instanz an die von API Gateway erstellte REST-API gesendet und zurückgegeben wird.
Erstellen wir eine REST-API mit Amazon API Gateway und Lambda.
[1. Lambda-Funktion erstellen](# 1-Lambda% E9% 96% A2% E6% 95% B0% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99 % E3% 82% 8B) [2. REST-API mit API-Gateway erstellen](# 2-API-Gateway% E3% 81% A7rest-API% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99% E3% 82% 8B) [3. REST-API bereitstellen](# 3-rest-api% E3% 82% 92% E3% 83% 87% E3% 83% 97% E3% 83% AD% E3% 82% A4% E3% 81 % 99% E3% 82% 8B) [4. Erstellen Sie eine zweite Lambda-Funktion](# 4-2% E7% 95% AA% E7% 9B% AE% E3% 81% AElambda% E9% 96% A2% E6% 95% B0% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99% E3% 82% 8B) [5. Ressourcen, Methoden und Parameter zur REST-API mit API-Gateway hinzufügen](# 5-API-Gateway% E3% 81% A7rest-API% E3% 81% AB% E3% 83% AA% E3% 82% BD% E3% 83% BC% E3% 82% B9% E3% 83% A1% E3% 82% BD% E3% 83% 83% E3% 83% 89% E3% 83% 91% E3% 83% A9% E3% 83% A1% E3% 83% BC% E3% 82% BF% E3% 82% 92% E8% BF% BD% E5% 8A% A0% E3% 81% 99% E3% 82% 8B)
Referenz: https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-getting-started-with-rest-apis.html
Wenn Sie das API-Gateway erstellen, müssen Sie die Lambda-Funktion angeben. Erstellen Sie daher zuerst die Lambda-Funktion.
Wählen Sie im Lambda-Konsolenbildschirm "Funktion" -> "Funktion erstellen". Wählen Sie auf dem Funktionserstellungsbildschirm "Von Grund auf neu erstellen".
Funktionsname: my-function Laufzeit: Python 3.7 Und drücken Sie "Funktion erstellen".
Wenn die Meldung "Die Funktion my-function wurde erfolgreich erstellt" angezeigt wird, ist die Funktionserstellung abgeschlossen.
Die erstellte Funktion gibt übrigens standardmäßig "Hallo von Lambda!" Zurück.
Klicken Sie im Bildschirm der API-Gateway-Konsole auf "API erstellen". Da dies eine Überprüfung ist, wählen Sie "Build" in "REST API Private".
Ein Popup wird angezeigt. Wählen Sie daher OK.
Stellen Sie wie in der Abbildung unten gezeigt ein. Klicken Sie nach Abschluss der Auswahl und Eingabe auf "API erstellen".
Wenn Sie fertig sind, wird nur "/" angezeigt. Dieses "/" ist die Ressource auf Stammebene und entspricht der URL des API-Basispfads.
Fügen Sie als Nächstes eine Methode hinzu. Wählen Sie Aktionen> Methode erstellen.
Wählen Sie "GET" und drücken Sie das Häkchen.
Dann erscheint der GET-Setup-Bildschirm. Geben Sie die erforderlichen Informationen ein und klicken Sie auf "Speichern".
Der eingestellte Inhalt wird angezeigt. Weitere Informationen zu den einzelnen Elementen finden Sie unter Official .
Das Erstellen der REST-API ist jetzt abgeschlossen.
Um es tatsächlich verwenden zu können, müssen Sie die von Ihnen erstellte REST-API bereitstellen.
Wählen Sie für die von Ihnen erstellte REST-API Aktionen> API bereitstellen aus.
Ein Popup wird angezeigt, wählen Sie also "Neue Bühne" und Setzen Sie den Künstlernamen auf "dev" und drücken Sie "Deploy".
Anschließend wird der Bildschirm des Bühneneditors angezeigt, und Sie können tatsächlich eine Anforderung mit der URL des URL-Aufrufs an die API senden.
Lassen Sie uns tatsächlich eine Anfrage von der EC2-Instanz stellen.
$ curl -X GET 'URL anrufen'
"Hello from Lambda!"
Es ist in Ordnung, wenn die vom eingestellten Lambda zurückgegebene Antwort "Hallo von Lambda!" Zurückgegeben wird.
Als nächstes werden wir auch Muster mit Parametern in GET-Anforderungen ausführen. In der vorherigen API hat Lambda einen festen Wert von "Hallo von Lambda!" Zurückgegeben. Dieses Mal erstellen wir eine API mit Lambda, die die Parameter der empfangenen GET-Anforderung in die Antwort einfügt.
Erstellen Sie die Lambda-Funktion auf die gleiche Weise wie zuvor. Funktionsname: my-function2 Laufzeit: Python 3.7 Rolle ausführen: Wählen Sie die Rolle aus, die Sie gerade unter Vorhandene Rolle verwenden erstellt haben.
Wenn die Erstellung abgeschlossen ist, schreiben Sie den Funktionscode neu.
Fügen Sie die empfangenen Parameter in die Antwort ein.
lambda_function.py
import json
def lambda_handler(event, context):
myParam = event['myParam']
return {
'statusCode': 200,
'body': json.dumps(myParam)
}
Die Lambda-Einstellungen sind abgeschlossen.
Wir werden Ressourcen mit API Gateway erstellen.
"Aktion" -> "Ressource erstellen"
Ressourcenname: Meine Ressource → "Ressource erstellen"
Als nächstes erstellen wir eine Methode. Wählen Sie bei ausgewählter Ressource "Aktion" -> "Methode erstellen".
Wählen Sie "GET" und bestätigen Sie mit der Check-Taste.
Der GET-Setup-Bildschirm für meine Ressource wird angezeigt. Wählen Sie daher die zuvor für die Lambda-Funktion erstellte "my-function2" aus und speichern Sie sie.
Ein Popup zum Hinzufügen von Berechtigungen wird angezeigt. Klicken Sie daher auf "OK".
Wählen Sie im Bildschirm zur Methodenausführung die Option "Integrationsanforderung".
Da sich unten eine Einstellung für die Zuordnungsvorlage befindet, Body Pass-Through anfordern: Wenn keine Vorlage definiert ist (empfohlen) Content-Type:application/json Angegeben.
Geben Sie die Vorlage ein und speichern Sie sie.
Vorlage
{
"myParam": "$input.params('myParam')"
}
Jetzt kann das Element "myParam" des Anforderungsparameters durch das Ereignis ['myParam'] auf der Lambda-Funktionsseite abgerufen werden.
lambda_function.py
import json
def lambda_handler(event, context):
myParam = event['myParam'] #← hier
return {
'statusCode': 200,
'body': json.dumps(myParam)
}
Damit sind die Einstellungen auf der API-Seite abgeschlossen. Lassen Sie uns sie also wie zuvor bereitstellen und ausführen.
Fügen Sie dem Parameter "my-resource? MyParam = Hello% 20from% 20API% 20Gateway!" Hinzu und stellen Sie eine Anfrage.
$ curl -X GET 'https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/my-resource?myParam=Hello%20from%20API%20Gateway!'
{"statusCode": 200, "body": "\"Hello from API Gateway!\""}
Ich konnte bestätigen, dass das dem Anforderungsparameter zugewiesene "Hallo vom API-Gateway!" Als Text antwortet.
Dieses Mal haben wir es mit den minimal erforderlichen Einstellungen implementiert, sodass bei der Einführung anscheinend mehr Forschung erforderlich sein wird, aber ich denke, wir haben das gesamte Bild von API Gateway + Lambda als serverlos verstanden.