Soyez prudent avec les demandes et les réponses lors de l'utilisation de Serverless Framework avec Java

Serverless Framework / Notes sur l'implémentation dans AWS / Java.

API Gateway et Lambda ne fonctionnent pas avec le code généré par le modèle tel quel, et cela ne fonctionne pas! !!

Par exemple, créez un projet avec la commande suivante.

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

Ensuite, le fichier Java suivant est créé.

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);
	}

}

Mais si cette méthode est exécutée via API Gateway, cela ne fonctionnera pas. Parce que le JSON suivant est passé (partiellement modifié).

{
  "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}"
}

Ce que je veux vraiment, c'est la dernière partie de propriété `` body ''.

Cela signifie que vous devez écrire un programme qui extrait cela.

Non seulement la demande mais aussi la réponse ne fonctionnent pas telles quelles. Il semble que l'objet de réponse nécessite trois propriétés: statusCode, `` headers et `` body```.

~~ Je vais fournir un exemple de solution pour traiter ce domaine. aws-serverless-java-sample ~~

(Fixé le 24 juin 2018) Le kit SDK AWS a une solution correspondante, je vais donc la réécrire.

Quand AWS fournit une bibliothèque appelée aws-lambda-java-events et Lambda est connecté à divers services Les types de demande et de réponse sont définis.

Les types de demandes et de réponses transmises lors de la connexion à API Gateway sont les suivants.

Étant donné que le corps est de type String, l'effort d'encodage / décodage JSON demeure, mais il devrait toujours être beaucoup plus facile à coder.

Recommended Posts

Soyez prudent avec les demandes et les réponses lors de l'utilisation de Serverless Framework avec Java
[Java10] Veillez à utiliser ensemble var et génériques
Commencez avec Java sans serveur avec le framework léger Micronaut!
Faites attention au moment d'initialisation lors de l'utilisation de MessageEncryptor avec Rails 5.2 / 6.0
Syntaxe et conditions d'occurrence d'exception pouvant être utilisées lors de la comparaison avec null en Java
Soyez prudent lorsque vous utilisez plusieurs articles
Soyez prudent lorsque vous omettez le retour dans Ruby
J'ai résumé les points à noter lors de l'utilisation combinée des ressources et des ressources
Essayez d'utiliser l'API Stream en Java
La première chose à faire lorsque vous voulez être satisfait d'Heroku sur GitHub avec Eclipse sur Java
Essayez d'utiliser la télécommande Wii en Java
Comment définir les tabulations et les espaces pour qu'ils soient visibles à l'aide de la touche de tabulation pour insérer des espaces dans des fichiers Java dans Eclipse
Impressions et doutes sur l'utilisation de Java pour la première fois dans Android Studio
Lors de l'utilisation d'une liste en Java, java.awt.List sort et une erreur se produit
Concernant les modificateurs transitoires et la sérialisation en Java
Soyez prudent si vous trouvez SHIFT-JIS en Java
ChatWork4j pour l'utilisation de l'API ChatWork en Java
Comprendre le framework MVC avec Java 1/4 View côté serveur
[Java] Faites attention au type de clé de la carte
Comprendre le framework MVC avec le contrôleur Java 3/4 côté serveur
Spécifiez ClassPath lors de l'utilisation de jupyter + Java avec WSL
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
Comprendre le framework MVC avec le modèle Java 2/4 côté serveur
Crypter / décrypter avec AES256 en PHP et Java
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML)
Écrivez ABNF en Java et transmettez l'adresse e-mail
Comment déployer Java sur AWS Lambda avec Serverless Framework
[Java] Trier la liste à l'aide de flux et d'expressions lambda
Classes et instances Java comprises dans la figure
[Java] Quand var doit être utilisé et quand il ne doit pas être utilisé
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
Java EE sans serveur à partir de Quarkus et Cloud Run
Envoi et réception de messages simples à l'aide du composant Kafka du framework Apache Camel (édition Java DSL)
J'ai été piégé lorsque j'ai généré mes propres égaux de classe et hashCode en Java à l'aide de l'IDE
Programme de création de modèle lors de l'utilisation de la fonction de rappel dans Slack
Stocker dans une carte Java 2D et tourner avec pour instruction
Implémentez Thread en Java et essayez d'utiliser la classe anonyme Lambda
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Agrégation et analyse de journaux (utilisation d'AWS Athena en Java)
[Java] [Play Framework] Jusqu'à ce que le projet soit démarré avec Gradle
Éléments à prendre en compte lors de l'écriture de code en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
PriorityQueue, où j'avais des problèmes avec la méthode Dyxtra en utilisant la liste de contiguïté (java)
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java
Communication socket avec un navigateur Web utilisant Java et JavaScript ②
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Communication socket avec un navigateur Web utilisant Java et JavaScript ①
[Rails] Où faire attention dans la description de la validation
Assurez-vous de comparer le résultat Java compareTo avec 0