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.