跳至主要内容
版本:11.x

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.ts
ts
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; // string
return { id: opts.input, name: 'Bilbo' };
}),
});
// export type definition of API
export type AppRouter = typeof appRouter;
server.ts
ts
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; // string
return { id: opts.input, name: 'Bilbo' };
}),
});
// export type definition of API
export type AppRouter = typeof appRouter;

3. 使用 Amazon API Gateway 适配器

tRPC 包含一个开箱即用的 API Gateway 适配器。此适配器允许您通过 API Gateway 处理程序运行您的路由。

server.ts
ts
import { CreateAWSLambdaContextOptions, awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';
const appRouter = /* ... */;
// created for each request
const createContext = ({
event,
context,
}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({}) // no context
type Context = Awaited<ReturnType<typeof createContext>>;
export const handler = awsLambdaRequestHandler({
router: appRouter,
createContext,
})
server.ts
ts
import { CreateAWSLambdaContextOptions, awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';
const appRouter = /* ... */;
// created for each request
const createContext = ({
event,
context,
}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({}) // no context
type Context = Awaited<ReturnType<typeof createContext>>;
export const handler = awsLambdaRequestHandler({
router: appRouter,
createContext,
})

构建并部署您的代码,现在使用您的 API Gateway URL 调用您的函数。

端点HTTP URI
getUserGET 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>

在此处详细了解有效负载格式版本