Seien Sie vorsichtig mit Anfragen und Antworten, wenn Sie das Serverless Framework mit Java verwenden

Serverless Framework / Hinweise zur Implementierung in AWS / Java.

API Gateway und Lambda funktionieren nicht mit dem von der Vorlage generierten Code, und er funktioniert nicht! !!

Erstellen Sie beispielsweise ein Projekt mit dem folgenden Befehl.

sls create --template aws-java-maven --path serverless

Anschließend wird die folgende Java-Datei erstellt.

Handler.java


package hello;

import java.io.IOException;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class Handler implements RequestHandler<Request, Response> {

	@Override
	public Response handleRequest(Request input, Context context) {
		return new Response("Go Serverless v1.0! Your function executed successfully!", input);
	}

}

Wenn diese Methode jedoch über API Gateway ausgeführt wird, funktioniert dies nicht. Weil der folgende JSON übergeben wird (teilweise geändert).

{
  "httpMethod" : "POST",
  "requestContext" : {
    "httpMethod" : "POST",
    "accountId" : "*******",
    "apiId" : "*******",
    "resourceId" : "******",
    "identity" : {
      "userAgent" : "Apache-HttpClient\/4.5.x (Java\/1.8.0_112)",
      "userArn" : "arn:aws:iam::******:user\/****",
      "caller" : "***************",
      "cognitoAuthenticationProvider" : null,
      "cognitoIdentityId" : null,
      "accessKey" : "******************",
      "accountId" : "*****************",
      "sourceIp" : "test-invoke-source-ip",
      "apiKey" : "test-invoke-api-key",
      "cognitoAuthenticationType" : null,
      "cognitoIdentityPoolId" : null,
      "user" : "*******************"
    },
    "requestId" : "test-invoke-request",
    "stage" : "test-invoke-stage",
    "resourcePath" : "\/hello"
  },
  "resource" : "\/hello",
  "pathParameters" : null,
  "isBase64Encoded" : false,
  "headers" : null,
  "path" : "\/hello",
  "stageVariables" : null,
  "queryStringParameters" : null,
  "body" : "{\n    \"key1\": \"hoge\",\n    \"key2\": 120\n}"
}

Was ich wirklich will, ist der letzte Eigenschaftsteil `body `.

Dies bedeutet, dass Sie ein Programm schreiben müssen, das dies extrahiert.

Nicht nur die Anfrage, sondern auch die Antwort funktioniert nicht so wie sie ist. Es scheint, dass das Antwortobjekt drei Eigenschaften benötigt: `statusCode```,` headers und `` `body.

~~ Ich werde eine Beispiellösung für diesen Bereich bereitstellen. aws-serverless-java-sample ~~

(Fest am 24. Juni 2018) Das AWS SDK hat eine entsprechende Lösung, daher werde ich es neu schreiben.

Wenn AWS eine Bibliothek mit dem Namen aws-lambda-java-events bereitstellt und Lambda mit verschiedenen Diensten verbunden ist Anforderungs- und Antworttypen sind definiert.

Folgende Arten von Anforderungen und Antworten werden beim Herstellen einer Verbindung zum API-Gateway übergeben.

Da es sich bei dem Body um einen String-Typ handelt, bleibt der Aufwand für das Codieren / Decodieren von JSON bestehen, das Codieren sollte jedoch noch viel einfacher sein.

Recommended Posts

Seien Sie vorsichtig mit Anfragen und Antworten, wenn Sie das Serverless Framework mit Java verwenden
[Java10] Achten Sie darauf, var und generics nicht zusammen zu verwenden
Beginnen Sie mit serverlosem Java mit dem leichtgewichtigen Framework Micronaut!
Achten Sie bei der Verwendung von MessageEncryptor mit Rails 5.2 / 6.0 auf den Zeitpunkt der Initialisierung
Syntax- und Ausnahmebedingungen, die beim Vergleich mit null in Java verwendet werden können
Seien Sie vorsichtig, wenn Sie mehrere Artikel verwenden
Seien Sie vorsichtig, wenn Sie die Rückkehr in Ruby weglassen
Ich habe die Punkte zusammengefasst, die bei der kombinierten Verwendung von Ressourcen und Ressourcen zu beachten sind
Versuchen Sie es mit der Stream-API in Java
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
Versuchen Sie es mit der Wii-Fernbedienung in Java
So legen Sie fest, dass Tabulatoren und Leerzeichen sichtbar sind, indem Sie mit der Tabulatortaste Leerzeichen in Java-Dateien in Eclipse einfügen
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
Bei Verwendung einer Liste in Java wird java.awt.List ausgegeben und ein Fehler tritt auf
In Bezug auf transiente Modifikatoren und Serialisierung in Java
Seien Sie vorsichtig, wenn Sie SHIFT-JIS in Java finden
ChatWork4j für die Verwendung der ChatWork-API in Java
Grundlegendes zum MVC-Framework mit serverseitiger Java 1/4 View
[Java] Achten Sie auf den Schlüsseltyp der Karte
Grundlegendes zum MVC-Framework mit serverseitigem Java 3/4 Controller
Geben Sie ClassPath an, wenn Sie jupyter + Java mit WSL verwenden
Zeigen Sie "Hello World" im Browser mit Java an
Zeigen Sie "Hello World" im Browser mit Java an
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Grundlegendes zum MVC-Framework mit dem serverseitigen Java 2/4 -Modell
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
Schreiben Sie ABNF in Java und geben Sie die E-Mail-Adresse weiter
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
[Java] Sortieren Sie die Liste mit Streams und Lambda-Ausdrücken
In der Abbildung verstandene Java-Klassen und -Instanzen
[Java] Wann var verwendet werden soll und wann nicht
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Versuchen Sie es mit globalem Hooking in Java mithilfe der JNativeHook-Bibliothek
Bereiten Sie die Umgebung für Java11 und JavaFx mit Ubuntu 18.4 vor
Serverloses Java EE beginnend mit Quarkus und Cloud Run
Senden und Empfangen einfacher Nachrichten mit der Kafka-Komponente des Apache Camel-Frameworks (Java DSL Edition)
Ich steckte in einer Falle fest, als ich meine eigenen Klassen equals und hashCode in Java mit IDE generierte
Vorlagenerstellungsprogramm bei Verwendung der Erinnerungsfunktion im Ruhezustand
In Java 2D-Karte speichern und mit for-Anweisung drehen
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Protokollaggregation und -analyse (Arbeiten mit AWS Athena in Java)
[Java] [Play Framework] Bis das Projekt mit Gradle gestartet wird
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
PriorityQueue, wo ich Probleme mit der Dyxtra-Methode unter Verwendung einer benachbarten Liste (Java) hatte.
[Java] Überprüfen Sie den Unterschied zwischen orElse und orElseGet mit IntStream
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①
[Rails] Bei der Beschreibung der Validierung ist Vorsicht geboten
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen