Hoppa till huvudinnehållet
Version: 11.x

AWS Lambda + API Gateway-adapter

Inofficiell Beta-översättning

Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →

AWS Lambda-adapter

AWS Lambda-adaptern stöder API Gateway REST API(v1), HTTP API(v2) och användningsfall med Lambda Function URL.

httpBatchLink kräver att routern fungerar på en enda API Gateway-resurs (som visas i exemplet). Om du föredrar att ha en resurs per procedur kan du använda httpLink istället (mer information).

Exempelappar

DescriptionLinks
API Gateway with NodeJS client.
API Gateway REST API with response streaming.

Så här lägger du till tRPC

1. Installera beroenden

bash
yarn add @trpc/server
bash
yarn add @trpc/server

2. Skapa en tRPC-router

Implementera din tRPC-router. En exempelrouter visas nedan:

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. Använd Amazon API Gateway-adaptern

tRPC innehåller en adapter för API Gateway direkt ur lådan. Den här adaptern låter dig köra dina rutter via API Gateway-handlern.

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,
})

Bygg och distribuera din kod, använd sedan din API Gateway-URL för att anropa din funktion.

EndpointHTTP URI
getUserGET https://<execution-api-link>/getUser?input=INPUT

where INPUT is a URI-encoded JSON string.

Lite om nyttolastformatversion

API Gateway har två olika händelsedataformat när den anropar en Lambda. För REST API:er ska de vara version "1.0" (APIGatewayProxyEvent), men för HTTP API:er kan du välja mellan version "1.0" eller "2.0".

  • Version 1.0: APIGatewayProxyEvent

  • Version 2.0: APIGatewayProxyEventV2

För att avgöra vilken version du har kan du ange kontexten enligt följande:

ts
function createContext({
event,
context,
}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) {
...
}
// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>
ts
function createContext({
event,
context,
}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) {
...
}
// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>

Läs mer om nyttolastformatversion här

AWS Lambda Response Streaming-adapter

AWS Lambda stöder att strömma svar till klienter med både Lambda Function URLs och API Gateway REST API:er.

Response Streaming stöds för Lambda Function URLs och API Gateway REST API:er. För API Gateway REST API:er måste du konfigurera integrationen med responseTransferMode: STREAM. Läs mer om Lambda Response Streaming och API Gateway Response Streaming.

Exempelappar

DescriptionLinks
Lambda Function URL with NodeJS client.
API Gateway REST API with response streaming.

Response Streaming

Signaturen för en strömmande hanterare skiljer sig från standardhanteraren. Den strömmande hanteraren tar dessutom emot en skrivbar strömparameter, responseStream, förutom standardparametrarna för Node-hanteraren, event och context. För att indikera att Lambda ska strömma dina svar måste du slå in din funktionshanterare i dekoratören awslambda.streamifyResponse().

Observera att awslambda-namnrymden automatiskt tillhandahålls av Lambda-körningsmiljön. Du kan importera typerna från @types/aws-lambda för att utöka den globala namnrymden med awslambda-namnrymden.

server.ts
ts
import { awsLambdaStreamingRequestHandler } from '@trpc/server/adapters/aws-lambda';
import type { StreamifyHandler } from 'aws-lambda';
const appRouter = router({
iterable: publicProcedure.query(async function* () {
for (let i = 0; i < 10; i++) {
await new Promise((resolve) => setTimeout(resolve, 500));
yield i;
}
}),
});
export const handler = awslambda.streamifyResponse(
awsLambdaStreamingRequestHandler({
router: appRouter,
/* ... */
}),
);
server.ts
ts
import { awsLambdaStreamingRequestHandler } from '@trpc/server/adapters/aws-lambda';
import type { StreamifyHandler } from 'aws-lambda';
const appRouter = router({
iterable: publicProcedure.query(async function* () {
for (let i = 0; i < 10; i++) {
await new Promise((resolve) => setTimeout(resolve, 500));
yield i;
}
}),
});
export const handler = awslambda.streamifyResponse(
awsLambdaStreamingRequestHandler({
router: appRouter,
/* ... */
}),
);