Cómo configurar un Path en API Gateway con AWS SAM sin Lambda Proxy Integration

¿Sabías que con API Gateway puedes manejar solicitudes HTTP sin necesidad de preocuparte por servidores? En arquitecturas serverless, este servicio no solo expone tus endpoints, sino que también transforma y controla cómo llegan los datos a tu backend. En este tutorial, te enseñaré cómo llevarlo al siguiente nivel configurando integraciones personalizadas con OpenAPI. ¿Qué es Lambda Proxy Integration y cuándo evitarlo? Cuando utilizamos AWS SAM para definir nuestra arquitectura serverless, la integración predeterminada entre Lambda y API Gateway es Lambda Proxy Integration. Esto significa que toda la solicitud HTTP (headers, body, query parameters) se pasa directamente como un evento JSON a la función Lambda. Aunque este enfoque es conveniente, no siempre es ideal. Si necesitas transformar las solicitudes o conectarte a otros servicios directamente desde API Gateway, una integración personalizada es la mejor opción. 1. Definiendo la función Lambda Comencemos creando nuestra función Lambda en el template de AWS SAM. Configuraremos sus propiedades principales. Como queremos usar una integración personalizada, omitiremos la propiedad Events. Resources: MyFunction: Type: AWS::Lambda::Function Properties: Handler: app.lambdaHandler Runtime: nodejs18.x CodeUri: ./src/ Timeout: 10 2. Definiendo el API Gateway A continuación, configuraremos nuestro API Gateway manualmente para evitar el comportamiento por defecto de Lambda Proxy Integration. Utilizaremos la propiedad DefinitionBody para definir la API en formato OpenAPI: Resources: MyApi: Type: AWS::Serverless::Api Properties: Name: MyCustomApi StageName: Prod DefinitionBody: openapi: 3.0.1 info: title: My API version: 3.0.1 paths: /example: 3. Configurando una integración personalizada Ahora especificaremos la integración personalizada para nuestro path. Usaremos la extensión x-amazon-apigateway-integration: paths: /example: get: x-amazon-apigateway-integration: type: "AWS" # Tipo de integración personalizada para servicios AWS uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunction.Arn}/invocations" # URI de la Lambda httpMethod: "POST" # Método HTTP usado para invocar el backend passthroughBehavior: "WHEN_NO_MATCH" # Manejo de solicitudes sin modelo de mapeo definido requestTemplates: # Mapping template que nos ayuda a transformar la data para luego pasarla a nuestro backend application/json: | { "statusCode": 200 } responses: # Tambien es posible mapear la respuesta que nos devuelve nuestro backend default: statusCode: "200" Conclusión Con esta configuración, hemos configurado una integración personalizada que nos permite un control total sobre cómo se manejan las solicitudes y respuestas. Esto nos abre la puerta a arquitecturas más avanzadas y flexibles en AWS. Si deseas profundizar más en las propiedades como passthroughBehavior o x-amazon-apigateway-integration, consulta la documentación oficial de AWS. Si tienes dudas o comentarios, ¡déjalos abajo!

Jan 24, 2025 - 04:58
 0
Cómo configurar un Path en API Gateway con AWS SAM sin Lambda Proxy Integration

¿Sabías que con API Gateway puedes manejar solicitudes HTTP sin necesidad de preocuparte por servidores? En arquitecturas serverless, este servicio no solo expone tus endpoints, sino que también transforma y controla cómo llegan los datos a tu backend. En este tutorial, te enseñaré cómo llevarlo al siguiente nivel configurando integraciones personalizadas con OpenAPI.

¿Qué es Lambda Proxy Integration y cuándo evitarlo?

Cuando utilizamos AWS SAM para definir nuestra arquitectura serverless, la integración predeterminada entre Lambda y API Gateway es Lambda Proxy Integration. Esto significa que toda la solicitud HTTP (headers, body, query parameters) se pasa directamente como un evento JSON a la función Lambda.

Aunque este enfoque es conveniente, no siempre es ideal. Si necesitas transformar las solicitudes o conectarte a otros servicios directamente desde API Gateway, una integración personalizada es la mejor opción.

1. Definiendo la función Lambda

Comencemos creando nuestra función Lambda en el template de AWS SAM. Configuraremos sus propiedades principales. Como queremos usar una integración personalizada, omitiremos la propiedad Events.

Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      CodeUri: ./src/
      Timeout: 10

2. Definiendo el API Gateway

A continuación, configuraremos nuestro API Gateway manualmente para evitar el comportamiento por defecto de Lambda Proxy Integration. Utilizaremos la propiedad DefinitionBody para definir la API en formato OpenAPI:

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: MyCustomApi
      StageName: Prod
      DefinitionBody:
        openapi: 3.0.1
        info:
          title: My API
          version: 3.0.1
        paths:
          /example:

3. Configurando una integración personalizada

Ahora especificaremos la integración personalizada para nuestro path. Usaremos la extensión x-amazon-apigateway-integration:

paths:
  /example:
    get:
      x-amazon-apigateway-integration:
        type: "AWS" # Tipo de integración personalizada para servicios AWS
        uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunction.Arn}/invocations" # URI de la Lambda
        httpMethod: "POST" # Método HTTP usado para invocar el backend
        passthroughBehavior: "WHEN_NO_MATCH" # Manejo de solicitudes sin modelo de mapeo definido
        requestTemplates: # Mapping template que nos ayuda a transformar la data para luego pasarla a nuestro backend
          application/json: |
            {
              "statusCode": 200
            }
        responses: # Tambien es posible mapear la respuesta que nos devuelve nuestro backend 
          default:
            statusCode: "200"

Conclusión

Con esta configuración, hemos configurado una integración personalizada que nos permite un control total sobre cómo se manejan las solicitudes y respuestas. Esto nos abre la puerta a arquitecturas más avanzadas y flexibles en AWS.

Si deseas profundizar más en las propiedades como passthroughBehavior o x-amazon-apigateway-integration, consulta la documentación oficial de AWS.

Si tienes dudas o comentarios, ¡déjalos abajo!

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow