J'essaie d'intégrer AWS Api Gateway et AWS Lambda,
Je peux appeler la fonction Lambda et obtenir une réponse.
Mais lorsque j'utilise l'AWS API Gateway et appelez ma fonction Lambda à l'aide d'une méthode GET,
Je ne parviens pas à transmettre les paramètres à l'aide d'une chaîne de requête.Amazon Web Services - API Gateway
Voici mon Handler -
package example;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.Context;
public class Hello implements RequestHandler<Request, Response>{
public Response myHandler(Request request, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("received a Lambda request");
logger.log("Name param contains: "+request.getName()+" Age param contains: "+request.getAge());
String greetingString = String.format("Hello "+request.getName()+", you are "+request.getAge()+" years old");
return new Response(greetingString);
}
public Response handleRequest(Request arg0, Context arg1) {
// TODO Auto-generated method stub
return null;
}
}
est ici la classe Request -
package example;
public class Request {
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
est ici la classe Response -
package example;
public class Response {
String greetings;
public String getGreetings() {
return greetings;
}
public void setGreetings(String greetings) {
this.greetings = greetings;
}
public Response(String greetings) {
this.greetings = greetings;
}
public Response() {
}
}
Voici mon chaîne de test pour la fonction Lambda pour laquelle je reçois une réponse positive -
{
"name": "Aniruddha",
"age": "25"
}
réponse succès à l'appel Lambda -
{
"greetings": "Hello Aniruddha, you are 25 years old"
}
Maintenant, est ici le problème,
J'ai configuré une passerelle AWS API pour une méthode Get,
paramètres de erie sont -
?name=aniruddha&age=25
Je reçois un corps de réponse -
{
"greetings": "Hello null, you are null years old"
}
têtes de réponse -
{"Content-Type":"application/json"}
Journaux -
Execution log for request test-request
Mon Nov 21 16:28:10 UTC 2016 : Starting execution for request: test-invoke-request
Mon Nov 21 16:28:10 UTC 2016 : HTTP Method: GET, Resource Path: /aniruddhaagw
Mon Nov 21 16:28:10 UTC 2016 : Method request path: {}
Mon Nov 21 16:28:10 UTC 2016 : Method request query string: {name=aniruddha, age=25}
Mon Nov 21 16:28:10 UTC 2016 : Method request headers: {}
Mon Nov 21 16:28:10 UTC 2016 : Method request body before transformations: null
Mon Nov 21 16:28:10 UTC 2016 : Endpoint request URI: https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:520784750730:function:aniruddhaLambda/invocations
Mon Nov 21 16:28:10 UTC 2016 : Endpoint request headers: {x-amzn-lambda-integration-tag=test-request, Authorization=**************************************************************************************************************************************************************************************************************************************************************************************dfb8a3, X-Amz-Date=20161121T162810Z, x-amzn-apigateway-api-id=h0b98tua9i, X-Amz-Source-Arn=arn:aws:execute-api:us-east-1:520784750730:h0b98tua9i/null/GET/aniruddhaagw, Accept=application/json, User-Agent=AmazonAPIGateway_h0b98tua9i, Host=lambda.us-east-1.amazonaws.com}
Mon Nov 21 16:28:10 UTC 2016 : Endpoint request body after transformations: null
Mon Nov 21 16:28:10 UTC 2016 : Endpoint response body before transformations: {"greetings":"Hello null, you are null years old"}
Mon Nov 21 16:28:10 UTC 2016 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=7e29d831-b007-11e6-83cc-8b56e673337e, Connection=keep-alive, Content-Length=50, Date=Mon, 21 Nov 2016 16:28:10 GMT, Content-Type=application/json}
Mon Nov 21 16:28:10 UTC 2016 : Method response body after transformations: {"greetings":"Hello null, you are null years old"}
Mon Nov 21 16:28:10 UTC 2016 : Method response headers: {Content-Type=application/json}
Mon Nov 21 16:28:10 UTC 2016 : Successfully completed execution
Mon Nov 21 16:28:10 UTC 2016 : Method completed with status: 200
Pouvez-vous expliquer cela? J'ai aussi trouvé ça sur internet, ce qui m'a drôlement emballé - #set ($ keys = []) #foreach ($ key dans $ input.params(). Querystring.keySet()) #set ($ success = keys.add $ ($ key)) #end #foreach (touche $ en input.params de $(). headers.keySet()) #if (! $ keys.contains ($ key)) #set ($ succès = $ keys.add ($ key)) #end #end #foreach (path.keySet() $ key dans input.params de $().) #if (! clés $.contient ($ key)) #set ($ succès = $ keys.add ($ key)) #end #end { #foreach (touche $ dans les clés de $) "$ key": « util $ .escapeJavaScript ($ input.params ($ key)) "# if ($ foreach.hasNext), # fin #end } –
Il itère tous les paramètres, y compris le chemin, la chaîne de requête et l'en-tête du point de terminaison de la passerelle API, puis se rend à paires de valeurs clés à. Après le traitement, ce sera quelque chose comme { "paramètres": { "chemin": { "path_name": "path_value", ...} "tête": { "HEADER_NAME": "header_value" , ...} « querystring »: { "querystring_name": "querystring_value", ... }} } – omuthu