avatar Artículo

Guía Completa de Integraciones de Amazon API Gateway

Explora las integraciones de Amazon API Gateway, destacando ventajas clave, rendimiento, seguridad, costos y casos de uso para ayudar a los desarrolladores a optimizar sus arquitecturas de aplicaciones serverless.

Amazon API Gateway

Guía completa de Amazon API Gateway cubriendo APIs REST, APIs WebSocket, autenticación, throttling y mejores prácticas de monitoreo.

2 articles

Complete
Guía Completa de Integraciones de Amazon API Gateway

1. Introducción

Más allá de la conocida integración con funciones Lambda, API Gateway ofrece la opción de conectarse con servicios de AWS, endpoints HTTP e incluso servicios privados de forma segura en VPCs. Este artículo tiene como objetivo explorar las diversas opciones de integración disponibles en Amazon API Gateway, cubriendo:

  • Funciones AWS Lambda: La columna vertebral de las APIs serverless.
  • Endpoints HTTP: Conectando tus APIs con el mundo.
  • Respuestas Mock: Simplificando el desarrollo con respuestas simuladas.
  • Servicios AWS: Integración estrecha con el ecosistema AWS.
  • Servicios Privados a través de VPC Links: Conectando de forma segura con recursos internos.

Los tipos de integración disponibles para cada tipo de API Gateway son:

  • REST API & REST API Private:
    • opciones de integración rest
  • HTTP API:
    • opciones de integración http
  • WebSocket API:
    • opciones de integración web socket

2. Integración con Funciones Lambda

Conectar funciones AWS Lambda a Amazon API Gateway es un punto destacado de la computación serverless, ofreciendo escalabilidad y flexibilidad sin precedentes. Esta poderosa sinergia permite a los desarrolladores desplegar aplicaciones serverless que escalan dinámicamente para satisfacer la demanda de los usuarios, liberándolos de los desafíos convencionales del mantenimiento de servidores.

API Gateway puede activar funciones Lambda en respuesta a solicitudes HTTP, sirviendo como una interfaz altamente adaptable para cualquier aplicación o servicio backend. Esta integración es fundamental para ejecutar código en un entorno serverless, donde las preocupaciones de gestión operativa y escalabilidad se abstraen.

2.1. Opciones de integración Lambda

Las integraciones Lambda vienen en dos variantes, cada una atendiendo diferentes necesidades:

  • Integración Proxy: Actúa como un paso directo a la función Lambda, pasando cada detalle de la solicitud HTTP (encabezados, cuerpo, parámetros de consulta). Este método es ideal para una configuración rápida de API, requiriendo configuración mínima mientras proporciona máxima flexibilidad.
  • Integración No-Proxy: Ofrece control granular sobre el flujo de solicitud y respuesta entre API Gateway y Lambda. Utilizando Velocity Template Language (VTL), los desarrolladores pueden adaptar la transformación de la solicitud antes de que llegue a Lambda y ajustar la respuesta antes de que se devuelva al cliente. Este enfoque se adapta a casos donde se deben cumplir formatos específicos de solicitud/respuesta.

2.2 Ventajas Clave

  • Escalabilidad: Escala automáticamente con el volumen de solicitudes entrantes, asegurando que el rendimiento permanezca consistente.
  • Rentabilidad: Los cargos se basan únicamente en el número de solicitudes y el tiempo de ejecución, excluyendo el costo de la integración en sí.
  • Facilidad de Integración: Simplifica el proceso de conectar tu API a funciones Lambda, agilizando el despliegue.

2.3. Representación Visual

sequenceDiagram
    participant Client as Cliente
    participant APIG as API Gateway
    participant Lambda as AWS Lambda
    Client->>+APIG: Solicitud HTTP
    APIG->>+Lambda: Invocar Función
    Lambda-->>-APIG: Respuesta de Función
    APIG-->>-Client: Respuesta HTTP

Este diagrama ilustra sucintamente el ciclo de solicitud-respuesta facilitado por la integración Lambda, destacando la eficiencia y simplicidad de este enfoque.

2.4. Rendimiento y seguridad

  • Rendimiento: Se beneficia de las capacidades inherentes de auto-escalado de AWS Lambda, ofreciendo alto rendimiento.
  • Seguridad: Gobernado por roles y políticas de IAM, asegurando un control de acceso robusto y protección de datos.

2.5. Implicaciones de Costos

Si bien no hay un cargo directo por integrar Lambda con API Gateway, los costos se incurren basados en el volumen de solicitudes y la duración de la ejecución de la función Lambda, siguiendo los modelos de precios de AWS Lambda.

2.6. Aplicaciones Prácticas

  • Procesamiento de Datos: Ideal para aplicaciones que requieren análisis o manipulación de datos en tiempo real.
  • Procesamiento en Tiempo Real: Soporta aplicaciones interactivas proporcionando respuestas backend inmediatas.
  • Servicios Backend Serverless: Permite el desarrollo de arquitecturas completamente serverless para servicios backend, desde aplicaciones web hasta APIs de datos.

Ejemplo de implementación

Considera un escenario donde necesitas procesar datos de pedidos entrantes en formato XML, pero tu función Lambda espera JSON. Usando una integración no-proxy, puedes configurar API Gateway para transformar el XML en JSON antes de que llegue a la función Lambda. Por el contrario, si la función Lambda devuelve JSON, puedes configurar API Gateway para convertir este JSON de vuelta a XML para el cliente.

2.7. Ejemplo de Código de Configuración (Terraform)

A continuación se muestra un ejemplo simplificado usando Terraform para demostrar la configuración de una integración proxy con AWS Lambda:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
resource "aws_api_gateway_rest_api" "MyApi" {
  name        = "LambdaProxyApi"
}

resource "aws_api_gateway_resource" "MyResource" {
  rest_api_id = aws_api_gateway_rest_api.MyApi.id
  parent_id   = aws_api_gateway_rest_api.MyApi.root_resource_id
  path_part   = "{proxy+}"
}

resource "aws_api_gateway_method" "MyLambdaIntegration" {
  rest_api_id   = aws_api_gateway_rest_api.MyApi.id
  resource_id   = aws_api_gateway_resource.MyResource.id
  http_method   = "POST"
  authorization = "NONE"
  integration {
    type              = "AWS_PROXY"
    http_method       = "POST"
    uri               = "arn:aws:apigateway:${var.region}:lambda:path/2015-03-31/functions/${var.lambda_function_arn}/invocations"
    integration_http_method = "POST"
  }
}

Este script de Terraform configura un API Gateway con una integración proxy a una función AWS Lambda, ilustrando cuán fácilmente estos componentes pueden vincularse para aprovechar el poder de la computación serverless.

3. Integraciones HTTP

Las integraciones HTTP permiten que API Gateway actúe como un proxy para endpoints HTTP. Esto incluye integración con servicios AWS habilitados para HTTP, APIs HTTP externas y microservicios. Esta flexibilidad hace que las integraciones HTTP sean una piedra angular para extender la funcionalidad de tus aplicaciones más allá del ecosistema AWS.

API Gateway puede actuar como un intermediario robusto, reenviando solicitudes de clientes a cualquier endpoint HTTP y luego devolviendo la respuesta al cliente. Esta capacidad es especialmente valiosa para integrar con APIs RESTful a través de internet o dentro de tu entorno AWS, permitiendo una interacción fluida con una amplia gama de servicios.

3.1. Ventajas Clave

  • Flexibilidad: Conecta con cualquier endpoint HTTP, alojado en AWS o externamente.
  • Eficiencia: Reduce la latencia integrando directamente tu API con aplicaciones o servicios compatibles con HTTP.
  • Proxy HTTP Genérico: Utiliza métodos HTTP estándar e integra con servicios que pueden no tener integraciones nativas de API Gateway.

3.2. Representación Visual

sequenceDiagram
    participant Client as Cliente
    participant APIG as API Gateway
    participant HTTP as Endpoint HTTP
    Client->>+APIG: Solicitud HTTP
    APIG->>+HTTP: Reenviar Solicitud
    HTTP-->>-APIG: Respuesta del Endpoint
    APIG-->>-Client: Respuesta HTTP

Este diagrama ilustra el flujo del proceso, destacando cómo API Gateway sirve como intermediario entre clientes y servicios HTTP.

3.3. Rendimiento y seguridad

  • Rendimiento: Depende del endpoint HTTP objetivo, subrayando la importancia de elegir servicios responsivos para la integración.
  • Seguridad: Usa HTTPS para asegurar los datos en tránsito.

3.4. Implicaciones de Costos

La integración con endpoints HTTP no incurre en tarifas adicionales más allá del precio estándar de solicitudes de API Gateway. Sin embargo, ten en cuenta que se aplican costos de transferencia de datos y cualquier cargo asociado con el servicio externo, por lo que es esencial monitorear el uso para gestionar los gastos de manera efectiva.

3.5. Aplicaciones Prácticas

Las integraciones HTTP son versátiles, soportando una amplia gama de aplicaciones:

  • Integración de API de Terceros: Ideal para incorporar funcionalidad de servicios externos, como feeds de redes sociales, procesamiento de pagos o datos meteorológicos.
  • Arquitectura de Microservicios: Facilita una arquitectura desacoplada permitiendo que microservicios individuales, posiblemente alojados en ECS o EC2, se comuniquen a través de API Gateway.
  • Entrega y Gestión de Contenido: Agiliza la distribución y gestión de contenido sirviendo como puerta de enlace al contenido alojado en diferentes plataformas.

Ejemplo de implementación

Supongamos que deseas integrar tu API Gateway con una API de servicio meteorológico de terceros para obtener actualizaciones del clima. Este servicio proporciona un endpoint HTTP que acepta solicitudes GET con un nombre de ciudad como parámetro de consulta y devuelve datos meteorológicos en formato JSON.

3.6. Ejemplo de Código de Configuración (Terraform)

A continuación se muestra un script simplificado de Terraform que demuestra cómo configurar la integración de proxy HTTP, ilustrando la facilidad con la que API Gateway puede conectarse a servicios externos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
resource "aws_api_gateway_rest_api" "MyApi" {
  name = "HttpProxyApi"
}

resource "aws_api_gateway_resource" "MyResource" {
  rest_api_id = aws_api_gateway_rest_api.MyApi.id
  parent_id   = aws_api_gateway_rest_api.MyApi.root_resource_id
  path_part   = "weather"
}

resource "aws_api_gateway_method" "MyHttpIntegration" {
  rest_api_id   = aws_api_gateway_rest_api.MyApi.id
  resource_id   = aws_api_gateway_resource.MyResource.id
  http_method   = "GET"
  authorization = "NONE"

  integration {
    type                    = "HTTP_PROXY"
    integration_http_method = "GET"
    uri                     = "https://example.com/weather"
  }
}

Este ejemplo subraya la naturaleza directa de configurar integraciones HTTP, empoderando a los desarrolladores para extender rápidamente las capacidades de sus APIs.

4. Integraciones Mock

Las integraciones mock te permiten simular el comportamiento de la API sin integración backend. Con integraciones mock, puedes devolver una respuesta fija al llamador de la API directamente desde API Gateway, facilitando la validación de definiciones de API y el desarrollo del lado del cliente independientemente del backend.

4.1. Ventajas Clave

Las integraciones mock sirven múltiples propósitos, reduciendo significativamente el tiempo y los recursos típicamente requeridos para el desarrollo de API:

  • Prototipado Rápido: Simula rápidamente respuestas de API para el desarrollo del cliente sin necesidad de un backend.
  • Pruebas y Validación: Simplifica el proceso de probar contratos de API y estructuras de respuesta, asegurando que los consumidores de API puedan manejar varios tipos de respuesta de manera efectiva.

4.2. Representación Visual

sequenceDiagram
    participant Client as Cliente
    participant APIG as API Gateway
    Client->>+APIG: Solicitud HTTP
    APIG-->>-Client: Respuesta Mock

4.3. Rendimiento y seguridad

  • Rendimiento: Entrega respuestas inmediatas, evitando la latencia y el tiempo de procesamiento asociados con servicios backend.
  • Seguridad: Aprovecha las características de seguridad integradas de API Gateway, asegurando que los endpoints mock estén protegidos según los mismos estándares que cualquier otro endpoint de API.

4.4. Implicaciones de Costos

Las integraciones mock son rentables, incurriendo en cargos solo basados en el número de llamadas API realizadas, sin tarifas adicionales por la funcionalidad mock en sí. Esto lo convierte en una opción económica para desarrollar, probar e iterar en APIs.

4.5. Aplicaciones Prácticas

Las integraciones mock son particularmente útiles en escenarios como:

  • Prototipado y Pruebas de API: Los desarrolladores pueden crear rápidamente endpoints mock para probar interacciones de API, manejo del cliente de varios tipos de respuesta y condiciones de error sin esperar la implementación del backend.
  • Respuestas de Datos Estáticos: Ideal para escenarios donde una API necesita devolver datos consistentes y predecibles para desarrollo o pruebas de frontend.
  • Simulación de Errores: Facilita la prueba de la resiliencia de aplicaciones cliente y el manejo de errores simulando fallos de API o respuestas inesperadas.

Ejemplo de implementación

Imagina que estás trabajando en una nueva característica de aplicación que requiere respuestas específicas de API para pruebas de lógica de frontend. Al configurar una integración mock, puedes configurar API Gateway para devolver una respuesta JSON predeterminada, como un código de estado 200 con {“message”: “Esta es una respuesta mock”}, permitiendo que el equipo de frontend avance sin dependencias del backend.

4.6. Ejemplo de Código de Configuración (Terraform)

A continuación se muestra un ejemplo de Terraform que demuestra la configuración de una integración mock, mostrando la simplicidad de configurar respuestas simuladas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
resource "aws_api_gateway_rest_api" "MyApi" {
  name = "MockApi"
}

resource "aws_api_gateway_resource" "MyResource" {
  rest_api_id = aws_api_gateway_rest_api.MyApi.id
  parent_id   = aws_api_gateway_rest_api.MyApi.root_resource_id
  path_part   = "mockpath"
}

resource "aws_api_gateway_method" "MyMockIntegration" {
  rest_api_id   = aws_api_gateway_rest_api.MyApi.id
  resource_id   = aws_api_gateway_resource.MyResource.id
  http_method   = "GET"
  authorization = "NONE"

  integration {
    type = "MOCK"
    request_templates = {
      "application/json" = "Action=MockResponse&{ \"statusCode\": 200 }"
    }
    integration_responses = [{
      status_code = "200"
      response_templates = {
        "application/json" = "{\"message\": \"Esta es una respuesta mock\"}"
      }
    }]
  }
}

Este script ejemplifica cómo establecer una integración mock dentro de API Gateway usando Terraform, permitiendo a los desarrolladores simular endpoints de API rápidamente.

5. Integraciones de Servicios AWS

Las integraciones de servicios AWS permiten que API Gateway interactúe directamente con otros servicios AWS sin escribir código de integración personalizado. Esta integración simplifica la arquitectura al permitir el acceso directo a servicios AWS, como poner un elemento en una tabla de Amazon DynamoDB o publicar un mensaje en un tema de Amazon SNS, directamente a través de API Gateway.

5.1. Ventajas Clave

La conexión directa a servicios AWS a través de API Gateway no solo simplifica la arquitectura sino que también mejora la eficiencia general y escalabilidad de tus aplicaciones:

  • Simplicidad: Elimina la necesidad de servicios o capas intermediarias, permitiendo una arquitectura más limpia.
  • Acceso directo: Permite que las APIs realicen acciones directamente en servicios AWS.

Diferencia entre integración de Servicios AWS e integración HTTP:

Las Integraciones de Servicios AWS son un subconjunto de lo que puedes lograr con Integraciones HTTP, pero ofrecen un enfoque más integrado y centrado en AWS, simplificando la configuración al abstraer las solicitudes HTTP subyacentes en acciones similares al SDK de AWS directamente dentro de API Gateway.

5.2. Representación Visual

sequenceDiagram
    participant Client as Cliente
    participant APIG as API Gateway
    participant AWSService as Servicio AWS
    Client->>+APIG: Solicitud HTTP
    APIG->>+AWSService: Invocar Acción del Servicio
    AWSService-->>-APIG: Respuesta del Servicio
    APIG-->>-Client: Respuesta HTTP

Este diagrama ejemplifica cómo API Gateway actúa como un conducto entre clientes y servicios AWS, agilizando el flujo de solicitud y respuesta.

5.3. Rendimiento y seguridad

  • Rendimiento: Las Integraciones de Servicios AWS están construidas sobre la robusta infraestructura de AWS, asegurando alta disponibilidad y confiabilidad.
  • Seguridad: Aprovechando roles y permisos de AWS Identity and Access Management (IAM), estas integraciones ofrecen controles de seguridad de grano fino, asegurando que solo entidades autorizadas puedan ejecutar acciones específicas.

5.4. Implicaciones de Costos

Similar a las integraciones HTTP, el costo se basa en el precio de solicitudes de API Gateway. Además, se aplican cargos de operación estándar para el servicio AWS integrado.

5.5. Aplicaciones Prácticas

La versatilidad de las Integraciones de Servicios AWS soporta un amplio espectro de casos de uso:

  • Interacción Directa con Base de Datos: Agiliza el almacenamiento y recuperación de datos interactuando directamente con DynamoDB.
  • Notificaciones y Mensajería: Utiliza SNS o SQS para difusión eficiente de mensajes y encolamiento.
  • Orquestación de Flujos de Trabajo: Aprovecha AWS Step Functions para ejecución de flujos de trabajo complejos directamente desde API Gateway.

Ejemplo de implementación

Imagina un escenario donde necesitas datos en tiempo real de una tabla DynamoDB accesible a través de tu API. Configurar una Integración de Servicio AWS permite que API Gateway consulte directamente DynamoDB, evitando la necesidad de una función Lambda. Este enfoque directo reduce la latencia, simplifica la arquitectura y puede reducir costos.

5.6. Ejemplo de Código de Configuración (Terraform)

A continuación se muestra un script mejorado de Terraform que describe la configuración de Integración de Servicio AWS para DynamoDB:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
resource "aws_api_gateway_rest_api" "MyApi" {
  name = "DynamoDBServiceApi"
}

resource "aws_api_gateway_resource" "MyResource" {
  rest_api_id = aws_api_gateway_rest_api.MyApi.id
  parent_id   = aws_api_gateway_rest_api.MyApi.root_resource_id
  path_part   = "data"
}

resource "aws_api_gateway_method" "MyDynamoDBIntegration" {
  rest_api_id   = aws_api_gateway_rest_api.MyApi.id
  resource_id   = aws_api_gateway_resource.MyResource.id
  http_method   = "POST"
  authorization = "NONE"

  integration {
    type                    = "AWS"
    integration_http_method = "POST"
    uri                     = "arn:aws:apigateway:${var.region}:dynamodb:action/PutItem"
    credentials             = aws_iam_role.apigateway_dynamodb.arn
  }
}

Este script demuestra cómo configurar un método de API Gateway que interactúa directamente con DynamoDB, mostrando la eficiencia y simplicidad de las Integraciones de Servicios AWS.

5.7. Ejemplo de Consola AWS

En este caso, te mostraré cómo configurar la integración directa entre Amazon API Gateway y DynamoDB y Step Functions.

El flujo visual de ejecución del método es común para ambos casos:

diagrama visual de ejecución del método

Te mostraré solo la configuración clave para cada opción, y entenderás cómo funciona.

5.7.1. Integración directa con Step Functions

Esta es la solicitud de integración. Los valores importantes aquí son:

  • Servicio AWS: Step Functions
  • Método HTTP: POST
  • Nombre de acción: StartExecution
  • Rol de ejecución: debes crear un rol para API Gateway con permisos para conectarse a Step Functions

solicitud de integración de step function

Esta parte es opcional, pero si no la configuras aquí, debes especificar en cada solicitud el ARN de las Step Functions con las que deseas conectarte:

plantilla de mapeo de step function

5.7.2. Integración directa con DynamoDB

Esta es la solicitud de integración. Los valores importantes aquí son:

  • Servicio AWS: DynamoDB
  • Método HTTP: POST
  • Nombre de acción: Scan
  • Rol de ejecución: debes crear un rol para API Gateway con permisos para conectarse a Step Functions

solicitud de integración de dynamodb

Es importante definir el método HTTP como POST. Sin embargo, tu método de API Gateway puede ser un método GET.

Esta parte es opcional, pero si no la configuras aquí, debes especificar en cada solicitud el ARN de las Step Functions con las que deseas conectarte:

plantilla de mapeo de dynamodb

Las integraciones VPC Link permiten integraciones privadas que permiten a API Gateway conectarse de forma segura con recursos dentro de una Amazon Virtual Private Cloud (VPC). Esto es particularmente útil para acceder a endpoints HTTP alojados dentro de tu VPC, sin exponerlos a internet público.

Al configurar un VPC Link, es importante distinguir entre los dos tipos disponibles en API Gateway:

  • REST API VPC Link: Solo soporta integración con un NLB (Network Load Balancer).
  • HTTP API VPC Link: Soporta integración tanto con ALB (Application Load Balancer) como con NLB.

6.2. Ventajas Clave

Al aprovechar VPC Links, puedes mantener la postura de seguridad de tus sistemas backend mientras aseguras conectividad fluida desde API Gateway:

  • Seguridad: Protege los sistemas backend evitando la exposición a internet público, confiando en cambio en las características de seguridad inherentes de AWS VPC.
  • Acceso Privado: Facilita el acceso directo a recursos contenidos en VPC, como microservicios o bases de datos, desde tus APIs, mejorando la seguridad y eficiencia de la comunicación interna.

6.3. Representación Visual

sequenceDiagram
    participant Client as Cliente
    participant APIG as API Gateway
    participant VL as VPC Link
    participant VPCRes as Recurso VPC (ECS, ALB, etc.)
    Client->>+APIG: Solicitud HTTP
    APIG->>+VL: Solicitud vía VPC Link
    VL->>+VPCRes: Reenviar Solicitud
    VPCRes-->>-VL: Respuesta
    VL-->>-APIG: Respuesta vía VPC Link
    APIG-->>-Client: Respuesta HTTP

Esta ilustración demuestra el flujo de solicitudes y respuestas facilitado por VPC Links, destacando la ruta segura e interna dentro de la VPC.

6.4. Rendimiento y seguridad

  • Rendimiento: La efectividad de las integraciones VPC Link depende en gran medida de la configuración de red de tu VPC y el rendimiento de los servicios backend objetivo.
  • Seguridad: VPC Links refuerzan la seguridad de las integraciones de API asegurando que el tráfico entre API Gateway y los recursos VPC no atraviese internet público, utilizando los robustos mecanismos de seguridad VPC de AWS.

6.5. Implicaciones de Costos

El precio incluye un cargo por hora para cada VPC link, más cargos por datos procesados. Esto es adicional al precio estándar de solicitudes de API Gateway.

6.6. Aplicaciones Prácticas

Emplear VPC Link es particularmente ventajoso para:

  • Asegurar Microservicios Privados: Ideal para arquitecturas donde microservicios desplegados en Amazon ECS o EKS dentro de una VPC necesitan ser expuestos de forma segura a través de API Gateway sin acceso a internet público.

Ejemplo de implementación

Si tienes un microservicio ejecutándose en Amazon ECS que está expuesto a través de un Application Load Balancer (ALB) dentro de tu VPC, puedes usar VPC Link para crear una conexión segura entre API Gateway y el ALB. Esta configuración permite que HTTP API Gateway enrute solicitudes a tu servicio ECS sin exponer el servicio a internet público. Para lograr esto, crea un VPC Link en API Gateway apuntando a tu ALB, y luego configura la solicitud de integración de tu API para enrutar a través del VPC Link.

6.7. Ejemplo de Código de Configuración (Terraform)

Aquí hay un script mejorado de Terraform que proporciona un modelo para configurar una integración VPC Link para conectar un HTTP API Gateway con un Application Load Balancer con respuesta fija:

22/02/2025: Actualizado el código terraform para mostrar el ejemplo completo

Esta es la evidencia de que el siguiente código funciona: respuesta alb desde http api gateway usando integración vpc link

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
variable "availability_zones" {
  description = "Lista de zonas de disponibilidad"
  type        = list(string)
  default     = ["eu-west-1a", "eu-west-1b"]
}

# API Gateway VPC Link
resource "aws_apigatewayv2_vpc_link" "MyVPCLink" {
  name              = "MyVPCLink"
  security_group_ids = [aws_security_group.my_sg.id]
  subnet_ids        = aws_subnet.my_subnet[*].id
}

# Configuración ALB para Microservicios (ej., ECS)
resource "aws_lb" "my_alb" {
  name               = "my-alb"
  internal           = true
  load_balancer_type = "application"
  security_groups    = [aws_security_group.my_sg.id]
  subnets            = aws_subnet.my_subnet[*].id
}

# Listener ALB para tráfico HTTP
resource "aws_lb_listener" "my_alb_listener" {
  load_balancer_arn = aws_lb.my_alb.arn
  port              = 80
  protocol          = "HTTP"

  default_action {
    type = "fixed-response"
    fixed_response {
      status_code = 200
      message_body = "API Gateway conectado a ALB"
      content_type = "text/plain"
    }
  }
}

# Grupo de Seguridad para ALB
resource "aws_security_group" "my_sg" {
  name        = "my-security-group"
  description = "Grupo de seguridad para ALB"
  vpc_id      = aws_vpc.my_vpc.id

  # Permitir tráfico HTTP entrante desde la VPC (API Gateway VPC Link)
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["10.0.0.0/16"]  # Permitir tráfico desde dentro de la VPC
  }

  # Permitir todo el tráfico saliente
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

# Configuración VPC
resource "aws_vpc" "my_vpc" {
  cidr_block = "10.0.0.0/16"
}

# Configuración de Subnets
resource "aws_subnet" "my_subnet" {
  count                   = 2
  vpc_id                  = aws_vpc.my_vpc.id
  cidr_block              = count.index == 0 ? "10.0.1.0/24" : "10.0.2.0/24"
  availability_zone       = var.availability_zones[count.index]
  map_public_ip_on_launch = false
}

# Definir API Gateway (HTTP API)
resource "aws_apigatewayv2_api" "my_api" {
  name          = "MyAPIGatewayAPI"
  protocol_type = "HTTP"
}

resource "aws_apigatewayv2_integration" "my_integration" {
  api_id           = aws_apigatewayv2_api.my_api.id
  integration_type = "HTTP_PROXY"
  integration_uri  = aws_lb_listener.my_alb_listener.arn  # Usar ARN del Listener ALB aquí
  connection_type  = "VPC_LINK"
  connection_id    = aws_apigatewayv2_vpc_link.MyVPCLink.id
  integration_method = "ANY"
}

# Definir Ruta para API Gateway con el método HTTP especificado
resource "aws_apigatewayv2_route" "my_route" {
  api_id    = aws_apigatewayv2_api.my_api.id
  route_key = "ANY /myendpoint"  # Definir método HTTP y ruta de API aquí
  target    = "integrations/${aws_apigatewayv2_integration.my_integration.id}"
}

resource "aws_apigatewayv2_stage" "my_stage" {
  api_id      = aws_apigatewayv2_api.my_api.id
  name        = "test"
  auto_deploy = true    # Desplegar cambios automáticamente
}

Esta configuración de Terraform describe la creación de un VPC Link en HTTP API Gateway, apuntando a un Application Load Balancer (ALB) dentro de una VPC, demostrando el proceso directo de asegurar el acceso de tu API a servicios internos.

7. Conclusión

A lo largo de este artículo, hemos explorado las diversas opciones de integración disponibles en Amazon API Gateway, cada una sirviendo propósitos distintos y ofreciendo ventajas únicas. Desde el poder serverless de las integraciones de Funciones Lambda hasta la conectividad robusta de las integraciones HTTP y de Servicios AWS, así como las conexiones privadas seguras facilitadas por VPC Links y la simplicidad de las Respuestas Mock para desarrollo y pruebas, API Gateway se presenta como una herramienta versátil en el ecosistema AWS. A continuación se muestra una tabla resumen que recapitula estos tipos de integración, sus beneficios, casos de uso y consideraciones de costos:

Tipo de IntegraciónVentajas ClaveCasos de UsoImplicaciones de Costos
Función LambdaEscalabilidad, Rentabilidad, Facilidad de IntegraciónProcesamiento de Datos, Procesamiento en Tiempo RealBasado en volumen de solicitudes y ejecución de función Lambda
HTTPFlexibilidad, Eficiencia, Proxy HTTP GenéricoAPIs de Terceros, MicroserviciosPrecio de solicitudes de API Gateway más costos de servicio externo
MockPrototipado Rápido, Pruebas y ValidaciónPrototipado de API, Pruebas, Datos EstáticosBasado en volumen de llamadas API
Servicio AWSSimplicidad, Acceso directoInteracción con Base de Datos, NotificacionesPrecio de solicitudes de API Gateway más cargos de operación de servicio AWS
VPC LinkSeguridad, Acceso PrivadoAsegurar Microservicios PrivadosCargo por hora para cada VPC link más datos procesados

Esta tabla subraya la flexibilidad y poder de API Gateway, ilustrando cómo puede servir una amplia gama de aplicaciones y necesidades arquitectónicas. Al seleccionar cuidadosamente el tipo de integración apropiado, los desarrolladores pueden optimizar sus servicios backend para rendimiento, costo y seguridad, asegurando que sus aplicaciones sean escalables, eficientes y bien integradas dentro del panorama AWS.

Incorporar estas integraciones en tu arquitectura no solo mejora las capacidades de tus aplicaciones sino que también se alinea con las mejores prácticas para el desarrollo nativo en la nube, aprovechando todo el potencial de los servicios AWS para crear aplicaciones robustas, escalables y seguras.

Este artículo está licenciado bajo CC BY 4.0 por el autor.