Adaptador para AWS Lambda + API Gateway
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Adaptador para AWS Lambda
El adaptador para AWS Lambda es compatible con API Gateway REST API(v1), HTTP API(v2) y casos de uso con Lambda Function URL.
httpBatchLinkrequiere que el router funcione en un único recurso de API Gateway (como se muestra en el ejemplo). Si prefieres tener un recurso por procedimiento, puedes usarhttpLinken su lugar (más información).
Aplicaciones de ejemplo
| Description | Links |
|---|---|
| API Gateway with NodeJS client. | |
| API Gateway REST API with response streaming. |
Cómo integrar tRPC
1. Instalar dependencias
bashyarn add @trpc/server
bashyarn add @trpc/server
Si utilizas un agente de IA para programación, instala habilidades de tRPC para una mejor generación de código:
bashnpx @tanstack/intent@latest install
bashnpx @tanstack/intent@latest install
2. Crear un router de tRPC
Implementa tu router de tRPC. A continuación se muestra un ejemplo de router:
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. Usa el adaptador de Amazon API Gateway
tRPC incluye un adaptador para API Gateway listo para usar. Este adaptador te permite ejecutar tus rutas a través del manejador de API Gateway.
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 ,})
Compila e implementa tu código, luego usa tu URL de API Gateway para llamar a tu función.
| Endpoint | HTTP URI |
|---|---|
getUser | GET https://<execution-api-link>/getUser?input=INPUT where INPUT is a URI-encoded JSON string. |
Nota sobre el formato de carga útil
API Gateway tiene dos formatos diferentes para los eventos al invocar una Lambda. Para REST APIs debe ser la versión "1.0" (APIGatewayProxyEvent), mientras que para HTTP APIs puedes elegir entre las versiones "1.0" o "2.0".
-
Versión 1.0:
APIGatewayProxyEvent -
Versión 2.0:
APIGatewayProxyEventV2
Para determinar qué versión estás usando, proporciona el contexto de la siguiente manera:
tsfunctioncreateContext ({event ,context ,}:CreateAWSLambdaContextOptions <APIGatewayProxyEvent >) {// ...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>
tsfunctioncreateContext ({event ,context ,}:CreateAWSLambdaContextOptions <APIGatewayProxyEvent >) {// ...}// CreateAWSLambdaContextOptions<APIGatewayProxyEvent> or CreateAWSLambdaContextOptions<APIGatewayProxyEventV2>
Lee más aquí sobre el formato de carga útil
Adaptador para Streaming de Respuestas en AWS Lambda
AWS Lambda admite el streaming de respuestas a los clientes tanto con Lambda Function URLs como con API Gateway REST APIs.
El streaming de respuestas es compatible con Lambda Function URLs y API Gateway REST APIs. Para API Gateway REST APIs, debes configurar la integración con
responseTransferMode: STREAM. Lee más sobre el streaming de respuestas de Lambda y el streaming de respuestas de API Gateway.
Streaming de Respuestas
La firma de un manejador de streaming difiere del manejador predeterminado. Además de los parámetros estándar del manejador de Node (event y context), el manejador de streaming recibe un parámetro adicional de flujo escribible (responseStream). Para indicar que Lambda debe transmitir tus respuestas mediante streaming, debes envolver tu función manejadora con el decorador awslambda.streamifyResponse().
Nota: El espacio de nombres
awslambdase proporciona automáticamente en el entorno de ejecución de Lambda. Puedes importar los tipos desde@types/aws-lambdapara extender el espacio de nombres global conawslambda.
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 ,}),);