AWS Lambda + API Gateway 适配器
AWS Lambda 适配器
AWS Lambda 适配器支持 API Gateway Rest API(v1) 和 HTTP API(v2) 用例。
示例应用程序
描述 | 链接 |
---|---|
带有 NodeJS 客户端的 API Gateway。 |
如何添加 tRPC
1. 安装依赖项
bash
yarn add @trpc/server
bash
yarn add @trpc/server
2. 创建一个 tRPC 路由器
实现您的 tRPC 路由器。下面给出了一个示例路由器
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((opts) => {opts.input; // stringreturn { id: opts.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((opts) => {opts.input; // stringreturn { id: opts.input, name: 'Bilbo' };}),});// export type definition of APIexport type AppRouter = typeof appRouter;
3. 使用 Amazon API Gateway 适配器
tRPC 包含一个开箱即用的 API Gateway 适配器。此适配器允许您通过 API Gateway 处理程序运行您的路由。
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 = Awaited<ReturnType<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 = Awaited<ReturnType<typeof createContext>>;export const handler = awsLambdaRequestHandler({router: appRouter,createContext,})
构建并部署您的代码,现在使用您的 API Gateway URL 调用您的函数。
端点 | HTTP URI |
---|---|
getUser | GET https://<execution-api-link>/getUser?input=INPUT 其中 INPUT 是一个 URI 编码的 JSON 字符串。 |
关于有效负载格式版本的一句话
API Gateway 在调用 Lambda 时有两种不同的事件数据格式。对于 REST API,它们应该是版本“1.0”(APIGatewayProxyEvent
),但您可以通过声明版本“1.0”或“2.0”来选择 HTTP API 的版本。
- 版本 1.0:
APIGatewayProxyEvent
- 版本 2.0:
APIGatewayProxyEventV2
要推断您可能拥有的版本,请提供以下上下文
ts
function createContext({event,context,}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) {...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>
ts
function createContext({event,context,}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) {...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>