如何从 nodejs 中的另一个 lambda 调用 graphql lambda?
Posted
技术标签:
【中文标题】如何从 nodejs 中的另一个 lambda 调用 graphql lambda?【英文标题】:How can I call a graphql lambda from another lambda in nodejs? 【发布时间】:2020-09-15 06:33:29 【问题描述】:我按照以下说明创建了 graphql lambda:https://www.apollographql.com/docs/apollo-server/deployment/lambda/
它适用于 API 网关。但是,我需要从另一个 lambda 调用这个 lambda 函数。我想我需要将ApolloClient
放在另一个 lambda 函数中才能发送 graphql 请求。但是,它不起作用,因为我无法选择正确的链接来调用 lambda。
所以我正在寻找如何以编程方式构建 graphql 请求。我可以将请求作为事件发送以触发 graphql lambda。
有没有办法做到这一点?
例如,如果我有这样的突变请求:
mutation sendMessage
sendMessage(text: "hello")
text
我需要找到一种方法将请求转换为以下有效负载:
"id":"1","type":"start","payload":"variables":,"extensions":,"operationName":"sendMessage","query":"mutation sendMessage \\n sendMessage(text: \\"hello\\") \\n text\\n __typename\\n \\n\\n"
然后我将此有效负载发送到 graphql lambda 函数
【问题讨论】:
【参考方案1】:您可以使用 graphQL 客户端通过 API 网关端点使用 HTTP 执行 graphQL 请求。
鉴于您有一个指向 graphQL 服务器的 API Gateway 端点,您可以从另一个 lambda 向该端点执行 graphQL 请求。
对服务器的 GraphQL 查询只是以某种方式格式化的常规 POST
请求。因此,如果您愿意,您可以使用任何服务器端 HTTP 客户端来执行该请求。但是,使用像 graphql-request 这样的库会更简单。
您可以使用graphql-request 包来执行服务器端的graphQL 请求。
import request from 'graphql-request'
const endpoint="https://your-api-gateway-endpoint";
const headers =
"x-api-key": 'api-gateway-key' // if your endpoint requires API key
;
const client = new GraphQLClient(endpoint, headers );
const query = `
mutation sendMessage
sendMessage(text: "hello")
text
`;
const data = await client.request(query);
console.log(JSON.stringify(data, undefined, 2));
【讨论】:
我考虑过这个解决方案,但它会给请求带来更多延迟。它将请求发送到 API 网关,网关将其转发给不太好的 lambda。有没有办法在 lambda 中生成 graphql 请求负载,并直接发送给 graphql lambda? 我不认为使用 lambda 调用是一个好主意,即使它是可能的。由于您的客户端 lambda 将一直运行到您的服务器 lambda,您将为更高的 lambda 使用付费。延迟以毫秒为单位,所以我不会担心。以上是关于如何从 nodejs 中的另一个 lambda 调用 graphql lambda?的主要内容,如果未能解决你的问题,请参考以下文章
如何从同一网络中的另一台计算机访问我的 nodejs-express localhost 服务器?