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
AI-agenter

Om du använder en AI-kodningsagent, installera tRPC-färdigheter för bättre kodgenerering:

bash
npx @tanstack/intent@latest install
bash
npx @tanstack/intent@latest install

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 type { APIGatewayProxyEventV2 } from 'aws-lambda';
import type { CreateAWSLambdaContextOptions } from '@trpc/server/adapters/aws-lambda';
import { awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';
import { appRouter } from './router';
 
// 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 type { APIGatewayProxyEventV2 } from 'aws-lambda';
import type { CreateAWSLambdaContextOptions } from '@trpc/server/adapters/aws-lambda';
import { awsLambdaRequestHandler } from '@trpc/server/adapters/aws-lambda';
import { appRouter } from './router';
 
// 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.

Svarsströmning​

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
/// <reference types="aws-lambda" />
import type { APIGatewayProxyEventV2 } from 'aws-lambda';
import type { CreateAWSLambdaContextOptions } from '@trpc/server/adapters/aws-lambda';
import { awsLambdaStreamingRequestHandler } from '@trpc/server/adapters/aws-lambda';
import { appRouter } from './router';
 
// created for each request
const createContext = ({
event,
context,
}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({
// your context
});
type Context = Awaited<ReturnType<typeof createContext>>;
 
export const handler = awslambda.streamifyResponse(
awsLambdaStreamingRequestHandler({
router: appRouter,
createContext,
}),
);
server.ts
ts
/// <reference types="aws-lambda" />
import type { APIGatewayProxyEventV2 } from 'aws-lambda';
import type { CreateAWSLambdaContextOptions } from '@trpc/server/adapters/aws-lambda';
import { awsLambdaStreamingRequestHandler } from '@trpc/server/adapters/aws-lambda';
import { appRouter } from './router';
 
// created for each request
const createContext = ({
event,
context,
}: CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>) => ({
// your context
});
type Context = Awaited<ReturnType<typeof createContext>>;
 
export const handler = awslambda.streamifyResponse(
awsLambdaStreamingRequestHandler({
router: appRouter,
createContext,
}),
);