DEV Community

Cover image for Cómo configurar un Path en API Gateway con AWS SAM sin Lambda Proxy Integration
Fredy Daniel Flores Lemus
Fredy Daniel Flores Lemus

Posted on

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
Enter fullscreen mode Exit fullscreen mode

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:
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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!

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay