首页 文章

使用AWS API Gateway调用AWS Lambda

提问于
浏览
0

我正在将一些scala代码移动到AWS Lambda,我打算通过AWS API Gateway公开它,但是我一直在努力使整个工作在我有一个参数时立即工作 .

我的(非常简单)代码如下所示:

class HelloService {
  def hello(name: String) = {
    "hello there, " + name
  }
}

我将构建的jar上传到Lambda,并通过创建测试事件在AWS控制台中对其进行了测试 . 它按预期返回正确的响应 .

但是,我希望API网关调用此Lambda . 我已经使用了Lambda Proxy Integration并且还定义了我自己的Body Mapping模板 . 我似乎无法使它工作,我不断得到:

{
  "message": "Internal server error"
}

与日志:

请求测试请求的执行日志Mon Jul 03 16:23:21 UTC 2017:开始执行请求:test-invoke-request Mon Jul 03 16:23:21 UTC 2017:HTTP方法:GET,资源路径:/ car / aaa Mon Jul 03 16:23:21 UTC 2017:方法请求路径: Mon Jul 03 16:23:21 UTC 2017:方法请求查询字符串:{} Mon Jul 03 16:23:21 UTC 2017 :方法请求 Headers :{} Mon Jul 03 16:23:21 UTC 2017:转换前的方法请求体:Mon Jul 03 16:23:21 UTC 2017: endpoints 请求URI:https://lambda.eu-west-1 .amazonaws.com / 2015-03-31 / functions / arn:aws:lambda:eu-west-1:879461422967:function:getCarData / invocations Mon Jul 03 16:23:21 UTC 2017: endpoints 请求头:{x- amzn-lambda-integration-tag = test-request,Authorization = ************************************ ************************************************** ************************************************** ************************************************** ************************************************** ******* ************************************************** ************************************ f8c749,X-Amz-Date = 20170703T162321Z,x-amzn-apigateway -api-id = 9dwaaf2mdg,X-Amz-Source-Arn = arn:aws:execute-api:eu-west-1:879461422967:9dwaaf2mdg / null / GET / car / ,Accept = application / json,User -agent = AmazonAPIGateway_9dwaaf2mdg,X-AMZ-安全令牌= FQoDYXdzENn ////////// wEaDMO73KD0CHVmggvYvSK3A8H1fpDgYiNK3HDD3ESe1aKYbv1HlGSQ85at3gRGA3kunmxVCxWbXNqR4ojBCn4hvBzdv1 / iWD9xRzZQEtnQeDoO9NTuiBdYaXKgwjGozPKF / 46X71f0sCt / Mm9i8EDtt3igEezJIhAF3OvYcdv2NBF3L0mRMMQKp4Vy aC0mKu4ggadyLe KYvmch8 / AiZPlrxC1AtqwNGyWpSe1JqxeEXQGXIA5JsfwGpnpAB5IUec2r3Bd09zUFk / DCC80l9d4BLnhYAUn7xzrKYzisSEQitmhnTR3HijEYE6AJzJjFR z2PqqVKvtgKQ [TRUNCATED]星期一7月3日16时23分21秒UTC 2017:转换后的 endpoints 请求正文:{“message”:“foo”} Mon Jul 03 16:23:21 UTC 2017:转换前的 endpoints 响应正文:{“errorMessage”:“JSON解析期间发生错误”,“errorType “:” 了java.lang.RuntimeException “ ”堆栈跟踪“:[],” C ause“:{”errorMessage“:”com.fasterxml.jackson.databind.JsonMappingException:无法在[来源:lambdainternal.util.NativeMemoryAsInputStream@e720b71;来源:START_OBJECT令牌中反序列化java.lang.String的实例 . line:1,column:1]“,”errorType“:”java.io.UncheckedIOException“,”stackTrace“:[],”cause“:{”errorMessage“:”无法反序列化java.lang.String的实例在[来源:lambdainternal.util.NativeMemoryAsInputStream@e720b71;来源:START_OBJECT令牌\ n; line:1,column:1]“,”errorType“:”com.fasterxml.jackson.databind.JsonMappingException“,”stackTrace“:[”com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) “,”com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:857)“,”com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java [TRUNCATED] Mon Jul 03 16 :2017:23:2017 UTC: endpoints 响应头:{x-amzn-Remapped-Content-Length = 0,x-amzn-RequestId = ede9aaed-600b-11e7-834e-47baf0a4e23f,Connection = keep-alive,Content-Length = 1252,X-Amz-Function-Error =未处理,Date = Mon,03 Jul 2017 16:23:20 GMT,X-Amzn-Trace-Id = root = 1-595a6f79-c065d6038ba3209743378112; samples = 0,Content-Type = application / json} Mon Jul 03 16:23:21 UTC 2017:由于配置错误导致执行失败:输出映射是指无效的方法响应:200 Mon Jul 03 16:23:21 UTC 2017:方法已完成,状态:500

我的ARN的路径中有一个空值,但我想这是因为我没有身份验证集,这就是此时的目的 . 我认为这不会是错误的原因 .

除此之外,我已经尝试将body的Content-Type定义为application / json和text / plain . 似乎没有工作,甚至使用text / plain,AWS似乎期待json . 无论如何,我期望一个字符串是有效的json .

我究竟做错了什么?我应该在Body Mapping模板中填写什么表达式?我的模型中的模式定义应该如何?我似乎无法为纯文本定义合适的模型 .

我确信这很简单,我只是遗漏了一些东西......

2 回答

相关问题