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
Om du använder en AI-kodningsagent, installera tRPC-färdigheter för bättre kodgenerering:
bashnpx @tanstack/intent@latest install
bashnpx @tanstack/intent@latest install
2. Skapa en tRPC-router
Implementera din tRPC-router. En exempelrouter visas nedan:
server.tstsimport {initTRPC } from '@trpc/server';import {z } from 'zod';export constt =initTRPC .create ();constappRouter =t .router ({getUser :t .procedure .input (z .string ()).query ((opts ) => {opts .input ; // stringreturn {id :opts .input ,name : 'Bilbo' };}),});// export type definition of APIexport typeAppRouter = typeofappRouter ;
server.tstsimport {initTRPC } from '@trpc/server';import {z } from 'zod';export constt =initTRPC .create ();constappRouter =t .router ({getUser :t .procedure .input (z .string ()).query ((opts ) => {opts .input ; // stringreturn {id :opts .input ,name : 'Bilbo' };}),});// export type definition of APIexport typeAppRouter = typeofappRouter ;
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 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 requestconstcreateContext = ({event ,context ,}:CreateAWSLambdaContextOptions <APIGatewayProxyEventV2 >) => ({}); // no contexttypeContext =Awaited <ReturnType <typeofcreateContext >>;export consthandler =awsLambdaRequestHandler ({router :appRouter ,createContext ,})
server.tstsimport 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 requestconstcreateContext = ({event ,context ,}:CreateAWSLambdaContextOptions <APIGatewayProxyEventV2 >) => ({}); // no contexttypeContext =Awaited <ReturnType <typeofcreateContext >>;export consthandler =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:
tsfunctioncreateContext ({event ,context ,}:CreateAWSLambdaContextOptions <APIGatewayProxyEvent >) {// ...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>
tsfunctioncreateContext ({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-lambdaför att utöka den globala namnrymden medawslambda-namnrymden.
server.tsts/// <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 requestconstcreateContext = ({event ,context ,}:CreateAWSLambdaContextOptions <APIGatewayProxyEventV2 >) => ({// your context});typeContext =Awaited <ReturnType <typeofcreateContext >>;export consthandler =awslambda .streamifyResponse (awsLambdaStreamingRequestHandler ({router :appRouter ,createContext ,}),);
server.tsts/// <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 requestconstcreateContext = ({event ,context ,}:CreateAWSLambdaContextOptions <APIGatewayProxyEventV2 >) => ({// your context});typeContext =Awaited <ReturnType <typeofcreateContext >>;export consthandler =awslambda .streamifyResponse (awsLambdaStreamingRequestHandler ({router :appRouter ,createContext ,}),);