Deploying Hive Gateway to AWS Lambda

AWS Lambda is a serverless computing platform that makes it easy to build applications that run on the AWS cloud. Hive Gateway is platform agnostic so they can fit together easily.

Before you start, make sure you read the Serverless / On the Edge page.

See Bundling Problems for more details about how to load the supergraph and transports option.

import { createGatewayRuntime } from "@graphql-hive/gateway-runtime";
import http from "@graphql-mesh/transport-http";
import supergraph from "./supergraph.js";

export const gateway = createGatewayRuntime({
  // All options available in `gateway.config.ts` configuration can also be passed here.
  supergraph,
  transports: {
    http, // For example, http transport is required for subgraphs using standard GraphQL over HTTP.
  },
});
import { APIGatewayEvent, APIGatewayProxyResult, Context } from "aws-lambda";
import { gateway } from "./gateway";

export async function handler(
  event: APIGatewayEvent,
  lambdaContext: Context,
): Promise<APIGatewayProxyResult> {
  const response = await gateway.fetch(
    event.path +
      "?" +
      new URLSearchParams(
        (event.queryStringParameters as Record<string, string>) || {},
      ).toString(),
    {
      method: event.httpMethod,
      headers: event.headers as HeadersInit,
      body: event.body
        ? Buffer.from(event.body, event.isBase64Encoded ? "base64" : "utf8")
        : undefined,
    },
    {
      event,
      lambdaContext,
    },
  );

  const responseHeaders = Object.fromEntries(response.headers.entries());

  return {
    statusCode: response.status,
    headers: responseHeaders,
    body: await response.text(),
    isBase64Encoded: false,
  };
}

On this page

No Headings
View on GitHub