Usage with AWS Lambda through the API Gateway
AWS Lambda adapter​
The AWS Lambda adapter is supported for API Gateway Rest API(v1) and HTTP API(v2) use cases.
Example app​
Description | URL | Links |
---|---|---|
API Gateway with NodeJS client. | n/a |
How to add tRPC​
1. Install deps​
bash
yarn add @trpc/server
bash
yarn add @trpc/server
2. Create a tRPC router​
Implement your tRPC router. A sample router is given below:
server.tsts
import { initTRPC } from '@trpc/server';import { z } from 'zod';export const t = initTRPC.create();const appRouter = t.router({getUser: t.procedure.input(z.string()).query((req) => {req.input; // stringreturn { id: req.input, name: 'Bilbo' };}),});// export type definition of APIexport type AppRouter = typeof appRouter;
server.tsts
import { initTRPC } from '@trpc/server';import { z } from 'zod';export const t = initTRPC.create();const appRouter = t.router({getUser: t.procedure.input(z.string()).query((req) => {req.input; // stringreturn { id: req.input, name: 'Bilbo' };}),});// export type definition of APIexport type AppRouter = typeof appRouter;
3. Use the Amazon API Gateway adapter​
tRPC includes an adapter for API Gateway out of the box. This adapter lets you run your routes through the API Gateway handler.
server.tsts
import { CreateAWSLambdaContextOptions, awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';const appRouter = /* ... */;// created for each requestconst createContext = ({event,context,}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({}) // no contexttype Context = trpc.inferAsyncReturnType<typeof createContext>;export const handler = awsLambdaRequestHandler({router: appRouter,createContext,})
server.tsts
import { CreateAWSLambdaContextOptions, awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';const appRouter = /* ... */;// created for each requestconst createContext = ({event,context,}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({}) // no contexttype Context = trpc.inferAsyncReturnType<typeof createContext>;export const handler = awsLambdaRequestHandler({router: appRouter,createContext,})
Build & deploy your code, now use your API Gateway URL to call your function.
Endpoint | HTTP URI |
---|---|
getUser | GET https://<execution-api-link>/getUser?input=INPUT where INPUT is a URI-encoded JSON string. |
A word about payload format version​
API Gateway has two different event data formats when it invokes a Lambda. For REST APIs they should be version "1.0"(APIGatewayProxyEvent
), but you can chose which for HTTP APIs by stating either version "1.0" or "2.0".
- Version 1.0:
APIGatewayProxyEvent
- Version 2.0:
APIGatewayProxyEventV2
To infer what version you might have, supply the context as following:
ts
function createContext({event,context,}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) {...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>
ts
function createContext({event,context,}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) {...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>