这里有人成功将 Micronaut GraphQL API 部署到 AWS Lambda 吗?
Posted
技术标签:
【中文标题】这里有人成功将 Micronaut GraphQL API 部署到 AWS Lambda 吗?【英文标题】:Anyone here deployed Micronaut GraphQL API to AWS Lambda successfully? 【发布时间】:2020-02-20 15:09:50 【问题描述】:我根据以下文章创建了一个 GraphQL 端点: http://lifeinide.com/post/2019-04-15-micronaut-graphql-with-transaction-and-security-support/
它在我的本地机器上正常工作,但在通过引用 https://github.com/micronaut-projects/micronaut-aws/tree/master/examples/api-gateway-example 部署到 AWS lambda 之后就不行了。
我用 postman 测试了 Lambda 的 /ping API,它运行良好。 但是,当我将 graphql 查询发布到 /graphql 端点时,它总是返回“415 Unsupported Media Type”。
我认为缺少一些东西,但我不确定它是什么,如果这里有人可以指出如何使它起作用,不胜感激。
谢谢。
【问题讨论】:
您在发布什么内容以及您的请求内容类型是什么? 感谢您的快速回复。我的请求内容类型是“application/json”,我发布以下 json: "query":" listSignals(page: 0, size: 11) signals id date type description total "
有什么更新吗?谢谢
【参考方案1】:
在深入研究源代码后,我发现 graphQL 后端点的 Consumes 属性设置为 ALL 即 / 以接受任何内容类型,但在代码中它们具体指的是 application/json 或应用程序/graphQL。
当您使用 application/json 访问 graphQL post 端点时,MICRONAUT lambda 处理程序将内容类型与 ALL 匹配,这不是真的,因此它会引发错误 415 Unsupported Media Type。请求永远不会到达 graphQL 控制器。
当您使用 / 访问 graphQL 后端点时,MICRONAUT lambda 处理程序将内容类型与 ALL 匹配,这似乎是正确的,因此它将请求转发到 GraphQL 控制器,但在代码中它特别看起来对于那些特定的内容类型。它再次依赖 .equals 方法进行比较。它再次不匹配,因此抛出 422 无法处理的实体。
我仍在寻找解决方案。
【讨论】:
感谢您在此处分享您的发现以及在 github.com/micronaut-projects/micronaut-aws/issues/93 处的解决方法以上是关于这里有人成功将 Micronaut GraphQL API 部署到 AWS Lambda 吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 graphql-java-servlet 和 Micronaut 控制器配置 GraphQL servlet 端点?
如何在 Micronaut GraphQL 中使用 Keycloak JWT 进行身份验证