AWS Lambda + API Gateway-adapter
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.
httpBatchLinkkrä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ändahttpLinkistället (mer information).
Exempelappar
| Description | Links |
|---|---|
| API Gateway with NodeJS client. | |
| API Gateway REST API with response streaming. |
Så här lägger du till tRPC
1. Installera beroenden
bashyarn add @trpc/server
bashyarn add @trpc/server
2. Skapa en tRPC-router
Implementera din tRPC-router. En exempelrouter visas nedan:
server.tstsimport { 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.tstsimport { 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. 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.tstsimport { 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.tstsimport { 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,})
Bygg och distribuera din kod, använd sedan din API Gateway-URL för att anropa din funktion.
| Endpoint | HTTP URI |
|---|---|
getUser | GET 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:
tsfunction createContext({event,context,}: CreateAWSLambdaContextOptions<APIGatewayProxyEvent>) {...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>
tsfunction 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
| Description | Links |
|---|---|
| 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-lambdaför att utöka den globala namnrymden medawslambda-namnrymden.
server.tstsimport { 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.tstsimport { 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,/* ... */}),);