Amazon API Gateway
Amazon API Gateway
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon API Gateway Guía para desarrolladores
Las marcas comerciales y la imagen comercial de Amazon no se pueden utilizar en relación con
ningún producto o servicio que no sea de Amazon de ninguna manera que pueda causar confusión
entre los clientes y que menosprecie o desacredite a Amazon. Todas las demás marcas comerciales
que no son propiedad de Amazon son propiedad de sus respectivos propietarios, que pueden o no
estar afiliados, relacionados o patrocinados por Amazon.
Amazon API Gateway Guía para desarrolladores
Table of Contents
¿Qué es Amazon API Gateway? ......................................................................................................... 1
Arquitectura de API Gateway .......................................................................................................... 2
Características de API Gateway ..................................................................................................... 3
Casos de uso de API Gateway ....................................................................................................... 3
Uso de API Gateway para crear API REST .............................................................................. 4
Uso de API Gateway para crear API HTTP .............................................................................. 5
Uso de API Gateway para crear API de WebSocket ................................................................. 5
¿Quiénes utilizan API Gateway? ................................................................................................ 6
Acceso a API Gateway ................................................................................................................... 7
Parte de la infraestructura sin servidor de AWS ............................................................................ 8
Cómo comenzar a usar Amazon API Gateway .............................................................................. 8
Conceptos de API Gateway ............................................................................................................ 8
Elección entre API de REST y API HTTP .................................................................................... 14
................................................................................................................................................... 14
Tipo de punto de conexión ....................................................................................................... 14
Seguridad .................................................................................................................................. 15
Autorización ............................................................................................................................... 15
Administración de API .............................................................................................................. 16
Desarrollo .................................................................................................................................. 16
Supervisión ................................................................................................................................ 17
Integraciones ............................................................................................................................. 18
Introducción a la consola de la API de REST .............................................................................. 19
Paso 1: Crear una función Lambda ......................................................................................... 20
Paso 2: Crear una API de REST ............................................................................................. 20
Paso 3: Crear una integración de proxy de Lambda ............................................................... 21
Paso 4: Implementar la API ...................................................................................................... 21
Paso 5: Invocar la API .............................................................................................................. 22
(Opcional) Paso 6: limpiar ........................................................................................................ 23
Requisitos previos .............................................................................................................................. 25
Registro para obtener una Cuenta de AWS ................................................................................. 25
Crear un usuario administrativo .................................................................................................... 25
Introducción ........................................................................................................................................ 27
Paso 1: Crear una función Lambda .............................................................................................. 28
Paso 2: crear una API HTTP ........................................................................................................ 29
iii
Amazon API Gateway Guía para desarrolladores
iv
Amazon API Gateway Guía para desarrolladores
v
Amazon API Gateway Guía para desarrolladores
vi
Amazon API Gateway Guía para desarrolladores
vii
Amazon API Gateway Guía para desarrolladores
viii
Amazon API Gateway Guía para desarrolladores
ix
Amazon API Gateway Guía para desarrolladores
Note
La experiencia de consola de API Gateway rediseñada ya está disponible. Para ver un
tutorial sobre cómo usar la consola para crear una API de REST, consulte Introducción a la
consola de la API de REST.
• Se basan en HTTP.
• Habilitan la comunicación entre cliente y servidor sin estado.
• Implementan métodos HTTP estándar como, por ejemplo, GET, POST, PUT, PATCH y DELETE.
Para obtener más información acerca de las API REST de API Gateway y las API HTTP, consulte the
section called “Elección entre API de REST y API HTTP ”, Uso de API HTTP, the section called “Uso
de API Gateway para crear API REST” y the section called “Crear y configurar”.
Para obtener más información sobre las API de WebSocket de API Gateway, consulte the section
called “Uso de API Gateway para crear API de WebSocket” y the section called “Acerca de las API
de WebSocket”.
1
Amazon API Gateway Guía para desarrolladores
Temas
• Arquitectura de API Gateway
• Características de API Gateway
• Casos de uso de API Gateway
• Acceso a API Gateway
• Parte de la infraestructura sin servidor de AWS
• Cómo comenzar a usar Amazon API Gateway
• Conceptos de Amazon API Gateway
• Elección entre API de REST y API HTTP
• Introducción a la consola de la API de REST
Este diagrama ilustra cómo las API que crea en Amazon API Gateway le proporcionan a usted o
a sus clientes desarrolladores una experiencia de desarrollador integrada y coherente para crear
aplicaciones sin servidor de AWS. API Gateway gestiona todas las tareas relacionadas con la
aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API. Estas
tareas incluyen la administración del tráfico, el control de la autorización y el acceso, el monitoreo y la
administración de versiones de la API.
API Gateway actúa como una "puerta principal" para que las aplicaciones accedan a datos, lógica
empresarial o funcionalidad desde sus servicios de backend, como cargas de trabajo que se
ejecutan en Amazon Elastic Compute Cloud (Amazon EC2), código que se ejecuta en AWS Lambda,
cualquier aplicación web o aplicaciones de comunicación en tiempo real.
• Compatibilidad con las API con estado (WebSocket) y las API (HTTP y REST).
• Mecanismos de autenticación eficaces y flexibles, como políticas de AWS Identity and Access
Management, funciones de autorizador de Lambda y grupos de usuarios de Amazon Cognito.
• Implementaciones de la versión Canary para el despliegue de cambios de forma segura.
• Registro de CloudTrail y monitoreo del uso y de los cambios en las API.
• Registro de acceso y registro de ejecución de CloudWatch, que incluye la posibilidad de establecer
alarmas. Para obtener más información, consulte the section called “Métricas de CloudWatch” y
the section called “Métricas”.
• Posibilidad de utilizar plantillas de AWS CloudFormation para habilitar la creación de las API. Para
obtener más información, consulte Referencia de tipos de recursos de Amazon API Gateway y
Referencia de tipos de recursos de Amazon API Gateway V2.
• Soporte para los nombres de dominio personalizados.
• Integración con AWS WAF para la protección de sus API frente a ataques web comunes.
• Integración con AWS X-Ray para comprender y cribar latencias de rendimiento.
Para obtener una lista completa de lanzamientos de características de API Gateway, consulte
Historial de revisión.
Una API REST de API Gateway está formada por recursos y métodos. Un recurso es una entidad
lógica a la que una aplicación puede acceder a través de una ruta de recursos. Un método se
corresponde con una solicitud de la API de REST enviada por el usuario de la API y la respuesta
devuelta al usuario.
Por ejemplo, /incomes podría ser la ruta de un recurso que representa los ingresos del usuario de
la aplicación. Un recurso puede tener una o varias operaciones, las cuales definen los verbos HTTP
correspondientes, por ejemplo, GET, POST PUT, PATCH y DELETE. Una combinación de una ruta
de recurso y una operación identifica un método de la API. Por ejemplo, un método POST /incomes
podría añadir una ganancia devengada por el intermediario y un método GET /expenses podría
consultar los gastos en los que ha incurrido el intermediario.
La aplicación no necesita saber dónde se almacenan y de dónde se obtienen los datos solicitados
en el backend. En las API REST de API Gateway, el frontend se encapsula mediante solicitudes de
métodos y respuestas de métodos. La API se conecta con el backend por medio de solicitudes de
integración y respuestas de integración.
Por ejemplo, con DynamoDB como backend, el desarrollador de la API configura la solicitud de
integración para reenviar la solicitud del método de entrada al backend elegido. La configuración
incluye las especificaciones de acción de DynamoDB adecuadas y los roles y políticas de IAM
necesarios, así como la transformación de los datos de entrada correcta. El backend devuelve el
resultado a API Gateway como una respuesta de integración.
Para dirigir la respuesta de integración a una respuesta de método adecuada (de un determinado
código de estado HTTP) al cliente, puede configurar la respuesta de integración para que mapee
los parámetros de respuesta necesarios desde la integración del método. A continuación, si fuera
necesario, convierta el formato de los datos de salida del backend al del frontend. API Gateway le
permite definir un esquema o modelo de carga para facilitar la configuración de la plantilla de mapeo
de cuerpo.
• Soporte para generar SDK y crear la documentación de API mediante extensiones de OpenAPI de
API Gateway
Las API HTTP le permiten crear API de RESTful con menor latencia y menor costo que las API de
REST.
Puede utilizar las API HTTP para enviar solicitudes a funciones de AWS Lambda o a cualquier punto
de enlace HTTP públicamente direccionable.
Por ejemplo, puede crear una API HTTP que se integre con una función de Lambda en el backend.
Cuando un cliente llama a la API, API Gateway envía la solicitud a la función de Lambda y devuelve
la respuesta de la función al cliente.
Las API HTTP son compatibles con la autorización de OpenID Connect y OAuth 2.0. Vienen con
soporte integrado para el uso compartido de recursos entre orígenes (CORS) y las implementaciones
automáticas.
Para obtener más información, consulte the section called “Elección entre API de REST y API HTTP
”.
En una API de WebSocket, el cliente y el servidor pueden enviarse mensajes entre sí en cualquier
momento. Los servidores de backend pueden enviar fácilmente datos a los usuarios y dispositivos
conectados, lo que evita la necesidad de implementar complejos mecanismos de sondeo.
Por ejemplo, podría crear una aplicación sin servidor mediante una API de WebSocket de API
Gateway y AWS Lambda para enviar y recibir mensajes entre usuarios individuales o grupos de
usuarios de una sala de conversación. También puede invocar servicios de backend como por
ejemplo AWS Lambda, Amazon Kinesis o un punto de enlace HTTP en función del contenido de los
mensajes.
Puede utilizar la API de WebSocket de API Gateway para crear aplicaciones seguras de
comunicación en tiempo real sin tener que aprovisionar ni administrar servidores para administrar
las conexiones o los intercambios de datos a gran escala. Los casos de uso focalizados incluyen
aplicaciones en tiempo real, como la siguiente:
• Aplicaciones de chat
Existen dos tipos de desarrolladores que utilizan API Gateway: los desarrolladores de API y los
desarrolladores de aplicaciones.
Un desarrollador de API crea e implementa una API para habilitar la funcionalidad necesaria en API
Gateway. El desarrollador de API debe ser un usuario en la cuenta de AWS que posee la API.
Un desarrollador de aplicaciones diseña una aplicación funcional que llama a los servicios de AWS
mediante la invocación de una API de WebSocket o REST creada por un desarrollador de API en
API Gateway.
Para crear, configurar e implementar una API, un desarrollador de API trabaja con el componente del
servicio de API Gateway para administración de la API, denominado apigateway.
Como desarrollador de API, puede crear y administrar una API mediante la consola de API Gateway
tal y como se describe en Introducción a la API de API Gateway o llamando a la Referencias de API.
Existen varias maneras de llamar a esta API. Incluyen el uso de AWS Command Line Interface (AWS
CLI), o mediante un SDK de AWS. Además, puede habilitar la creación de la API con Plantillas de
AWS CloudFormation o, en el caso de las API REST y HTTP, con Trabajar con extensiones de API
Gateway para OpenAPI.
Para obtener una lista de las regiones en las que API Gateway está disponible, así como los puntos
de enlace del servicio de control asociados, consulte Cuotas y puntos de enlace de Amazon API
Gateway.
• AWS Management Console: la AWS Management Console proporciona una interfaz web que
permite crear y administrar las API. Una vez completados los pasos que se indican en Requisitos
previos, puede acceder a la consola de API Gateway en https://console.aws.amazon.com/
apigateway.
• AWS SDK: si utiliza un lenguaje de programación para el que AWS proporciona un SDK, puede
usar un SDK para obtener acceso a API Gateway. Los SDK simplifican la autenticación, se
integran fácilmente con su entorno de desarrollo y proporcionan acceso a los comandos de API
Gateway. Para obtener más información, consulte Herramientas para Amazon Web Services.
• API de API Gateway V1 y V2: si utiliza un lenguaje de programación para el que no haya un SDK
disponible, consulte la Referencia de la API de Amazon API Gateway versión 1 y la Referencia de
la API de Amazon API Gateway versión 2.
• AWS Command Line Interface: para obtener más información, consulte Configuración inicial de la
AWS Command Line Interface en la Guía del usuario de AWS Command Line Interface.
• AWS Tools for Windows PowerShell: para obtener más información, consulte Configuración
de AWS Tools for Windows PowerShell en la Guía del usuario de AWS Tools for Windows
PowerShell.
Para que una aplicación llame a los servicios de AWS disponibles públicamente, puede utilizar
Lambda para interactuar con los servicios necesarios y exponer las funciones de Lambda a través
de los métodos de API de API Gateway. AWS Lambda ejecuta el código en una infraestructura
informática de alta disponibilidad. Realiza todos los procesos de ejecución y administración que
necesitan los recursos informáticos. Para habilitar las aplicaciones sin servidor, API Gateway es
compatible con las integraciones de proxy optimizadas con puntos de enlace de AWS Lambda y
HTTP.
• Introducción, que proporciona una explicación para crear una API HTTP.
• Happy Little API Shorts, que es una serie de breves vídeos instructivos.
• Crear, implementar y administrar una API de WebSocket para exponer funciones de AWS
Lambda u otros servicios de AWS.
• Invocar los métodos de API expuestos a través de los puntos de enlace HTTP y WebSocket del
frontend.
Una colección de recursos y métodos HTTP que se integran con puntos de enlace HTTP de
backend, funciones de Lambda u otros servicios de AWS. Puede implementar esta colección
en una o más etapas. Normalmente, los recursos de la API están organizados en un árbol de
recursos de acuerdo con la lógica de la aplicación. Cada recurso de la API puede exponer uno
o varios métodos de la API que tienen verbos HTTP únicos admitidos por API Gateway. Para
obtener más información, consulte the section called “Elección entre API de REST y API HTTP ”.
API HTTP de API Gateway
Colección de rutas y métodos integrados con los puntos de enlace HTTP de backend o funciones
de Lambda. Puede implementar esta colección en una o más etapas. Cada ruta puede exponer
uno o varios métodos de la API que tienen verbos HTTP únicos admitidos por API Gateway. Para
obtener más información, consulte the section called “Elección entre API de REST y API HTTP ”.
API de WebSocket de API Gateway
Una colección de rutas y claves de ruta de WebSocket que se integran en puntos de enlace
HTTP de backend, funciones de Lambda u otros servicios de AWS. Puede implementar esta
colección en una o más etapas. Los métodos de la API se invocan a través de conexiones
WebSocket del frontend que se pueden asociar a un nombre de dominio personalizado
registrado.
Implementación de API
Una instantánea de un momento dado de la API de API Gateway. Para que los clientes puedan
utilizar la implementación, esta debe asociarse a una o más etapas de API.
Desarrollador de la API
Su cuenta de AWS que es propietaria de una implementación de API Gateway (por ejemplo, un
proveedor de servicios que también admite el acceso mediante programación).
Punto de enlace de la API
Un nombre de host para una API de API Gateway que se implementa en una región específica.
El nombre de host tiene el formato {api-id}.execute-api.{region}.amazonaws.com. Se
admiten los siguientes tipos de puntos de enlace de API:
• Punto de enlace de API optimizada para límites
• Punto de enlace de API privada
• Punto de enlace de API regional
Clave de API
Cadena alfanumérica que API Gateway utiliza para identificar a un desarrollador de aplicaciones
que utiliza su API REST o de WebSocket. API Gateway puede generar claves de API en su
nombre o usted puede importarlas desde un archivo CSV. Puede utilizar claves de API junto con
autorizadores de Lambda o planes de uso para controlar el acceso a sus API.
Una referencia lógica a un estado del ciclo de vida de la API (por ejemplo, 'dev', 'prod', 'beta', 'v2').
Las etapas de API se identifican por un ID y un nombre de etapa de API.
Desarrolladores de aplicaciones
Un creador de aplicaciones que puede tener o no una cuenta de AWS y que interactúa con la API
que usted, el desarrollador de API, ha implementado. Los desarrolladores de aplicaciones son
sus clientes. Un desarrollador de aplicaciones suele identificarse por una clave de API.
URL de devolución de llamada
Cuando un cliente nuevo se conecta a través de una conexión WebSocket, se puede llamar a una
integración en API Gateway para almacenar la URL de devolución de llamada del cliente. Esa
URL de devolución de llamada se puede utilizar para enviar mensajes al cliente desde el sistema
backend.
Portal para desarrolladores
Una aplicación que permite a los clientes registrarse, encontrar y suscribirse a los productos de
API (planes de uso de API Gateway) ofrecidos por usted, administrar sus claves de API y ver sus
métricas de uso para las API.
Punto de enlace de API optimizada para límites
La interfaz interna de una ruta de API de WebSocket o un método de API REST en API Gateway,
en la que se asignará el cuerpo de una solicitud de ruta o los parámetros y el cuerpo de una
solicitud de método a los formatos requeridos por el backend.
Respuesta de integración
La interfaz interna de una ruta de API de WebSocket o un método de API REST en API Gateway,
en la que se asignarán los códigos de estado, los encabezados y la carga que se reciben del
backend al formato de respuesta que se devuelve a una aplicación cliente.
Plantilla de asignación
Un script escrito en Velocity Template Language (VTL), que transforma un cuerpo de la solicitud
del formato de datos del frontend al formato de datos del backend o viceversa (en el caso del
cuerpo de la respuesta). Las plantillas de asignación se pueden especificar en la solicitud de
integración o en la respuesta de integración. Pueden hacer referencia a datos disponibles en
tiempo de ejecución como contexto y variables de etapa.
La asignación puede ser tan sencilla como una transformación de identidad que transfiere los
encabezados o el cuerpo a través de la integración tal cual desde el cliente al backend para una
solicitud. Lo mismo sucede con la respuesta, en la que la carga se transmite desde el backend al
cliente.
Solicitud de método
La interfaz pública de un método de una API de API Gateway que define los parámetros y el
cuerpo que un desarrollador de aplicaciones debe enviar en las solicitudes para acceder al
backend a través de la API.
Respuesta de método
La interfaz pública de una API de REST que define los códigos de estado, los encabezados y los
modelos de cuerpo que un desarrollador de aplicaciones debería esperar en las respuestas de la
API.
Integración simulada
En una integración simulada, las respuestas de la API se generan directamente a partir de API
Gateway, sin necesidad de un backend de integración. Como desarrollador de una API, puede
decidir cómo API Gateway responde a una solicitud de integración simulada. Para ello, configura
la solicitud de integración y la respuesta de integración del método para asociar una respuesta a
un código de estado determinado.
Modelo
Un esquema de datos que especifica la estructura de datos de una solicitud o carga de respuesta.
Es necesario un modelo para generar un SDK con establecimiento inflexible de tipos de una
API. También se utiliza para validar cargas. Un modelo es cómodo para generar una plantilla
de asignación de muestra para iniciar la creación de una plantilla de asignación de producción.
Aunque es útil, no se requiere para crear una plantilla de asignación.
API privado
Un punto de enlace de API que se expone a través de puntos de enlace de la VPC de tipo interfaz
y permite que un cliente obtenga acceso seguro a los recursos de una API privada dentro de
una VPC. Las API privadas están aisladas de la red pública de Internet y solo se puede obtener
acceso a ellas a través de los puntos de enlace de la VPC de API Gateway a los que se les ha
concedido acceso.
Integración privada
Tipo de integración de API Gateway que permite que un cliente tenga acceso a los recursos que
se encuentran en la VPC de un usuario a través de un punto de enlace de una API REST privada
sin exponerlos a la red pública de Internet.
Integración de proxy
Una configuración simplificada de integración de API Gateway. Puede configurar una integración
de proxy como una integración de proxy HTTP o como una integración de proxy de Lambda.
En las API de REST, la integración de proxy se utiliza normalmente con un recurso de proxy, que
se representa mediante una variable de ruta expansiva (por ejemplo, {proxy+}) combinada con
un método catch-all ANY.
Creación rápida
Puede utilizar la creación rápida para simplificar la creación de una API HTTP. La creación
rápida crea una API con una integración de Lambda o HTTP, una ruta de método catch-all
predeterminada y una etapa predeterminada configurada para implementar automáticamente
los cambios. Para obtener más información, consulte the section called “Crear una API HTTP
mediante la AWS CLI”.
Punto de enlace de API regional
El nombre de host de una API implementada en la región especificada y pensada para prestar
servicio a clientes, como, por ejemplo, instancias EC2, de la misma región de AWS. Las
solicitudes de API se dirigen directamente a la API de API Gateway específica de la región
sin pasar por ninguna distribución de CloudFront. Para las solicitudes destinadas a la misma
región, existe un punto de enlace regional que evita el trayecto innecesario de ida y vuelta a una
distribución de CloudFront.
Además, puede aplicar el direccionamiento basado en latencia a los puntos de enlace regionales
para implementar una API en varias regiones con la misma configuración de punto de enlace de
API regional, establecer el mismo nombre de dominio personalizado para cada API implementada
y configurar registros de DNS basados en latencia en Route 53 para dirigir las solicitudes de los
clientes a la región que tiene la mínima latencia.
Se utiliza una ruta de WebSocket en API Gateway para dirigir los mensajes entrantes a una
integración específica, como una función de AWS Lambda, según el contenido de los mensajes.
Al definir la API de WebSocket, se especifica un clave de ruta y un backend de integración. La
clave de ruta es un atributo del cuerpo del mensaje. Cuando se encuentra una coincidencia para
la clave de ruta en un mensaje entrante, se invoca el backend de integración.
También se puede establecer una ruta predeterminada para las claves de ruta no coincidentes
o para especificar un modelo de proxy que transfiera el mensaje tal cual a los componentes del
backend que realizan el direccionamiento y procesan la solicitud.
Solicitud de ruta
La interfaz pública de un método de API de WebSocket en API Gateway que define el cuerpo que
un desarrollador de aplicaciones debe enviar en las solicitudes para obtener acceso al backend a
través de la API.
Respuesta de ruta
La interfaz pública de una API de WebSocket que define los códigos de estado, los encabezados
y los modelos de cuerpo que un desarrollador de aplicaciones debería esperar de API Gateway.
Plan de uso
Un plan de uso ofrece a determinados clientes de la API acceso a una o varias API de
WebSocket o de REST implementadas. Puede utilizar un plan de uso para configurar la limitación
controlada y los límites de cuota que se ejecutarán en claves de API de cliente individual.
Conexión WebSocket
API Gateway mantiene una conexión persistente entre los clientes y API Gateway. No hay
conexión persistente entre API Gateway y las integraciones de backend, como las funciones de
Lambda. Los servicios de backend se invocan según sea necesario, en función del contenido de
los mensajes recibidos de los clientes.
En las siguientes secciones se resumen las características principales disponibles en las API de
REST y las API HTTP.
El tipo de punto de conexión hace referencia al punto de conexión que API Gateway crea para su
API. Para obtener más información, consulte the section called “Elección de un tipo de punto de
enlace de API” .
Regional ✓ ✓
Private ✓
Seguridad
API Gateway proporciona una serie de formas de proteger su API de ciertas amenazas, como
actores malintencionados o picos de tráfico. Para obtener más información, consulte the section
called “Proteger” y the section called “Proteger”.
AWS WAF ✓
Autorización
API Gateway admite varios mecanismos para controlar y administrar el acceso a la API. Para obtener
más información, consulte the section called “Control de acceso” y the section called “Control de
acceso”.
IAM ✓ ✓
Políticas de recursos ✓
1
Amazon Cognito ✓ ✓
Autorización personalizada ✓ ✓
con una función AWS Lambda
Seguridad 15
Amazon API Gateway Guía para desarrolladores
2
Token web JSON (JWT) ✓
1
Puede utilizar Amazon Cognito con un autorizador de JWT.
2
Puede utilizar un autorizador de Lambda para validar JWT para las API de REST.
Administración de API
Elija las API de REST si necesita capacidades de administración de API, como claves de API
y limitación de velocidad por cliente. Para obtener más información, consulte the section called
“Distribuir”, the section called “Nombres de dominio personalizados” y the section called “Nombres de
dominio personalizados”.
Dominios personalizados ✓ ✓
Claves de API ✓
Desarrollo
A medida que se desarrolla la API de API Gateway, se decide sobre una serie de características de
la API. Estas características dependen del uso de la API. Para obtener más información, consulte the
section called “Desarrollo” y the section called “Desarrollo”.
Configuración de CORS ✓ ✓
Invocaciones de prueba ✓
Administración de API 16
Amazon API Gateway Guía para desarrolladores
Almacenamiento en caché ✓
Implementaciones controladas ✓ ✓
por el usuario
Implementaciones automátic ✓
as
Respuestas de gateway ✓
personalizadas
Implementación de la versión ✓
de valor controlado
Validación de solicitudes ✓
Transformación de los ✓ ✓
parámetros de solicitud
Supervisión
API Gateway admite varias opciones para registrar solicitudes de API y supervisar las API. Para
obtener más información, consulte the section called “Monitoreo” y the section called “Monitoreo”.
Métricas de Amazon ✓ ✓
CloudWatch
Registros de acceso a ✓ ✓
Amazon CloudWatch Logs
Supervisión 17
Amazon API Gateway Guía para desarrolladores
Registros de acceso a ✓
Amazon Kinesis Data
Firehose
Registros de ejecución ✓
Integraciones
Las integraciones conectan la API de API Gateway a los recursos de backend. Para obtener más
información, consulte the section called “Integraciones” y the section called “Integraciones”.
Servicios de AWS ✓ ✓
Integraciones simuladas ✓
Integraciones 18
Amazon API Gateway Guía para desarrolladores
En primer lugar, crea una función de Lambda con la consola de Lambda. A continuación, debe crear
una API de REST mediante la consola de API de REST de la API Gateway. A continuación, se crea
un método de API y se integra con una función de Lambda mediante una integración de proxy de
Lambda. Por último, debe implementar e invocar la API.
Cuando invoca la API de REST, API Gateway enruta la solicitud a la función de Lambda. Lambda
ejecuta la función y devuelve una respuesta a API Gateway. API Gateway, a continuación, le
devuelve una respuesta.
Para completar este ejercicio, necesita una Cuenta de AWS y un usuario de AWS Identity and
Access Management (IAM) con acceso a la consola. Para obtener más información, consulte
Requisitos previos para comenzar con API Gateway.
Temas
Para este ejercicio, debe usar la función Node.js predeterminada en la consola de Lambda.
Puede modificar la función de Lambda para este ejercicio, siempre y cuando la respuesta de la
función se alinee con el formato que requiere API Gateway.
Sustituya el cuerpo de respuesta predeterminado (Hello from Lambda!) por The API Gateway
REST API console is great!. Al invocar la función de ejemplo, devuelve una respuesta 200 a
los clientes, junto con la respuesta actualizada.
A continuación, debe crear un método de API para la API de REST en el recurso raíz (/) e integrar
el método con la función de Lambda mediante una integración de proxy. En una integración de proxy
de Lambda, API Gateway pasa la solicitud entrante del cliente directamente a la función de Lambda.
Después, debe crear una implementación de la API y asociarla con una etapa.
Ahora los clientes pueden llamar a la API. Para probar la API antes de implementarla, puede elegir,
si lo desea, el método ANY, ir a la pestaña Probar y, a continuación, elegir Probar.
2. En Detalles de la etapa, elija el icono de copia para copiar la URL de invocación de la API.
4. Verifique la respuesta de la API. Debería ver el texto "The API Gateway REST API
console is great!" en el navegador.
Para evitar acumular costos innecesarios en la Cuenta de AWS, elimine los recursos creados como
parte de este ejercicio. Los siguientes pasos eliminan la API de REST, la función de Lambda y los
recursos asociados.
3. En el cuadro de diálogo Delete log group(s), Eliminar grupo(s) de registro(s) elija Delete
(Eliminar).
Tip
Puede automatizar la creación y la limpieza de los recursos de AWS mediante el uso de
AWS CloudFormation o AWS Serverless Application Model (AWS SAM). Para ver algunas
plantillas de ejemplo de AWS CloudFormation, consulte las plantillas de ejemplo de API
Gateway en el repositorio GitHub de awsdocs.
1. Abra https://portal.aws.amazon.com/billing/signup.
2. Siga las instrucciones que se le indiquen.
Parte del procedimiento de registro consiste en recibir una llamada telefónica e indicar un código
de verificación en el teclado del teléfono.
Al registrarse en una Cuenta de AWS, se crea un Usuario raíz de la cuenta de AWS. El usuario
raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica
recomendada de seguridad, asigne acceso administrativo a un usuario administrativo y utilice
únicamente el usuario raíz para realizar tareas que requieran acceso de usuario raíz.
1. Inicie sesión en la AWS Management Console como propietario de cuenta, elija Usuario raíz e
ingrese el email de su Cuenta de AWS. En la siguiente página, escriba su contraseña.
Para obtener ayuda para iniciar sesión con el usuario raíz, consulte Iniciar sesión como usuario
raíz en la Guía del usuario de AWS Sign-In.
Para obtener instrucciones, consulte Habilitar un dispositivo MFA virtual para el usuario raíz de
la Cuenta de AWS (consola) en la Guía del usuario de IAM.
Para ver las instrucciones, consulte Enabling AWS IAM Identity Center en la Guía del usuario de
AWS IAM Identity Center.
2. En IAM Identity Center, conceda acceso administrativo a un usuario administrativo.
Para ver un tutorial sobre el uso del Directorio de IAM Identity Center como origen de
identidades, consulte Configure user access with the default Directorio de IAM Identity Center en
la Guía del usuario de AWS IAM Identity Center.
• Para iniciar sesión con el usuario del IAM Identity Center, utilice la URL de inicio de sesión que
se envió a la dirección de correo electrónico cuando creó el usuario del IAM Identity Center.
Para obtener ayuda para iniciar sesión con un usuario del IAM Identity Center, consulte Iniciar
sesión en el portal de acceso de AWS en la Guía del Usuario de AWS Sign-In.
Note
La experiencia de consola de API Gateway rediseñada ya está disponible. Para ver un
tutorial sobre cómo usar la consola para crear una API de REST, consulte Introducción a la
consola de la API de REST.
En este ejercicio introductorio, creará una API sin servidor. Las API sin servidor permiten centrarse
en las aplicaciones, en lugar de dedicar tiempo a aprovisionar y administrar servidores. Puede
completar este ejercicio en menos de 20 minutos y realizarlo dentro del nivel gratuito de AWS.
En primer lugar, crea una función de Lambda con la consola de AWS Lambda. A continuación, crea
una API HTTP mediante la consola de API Gateway. Luego, invoca su API.
Note
En este ejercicio se utiliza una API HTTP para simplificar. API Gateway también es
compatible con las API de REST, que incluyen más funciones. Para obtener más
información, consulte the section called “Elección entre API de REST y API HTTP ”.
Cuando invoca su API HTTP, API Gateway enruta la solicitud a su función de Lambda. Lambda
ejecuta la función de Lambda y devuelve una respuesta a API Gateway. API Gateway, a
continuación, le devuelve una respuesta.
Para completar este ejercicio, necesita una cuenta de AWS y un usuario de AWS Identity and Access
Management con acceso a la consola. Para obtener más información, consulte Requisitos previos.
Temas
27
Amazon API Gateway Guía para desarrolladores
• Pasos siguientes
La función de ejemplo devuelve una 200 respuesta a los clientes y el texto Hello from Lambda!.
Puede modificar su función de Lambda, siempre y cuando la respuesta de la función se alinea con el
formato que requiere API Gateway.
La API HTTP proporciona un punto de enlace HTTP para su función de Lambda. API Gateway enruta
las solicitudes a su función de Lambda y, a continuación, devuelve la respuesta de la función a los
clientes.
• Para crear su primera API, para HTTP API (API HTTP), elija Build (Crear).
• Si ha creado una API antes, elija Create API (Crear API) y, a continuación, elija Build
(Crear) para HTTP API (API HTTP).
4. Elija Lambda.
8. Revise la ruta que API Gateway crea para usted y, a continuación, elija Next (Siguiente).
9. Revise la etapa que API Gateway crea para usted y, a continuación, elija Next (Siguiente).
Ahora ha creado una API HTTP con una integración de Lambda que está lista para recibir solicitudes
de clientes.
2. Elija la API.
3. Elija Eliminar.
2. En la página Functions (Funciones), seleccione una función. Seleccione Actions y, luego, Delete.
3. Elija Eliminar.
3. Elija Eliminar.
1. En la consola de AWS Identity and Access Management, abra la página Roles (Roles).
Puede automatizar la creación y la limpieza de los recursos de AWS mediante el uso de AWS
CloudFormation o AWS SAM. Para obtener plantillas de AWS CloudFormation de ejemplo, consulte
las plantillas de AWS CloudFormation de ejemplo.
Pasos siguientes
Para este ejemplo, se utilizó la AWS Management Console para crear una API HTTP simple. La API
HTTP invoca una función de Lambda y devuelve una respuesta a los clientes.
A continuación, se indican los pasos siguientes a medida que continúa trabajando con API Gateway.
Para obtener ayuda de la comunidad con Amazon API Gateway, consulte el foro de debate de API
Gateway. Cuando ingrese a este foro, es posible que AWS requiera que inicie sesión.
Para obtener ayuda sobre API Gateway directamente de AWS, consulte las distintas opciones de
soporte que se ofrecen en la página de AWS Support.
Pasos siguientes 32
Amazon API Gateway Guía para desarrolladores
• Tutorial: Creación de una aplicación de chat sin servidor con una API de WebSocket, Lambda y
DynamoDB
Talleres
33
Amazon API Gateway Guía para desarrolladores
Temas
• Desarrollo de una API de REST de API Gateway con integración Lambda
• Tutorial: Crear una API de REST importando un ejemplo
• Desarrollo de una API de REST de API Gateway con integración HTTP
• Tutorial: Crear una API REST con la integración privada de API Gateway
• Tutorial: creación de una API REST de API Gateway con integración de AWS
• Tutorial: creación de una API REST Calc con dos integraciones de servicios de AWS y una
integración de Lambda sin proxy
• Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway
• Tutorial: Creación de una API de REST como proxy de Amazon Kinesis en API Gateway
• Tutorial: creación de una API REST privada
Para desarrollar una API con integraciones de Lambda puede utilizar la integración de proxy de
Lambda o la integración de Lambda no de proxy.
Con la integración de proxy de Lambda, la entrada para la función de Lambda integrada se puede
expresar como cualquier combinación de encabezados de solicitud, variables de ruta, parámetros
de cadena de consulta y cuerpo. Además, la función de Lambda puede utilizar los valores de
configuración de la API para influir en su lógica de ejecución. Para un desarrollador de API, la
configuración de una integración de proxy de Lambda es sencilla. Además de elegir una función
de Lambda específica en una región determinada, no hay mucho que pueda hacer. API Gateway
configura la solicitud de integración y la respuesta de integración por usted. Una vez configurado, el
método de API integrado puede evolucionar con el backend sin modificar la configuración existente.
Esto es posible porque el desarrollador de la función de Lambda del backend analiza los datos de
la solicitud entrante y responde al cliente con los resultados deseados cuando todo va bien o con
mensajes de error cuando algo va mal.
Temas
• Tutorial: Desarrollo de una API de REST Hello World con integración de proxy de Lambda
• Tutorial: Desarrollo de una API de REST de API Gateway con integración de proxy de Lambda
entre cuentas
• Tutorial: Desarrollo de una API de REST de API Gateway con integración no de proxy de Lambda
Tutorial: Desarrollo de una API de REST Hello World con integración de proxy de
Lambda
La integración de proxy de Lambda es un tipo de integración de API de API Gateway ligera y flexible
que le permite integrar un método de API, o la totalidad de la API, con una función de Lambda. La
función de Lambda se puede escribir en cualquier lenguaje que admitida Lambda. Debido a que se
trata de una integración de proxy, puede cambiar la implementación de la función de Lambda en
cualquier momento sin tener que volver a implementar la API.
• Creación de una función Hello, World! Función de Lambda para que sea el backend de la API.
• Creación y prueba de una función "Hello, World!" API con integración de proxy de Lambda.
Temas
Note
Anote la región en la que ha creado la función de Lambda. La necesitará al crear la API.
Node.js
}
};
var greeter = 'World';
if (event.greeter && event.greeter!=="") {
greeter = event.greeter;
} else if (event.body && event.body !== "") {
var body = JSON.parse(event.body);
if (body.greeter && body.greeter !== "") {
greeter = body.greeter;
}
} else if (event.queryStringParameters &&
event.queryStringParameters.greeter && event.queryStringParameters.greeter !==
"") {
greeter = event.queryStringParameters.greeter;
} else if (event.multiValueHeaders && event.multiValueHeaders.greeter &&
event.multiValueHeaders.greeter != "") {
greeter = event.multiValueHeaders.greeter.join(" and ");
} else if (event.headers && event.headers.greeter && event.headers.greeter !
= "") {
greeter = event.headers.greeter;
}
Python
import json
except KeyError:
print('No greeter')
try:
if (event['headers']) and (event['headers']['greeter']) and
(event['headers']['greeter'] != None):
greeter = event['headers']['greeter']
except KeyError:
print('No greeter')
if (event['body']) and (event['body'] != None):
body = json.loads(event['body'])
try:
if (body['greeter']) and (body['greeter'] != None):
greeter = body['greeter']
except KeyError:
print('No greeter')
res = {
'statusCode': 200,
'headers': {
'Content-Type': '*/*'
},
'body': 'Hello, '+greeter+'!'
}
return res
Ahora cree una API para la función de Lamba "Hello, World!" La función de Lambda utilizando la
consola de API Gateway.
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
3. En API name (Nombre de la API), escribaLambdaProxyAPI.
Después de crear una API, se crea un recurso. Normalmente, los recursos de la API están
organizados en un árbol de recursos de acuerdo con la lógica de la aplicación. Para este ejemplo,
creará un recurso /helloworld.
En una integración de proxy, toda la solicitud se envía a la función de Lambda del backend tal y
como está, a través de un método catch-all ANY que representa cualquier método HTTP. El método
HTTP real lo especifica el cliente en tiempo de ejecución. El método ANY le permite usar una sola
configuración de métodos de API para todos los métodos HTTP admitidos: DELETE, GET, HEAD,
OPTIONS, PATCH, POST y PUT.
5. Elija Implementar.
6. En Detalles de la etapa, elija el icono de copia para copiar la URL de invocación de la API.
Uso del navegador y cURL para probar una API con integración de proxy de Lambda
Para probar solicitudes GET utilizando solo los parámetros de cadenas de consulta, puede
escribir la URL para el recurso helloworld de la API en la barra de direcciones del navegador.
Por ejemplo: https://r275xc9bmd.execute-api.us-east-1.amazonaws.com/test/helloworld?
name=John&city=Seattle
Para otros métodos, debe utilizar utilidades de prueba de la API de REST más avanzadas, tales
como POSTMAN o cURL. En este tutorial se utiliza cURL. Los ejemplos de comandos de cURL que
aparecen a continuación se presupone que cURL está instalado en su equipo.
Note
Si está ejecutando el comando en Windows, utilice esta sintaxis:
En todos estos casos, la salida es una respuesta 200 con el siguiente cuerpo de respuesta:
Hello, John!
Tutorial: Desarrollo de una API de REST de API Gateway con integración de proxy de
Lambda entre cuentas
Ahora puede utilizar una función AWS Lambda desde otra cuenta de AWS como backend de
integración de API. Cada cuenta puede estar en cualquier región en la que Amazon API Gateway
esté disponible. Esto permite administrar y compartir de forma centralizada funciones de backend de
Lambda en varias API.
En esta sección mostramos cómo configurar una integración de proxy de Lambda entre cuentas con
la consola de Amazon API Gateway.
Creación de una API de API Gateway para la integración de Lambda entre cuentas
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
3. En API name (Nombre de la API), escribaCrossAccountLambdaAPI.
4. (Opcional) En Description (Descripción), introduzca una descripción.
5. Mantenga Tipo de punto de conexión de la API establecido en Regional.
6. Elija Crear API.
Ahora, creará una función de Lambda en una cuenta distinta de la que usó para crear la API de
ejemplo.
1. Inicie sesión en la consola de Lambda de una cuenta distinta de la que utilizó para crear la API
de API Gateway.
2. Elija Create function (Crear función).
3. Elija Author from scratch.
4. En Author from scratch (Crear desde cero), haga lo siguiente:
6. Introduzca la implementación de la función de Node.js desde the section called “Tutorial: API
Hello World con integración de proxy de Lambda”.
8. Anote el ARN completo de la función (se encuentra en la esquina superior derecha del panel de
la función de Lambda). Lo necesitará al crear la integración de Lambda entre cuentas.
Una vez que tenga una función de integración de Lambda en otra cuenta, puede utilizar la consola
de API Gateway para agregarla a la API de la primera cuenta.
Note
Si está configurando un autorizador entre regiones y cuentas, el valor sourceArn que se
agrega a la función de destino debe utilizar la región de la función, no la región de la API.
Después de crear una API, se crea un recurso. Normalmente, los recursos de la API están
organizados en un árbol de recursos de acuerdo con la lógica de la aplicación. Para este ejemplo,
creará un recurso /helloworld.
Después de crear un recurso, se crea un método GET. El método GET se integra con una función de
Lambda en otra cuenta.
1. Inicie sesión en AWS Management Console y abra la consola de AWS Lambda en https://
console.aws.amazon.com/lambda/.
3. Elija Permissions.
Debería ver una política Allow con una cláusula Condition en la que AWS:SourceArn es el
ARN del método GET de la API.
Tutorial: Desarrollo de una API de REST de API Gateway con integración no de proxy
de Lambda
En este tutorial utilizaremos la consola de API Gateway para crear una API que permita a un cliente
llamar a funciones de Lambda a través de la integración de Lambda no de proxy (conocida también
como integración personalizada). Para obtener más información acerca de las funciones de AWS
Lambda y de Lambda, consulte la Guía para desarrolladores de AWS Lambda.
Para facilitar el aprendizaje, elegimos una función de Lambda sencilla con una configuración de
API mínima para guiarlo para desarrollar una API de API Gateway con la integración de Lambda
personalizada. Cuando sea necesario, describiremos parte de la lógica. Para ver un ejemplo más
detallado de la integración de Lambda personalizada, consulte Tutorial: creación de una API REST
Calc con dos integraciones de servicios de AWS y una integración de Lambda sin proxy.
Antes de crear la API, configure el backend de Lambda mediante la creación de una función de
Lambda en AWS Lambda, lo cual se describe a continuación.
Temas
• Creación de una función de Lambda para la integración de Lambda no de proxy
• Creación de una API con la integración de Lambda no de proxy
• Prueba que invoca el método de API
• Implementar la API
• Pruebe la API en una etapa de implementación
• Eliminar recursos
Note
La creación de funciones de Lambda puede suponer cargos en su cuenta de AWS.
En este paso creará una función de Lambda del tipo "Hello, World!" para la integración personalizada
de Lambda. En esta tutorial, la función se denomina GetStartedLambdaIntegration.
Node.js
'use strict';
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
'Saturday'];
var times = ['morning', 'afternoon', 'evening', 'night', 'day'];
console.log('Loading function');
// Generate a greeting
let greeting = 'Good ' + time + ', ' + name + ' of ' + city + '. ';
if (day) greeting += 'Happy ' + day + '!';
Python
import json
time = event['time']
else:
time = 'day'
except KeyError:
time = 'day'
try:
if event['day'] in days:
day = event['day']
else:
day = ''
except KeyError:
day = ''
# Generate a greeting
greeting = 'Good ' + time + ', ' + name + ' of ' + city + '.' + ['', ' Happy '+
day + '!'][day !='']
Nuestra función de Lambda es simple. Analiza el objeto de entrada event para las
propiedades name, city, time y day. Entonces, devuelve un saludo, como un objeto JSON
de {"message":greeting}, al intermediario. El mensaje se encuentra en el patrón "Good
[morning|afternoon|day], [name|you] in [city|World]. Happy day!". Se supone
que la entrada a la función de Lambda es del siguiente objeto JSON:
{
"city": "...",
"time": "...",
"day": "...",
"name" : "..."
}
Si configura la API sin utilizar la consola de API Gateway (por ejemplo, si importa una API de un
archivo de OpenAPI), tendrá que crear de forma explícita, si es necesario, y configurar un rol y una
política de invocación para que API Gateway invoque las funciones de Lambda. Para obtener más
información sobre cómo configurar los roles de ejecución e invocación de Lambda para una API de
API Gateway, consulte Control del acceso a una API con permisos de IAM.
• Si aparece la página de bienvenida, elija Get Started Now (Empezar ahora) y, a continuación,
elija Create function (Crear función).
• Si aparece la página de lista Lambda > Functions (Lambda > Funciones), elija Create function
(Crear función).
3. Elija Author from scratch.
d. En Role name (Nombre de la función), escriba un nombre para la función (por ejemplo,
GetStartedLambdaIntegrationRole).
b. Deje las opciones predeterminadas para todos los demás campos en esta sección.
{
"name": "Jonny",
"city": "Seattle",
"time": "morning",
"day": "Wednesday"
}
c. Elija Test (Probar) para invocar la función. Se muestra la sección Execution result:
succeeded (Resultado de ejecución: realizada correctamente). Expanda Detalles y verá el
siguiente resultado.
{
Desarrollo de una API con la integración de Lambda 49
Amazon API Gateway Guía para desarrolladores
Como ejercicio secundario, puede utilizar la consola de IAM para ver el rol de IAM
(GetStartedLambdaIntegrationRole) que fue creado como parte de la creación de la función
de Lambda. Este rol de IAM posee dos políticas en línea asociadas. Una de ellas estipula los
permisos más básicos para la ejecución de Lambda. Permite llamar a CreateLogGroup de
CloudWatch para cualquier recurso de CloudWatch de su cuenta en la región donde se crea la
función de Lambda. Esta política también permite crear flujos de CloudWatch y registrar eventos para
la función de Lambda HelloWorldForLambdaIntegration.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:region:account-id:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:region:account-id:log-group:/aws/lambda/
GetStartedLambdaIntegration:*"
]
}
]
}
El documento de la otra política se aplica para invocar otro servicio de AWS que no se utiliza en este
ejemplo. Puede omitirla por ahora.
Asociada con el rol de IAM hay una entidad de confianza, que es lambda.amazonaws.com. Aquí se
encuentra la relación de confianza:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
La combinación de esta relación de confianza y la política en línea hace que sea posible para la
función de Lambda invocar una función console.log() para registrar los eventos en CloudWatch
Logs.
Si no utilizó la AWS Management Console para crear la función de Lambda, deberá seguir estos
ejemplos para crear el rol y las políticas de IAM requeridas y, a continuación, adjuntar manualmente
el rol a su función.
2. Si es la primera vez que utiliza API Gateway, verá una página en la que aparecen las
características del servicio. En REST API, elija Build (Compilación). Cuando aparezca el menú
emergente Create Example API (Crear API de ejemplo), elija OK (Aceptar).
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
3. En API name (Nombre de la API), escribaLambdaNonProxyAPI.
4. (Opcional) En Description (Descripción), introduzca una descripción.
5. Mantenga Tipo de punto de conexión de la API establecido en Regional.
6. Elija Crear API.
Tras crear su API, cree un recurso /{city}. Este es un ejemplo de un recurso con una variable de ruta
que toma una entrada del cliente. Más adelante, mapeará esta variable de ruta en la entrada de la
función de Lambda mediante una plantilla de mapeo.
Tras crear su recurso /{city}, cree un método ANY. El verbo ANY de HTTP es un marcador para un
método HTTP válido que un cliente envía en el tiempo de ejecución. Este ejemplo muestra que el
método ANY se puede utilizar para la integración de Lambda personalizada y para la integración de
proxy de Lambda.
Después de crear el método ANY, se activa un validador de la solicitud para una variable de ruta de
la URL, una cadena de consulta y un encabezado para garantizar que todos los datos requeridos se
hayan definido y especificado de la forma adecuada. Para este ejemplo, se crea un parámetro de
cadena de consulta time y un encabezado day.
#set($inputRoot = $input.path('$'))
{
"city": "$input.params('city')",
"time": "$input.params('time')",
"day": "$input.params('day')",
"name": "$inputRoot.callerName"
}
7. Elija Guardar.
La consola de API Gateway proporciona un servicio de pruebas para que pueda probar la invocación
a la API antes de que se implemente. Puede utilizar la característica Prueba de la consola para
probar la API mediante el envío de la siguiente solicitud:
POST /Seattle?time=morning
day:Wednesday
{
"callerName": "John"
}
En esta solicitud de prueba, configurará ANY en POST, establecerá {city} en Seattle, asignará
Wednesday como el valor del encabezado day y asignará "John" como el valor callerName.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
2. En Tipo de método, seleccione POST.
{
"greeting": "Good morning, John of Seattle. Happy Wednesday!"
}
También puede ver los registros para ver cómo API Gateway procesa la solicitud y la respuesta.
"time": "morning",
"day": "Wednesday",
"name" : "John"
}
Thu Aug 31 01:07:25 UTC 2017 : Sending request to https://lambda.us-
west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-
west-2:123456789012:function:GetStartedLambdaIntegration/invocations
Thu Aug 31 01:07:25 UTC 2017 : Received response. Integration latency: 328 ms
Thu Aug 31 01:07:25 UTC 2017 : Endpoint response body before transformations:
{"greeting":"Good morning, John of Seattle. Happy Wednesday!"}
Thu Aug 31 01:07:25 UTC 2017 : Endpoint response headers: {x-amzn-Remapped-Content-
Length=0, x-amzn-RequestId=c0475a28-8de8-11e7-8d3f-4183da788f0f, Connection=keep-
alive, Content-Length=62, Date=Thu, 31 Aug 2017 01:07:25 GMT, X-Amzn-Trace-
Id=root=1-59a7614d-373151b01b0713127e646635;sampled=0, Content-Type=application/json}
Thu Aug 31 01:07:25 UTC 2017 : Method response body after transformations:
{"greeting":"Good morning, John of Seattle. Happy Wednesday!"}
Thu Aug 31 01:07:25 UTC 2017 : Method response headers: {X-Amzn-Trace-
Id=sampled=0;root=1-59a7614d-373151b01b0713127e646635, Content-Type=application/json}
Thu Aug 31 01:07:25 UTC 2017 : Successfully completed execution
Thu Aug 31 01:07:25 UTC 2017 : Method completed with status: 200
Los registros muestran la solicitud entrante antes del mapeo y la solicitud de integración después
del mapeo. Cuando una prueba falla, los registros son útiles para evaluar si la entrada original es
correcta o si la plantilla de mapeo funciona correctamente.
Implementar la API
La invocación de prueba es una simulación que tiene limitaciones. Por ejemplo, elude cualquier
mecanismo de autorización promulgado en la API. Para probar la ejecución de la API en tiempo real,
primero debe implementar la API. Para implementar una API, usted crea una etapa para crear una
snapshot de la API en ese momento. El nombre de etapa también define la ruta de base después del
nombre de host predeterminado de la API. El recurso raíz de la API se agrega después del nombre
de la etapa. Al modificar la API, debe volver a implementarla a una etapa nueva o existente antes de
que los cambios surtan efecto.
Note
La entrada debe tener texto cifrado UTF-8 (es decir, no localizado).
5. Elija Implementar.
En Detalles de la etapa, elija el icono de copia para copiar la URL de invocación de la API. El patrón
general de esta URL base de la API es https://api-id.region.amazonaws.com/stageName.
Por ejemplo, la URL base de la API (beags1mnid) creada en la región us-west-2 e implementada
en la etapa test es https://beags1mnid.execute-api.us-west-2.amazonaws.com/test.
Puede probar una API implementada de diferentes maneras. Para las solicitudes GET que solo
utilizan variables de ruta de URL o parámetros de cadena de consulta, puede escribir la URL del
recurso de la API en un explorador. Para otros métodos, debe utilizar utilidades de prueba de la API
de REST más avanzadas, tales como POSTMAN o cURL.
curl -v -X POST \
'https://beags1mnid.execute-api.us-west-2.amazonaws.com/test/Seattle?
time=evening' \
-H 'content-type: application/json' \
-H 'day: Thursday' \
-H 'x-amz-docs-region: us-west-2' \
-d '{
"callerName": "John"
}'
Eliminar recursos
Si ya no necesita las funciones de Lambda que ha creado para este tutorial, puede eliminarlas ahora.
También puede eliminar los recursos de IAM asociados.
Warning
Si tiene previsto completar el resto de tutoriales de esta serie, no elimine el rol de ejecución
de Lambda ni el rol de invocación de Lambda. Si elimina una función de Lambda que usan
sus API, esas API dejarán de funcionar. La eliminación de una función de Lambda no se
puede deshacer. Si desea utilizar la función de Lambda de nuevo, debe volver a crearla.
Si elimina un recurso IAM que usa una función de Lambda, esa función de Lambda dejará
de funcionar y las API que dependen de esa función tampoco funcionarán. La eliminación de
un recurso de IAM no se puede deshacer. Si desea utilizar el recurso de IAM de nuevo, debe
volver a crearlo.
1. Inicie sesión en la AWS Management Console y abra la consola de AWS Lambda en https://
console.aws.amazon.com/lambda/.
2. En la lista de funciones, elija GetHelloWorld, elija Actions (Acciones) y, a continuación, Delete
function (Eliminar función). Cuando se le pregunte, elija Delete (Eliminar) otra vez.
3. En la lista de funciones, elija GetHelloWithName, Actions (Acciones) y, a continuación, Delete
function (Eliminar función). Cuando se le pregunte, elija Delete (Eliminar) otra vez.
Puede utilizar la consola de Amazon API Gateway para crear y probar una API REST sencilla con
integración HTTP para un sitio web PetStore. La definición de la API está preconfigurada como un
archivo de OpenAPI 2.0. Después de cargar la definición de API en API Gateway, puede utilizar la
consola de API Gateway para examinar la estructura básica de API o simplemente implementar y
probar la API.
La API de ejemplo de PetStore admite los siguientes métodos para que un cliente obtenga acceso
al sitio web de backend HTTP de http://petstore-demo-endpoint.execute-api.com/
petstore/pets.
Note
En este tutorial se utiliza un punto de conexión HTTP como ejemplo. Cuando cree sus
propias API, le recomendamos que utilice puntos de conexión HTTPS para las integraciones
HTTP.
• GET /: para leer el acceso del recurso raíz de la API que no se integra con ningún punto de
enlace de backend. API Gateway responde con información general del sitio web PetStore. Este es
un ejemplo del tipo de integración MOCK.
• GET /pets: para obtener acceso de lectura al recurso /pets de la API que se integra con el
recurso /pets de backend asignado. El backend devuelve una página de mascotas disponibles
en PetStore. Este es un ejemplo del tipo de integración HTTP. La URL del punto de enlace de
integración es http://petstore-demo-endpoint.execute-api.com/petstore/pets.
• POST /pets: para obtener acceso de escritura al recurso /pets de la API que se integra con
el recurso /petstore/pets de backend. Tras recibir una solicitud correcta, el backend agrega
la mascota especificada a PetStore y devuelve el resultado al autor de la llamada. La integración
también es HTTP.
• GET /pets/{petId}: para obtener acceso de lectura a una mascota identificada por un valor
petId tal como se especifica en una ruta variable de la URL de solicitud de entrada. Este método
también tiene el tipo de integración HTTP. El backend devuelve la mascota especificada que se
encuentra en PetStore. La URL del punto de enlace HTTP del backend es http://petstore-
demo-endpoint.execute-api.com/petstore/pets/n, donde n es un entero como
identificador de la mascota consultada.
La API admite el acceso a CORS a través de los métodos OPTIONS del tipo de integración MOCK.
API Gateway devuelve los encabezados solicitados que admiten el acceso a CORS.
El siguiente procedimiento le guiará por los pasos para crear y probar una API a partir de un ejemplo
mediante la consola de API Gateway.
• Si ha creado una API antes, elija Crear API y, a continuación, elija Crear para API de REST.
3. En Crear API de REST, elija API de ejemplo y, a continuación, elija Crear API para crear la API
de ejemplo.
Puede desplazarse por la definición de OpenAPI para obtener información detallada sobre esta
API de ejemplo antes de elegir Crear API.
5. Para ver los detalles de un método, para modificar su configuración o para probar la invocación
del método, elija el nombre del método en la lista de métodos o en el árbol de recursos. A
continuación, elegimos el POST /pets método como ejemplo:
El cliente utiliza la API para obtener acceso a una característica del backend a través de
Solicitud de método. API Gateway traduce la solicitud del cliente, si fuera necesario, a un
formato aceptable por el backend en Solicitud de integración antes de reenviar la solicitud
entrante al backend. La solicitud transformada se conoce como la solicitud de integración. Del
mismo modo, el backend devuelve la respuesta a API Gateway en Respuesta de integración.
A continuación, API Gateway la dirige a Method Response (Respuesta de método) antes de
enviarla al cliente. De nuevo, si fuera necesario, API Gateway puede asignar los datos de la
respuesta del backend a un formulario previsto por el cliente.
En el caso del método POST de recurso de API, la carga de la solicitud del método puede
transmitirse a través de la solicitud de integración sin modificación si la carga de la solicitud de
método está en el mismo formato que la carga de la solicitud de integración.
La solicitud del método GET / usa el tipo de integración MOCK y no está vinculada a ningún
punto de enlace de backend real. La Respuesta de integración correspondiente está
configurada para devolver una página HTML estática. Cuando se llama al método, API Gateway
simplemente acepta la solicitud e inmediatamente devuelve la respuesta a la integración
configurada al cliente a través de Respuesta de método. Puede utilizar la integración simulada
para probar una API sin requerir un punto de enlace del backend. También puede utilizarla para
servir una respuesta local generada partir de una plantilla de asignación de cuerpo de respuesta.
6. Seleccione la pestaña Pruebas. Puede que tenga que elegir el botón de flecha hacia la derecha
para mostrar la pestaña.
7. Por ejemplo, para probar el método POST /pets, escriba la siguiente carga {"type":
"dog","price": 249.99} en el Cuerpo de la solicitud antes de elegir el botón Pruebas.
La entrada especifica los atributos de la mascota que deseamos añadir a la lista de mascotas en
el sitio web PetStore.
8. El resultado es el siguiente:
La entrada Registros de la salida muestra los cambios de estado de la solicitud del método a la
solicitud de integración y de la respuesta de integración a la respuesta del método. Esto puede
resultar útil para la resolución de errores de asignación que impidan que la solicitud se realice
correctamente. En este ejemplo, la asignación no se aplica: la carga de la solicitud de método se
transfiere a través de la solicitud integración al backend y, de forma parecida, la respuesta del
backend se transfiere a través de la respuesta de integración al método de respuesta.
14. Elija el icono de copiar para copiar la URL de invocación de la API y, a continuación, ingrese
la URL de invocación de la API en un navegador web. Una respuesta correcta devuelve el
resultado, generado a partir de la plantilla de asignación de la respuesta de integración.
15. En el panel de navegación Stages (Etapas), expanda la etapa test (prueba), seleccione GET
en /pets/{petId} y, a continuación, copie el valor Invoke URL (URL de invocación) de
https://api-id.execute-api.region.amazonaws.com/test/pets/{petId}.
{petId} hace referencia a una variable de ruta.
Pegue el valor de Invoke URL (URL de invocación) (obtenido en el paso anterior) en la barra de
direcciones de un navegador, sustituyendo {petId} por, por ejemplo, 1 y, a continuación, pulse
Intro para enviar la solicitud. Debería devolverse una respuesta 200 OK con la siguiente carga
JSON:
{
"id": 1,
"type": "dog",
"price": 249.99
}
La invocación del método de la API tal como se muestra es posible porque su tipo Authorization
(Autorización) está establecido en NONE. Si se ha utilizado la autorización de AWS_IAM, firmaría
la solicitud con los protocolos Signature Version 4 (SigV4). Para ver un ejemplo de una solicitud
de este tipo, consulte the section called “Tutorial: Desarrollo de una API con integración HTTP
no de proxy”.
Para desarrollar una API con integración HTTP, puede utilizar la integración de proxy HTTP o la
integración HTTP personalizada. Le recomendamos utilizar la integración de proxy HTTP cada vez
que sea posible, para una configuración de API simplificada, al mismo tiempo que se proporcionan
características versátiles y potentes. La integración HTTP personalizada puede resultar atractiva si
es necesario transformar los datos de la solicitud el cliente para el backend o transformar los datos
de respuesta del backend para el cliente.
Temas
• Tutorial: Desarrollo de una API de REST con integración de proxy HTTP
• Tutorial: Desarrollo de una API de REST con integración HTTP no de proxy
La integración de proxy HTTP es un mecanismo sencillo, potente y versátil para desarrollar una API
que permita que una aplicación web obtenga acceso a múltiples recursos o características del punto
de enlace HTTP integrado, por ejemplo, el sitio web completo, con una configuración simplificada
de un único método de API. En la integración de proxy HTTP, API Gateway transmite la solicitud
de método enviada por el cliente al backend. Los datos de la solicitud transmitida incluyen los
encabezados de solicitud, los parámetros de cadena de consulta, las variables de ruta de la URL y
la carga. El punto de enlace de HTTP del backend o del servidor web analiza los datos de la solicitud
entrante para determinar la respuesta que devuelve. La integración de proxy HTTP permite que el
cliente y el backend interactúen directamente sin intervención de API Gateway después de haber
configurado el método de API, salvo cuando se producen problemas conocidos, como caracteres no
admitidos, que se indican en the section called “Notas importantes”.
Con el amplio recurso de proxy {proxy+} y el verbo catch-all ANY para el método HTTP, puede
utilizar una integración de proxy HTTP para crear una API de un único método de API. El método
expone el conjunto completo de recursos y operaciones HTTP de acceso público de un sitio web.
Cuando el servidor web del backend abre más recursos para acceso público, el cliente puede utilizar
estos nuevos recursos con la misma configuración de API. Para habilitar esto, el desarrollador del
sitio web debe comunicar con claridad al desarrollador del cliente cuáles son los nuevos recursos y
cuáles son las operaciones aplicables para cada uno de ellos.
Como una introducción rápida, el siguiente tutorial demuestra la integración de proxy HTTP. En
el tutorial creamos una API que utiliza la consola de API Gateway para integrarse con el sitio web
PetStore mediante un recurso de proxy genérico {proxy+} y creamos el marcador de posición del
método HTTP de ANY.
Temas
• Creación de una API con integración de proxy HTTP con la consola de API Gateway
• Probar una API con la integración de proxy HTTP
Creación de una API con integración de proxy HTTP con la consola de API Gateway
El siguiente procedimiento le guiará por los pasos para crear y probar una API con un recurso
de proxy para un backend HTTP mediante la consola de API Gateway. El backend HTTP es el
PetStore sitio web (http://petstore-demo-endpoint.execute-api.com/petstore/
pets) de Tutorial: Desarrollo de una API de REST con integración HTTP no de proxy, en el que
las capturas de pantalla se utilizan como ayudas visuales para ilustrar los elementos de IU de
API Gateway. Si es la primera vez que utiliza la consola de API Gateway para crear una API, le
recomendamos seguir esa sección en primer lugar.
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
En este paso, creará una ruta de recursos de proxy de {proxy+}. Este es el marcador de posición
de cualquier punto de conexión del backend bajo http://petstore-demo-endpoint.execute-
api.com/. Por ejemplo, puede ser petstore, petstore/pets y petstore/pets/{petId}. API
Gateway crea el método ANY al crear el recurso {proxy+} y actúa como un marcador de posición
para cualquiera de los verbos HTTP admitidos en tiempo de ejecución.
1. Elija la API.
En este paso, integrará el método ANY con un punto de conexión HTTP de backend mediante una
integración de proxy. En la integración de proxy, API Gateway transmite la solicitud de método
enviada por el cliente al backend sin la intervención de API Gateway.
Por ejemplo, la API de PetStore aquí utilizada no expone el recurso /petstore. Por lo tanto,
obtendrá una respuesta 404 Resource Not Found que contiene el mensaje de error de Cannot
GET /petstore.
Además, el cliente debe tener la posibilidad de gestionar el formato de salida del backend para
analizar los resultados correctamente. API Gateway no realiza mediaciones para facilitar las
interacciones entre el cliente y el backend.
Para probar una API integrada con el sitio web PetStore utilizando la integración de proxy HTTP a
través del recurso de proxy
1. Seleccione la pestaña Pruebas. Puede que tenga que elegir el botón de flecha hacia la derecha
para mostrar la pestaña.
5. Seleccione Probar.
Como que el sitio web del backend admite la solicitud GET /petstore/pets?type=fish,
devuelve una respuesta correcta similar a la siguiente:
[
{
"id": 1,
"type": "fish",
"price": 249.99
},
{
"id": 2,
"type": "fish",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
Si intenta llamar a GET /petstore, obtendrá una respuesta 404 con un mensaje de error
Cannot GET /petstore. Esto se debe a que el backend no es compatible con la operación
especificada. Si llama a GET /petstore/pets/1, obtendrá una respuesta 200 OK con la
siguiente carga, ya que la solicitud admite el sitio web PetStore.
{
"id": 1,
"type": "dog",
"price": 249.99
}
También puede utilizar un navegador para probar la API. Implemente su API y asóciela a una etapa
para crear la URL de invocación de su API.
5. Elija Implementar.
2. Elija la API.
4. En Detalles de la etapa, elija el icono de copia para copiar la URL de invocación de la API.
En este tutorial creará una API desde cero utilizando la consola de Amazon API Gateway. La consola
se puede considerar como un estudio de diseño de la API y se puede utilizar para definir el ámbito de
las características de API, para probar su comportamiento, para crear la API y para implementar la
API en etapas.
Temas
• Crear una API con integración de HTTP personalizada
• (Opcional) Parámetros de la solicitud de mapeo
Esta sección le guía por los pasos para crear recursos, exponer métodos en un recurso, configurar
un método para lograr los comportamientos de la API deseados y probar e implementar la API.
En este paso, se crea una API vacía. En los siguientes pasos, debe crear recursos y métodos para
conectar la API al punto de conexión http://petstore-demo-endpoint.execute-api.com/
petstore/pets mediante una integración HTTP sin proxy.
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
3. En API name (Nombre de la API), escribaHTTPNonProxyAPI.
El árbol Resources (Recursos) muestra el recurso raíz (/) sin métodos. En este ejercicio, vamos a
desarrollar la API con la integración HTTP personalizada del sitio web de PetStore (http://petstore-
demo-endpoint.execute-api.com/petstore/pets). Con fines ilustrativos, crearemos un recurso /pets
como un elemento secundario de la raíz y expondremos un método GET en este recurso para que un
cliente pueda recuperar una lista de los elementos Pets disponibles en el sitio web de PetStore.
En este paso, se crea un método GET en el recurso /pets. El método GET está integrado con el sitio
web http://petstore-demo-endpoint.execute-api.com/petstore/pets. Otras opciones
para un método de API incluyen las siguientes:
• HEAD, que se utiliza principalmente en escenarios de pruebas. Es igual que GET, pero no
devuelve la representación de los recursos.
• OPTIONS, que pueden usar los intermediarios para obtener la información sobre las opciones de
comunicación disponibles para el servicio de destino.
En el caso del HTTP method (Método HTTP) de la solicitud de integración, debe elegir uno de los
métodos compatibles con el backend. Para HTTP o Mock integration, es razonable que la
solicitud del método y la solicitud de integración usen el mismo verbo HTTP. Para otros tipos de
integración, la solicitud del método usará probablemente un verbo HTTP diferente del de la solicitud
de integración. Por ejemplo, para llamar a una función de Lambda, la solicitud de integración debe
utilizar POST para invocar la función, mientras que la solicitud del método puede utilizar cualquier
verbo HTTP en función de la lógica de la función de Lambda.
El sitio web de PetStore le permite recuperar una lista de elementos Pet por tipo de mascota (por
ejemplo, "Dog" o "Cat") en una determinada página. Utiliza los parámetros de cadena de consulta
type y page para aceptar esta entrada. Por tanto, tenemos que añadir los parámetros de cadena
de consulta a la solicitud del método y asignarlos a las cadenas de consulta correspondientes de la
solicitud de integración.
Repita los pasos anteriores para crear una cadena de consulta adicional con el nombre page.
3. Seleccione Guardar.
El cliente ahora puede proporcionar un tipo de mascota y un número de página como parámetros de
cadena de consulta cuando envíe una solicitud. Estos parámetros de entrada deben mapearse a los
parámetros de cadena de consulta de la integración para reenviar los valores de entrada a nuestro
sitio web de PetStore en el backend.
1. Elija la pestaña Test (Prueba). Puede que tenga que elegir el botón de flecha hacia la derecha
para mostrar la pestaña.
Ahora que la prueba se ha realizado correctamente, podemos implementar la API para ponerla a
disposición del público en general.
8. Elija Desplegar.
9. (Opcional) En Detalles de la etapa, para URL de invocación, puede elegir el icono de copia para
copiar la URL de invocación de su API. Puede utilizar esto con herramientas como Postman y
cURL para probar la API.
Si utiliza un SDK para crear un cliente, puede llamar a los métodos expuestos por el SDK para firmar
la solicitud. Para obtener más información, consulte los AWSSDK que desee.
Note
Cuando se realicen cambios en la API, deberá volver a implementar la API para que las
características nuevas o actualizadas estén disponibles antes de volver a invocar la URL de
la solicitud.
En este tutorial, se enseña a crear un parámetro de ruta {petId} en la URL de solicitud de método
de la API para especificar un ID de elemento, mapearlo al parámetro de ruta {id} de la URL de la
solicitud de integración y enviar la solicitud al punto de conexión HTTP
Note
Si introduce una letra con las mayúsculas o minúsculas incorrectas (por ejemplo, una letra
minúscula en lugar de una mayúscula), se producirán errores más adelante en el tutorial.
Ahora mapee el parámetro de ruta {petId} al parámetro de ruta {id} en el punto de conexión
HTTP.
Esto asigna el parámetro de ruta de la solicitud del método de petId al parámetro de ruta de la
solicitud de integración de id.
4. Seleccione Guardar.
1. Elija la pestaña Test (Prueba). Puede que tenga que elegir el botón de flecha hacia la derecha
para mostrar la pestaña.
2. En Ruta, en petId, introduzca 4.
3. Seleccione Test (Probar).
{
"id": 4,
"type": "bird",
"price": 999.99
}
En este paso, implementará la API para que pueda empezar a llamarla fuera de la consola de API
Gateway.
En este paso, saldrá de la consola de API Gateway y utilizará la API para obtener acceso al punto de
enlace HTTP.
https://my-api-id.execute-api.region-id.amazonaws.com/prod
3. Introduzca esta URL en el cuadro de dirección de una nueva pestaña del navegador y añada /
pets/4 a la URL antes de enviar su solicitud.
4. El navegador devolverá lo siguiente:
{
"id": 4,
"type": "bird",
"price": 999.99
}
Siguientes pasos
Puede personalizar aún más su API activando la validación de solicitudes, transformando los datos o
creando respuestas de puerta de enlace personalizadas.
Para explorar más formas de personalizar su API, consulte los siguientes tutoriales:
Tutorial: Crear una API REST con la integración privada de API Gateway
Puede crear una API de API Gateway con integración privada para proporcionar a sus clientes
acceso a recursos HTTP/HTTPS dentro de su Amazon Virtual Private Cloud (Amazon VPC). Estos
recursos de VPC son puntos de enlace HTTP/HTTPS de una instancia EC2 situada detrás de un
balanceador de carga de red de la VPC. El balanceador de carga de red encapsula el recurso de la
VPC y direcciona las solicitudes entrantes al recurso correspondiente.
Cuando un cliente llama a la API, API Gateway se conecta al balanceador de carga de red a través
del enlace de VPC preconfigurado. El recurso VpcLink de API Gateway encapsula un enlace de la
VPC. Este es responsable de reenviar las solicitudes del método de API a los recursos de la VPC y
devuelve las respuestas del backend al intermediario. Para los desarrolladores de API, VpcLink es
funcionalmente equivalente a un punto de enlace de integración.
Para crear una API con integración privada, debe crear un nuevo VpcLink (o elegir uno existente)
que esté conectado a un balanceador de carga de red que tenga como destino los recursos de la
VPC deseados. Debe disponer de los permisos adecuados para crear y administrar un VpcLink.
A continuación, deberá configurar un método de la API e integrarlo con VpcLink estableciendo
HTTP o HTTP_PROXY como tipo de integración, VPC_LINK como tipo de conexión de integración y el
identificador VpcLink en el campo connectionId de la integración.
Note
El equilibrador de carga de red y la API deben pertenecer a la misma cuenta de AWS.
Si desea empezar a crear rápidamente una API que tenga acceso a los recursos de la VPC, le
guiaremos por los pasos esenciales para crear una API con integración privada a través de la
consola de API Gateway. Antes de crear la API, haga lo siguiente:
1. Cree un recurso de la VPC, cree o elija un balanceador de carga de red en una cuenta de la
misma región y agregue la instancia EC2 que aloja el recurso como destino del balanceador de
carga de red. Para obtener más información, consulte Configuración de un Network Load Balancer
para integraciones privadas de API Gateway.
2. Conceda los permisos necesarios para crear los enlaces VPC para integraciones privadas. Para
obtener más información, consulte Concesión de permisos para crear un enlace VPC.
Después de crear el recurso de VPC y el balanceador de carga de red con dicho recurso configurado
en sus grupos de destino, siga las instrucciones que se indican a continuación para crear una API e
integrarla con el recurso de la VPC a través de un VpcLink de una integración privada.
2. Si es la primera vez que utiliza API Gateway, verá una página en la que aparecen las
características del servicio. En REST API, elija Build (Compilación). Cuando aparezca el menú
emergente Create Example API (Crear API de ejemplo), elija OK (Aceptar).
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
3. Cree una API de REST regional u optimizada para la periferia.
4. Seleccione la API.
Puede definir la variable de etapa vpcLinkId después de implementar la API en una etapa
y establecer su valor en el ID del VpcLink.
Con la integración del proxy, la API está lista para implementarse. De lo contrario, debe
configurar las respuestas del método y las respuestas de integración apropiadas.
6. Elija Implementar API y, a continuación, haga lo siguiente:
d. Elija Implementar.
d. Elija Guardar.
Si utiliza la variable de etapa, podrá cambiar fácilmente entre los diferentes enlaces VPC de
la API; solo tendrá que modificar el valor de esta variable.
Tanto los temas Tutorial: Desarrollo de una API de REST Hello World con integración de proxy de
Lambda como Desarrollo de una API de REST de API Gateway con integración Lambda describen
cómo se debe crear una API de API Gateway para exponer la función de Lambda integrada.
Además, puede crear una API de API Gateway para exponer otros servicios de AWS, como Amazon
SNS, Amazon S3, Amazon Kinesis e incluso AWS Lambda. Esto es posible mediante la integración
de AWS. La integración de Lambda o la integración de proxy de Lambda es un caso especial, donde
la invocación de la función de Lambda se expone a través de la API de API Gateway.
Todos los servicios de AWS admiten API dedicadas para exponer sus características. Sin embargo,
los protocolos de la aplicación o las interfaces de programación probablemente difieren entre un
servicio y otro. Una API de API Gateway con la integración de AWS tiene la ventaja de proporcionar
un protocolo de aplicación coherente para que su cliente tenga acceso a diferentes servicios de
AWS.
En este tutorial, vamos a crear una API para exponer Amazon SNS. Para ver más ejemplos de
integración de una API con otros servicios de AWS, consulte Tutoriales y talleres sobre Amazon API
Gateway.
API Gateway no vuelve a intentar las operaciones cuando se agota el tiempo de espera del punto
de enlace. El intermediario de la API debe implementar una lógica de reintentos para administrar los
tiempos de espera del punto de enlace.
Este tutorial se basa en las instrucciones y conceptos en Desarrollo de una API de REST de API
Gateway con integración Lambda. Si aún no ha completado ese tutorial, le sugerimos que lo haga
primero.
Temas
• Requisitos previos
• Paso 1: Crear el rol de ejecución del proxy de servicio de AWS
• Paso 2: Crear el recurso
• Paso 3: Crear el método GET
• Paso 4: Especificar la configuración del método y probar el método
• Paso 5: Implementar la API
• Paso 6: Probar la API
• Paso 7: Limpieza
Requisitos previos
1. Realice los pasos que se indican en Requisitos previos para comenzar con API Gateway.
2. Cree una nueva API llamada MyDemoAPI. Para obtener más información, consulte Tutorial:
Desarrollo de una API de REST con integración HTTP no de proxy.
3. Implemente la API al menos una vez en una etapa denominada test. Para obtener más
información, consulte Implementar la API en Desarrollo de una API de REST de API Gateway
con integración Lambda.
4. Realice el resto de los pasos de Desarrollo de una API de REST de API Gateway con
integración Lambda.
5. Cree al menos un tema en Amazon Simple Notification Service (Amazon SNS). Utilizará la API
implementada para obtener una lista de temas de Amazon SNS asociados a su cuenta de AWS.
Para obtener información sobre cómo crear un tema en Amazon SNS, consulte Creación de un
tema. (No es necesario que copie el ARN del tema mencionado en el paso 5).
Para permitir que la API invoque acciones de Amazon SNS, debe tener las políticas de IAM
adecuadas asociadas a un rol de IAM.
Note
Para simplificar el proceso, este tutorial utiliza una política administrada. Como práctica
recomendada, se deben crear políticas de IAM propias para otorgar los permisos
mínimos requeridos.
11. Anote el ARN del rol recién creado, ya que lo usará más adelante.
En este paso, creará un recurso que permitirá al proxy de servicio de AWS interactuar con el servicio
de AWS.
3. Seleccione el recurso raíz, /, representado por una única barra oblicua (/), y después elija Crear
recurso.
En este paso, creará un método GET que permitirá al proxy de servicio de AWS interactuar con el
servicio de AWS.
4. En Región de AWS, seleccione la Región de AWS en la que ha creado el tema de Amazon SNS.
5. En Servicio de AWS, seleccione Amazon SNS.
Ahora puede probar el método GET para verificar que se ha configurado correctamente para
enumerar los temas de Amazon SNS.
1. Elija la pestaña Test (Prueba). Puede que tenga que elegir el botón de flecha hacia la derecha
para mostrar la pestaña.
{
"ListTopicsResponse": {
"ListTopicsResult": {
"NextToken": null,
"Topics": [
{
"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1"
},
{
"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2"
},
...
{
"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N"
}
]
},
"ResponseMetadata": {
"RequestId": "abc1de23-45fa-6789-b0c1-d2e345fa6b78"
}
}
}
En este paso, implementará la API para que pueda llamarla desde fuera de la consola de API
Gateway.
En este paso, salga de la consola de API Gateway y utilice el proxy de servicio de AWS para
interactuar con el se rvicio de Amazon SNS.
2. En Detalles de la etapa, elija el icono de copia para copiar la URL de invocación de la API.
https://my-api-id.execute-api.region-id.amazonaws.com/test
https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoawsproxy
{"ListTopicsResponse":{"ListTopicsResult":{"NextToken": null,"Topics":
[{"TopicArn": "arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-1"},{"TopicArn":
"arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-2"},...{"TopicArn":
"arn:aws:sns:us-east-1:80398EXAMPLE:MySNSTopic-N}]},"ResponseMetadata":
{"RequestId":"abc1de23-45fa-6789-b0c1-d2e345fa6b78}}}
Paso 7: Limpieza
Puede eliminar los recursos de IAM que el proxy de servicio de AWS necesita para funcionar.
Tutorial: Creación de una API con integración de AWS 90
Amazon API Gateway Guía para desarrolladores
Warning
Si elimina un recurso de IAM que utiliza un proxy de servicio de AWS, ese proxy de servicio
de AWS y todas las API que lo utilicen dejarán de funcionar. La eliminación de un recurso
de IAM no se puede deshacer. Si desea utilizar el recurso de IAM de nuevo, debe volver a
crearlo.
Ha llegado al final de este tutorial. Para obtener más detalles sobre la creación de una API con un
proxy de servicio de AWS, consulte Tutorial: Crear una API de REST como proxy de Amazon S3
en API Gateway, Tutorial: creación de una API REST Calc con dos integraciones de servicios de
AWS y una integración de Lambda sin proxy o Tutorial: Creación de una API de REST como proxy
de Amazon Kinesis en API Gateway.
En este tutorial, creará una función Calc de Lambda que implementa operaciones aritméticas
básicas, aceptando y devolviendo entradas y salidas con formato JSON. A continuación, creará una
API REST y la integrará con la función de Lambda de la siguiente forma:
Además de probar con este tutorial, sugerimos que estudie el archivo de definición de OpenAPI para
la API de Calc, que puede importar a API Gateway siguiendo las instrucciones de the section called
“OpenAPI”.
Temas
• Crear un rol de IAM asumible
• Creación de una función Calc de Lambda
• Probar la función Calc de Lambda
• Cree una API de Calc
• Integración 1: Crear un método GET con parámetros de consulta para llamar a la función de
Lambda
• Integración 2: Crear un método POST con una carga JSON para llamar a la función de Lambda
• Integración 3: Crear un método GET con parámetros de ruta para llamar a la función de Lambda
• Definiciones de OpenAPI de una API de ejemplo integrada con una función de Lambda
Para que su API invoque su función Calc de Lambda, necesitará tener un rol de IAM asumible por
API Gateway, que es un rol de IAM con la siguiente relación de confianza:
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
El rol que cree tendrá que tener el permiso InvokeFunction de Lambda. De lo contrario, el
intermediario de la API recibirá una respuesta 500 Internal Server Error. Para dar al rol este
permiso, asociará la siguiente política de IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "*"
}
]
}
Se abrirá una nueva ventana de consola Create Policy (Crear política). En esa ventana, haga lo
siguiente:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"apigateway.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
14. Anote el ARN del rol que acaba de crear. Lo necesitará más adelante.
Node.js
if (
event.a === undefined ||
event.b === undefined ||
event.op === undefined
) {
return "400 Invalid Input";
}
return res;
};
Python
import json
try:
(event['a']) and (event['b']) and (event['op'])
except KeyError:
return '400 Invalid Input'
try:
res = {"a": float(event['a']), "b": float(event['b']), "op":
event['op']}
except ValueError:
return '400 Invalid Operand'
if event['op'] == '+':
res['c'] = res['a'] + res['b']
elif event['op'] == '-':
res['c'] = res['a'] - res['b']
elif event['op'] == '*':
res['c'] = res['a'] * res['b']
elif event['op'] == '/':
if res['b'] == 0:
return '400 Divide by Zero'
else:
res['c'] = res['a'] / res['b']
else:
return '400 Invalid Operator'
return res
7. Bajo Execution role (Rol de ejecución) elija Choose an existing role (Elegir un rol existente).
Esta función requiere dos operandos (a y b) y un operador (op) del parámetro de entrada event. La
entrada es un objeto JSON con el siguiente formato:
{
"a": "Number" | "String",
"b": "Number" | "String",
"op": "String"
}
Esta función devuelve el resultado calculado (c) y la entrada. Si se trata de una entrada no válida,
la función devuelve el valor null o la cadena "Invalid op" como resultado. La salida tiene el siguiente
formato JSON:
{
"a": "Number",
"b": "Number",
"op": "String",
"c": "Number" | "String"
}
Debe probar la función en la consola de Lambda antes de integrarla con la API en el siguiente paso.
{
"a": "2",
"b": "5",
"op": "+"
}
4. Seleccione Save.
5. Seleccione Test (Probar).
{
"a": 2,
"b": 5,
"op": "+",
"c": 7
}
El procedimiento siguiente describe cómo crear una API para la función Calc de Lambda que acaba
de crear. En las siguientes secciones, añadirá recursos y métodos.
2. Si es la primera vez que utiliza API Gateway, verá una página en la que aparecen las
características del servicio. En REST API, elija Build (Compilación). Cuando aparezca el menú
emergente Create Example API (Crear API de ejemplo), elija OK (Aceptar).
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
Mediante la creación de un método GET que pasa los parámetros de cadenas de consulta a la
función de Lambda, habilita la API que se va a invocar desde un navegador. Este método puede ser
útil, en especial para las API que permiten acceso abierto.
Después de crear una API, se crea un recurso. Normalmente, los recursos de la API están
organizados en un árbol de recursos de acuerdo con la lógica de la aplicación. Para este paso, debe
crear un recurso /calc.
Mediante la creación de un método GET que pasa los parámetros de cadenas de consulta a la
función de Lambda, habilita la API que se va a invocar desde un navegador. Este método puede ser
útil, en especial para las API que permiten acceso abierto.
En este método, Lambda requiere que se use la solicitud POST para invocar cualquier función de
Lambda. Este ejemplo muestra que el método HTTP en una solicitud de método del frontend puede
diferir de la solicitud de integración en el backend.
Ahora, vamos a configurar los parámetros de consulta para el método GET en el recurso /calc para
que pueda recibir la entrada en nombre de la función de Lambda del backend.
Repita los mismos pasos y cree una cadena de consulta llamada operand2 y una cadena de
consulta llamada operator.
4. Elija Guardar.
Ahora, vamos a crear una plantilla de mapeo para convertir las cadenas de consulta proporcionadas
por el cliente en la carga de la solicitud de integración, tal y como requiere la función Calc. Esta
plantilla mapea los tres parámetros de cadena de consulta declarados en Solicitud de método en
los valores de propiedad designados del objeto JSON como entrada a la función de Lambda del
backend. El objeto JSON transformado se incluirá como la carga de la solicitud de integración.
{
"a": "$input.params('operand1')",
"b": "$input.params('operand2')",
"op": "$input.params('operator')"
}
7. Elija Guardar.
Ahora puede probar el método GET para verificar que se ha configurado correctamente para invocar
la función de Lambda.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
Integración 2: Crear un método POST con una carga JSON para llamar a la función de
Lambda
Al crear un método POST con una carga JSON para llamar a la función de Lambda, lo hace de tal
manera que el cliente debe proporcionar la entrada necesaria a la función del backend en el cuerpo
de la solicitud. Para garantizar que el cliente carga los datos de entrada correctos, habilitará la
validación de solicitudes en la carga.
Ahora vamos a crear un modelo de entrada para describir la estructura de los datos de entrada y
validar el cuerpo de la solicitud entrante.
{
"type":"object",
"properties":{
"a":{"type":"number"},
"b":{"type":"number"},
"op":{"type":"string"}
},
"title":"input"
}
Ahora cree un modelo de salida. Este modelo describe la estructura de datos de la salida calculada
desde el backend. Se puede utilizar para asignar los datos de la respuesta de integración a un
modelo diferente. Este tutorial se basa en el comportamiento de paso a través y no utiliza este
modelo.
{
"type":"object",
"properties":{
"c":{"type":"number"}
},
"title":"output"
}
Ahora cree un modelo de resultados. Este modelo describe la estructura de datos de los datos de
respuesta devueltos. Hace referencia a los esquemas de entrada y salida definidos en su API.
{
"type":"object",
"properties":{
"input":{
"$ref":"https://apigateway.amazonaws.com/restapis/restapi-id/models/
input"
},
"output":{
"$ref":"https://apigateway.amazonaws.com/restapis/restapi-id/models/
output"
}
},
"title":"result"
}
Ahora configure la solicitud de método de su método POST para habilitar la validación de la solicitud
en el cuerpo de la solicitud entrante.
Ahora puede probar el método POST para verificar que se ha configurado correctamente para invocar
la función de Lambda.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
2. En Cuerpo de la solicitud, pegue la siguiente carga JSON.
{
"a": 1,
"b": 2,
"op": "+"
}
3. Seleccione Probar.
{
"a": 1,
"b": 2,
"op": "+",
"c": 3
}
Integración 3: Crear un método GET con parámetros de ruta para llamar a la función
de Lambda
Ahora creará un método GET en un recurso especificado por una secuencia de parámetros de ruta
para llamar a la función de Lambda del backend. Los valores de los parámetros de ruta especifican
los datos de entrada a la función de Lambda. Definirá una plantilla de asignación para asignar los
valores de los parámetros de ruta entrantes a la carga de la solicitud de integración necesaria.
Esta vez utilizará la integración de Lambda incorporada en la consola de API Gateway para
configurar la integración del método.
Ahora debe crear una plantilla de mapeo para mapear los tres parámetros de la ruta de la URL,
declarados cuando se creó el recurso /calc/{operand1}/{operand2}/{operator}, con los valores de
propiedad designados en el objeto JSON. Como las rutas URL deben estar codificadas como
direcciones URL, el operador de división debe especificarse como %2F en lugar de /. Esta plantilla
traduce %2F en '/' antes de pasarlo a la función de Lambda.
{
"a": "$input.params('operand1')",
"b": "$input.params('operand2')",
"op":
#if($input.params('operator')=='%2F')"/"#{else}"$input.params('operator')"#end
}
6. Elija Guardar.
Ahora puede probar el método GET para verificar que se ha configurado correctamente para invocar
la función de Lambda y pasar el resultado original a través de la respuesta de integración sin
mapear.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
a. En operand1, introduzca 1.
b. En operand2, introduzca 1.
c. En operator, introduzca +.
De forma predeterminada, el cuerpo de la respuesta del método se asigna a un modelo vacío. Esto
hará que el cuerpo de la respuesta de integración se transfiera sin asignación. Sin embargo, cuando
genere un SDK para alguno de los lenguajes con establecimiento inflexible de tipos, como Java u
Objective-C, los usuarios del SDK recibirán un objeto vacío como resultado. Para garantizar que
el cliente REST y los clientes del SDK reciban el resultado deseado, debe crear los datos de la
respuesta mediante un esquema predefinido. A continuación, definirá un modelo para el cuerpo
de la respuesta del método y cómo crear una plantilla de asignación para traducir el cuerpo de la
respuesta de integración al cuerpo de la respuesta del método.
5. Elija Guardar.
Al configurar el modelo para el cuerpo de la respuesta del método, nos aseguramos de que los datos
de la respuesta se emitan en el objeto result de un determinado SDK. Para asegurarse de que
los datos de la respuesta de integración se asignen según corresponda, necesitará una plantilla de
asignación.
#set($inputRoot = $input.path('$'))
{
"input" : {
"a" : $inputRoot.a,
"b" : $inputRoot.b,
"op" : "$inputRoot.op"
},
"output" : {
"c" : $inputRoot.c
}
}
6. Elija Guardar.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
2. Para Ruta, haga lo siguiente:
a. En operand1, introduzca 1.
b. En operand2, introduzca 2.
c. En operator, introduzca +.
3. Seleccione Probar.
{
"input": {
"a": 1,
"b": 2,
"op": "+"
},
"output": {
"c": 3
}
}
En este momento, solo puede llamar a la API utilizando la característica Prueba de la consola de
API Gateway. Para hacer que esté disponible para los clientes, debe implementar la API. Asegúrese
siempre para volver a implementar la API, cada vez que agrega, modifica o elimina un recurso o un
método, actualizar una asignación de datos o actualiza la configuración de la etapa. De lo contrario,
las nuevas características o actualizaciones no estarán disponibles para los clientes de la API.
5. Elija Implementar.
6. (Opcional) En Detalles de la etapa, para URL de invocación, puede elegir el icono de copia para
copiar la URL de invocación de su API. Puede utilizar esto con herramientas como Postman y
cURL para probar la API.
Note
Vuelva a implementar la API cada vez que agrega, modifica o elimina un recurso o un
método, actualiza una asignación de datos o actualiza la configuración de la etapa. De
lo contrario, las nuevas características o actualizaciones no estarán disponibles para los
clientes de la API.
OpenAPI 2.0
{
"swagger": "2.0",
"info": {
"version": "2017-04-20T04:08:08Z",
"title": "LambdaCalc"
},
"host": "uojnr9hd57.execute-api.us-east-1.amazonaws.com",
"basePath": "/test",
"schemes": [
"https"
],
"paths": {
"/calc": {
"get": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "operand2",
"in": "query",
"required": true,
"type": "string"
},
{
"name": "operator",
"in": "query",
"required": true,
"type": "string"
},
{
"name": "operand1",
"in": "query",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Result"
},
"headers": {
"operand_1": {
"type": "string"
},
"operand_2": {
"type": "string"
},
"operator": {
"type": "string"
}
}
}
},
"x-amazon-apigateway-request-validator": "Validate query string parameters
and headers",
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"default": {
"statusCode": "200",
"responseParameters": {
"method.response.header.operator": "integration.response.body.op",
"method.response.header.operand_2": "integration.response.body.b",
"method.response.header.operand_1": "integration.response.body.a"
},
"responseTemplates": {
"application/json": "#set($res = $input.path('$'))\n{\n \"result
\": \"$res.a, $res.b, $res.op => $res.c\",\n \"a\" : \"$res.a\",\n \"b\" :
\"$res.b\",\n \"op\" : \"$res.op\",\n \"c\" : \"$res.c\"\n}"
}
}
},
"uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/
arn:aws:lambda:us-west-2:123456789012:function:Calc/invocations",
"passthroughBehavior": "when_no_match",
"httpMethod": "POST",
"requestTemplates": {
"application/json": "{\n \"a\": \"$input.params('operand1')\",\n
\"b\": \"$input.params('operand2')\", \n \"op\": \"$input.params('operator')\"
\n}"
},
"type": "aws"
}
},
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "Input",
"required": true,
"schema": {
"$ref": "#/definitions/Input"
}
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Result"
}
}
},
"x-amazon-apigateway-request-validator": "Validate body",
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"default": {
"statusCode": "200",
"responseTemplates": {
"application/json": "#set($inputRoot = $input.path('$'))\n{\n \"a
\" : $inputRoot.a,\n \"b\" : $inputRoot.b,\n \"op\" : $inputRoot.op,\n \"c\" :
$inputRoot.c\n}"
}
}
},
"uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/
arn:aws:lambda:us-west-2:123456789012:function:Calc/invocations",
"passthroughBehavior": "when_no_templates",
"httpMethod": "POST",
"type": "aws"
}
}
},
"/calc/{operand1}/{operand2}/{operator}": {
"get": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "operand2",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "operator",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "operand1",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Result"
}
}
},
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"default": {
"statusCode": "200",
"responseTemplates": {
"application/json": "#set($inputRoot = $input.path('$'))\n{\n
\"input\" : {\n \"a\" : $inputRoot.a,\n \"b\" : $inputRoot.b,\n \"op\" :
\"$inputRoot.op\"\n },\n \"output\" : {\n \"c\" : $inputRoot.c\n }\n}"
}
}
},
"uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/
arn:aws:lambda:us-west-2:123456789012:function:Calc/invocations",
"passthroughBehavior": "when_no_templates",
"httpMethod": "POST",
"requestTemplates": {
"application/json": "{\n \"a\": \"$input.params('operand1')\",
\n \"b\": \"$input.params('operand2')\",\n \"op\":
#if($input.params('operator')=='%2F')\"/\"#{else}\"$input.params('operator')\"#end
\n \n}"
},
"contentHandling": "CONVERT_TO_TEXT",
"type": "aws"
}
}
}
},
"definitions": {
"Input": {
"type": "object",
"required": [
"a",
"b",
"op"
],
"properties": {
"a": {
"type": "number"
},
"b": {
"type": "number"
},
"op": {
"type": "string",
"description": "binary op of ['+', 'add', '-', 'sub', '*', 'mul', '%2F',
'div']"
}
},
"title": "Input"
},
"Output": {
"type": "object",
"properties": {
"c": {
"type": "number"
}
},
"title": "Output"
},
"Result": {
"type": "object",
"properties": {
"input": {
"$ref": "#/definitions/Input"
},
"output": {
"$ref": "#/definitions/Output"
}
},
"title": "Result"
}
},
"x-amazon-apigateway-request-validators": {
"Validate body": {
"validateRequestParameters": false,
"validateRequestBody": true
},
"Validate query string parameters and headers": {
"validateRequestParameters": true,
"validateRequestBody": false
}
}
}
Para ilustrar cómo usar una API de REST en API Gateway como proxy de Amazon S3, en esta
sección se describe cómo crear y configurar una API de REST para exponer las siguientes
operaciones de Amazon S3:
• Exponer GET en el recurso raíz de la API para enumerar todos los buckets de Amazon S3 de un
intermediario.
• Exponer GET en un recurso de carpeta para ver una lista de todos los objetos de un bucket de
Amazon S3.
• Exponer GET en un recurso de carpeta o elemento para ver o descargar un objeto de un bucket de
Amazon S3.
Es posible que desee importar la API de ejemplo como proxy de Amazon S3, tal y como se muestra
en Definiciones de OpenAPI de la API de ejemplo como un proxy de Amazon S3. Este ejemplo
contiene métodos más expuestos. Para obtener instrucciones sobre cómo importar una API mediante
la definición de OpenAPI, consulte Configuración de una API de REST mediante OpenAPI.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 120
Amazon API Gateway Guía para desarrolladores
Note
Para integrar su API de API Gateway con Amazon S3, debe elegir una región en la que
estén disponibles los servicios API Gateway y Amazon S3. Para obtener información sobre
la disponibilidad en función de la región, consulte Cuotas y puntos de enlace de Amazon API
Gateway.
Temas
• Configurar permisos de IAM para que la API invoque acciones de Amazon S3
• Crear recursos de API para representar recursos de Amazon S3
• Exponer un método de API para enumerar los buckets de Amazon S3 del intermediario
• Exponer métodos de API para tener acceso a un bucket de Amazon S3
• Exponer métodos de API para tener acceso a un objeto de Amazon S3 en un bucket
• Definiciones de OpenAPI de la API de ejemplo como un proxy de Amazon S3
• Llamar a la API mediante un cliente API de REST
Para permitir que la API invoque las acciones de Amazon S3, debe tener las políticas de IAM
adecuadas asociadas a un rol de IAM.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 121
Amazon API Gateway Guía para desarrolladores
Note
Para simplificar el proceso, este tutorial utiliza una política administrada. Como práctica
recomendada, se deben crear políticas de IAM propias para otorgar los permisos
mínimos requeridos.
11. Anote el ARN del rol recién creado, ya que lo usará más adelante.
Note
Al acceder a los objetos cuya clave de objeto incluye / o cualquier otro carácter especial,
el carácter estar codificado en la URL. Por ejemplo, test/test.txt deben codificarse en
test%2Ftest.txt.
Para crear un recurso de API que exponga las características del servicio Amazon S3
1. En la misma Región de AWS que creó el bucket de Amazon S3, cree una API llamada MyS3.
Este recurso raíz de la API (/) representa el servicio Amazon S3. En este paso, creará dos
recursos adicionales,/{folder} y /{item}.
2. Seleccione el recurso raíz de la API y, a continuación, elija Crear recurso.
3. Mantenga Recurso proxy desactivado.
4. En Ruta de recurso, seleccione /.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 122
Amazon API Gateway Guía para desarrolladores
Obtener la lista de buckets de Amazon S3 del intermediario implica invocar la acción GET Service
en Amazon S3. En el recurso raíz de la API, (/), cree el método GET. Configure el método GET para
realizar la integración con Amazon S3, tal y como se indica a continuación.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 123
Amazon API Gateway Guía para desarrolladores
8. En Tipo de acción, elija Usar sustitución de ruta. Al anular la ruta, API Gateway reenvía la
solicitud del cliente a Amazon S3 como la solicitud del tipo de ruta de la API de REST de
Amazon S3 correspondiente, en la cual un recurso de Amazon S3 se expresa por la ruta de
recursos del patrón s3-host-name/bucket/key. API Gateway establece el s3-host-name y
transmite el bucket y la key especificados por el cliente a Amazon S3.
9. En Sustitución de ruta, escriba /.
10. En Rol de ejecución, escriba el ARN del rol para APIGatewayS3ProxyPolicy.
11. Elija Crear método.
Note
Tras la configuración inicial, puede modificar estos ajustes en la página Integration Request
(Solicitud de integración) del método.
Para controlar quién puede llamar a este método de nuestra API, activamos la marca de autorización
del método y la establecemos en AWS_IAM.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 124
Amazon API Gateway Guía para desarrolladores
3. Elija Guardar.
Para que nuestra API devuelva respuestas correctas y excepciones al intermediario, vamos a
declarar las respuestas 200, 400 y 500 en Method Response (Respuesta de método). Utilizamos el
mapeo predeterminado para las respuestas 200, de forma que las respuestas del backend del código
de estado no declarado aquí se devuelvan al intermediario como respuestas 200.
3. Elija Guardar.
6. Elija Guardar.
Como la respuesta de integración correcta de Amazon S3 devuelve la lista de buckets como una
carga XML y la respuesta de método predeterminada de API Gateway devuelve una carga JSON,
debemos mapear el valor del parámetro del encabezado Content-Type del backend con su homólogo
en el frontend. De lo contrario, el cliente recibirá application/json para el tipo de contenido
cuando el cuerpo de la respuesta sea en realidad una cadena XML. El siguiente procedimiento
muestra cómo realizar esta configuración. Además, también queremos mostrar al cliente otros
parámetros de encabezado, como Date y Content-Length.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 125
Amazon API Gateway Guía para desarrolladores
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 126
Amazon API Gateway Guía para desarrolladores
10. Repita los siguientes pasos para crear una respuesta de integración para la respuesta del
método 500. En HTTP status regex (Expresión regular de estado HTTP), escriba 5\d{2}.
Como práctica recomendada, vamos a probar nuestra API tal y como está configurada de momento.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
Para trabajar con un bucket de Amazon S3, exponemos el método GET en el recurso /{folder}
para mostrar los objetos de un bucket. Las instrucciones son similares a las que se describen en
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 127
Amazon API Gateway Guía para desarrolladores
Exponer un método de API para enumerar los buckets de Amazon S3 del intermediario. Para ver
más métodos, puede importar la API de ejemplo aquí, Definiciones de OpenAPI de la API de ejemplo
como un proxy de Amazon S3.
4. Para Región de AWS, seleccione la Región de AWS donde creó su bucket de Amazon S3.
Establezca el parámetro de ruta {folder} en la URL del punto de conexión de Amazon S3. Debe
mapear el parámetro de ruta {folder} de la solicitud de método al parámetro de ruta {bucket} de
la solicitud de integración.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 128
Amazon API Gateway Guía para desarrolladores
5. Elija Guardar.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
3. Seleccione Probar.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 129
Amazon API Gateway Guía para desarrolladores
Amazon S3 admite las acciones GET, DELETE, HEAD, OPTIONS, POST y PUT para acceder a
objetos de un bucket determinado y administrarlos. En este tutorial, expondrá un método GET del
recurso {folder}/{item} para obtener una imagen de un bucket. Para ver más aplicaciones del
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 130
Amazon API Gateway Guía para desarrolladores
Establezca los parámetros de ruta {folder} y {item} en la URL del punto de conexión de
Amazon S3. Debe mapear el parámetro de ruta de la solicitud de método al parámetro de ruta de la
solicitud de integración.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 131
Amazon API Gateway Guía para desarrolladores
9. Elija Guardar.
1. Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para
mostrar la pestaña.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 132
Amazon API Gateway Guía para desarrolladores
La solicitud devuelve correctamente el texto sin formato ("Hello world") como el contenido del
archivo especificado (test.txt) en el bucket de Amazon S3 indicado (DOC-EXAMPLE-BUCKET).
Para descargar o cargar archivos binarios, que en API Gateway se considera cualquier cosa que no
sea contenido JSON codificado en UTF-8, es necesaria una configuración adicional de la API. Esto
se detalla de la siguiente manera:
1. Registrar los tipos de archivo del archivo afectado en los tipos "binaryMediaTypes" de la API.
Puede hacer lo siguiente en la consola:
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 133
Amazon API Gateway Guía para desarrolladores
El límite de tamaño de carga es 10 MB. Consulte Cuotas de API Gateway para configurar y ejecutar
una API REST.
Asegúrese de que los archivos en Amazon S3 incluyen los tipos de contenido correctos en los
metadatos. Para contenido multimedia que se puede transmitir, es posible que los metadatos deban
incluir Content-Disposition:inline.
Para obtener más información sobre la compatibilidad con datos binarios en API Gateway, consulte
Conversiones de tipo de contenido en API Gateway.
En las siguientes definiciones de OpenAPI, se describe una API que funciona como proxy de
Amazon S3. Esta API contiene más operaciones de Amazon S3 que la API que creó en el tutorial.
Los siguientes métodos se exponen en las definiciones de OpenAPI:
• Exponer GET en el recurso raíz de la API para enumerar todos los buckets de Amazon S3 de un
intermediario.
• Exponer GET en un recurso de carpeta para ver una lista de todos los objetos de un bucket de
Amazon S3.
• Exponer PUT en un recurso de carpeta para agregar un bucket a Amazon S3.
• Exponer DELETE en un recurso de carpeta para eliminar un bucket de Amazon S3.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 134
Amazon API Gateway Guía para desarrolladores
• Exponer GET en un recurso de carpeta o elemento para ver o descargar un objeto de un bucket de
Amazon S3.
• Exponer PUT en un recurso de carpeta o elemento para cargar un objeto en un bucket de Amazon
S3.
• Exponer HEAD en un recurso de carpeta o elemento para obtener los metadatos de objeto en un
bucket de Amazon S3.
• Exponer DELETE en un recurso de carpeta o elemento para eliminar un objeto de un bucket de
Amazon S3.
Para obtener instrucciones sobre cómo importar una API mediante la definición de OpenAPI,
consulte Configuración de una API de REST mediante OpenAPI.
Para obtener instrucciones sobre cómo crear una API similar, consulte Tutorial: Crear una API de
REST como proxy de Amazon S3 en API Gateway.
Para obtener información sobre cómo invocar esta API mediante Postman, que admite la
autorización de IAM AWS, consulte Llamar a la API mediante un cliente API de REST.
OpenAPI 2.0
{
"swagger": "2.0",
"info": {
"version": "2016-10-13T23:04:43Z",
"title": "MyS3"
},
"host": "9gn28ca086.execute-api.{region}.amazonaws.com",
"basePath": "/S3",
"schemes": [
"https"
],
"paths": {
"/": {
"get": {
"produces": [
"application/json"
],
"responses": {
"200": {
"description": "200 response",
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 135
Amazon API Gateway Guía para desarrolladores
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"Content-Length": {
"type": "string"
},
"Timestamp": {
"type": "string"
},
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
},
"500": {
"description": "500 response"
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
"statusCode": "400"
},
"default": {
"statusCode": "200",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type",
"method.response.header.Content-Length":
"integration.response.header.Content-Length",
"method.response.header.Timestamp":
"integration.response.header.Date"
}
},
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 136
Amazon API Gateway Guía para desarrolladores
"5\\d{2}": {
"statusCode": "500"
}
},
"uri": "arn:aws:apigateway:us-west-2:s3:path//",
"passthroughBehavior": "when_no_match",
"httpMethod": "GET",
"type": "aws"
}
}
},
"/{folder}": {
"get": {
"produces": [
"application/json"
],
"parameters": [
{
"name": "folder",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"Content-Length": {
"type": "string"
},
"Date": {
"type": "string"
},
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 137
Amazon API Gateway Guía para desarrolladores
},
"500": {
"description": "500 response"
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
"statusCode": "400"
},
"default": {
"statusCode": "200",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type",
"method.response.header.Date": "integration.response.header.Date",
"method.response.header.Content-Length":
"integration.response.header.content-length"
}
},
"5\\d{2}": {
"statusCode": "500"
}
},
"requestParameters": {
"integration.request.path.bucket": "method.request.path.folder"
},
"uri": "arn:aws:apigateway:us-west-2:s3:path/{bucket}",
"passthroughBehavior": "when_no_match",
"httpMethod": "GET",
"type": "aws"
}
},
"put": {
"produces": [
"application/json"
],
"parameters": [
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 138
Amazon API Gateway Guía para desarrolladores
{
"name": "Content-Type",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "folder",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"Content-Length": {
"type": "string"
},
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
},
"500": {
"description": "500 response"
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 139
Amazon API Gateway Guía para desarrolladores
"statusCode": "400"
},
"default": {
"statusCode": "200",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type",
"method.response.header.Content-Length":
"integration.response.header.Content-Length"
}
},
"5\\d{2}": {
"statusCode": "500"
}
},
"requestParameters": {
"integration.request.path.bucket": "method.request.path.folder",
"integration.request.header.Content-Type":
"method.request.header.Content-Type"
},
"uri": "arn:aws:apigateway:us-west-2:s3:path/{bucket}",
"passthroughBehavior": "when_no_match",
"httpMethod": "PUT",
"type": "aws"
}
},
"delete": {
"produces": [
"application/json"
],
"parameters": [
{
"name": "folder",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 140
Amazon API Gateway Guía para desarrolladores
"headers": {
"Date": {
"type": "string"
},
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
},
"500": {
"description": "500 response"
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
"statusCode": "400"
},
"default": {
"statusCode": "200",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type",
"method.response.header.Date": "integration.response.header.Date"
}
},
"5\\d{2}": {
"statusCode": "500"
}
},
"requestParameters": {
"integration.request.path.bucket": "method.request.path.folder"
},
"uri": "arn:aws:apigateway:us-west-2:s3:path/{bucket}",
"passthroughBehavior": "when_no_match",
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 141
Amazon API Gateway Guía para desarrolladores
"httpMethod": "DELETE",
"type": "aws"
}
}
},
"/{folder}/{item}": {
"get": {
"produces": [
"application/json"
],
"parameters": [
{
"name": "item",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "folder",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"content-type": {
"type": "string"
},
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
},
"500": {
"description": "500 response"
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 142
Amazon API Gateway Guía para desarrolladores
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
"statusCode": "400"
},
"default": {
"statusCode": "200",
"responseParameters": {
"method.response.header.content-type":
"integration.response.header.content-type",
"method.response.header.Content-Type":
"integration.response.header.Content-Type"
}
},
"5\\d{2}": {
"statusCode": "500"
}
},
"requestParameters": {
"integration.request.path.object": "method.request.path.item",
"integration.request.path.bucket": "method.request.path.folder"
},
"uri": "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"passthroughBehavior": "when_no_match",
"httpMethod": "GET",
"type": "aws"
}
},
"head": {
"produces": [
"application/json"
],
"parameters": [
{
"name": "item",
"in": "path",
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 143
Amazon API Gateway Guía para desarrolladores
"required": true,
"type": "string"
},
{
"name": "folder",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"Content-Length": {
"type": "string"
},
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
},
"500": {
"description": "500 response"
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
"statusCode": "400"
},
"default": {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 144
Amazon API Gateway Guía para desarrolladores
"statusCode": "200",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type",
"method.response.header.Content-Length":
"integration.response.header.Content-Length"
}
},
"5\\d{2}": {
"statusCode": "500"
}
},
"requestParameters": {
"integration.request.path.object": "method.request.path.item",
"integration.request.path.bucket": "method.request.path.folder"
},
"uri": "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"passthroughBehavior": "when_no_match",
"httpMethod": "HEAD",
"type": "aws"
}
},
"put": {
"produces": [
"application/json"
],
"parameters": [
{
"name": "Content-Type",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "item",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "folder",
"in": "path",
"required": true,
"type": "string"
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 145
Amazon API Gateway Guía para desarrolladores
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"Content-Length": {
"type": "string"
},
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
},
"500": {
"description": "500 response"
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
"statusCode": "400"
},
"default": {
"statusCode": "200",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type",
"method.response.header.Content-Length":
"integration.response.header.Content-Length"
}
},
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 146
Amazon API Gateway Guía para desarrolladores
"5\\d{2}": {
"statusCode": "500"
}
},
"requestParameters": {
"integration.request.path.object": "method.request.path.item",
"integration.request.path.bucket": "method.request.path.folder",
"integration.request.header.Content-Type":
"method.request.header.Content-Type"
},
"uri": "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"passthroughBehavior": "when_no_match",
"httpMethod": "PUT",
"type": "aws"
}
},
"delete": {
"produces": [
"application/json"
],
"parameters": [
{
"name": "item",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "folder",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"Content-Length": {
"type": "string"
},
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 147
Amazon API Gateway Guía para desarrolladores
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response"
},
"500": {
"description": "500 response"
}
},
"security": [
{
"sigv4": []
}
],
"x-amazon-apigateway-integration": {
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"responses": {
"4\\d{2}": {
"statusCode": "400"
},
"default": {
"statusCode": "200"
},
"5\\d{2}": {
"statusCode": "500"
}
},
"requestParameters": {
"integration.request.path.object": "method.request.path.item",
"integration.request.path.bucket": "method.request.path.folder"
},
"uri": "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"passthroughBehavior": "when_no_match",
"httpMethod": "DELETE",
"type": "aws"
}
}
}
},
"securityDefinitions": {
"sigv4": {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 148
Amazon API Gateway Guía para desarrolladores
"type": "apiKey",
"name": "Authorization",
"in": "header",
"x-amazon-apigateway-authtype": "awsSigv4"
}
},
"definitions": {
"Empty": {
"type": "object",
"title": "Empty Schema"
}
}
}
OpenAPI 3.0
{
"openapi" : "3.0.1",
"info" : {
"title" : "MyS3",
"version" : "2016-10-13T23:04:43Z"
},
"servers" : [ {
"url" : "https://9gn28ca086.execute-api.{region}.amazonaws.com/{basePath}",
"variables" : {
"basePath" : {
"default" : "S3"
}
}
} ],
"paths" : {
"/{folder}" : {
"get" : {
"parameters" : [ {
"name" : "folder",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"400" : {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 149
Amazon API Gateway Guía para desarrolladores
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 150
Amazon API Gateway Guía para desarrolladores
"statusCode" : "200",
"responseParameters" : {
"method.response.header.Content-Type" :
"integration.response.header.Content-Type",
"method.response.header.Date" : "integration.response.header.Date",
"method.response.header.Content-Length" :
"integration.response.header.content-length"
}
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
"requestParameters" : {
"integration.request.path.bucket" : "method.request.path.folder"
},
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
},
"put" : {
"parameters" : [ {
"name" : "Content-Type",
"in" : "header",
"schema" : {
"type" : "string"
}
}, {
"name" : "folder",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"400" : {
"description" : "400 response",
"content" : { }
},
"500" : {
"description" : "500 response",
"content" : { }
},
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 151
Amazon API Gateway Guía para desarrolladores
"200" : {
"description" : "200 response",
"headers" : {
"Content-Length" : {
"schema" : {
"type" : "string"
}
},
"Content-Type" : {
"schema" : {
"type" : "string"
}
}
},
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration" : {
"credentials" : "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"httpMethod" : "PUT",
"uri" : "arn:aws:apigateway:us-west-2:s3:path/{bucket}",
"responses" : {
"4\\d{2}" : {
"statusCode" : "400"
},
"default" : {
"statusCode" : "200",
"responseParameters" : {
"method.response.header.Content-Type" :
"integration.response.header.Content-Type",
"method.response.header.Content-Length" :
"integration.response.header.Content-Length"
}
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 152
Amazon API Gateway Guía para desarrolladores
"requestParameters" : {
"integration.request.path.bucket" : "method.request.path.folder",
"integration.request.header.Content-Type" :
"method.request.header.Content-Type"
},
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
},
"delete" : {
"parameters" : [ {
"name" : "folder",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"400" : {
"description" : "400 response",
"content" : { }
},
"500" : {
"description" : "500 response",
"content" : { }
},
"200" : {
"description" : "200 response",
"headers" : {
"Date" : {
"schema" : {
"type" : "string"
}
},
"Content-Type" : {
"schema" : {
"type" : "string"
}
}
},
"content" : {
"application/json" : {
"schema" : {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 153
Amazon API Gateway Guía para desarrolladores
"$ref" : "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration" : {
"credentials" : "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"httpMethod" : "DELETE",
"uri" : "arn:aws:apigateway:us-west-2:s3:path/{bucket}",
"responses" : {
"4\\d{2}" : {
"statusCode" : "400"
},
"default" : {
"statusCode" : "200",
"responseParameters" : {
"method.response.header.Content-Type" :
"integration.response.header.Content-Type",
"method.response.header.Date" : "integration.response.header.Date"
}
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
"requestParameters" : {
"integration.request.path.bucket" : "method.request.path.folder"
},
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
}
},
"/{folder}/{item}" : {
"get" : {
"parameters" : [ {
"name" : "item",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
}, {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 154
Amazon API Gateway Guía para desarrolladores
"name" : "folder",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"400" : {
"description" : "400 response",
"content" : { }
},
"500" : {
"description" : "500 response",
"content" : { }
},
"200" : {
"description" : "200 response",
"headers" : {
"content-type" : {
"schema" : {
"type" : "string"
}
},
"Content-Type" : {
"schema" : {
"type" : "string"
}
}
},
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration" : {
"credentials" : "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"httpMethod" : "GET",
"uri" : "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"responses" : {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 155
Amazon API Gateway Guía para desarrolladores
"4\\d{2}" : {
"statusCode" : "400"
},
"default" : {
"statusCode" : "200",
"responseParameters" : {
"method.response.header.content-type" :
"integration.response.header.content-type",
"method.response.header.Content-Type" :
"integration.response.header.Content-Type"
}
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
"requestParameters" : {
"integration.request.path.object" : "method.request.path.item",
"integration.request.path.bucket" : "method.request.path.folder"
},
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
},
"put" : {
"parameters" : [ {
"name" : "Content-Type",
"in" : "header",
"schema" : {
"type" : "string"
}
}, {
"name" : "item",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
}, {
"name" : "folder",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 156
Amazon API Gateway Guía para desarrolladores
}
} ],
"responses" : {
"400" : {
"description" : "400 response",
"content" : { }
},
"500" : {
"description" : "500 response",
"content" : { }
},
"200" : {
"description" : "200 response",
"headers" : {
"Content-Length" : {
"schema" : {
"type" : "string"
}
},
"Content-Type" : {
"schema" : {
"type" : "string"
}
}
},
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration" : {
"credentials" : "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"httpMethod" : "PUT",
"uri" : "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"responses" : {
"4\\d{2}" : {
"statusCode" : "400"
},
"default" : {
"statusCode" : "200",
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 157
Amazon API Gateway Guía para desarrolladores
"responseParameters" : {
"method.response.header.Content-Type" :
"integration.response.header.Content-Type",
"method.response.header.Content-Length" :
"integration.response.header.Content-Length"
}
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
"requestParameters" : {
"integration.request.path.object" : "method.request.path.item",
"integration.request.path.bucket" : "method.request.path.folder",
"integration.request.header.Content-Type" :
"method.request.header.Content-Type"
},
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
},
"delete" : {
"parameters" : [ {
"name" : "item",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
}, {
"name" : "folder",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"400" : {
"description" : "400 response",
"content" : { }
},
"500" : {
"description" : "500 response",
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 158
Amazon API Gateway Guía para desarrolladores
"content" : { }
},
"200" : {
"description" : "200 response",
"headers" : {
"Content-Length" : {
"schema" : {
"type" : "string"
}
},
"Content-Type" : {
"schema" : {
"type" : "string"
}
}
},
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration" : {
"credentials" : "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"httpMethod" : "DELETE",
"uri" : "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"responses" : {
"4\\d{2}" : {
"statusCode" : "400"
},
"default" : {
"statusCode" : "200"
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
"requestParameters" : {
"integration.request.path.object" : "method.request.path.item",
"integration.request.path.bucket" : "method.request.path.folder"
},
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 159
Amazon API Gateway Guía para desarrolladores
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
},
"head" : {
"parameters" : [ {
"name" : "item",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
}, {
"name" : "folder",
"in" : "path",
"required" : true,
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"400" : {
"description" : "400 response",
"content" : { }
},
"500" : {
"description" : "500 response",
"content" : { }
},
"200" : {
"description" : "200 response",
"headers" : {
"Content-Length" : {
"schema" : {
"type" : "string"
}
},
"Content-Type" : {
"schema" : {
"type" : "string"
}
}
},
"content" : {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 160
Amazon API Gateway Guía para desarrolladores
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration" : {
"credentials" : "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"httpMethod" : "HEAD",
"uri" : "arn:aws:apigateway:us-west-2:s3:path/{bucket}/{object}",
"responses" : {
"4\\d{2}" : {
"statusCode" : "400"
},
"default" : {
"statusCode" : "200",
"responseParameters" : {
"method.response.header.Content-Type" :
"integration.response.header.Content-Type",
"method.response.header.Content-Length" :
"integration.response.header.Content-Length"
}
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
"requestParameters" : {
"integration.request.path.object" : "method.request.path.item",
"integration.request.path.bucket" : "method.request.path.folder"
},
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
}
},
"/" : {
"get" : {
"responses" : {
"400" : {
"description" : "400 response",
"content" : { }
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 161
Amazon API Gateway Guía para desarrolladores
},
"500" : {
"description" : "500 response",
"content" : { }
},
"200" : {
"description" : "200 response",
"headers" : {
"Content-Length" : {
"schema" : {
"type" : "string"
}
},
"Timestamp" : {
"schema" : {
"type" : "string"
}
},
"Content-Type" : {
"schema" : {
"type" : "string"
}
}
},
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration" : {
"credentials" : "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"httpMethod" : "GET",
"uri" : "arn:aws:apigateway:us-west-2:s3:path//",
"responses" : {
"4\\d{2}" : {
"statusCode" : "400"
},
"default" : {
"statusCode" : "200",
"responseParameters" : {
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 162
Amazon API Gateway Guía para desarrolladores
"method.response.header.Content-Type" :
"integration.response.header.Content-Type",
"method.response.header.Content-Length" :
"integration.response.header.Content-Length",
"method.response.header.Timestamp" :
"integration.response.header.Date"
}
},
"5\\d{2}" : {
"statusCode" : "500"
}
},
"passthroughBehavior" : "when_no_match",
"type" : "aws"
}
}
}
},
"components" : {
"schemas" : {
"Empty" : {
"title" : "Empty Schema",
"type" : "object"
}
}
}
}
Para proporcionar un tutorial completo, ahora mostraremos cómo llamar a la API mediante Postman,
que admite la autorización de IAM de AWS.
1. Implemente o vuelva a implementar la API. Anote la URL base de la API que se muestra junto a
Invoke URL (URL de invocación) en la parte superior de Stage Editor (Editor de etapas).
2. Inicie Postman.
3. Elija Authorization (Autorización) y, a continuación, elija AWS Signature. Escriba el ID de clave
de acceso y la clave de acceso secreta del usuario de IAM en los campos de entrada AccessKey
y SecretKey, respectivamente. Escriba la región de AWS en la que se va a implementar la API
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 163
Amazon API Gateway Guía para desarrolladores
Note
Asegúrese de que el nombre de bucket sea único de forma global.
c. Elija el elemento de menú Body (Cuerpo) y escriba el siguiente fragmento XML como
cuerpo de la solicitud:
<CreateBucketConfiguration>
<LocationConstraint>{region}</LocationConstraint>
</CreateBucketConfiguration>
d. Elija Send (Enviar) para enviar la solicitud. Si todo va bien, debería recibir una respuesta
200 OK con una carga vacía.
5. Para añadir un archivo de texto a un bucket, siga las instrucciones anteriores. Si especifica el
nombre de bucket de apig-demo-5 para {folder} y el nombre de archivo Readme.txt para
{item} en la dirección URL y proporciona la cadena de texto Hello, World! como contenido
de archivo (con lo que se convierte en la carga de la solicitud), la respuesta será
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 164
Amazon API Gateway Guía para desarrolladores
Hello, World!
Si todo sale bien, debe recibir una respuesta 200 OK con una carga vacía.
6. Para obtener el contenido del archivo Readme.txt que acaba de añadir al bucket apig-
demo-5, envíe una solicitud GET como la siguiente:
Si todo sale bien, debe recibir una respuesta 200 OK con la cadena de texto Hello, World!
como la carga.
7. Para mostrar los elementos del bucket apig-demo-5, envíe la siguiente solicitud:
Si todo sale bien, debe recibir una respuesta 200 OK con una carga XML que muestre un único
elemento en el bucket especificado, a menos que haya añadido más archivos al bucket antes de
enviar esta solicitud.
Tutorial: Crear una API de REST como proxy de Amazon S3 en API Gateway 165
Amazon API Gateway Guía para desarrolladores
Note
Para cargar o descargar una imagen, debe configurar el tratamiento de contenido como
CONVERT_TO_BINARY.
Esta página describe cómo crear y configurar una API de REST con una integración del tipo AWS
para tener acceso a Kinesis.
Note
Para integrar la API de API Gateway con Kinesis, debe elegir una región en la que estén
disponibles los servicios API Gateway y Kinesis. Para conocer la disponibilidad de las
regiones, consulte Puntos de enlace y cuotas de servicio.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 166
Amazon API Gateway Guía para desarrolladores
A modo de ejemplo, crearemos una API de ejemplo para permitir que un cliente haga lo siguiente:
Para realizar las tareas anteriores, la API expone métodos en diferentes recursos para invocar lo
siguiente, respectivamente:
• Exponer un método HTTP GET en el recurso /streams de la API e integrar el método con la
acción ListStreams de Kinesis para mostrar los flujos de la cuenta del intermediario.
• Exponer un método HTTP POST en el recurso /streams/{stream-name} de la API e integrar
el método con la acción CreateStream de Kinesis para crear un flujo con nombre en la cuenta del
intermediario.
• Exponer un método HTTP GET en el recurso /streams/{stream-name} de la API e integrar el
método con la acción DescribeStream de Kinesis para describir un flujo con nombre en la cuenta
del intermediario.
• Exponer un método HTTP DELETE en el recurso /streams/{stream-name} de la API e
integrar el método con la acción DeleteStream de Kinesis para eliminar un flujo en la cuenta del
intermediario.
• Exponer un método PUT HTTP en el recurso /streams/{stream-name}/record de la API e
integrar el método con la acción PutRecord de Kinesis. Esto permite que el cliente añada un solo
registro de datos al flujo con nombre.
• Exponer un método PUT HTTP en el recurso /streams/{stream-name}/records de la API e
integrar el método con la acción PutRecords de Kinesis. Esto permite que el cliente añada una lista
de registros de datos al flujo con nombre.
• Exponer un método GET HTTP en el recurso /streams/{stream-name}/records de la API
e integrar el método con la acción GetRecords de Kinesis. Esto permite que el cliente muestre
registros de datos en el flujo con nombre, con un iterador de fragmento especificado. Un iterador
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 167
Amazon API Gateway Guía para desarrolladores
de fragmento especifica la posición del fragmento desde la que se empiezan a leer los registros de
datos de forma secuencial.
• Exponer un método GET HTTP en el recurso /streams/{stream-name}/sharditerator de
la API e integrar el método con la acción GetShardIterator de Kinesis. Este método auxiliar debe
proporcionarse en la acción ListStreams de Kinesis.
Puede aplicar las instrucciones que se presentan aquí a otras acciones de Kinesis. Para obtener la
lista completa de las acciones de Kinesis, consulte Referencia de API de Amazon Kinesis.
En lugar de utilizar la consola de API Gateway para crear la API de ejemplo, puede importar la
API de ejemplo en API Gateway mediante la API de importación de API Gateway. Para obtener
información acerca de cómo utilizar Import API, consulte Configuración de una API de REST
mediante OpenAPI.
Creación de un rol y una política de IAM para que la API tenga acceso a Kinesis
Para que la API pueda invocar las acciones de Kinesis necesarias, debe tener las políticas de IAM
adecuadas asociadas a un rol de IAM.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 168
Amazon API Gateway Guía para desarrolladores
Note
Para simplificar el proceso, este tutorial utiliza una política administrada. Como práctica
recomendada, se deben crear políticas de IAM propias para otorgar los permisos
mínimos requeridos.
11. Anote el ARN del rol recién creado, ya que lo usará más adelante.
Utilice los siguientes pasos para crear la API en la consola de API Gateway.
Para crear una API como un proxy de servicio de AWS para Kinesis
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API,
elija Build (Compilación).
3. Elija New API (Nueva API).
4. En API name (Nombre de la API), escriba KinesisProxy. Mantenga los valores
predeterminados en todos los demás campos.
5. (Opcional) En Description (Descripción), introduzca una descripción.
6. Seleccione Create API (Crear API).
Una vez creada la API, la consola de API Gateway mostrará la página Resources (Recursos), que
contiene únicamente el recurso raíz de la API (/).
Kinesis es compatible con la acción ListStreams con la siguiente llamada a la API de REST:
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 169
Amazon API Gateway Guía para desarrolladores
User-Agent: <UserAgentString>
Content-Type: application/x-amz-json-1.1
Authorization: <AuthParams>
X-Amz-Date: <Date>
{
...
}
POST / HTTP/1.1
Host: kinesis.<region>.<domain>
Content-Length: <PayloadSizeBytes>
User-Agent: <UserAgentString>
Content-Type: application/x-amz-json-1.1
Authorization: <AuthParams>
X-Amz-Date: <Date>
X-Amz-Target: Kinesis_20131202.ListStreams
{
...
}
Para exponer una acción de Kinesis en la API, agregue un recurso /streams a la raíz de la API. A
continuación, defina un método GET en el recurso e integre el método en la acción ListStreams de
Kinesis.
En el siguiente procedimiento se describe cómo listar los flujos de Kinesis con la consola de API
Gateway.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 170
Amazon API Gateway Guía para desarrolladores
Note
El verbo HTTP de un método invocado por un cliente puede ser diferente del verbo
HTTP de una integración requerida por el backend. Aquí elegimos GET porque
mostrar los flujos es intuitivamente una operación READ.
Note
Aquí elegimos POST porque Kinesis requiere que la acción ListStreams también
se invoque.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 171
Amazon API Gateway Guía para desarrolladores
9. Elija Plantillas de mapeo y, a continuación, elija Agregar plantilla de mapeo y haga lo siguiente:
c. Seleccione Guardar.
{
"ExclusiveStartStreamName": "string",
"Limit": number
}
Sin embargo, las propiedades son opcionales. Para utilizar los valores predeterminados, usamos
aquí una carga JSON vacía.
10. Pruebe el método GET en el recurso /streams para invocar la acción ListStreams en Kinesis:
Elija la pestaña Test (Prueba). Puede que tenga que elegir el botón de flecha hacia la derecha
para mostrar la pestaña.
{
"HasMoreStreams": false,
"StreamNames": [
"myStream",
"yourStream"
]
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 172
Amazon API Gateway Guía para desarrolladores
Crear, describir y eliminar un flujo en Kinesis implica realizar las siguientes solicitudes a la API de
REST de Kinesis, respectivamente:
{
"ShardCount": number,
"StreamName": "string"
}
{
"StreamName": "string"
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 173
Amazon API Gateway Guía para desarrolladores
"StreamName":"string"
}
Podemos crear la API para que acepte la entrada necesaria como una carga JSON de una solicitud
de método y transmita la carga a la solicitud de integración. Sin embargo, para proporcionar más
ejemplos de mapeo de datos entre solicitudes de método e integración y respuestas de método e
integración, crearemos nuestra API de una forma ligeramente distinta.
Exponemos los métodos HTTP GET, POST y Delete HTTP en un recurso Stream al que se
asignará un nombre. Utilizamos la variable de ruta {stream-name} como marcador de posición
del recurso de flujo e integramos estos métodos de la API con las acciones DescribeStream,
CreateStream y DeleteStream de Kinesis respectivamente. Exigimos que el cliente pase otros
datos de entrada como encabezados, parámetros de consulta o la carga de una solicitud de método.
Proporcionamos plantillas de asignación para transformar los datos en la carga de solicitud de
integración necesaria.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 174
Amazon API Gateway Guía para desarrolladores
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que
el método GET /streams.
14. Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud
del método GET /streams/{stream-name} a la solicitud de integración POST /?
Action=DescribeStream:
{
"StreamName": "$input.params('stream-name')"
}
Esta plantilla de mapeo genera la carga de la solicitud de integración necesaria para la acción
DescribeStream de Kinesis a partir del valor del parámetro de ruta stream-name de la
solicitud de método.
15. Para probar el método GET /stream/{stream-name} para invocar la acción
DescribeStream en Kinesis, seleccione la pestaña Prueba.
16. En Ruta, en stream-name, introduzca el nombre de un flujo de Kinesis existente.
17. Seleccione Test (Probar). Si la prueba tiene éxito, se devuelve la respuesta 200 OK con una
carga similar a la siguiente:
{
"StreamDescription": {
"HasMoreShards": false,
"RetentionPeriodHours": 24,
"Shards": [
{
"HashKeyRange": {
"EndingHashKey": "68056473384187692692674921486353642290",
"StartingHashKey": "0"
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 175
Amazon API Gateway Guía para desarrolladores
},
"SequenceNumberRange": {
"StartingSequenceNumber":
"49559266461454070523309915164834022007924120923395850242"
},
"ShardId": "shardId-000000000000"
},
...
{
"HashKeyRange": {
"EndingHashKey": "340282366920938463463374607431768211455",
"StartingHashKey": "272225893536750770770699685945414569164"
},
"SequenceNumberRange": {
"StartingSequenceNumber":
"49559266461543273504104037657400164881014714369419771970"
},
"ShardId": "shardId-000000000004"
}
],
"StreamARN": "arn:aws:kinesis:us-east-1:12345678901:stream/myStream",
"StreamName": "myStream",
"StreamStatus": "ACTIVE"
}
}
Después de implementar la API, puede realizar una solicitud REST a este método de la API:
GET https://your-api-id.execute-api.region.amazonaws.com/stage/streams/myStream
HTTP/1.1
Host: your-api-id.execute-api.region.amazonaws.com
Content-Type: application/json
Authorization: ...
X-Amz-Date: 20160323T194451Z
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 176
Amazon API Gateway Guía para desarrolladores
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que
el método GET /streams.
14. Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud
del método POST /streams/{stream-name} a la solicitud de integración POST /?
Action=CreateStream:
{
"ShardCount": #if($input.path('$.ShardCount') == '') 5 #else
$input.path('$.ShardCount') #end,
"StreamName": "$input.params('stream-name')"
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 177
Amazon API Gateway Guía para desarrolladores
Después de implementar la API, también puede realizar una solicitud de API de REST al método
POST en un recurso Stream para invocar la acción CreateStream en Kinesis:
POST https://your-api-id.execute-api.region.amazonaws.com/stage/streams/yourStream
HTTP/1.1
Host: your-api-id.execute-api.region.amazonaws.com
Content-Type: application/json
Authorization: ...
X-Amz-Date: 20160323T194451Z
{
"ShardCount": 5
}
Content-Type: 'x-amz-json-1.1'
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 178
Amazon API Gateway Guía para desarrolladores
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que
el método GET /streams.
14. Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud de
método DELETE /streams/{stream-name} a la solicitud de integración de POST /?
Action=DeleteStream correspondiente:
{
"StreamName": "$input.params('stream-name')"
}
17. Seleccione Test (Probar). Si la prueba tiene éxito, se devuelve una respuesta 200 OK sin datos.
Después de implementar la API, también puede realizar la siguiente solicitud API de REST al
método DELETE en el recurso Stream para llamar a la acción DeleteStream en Kinesis:
DELETE https://your-api-id.execute-api.region.amazonaws.com/stage/
streams/yourStream HTTP/1.1
Host: your-api-id.execute-api.region.amazonaws.com
Content-Type: application/json
Authorization: ...
X-Amz-Date: 20160323T194451Z
{}
Después de crear un flujo en Kinesis, puede agregar registros de datos al flujo y leer los datos del
flujo. Agregar registros de datos implica llamar a la acción PutRecords o PutRecord de Kinesis. La
primera acción añade varios registros, mientras que la última añade un solo registro al flujo.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 179
Amazon API Gateway Guía para desarrolladores
{
"Records": [
{
"Data": blob,
"ExplicitHashKey": "string",
"PartitionKey": "string"
}
],
"StreamName": "string"
}
{
"Data": blob,
"ExplicitHashKey": "string",
"PartitionKey": "string",
"SequenceNumberForOrdering": "string",
"StreamName": "string"
}
Aquí, StreamName identifica el flujo de destino para añadir registros. StreamName, Data y
PartitionKey son datos de entrada necesarios. En nuestro ejemplo, usamos los valores
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 180
Amazon API Gateway Guía para desarrolladores
predeterminados para todos los datos de entrada opcionales y no especificaremos de forma explícita
los valores para ellos en la entrada de la solicitud del método.
{
"ShardIterator": "string",
"Limit": number
}
Aquí, el flujo de origen del que se obtienen los registros se especifica en el valor de
ShardIterator necesario, tal y como se muestra en la siguiente acción de Kinesis para obtener un
iterador de fragmento:
{
"ShardId": "string",
"ShardIteratorType": "string",
"StartingSequenceNumber": "string",
"StreamName": "string"
}
Para las acciones GetRecords y PutRecords, exponemos los métodos GET y PUT,
respectivamente, en un recurso /records que se añade a un recurso de flujo con nombre (/
{stream-name}). Del mismo modo, exponemos la acción PutRecord como un método PUT en un
recurso /record.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 181
Amazon API Gateway Guía para desarrolladores
Como la acción GetRecords toma como entrada un valor de ShardIterator, que se obtiene
llamando a la acción auxiliar GetShardIterator, exponemos un método auxiliar GET en un
recurso ShardIterator (/sharditerator).
Los siguientes cuatro procedimientos describen cómo configurar cada uno de los métodos, cómo
asignar datos desde las solicitudes de método a las solicitudes de integración y cómo probar los
métodos.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 182
Amazon API Gateway Guía para desarrolladores
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que
el método GET /streams.
14. Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud de
método PUT /streams/{stream-name}/record a la solicitud de integración de POST /?
Action=PutRecord correspondiente:
{
"StreamName": "$input.params('stream-name')",
"Data": "$util.base64Encode($input.json('$.Data'))",
"PartitionKey": "$input.path('$.PartitionKey')"
}
En esta plantilla de asignación se asume que la carga del método de solicitud tiene el siguiente
formato:
{
"Data": "some data",
"PartitionKey": "some key"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "PutRecord proxy single-record payload",
"type": "object",
"properties": {
"Data": { "type": "string" },
"PartitionKey": { "type": "string" }
}
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 183
Amazon API Gateway Guía para desarrolladores
Puede crear un modelo para incluir este esquema y utilizar el modelo para facilitar la generación
de la plantilla de asignación. Sin embargo, puede generar una plantilla de asignación sin usar
ningún modelo.
15. Para probar el método PUT /streams/{stream-name}/record, establezca la variable de
ruta stream-name en el nombre de un flujo existente, introduzca la carga del formato necesario
y, a continuación, envíe la solicitud de método. El resultado correcto es una respuesta 200 OK
con una carga con el formato siguiente:
{
"SequenceNumber": "49559409944537880850133345460169886593573102115167928386",
"ShardId": "shardId-000000000004"
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 184
Amazon API Gateway Guía para desarrolladores
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que
el método GET /streams.
14. Añada la siguiente plantilla de mapeo para mapear los datos de la solicitud del método
PUT /streams/{stream-name}/records a la solicitud de integración de POST /?
Action=PutRecords correspondiente:
{
"StreamName": "$input.params('stream-name')",
"Records": [
#foreach($elem in $input.path('$.records'))
{
"Data": "$util.base64Encode($elem.data)",
"PartitionKey": "$elem.partition-key"
}#if($foreach.hasNext),#end
#end
]
}
Esta plantilla de mapeo asume que el siguiente esquema JSON puede modelar la carga de la
solicitud de método:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "PutRecords proxy payload data",
"type": "object",
"properties": {
"records": {
"type": "array",
"items": {
"type": "object",
"properties": {
"data": { "type": "string" },
"partition-key": { "type": "string" }
}
}
}
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 185
Amazon API Gateway Guía para desarrolladores
Puede crear un modelo para incluir este esquema y utilizar el modelo para facilitar la generación
de la plantilla de asignación. Sin embargo, puede generar una plantilla de asignación sin usar
ningún modelo.
En este tutorial, hemos usado dos formatos de carga ligeramente diferentes para ilustrar que
un desarrollador de API puede optar por exponer el formato de datos de backend al cliente
u ocultárselo. Un formato es para el método PUT /streams/{stream-name}/records
(anterior). Otro formato se utiliza en el método PUT /streams/{stream-name}/record (en
el procedimiento anterior). En un entorno de producción, debe mantener la coherencia de ambos
formatos.
15.
Para probar el método PUT /streams/{stream-name}/records, establezca la variable de
ruta stream-name en un flujo existente, introduzca la siguiente carga y envíe la solicitud del
método.
{
"records": [
{
"data": "some data",
"partition-key": "some key"
},
{
"data": "some other data",
"partition-key": "some key"
}
]
}
El resultado correcto es una respuesta 200 OK con una carga similar a la siguiente:
{
"FailedRecordCount": 0,
"Records": [
{
"SequenceNumber": "49559409944537880850133345460167468741933742152373764162",
"ShardId": "shardId-000000000004"
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 186
Amazon API Gateway Guía para desarrolladores
},
{
"SequenceNumber": "49559409944537880850133345460168677667753356781548470338",
"ShardId": "shardId-000000000004"
}
]
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 187
Amazon API Gateway Guía para desarrolladores
{
"ShardId": "$input.params('shard-id')",
"ShardIteratorType": "TRIM_HORIZON",
"StreamName": "$input.params('stream-name')"
}
16. Con la opción Test (Prueba) de la consola de API Gateway, escriba un nombre de flujo
existente como el valor de la variable stream-name de Path (Ruta), establezca shard-
id para Query string (Cadena de consulta) en un valor ShardId existente (por ejemplo,
shard-000000000004) y elija Test (Prueba).
{
"ShardIterator": "AAAAAAAAAAFYVN3VlFy..."
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 188
Amazon API Gateway Guía para desarrolladores
{
"ShardIterator": "$input.params('Shard-Iterator')"
}
16. Con la opción Prueba de la consola de API Gateway, escriba un nombre de flujo existente como
el valor de la variable stream-name de Ruta, establezca el Shard-Iterator de Encabezado
en el valor de ShardIterator obtenido de la serie de pruebas del método GET /streams/
{stream-name}/sharditerator (arriba) y elija Prueba.
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 189
Amazon API Gateway Guía para desarrolladores
"MillisBehindLatest": 0,
"NextShardIterator": "AAAAAAAAAAF...",
"Records": [ ... ]
}
OpenAPI 3.0
{
"openapi": "3.0.0",
"info": {
"title": "KinesisProxy",
"version": "2016-03-31T18:25:32Z"
},
"paths": {
"/streams/{stream-name}/sharditerator": {
"get": {
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "shard-id",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "200 response",
"content": {
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 190
Amazon API Gateway Guía para desarrolladores
"application/json": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/GetShardIterator",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"ShardId\": \"$input.params('shard-
id')\",\n \"ShardIteratorType\": \"TRIM_HORIZON\",\n \"StreamName\":
\"$input.params('stream-name')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
}
},
"/streams/{stream-name}/records": {
"get": {
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "Shard-Iterator",
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 191
Amazon API Gateway Guía para desarrolladores
"in": "header",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/GetRecords",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"ShardIterator\": \"$input.params('Shard-
Iterator')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
},
"put": {
"parameters": [
{
"name": "Content-Type",
"in": "header",
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 192
Amazon API Gateway Guía para desarrolladores
"schema": {
"type": "string"
}
},
{
"name": "stream-name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PutRecordsMethodRequestPayload"
}
},
"application/x-amz-json-1.1": {
"schema": {
"$ref": "#/components/schemas/PutRecordsMethodRequestPayload"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/PutRecords",
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 193
Amazon API Gateway Guía para desarrolladores
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"StreamName\": \"$input.params('stream-
name')\",\n \"Records\": [\n {\n \"Data\":
\"$util.base64Encode($elem.data)\",\n \"PartitionKey\":
\"$elem.partition-key\"\n }#if($foreach.hasNext),#end\n ]\n}",
"application/x-amz-json-1.1": "{\n \"StreamName\":
\"$input.params('stream-name')\",\n \"records\" : [\n {\n \"Data
\" : \"$elem.data\",\n \"PartitionKey\" : \"$elem.partition-key\"\n
}#if($foreach.hasNext),#end\n ]\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
}
},
"/streams/{stream-name}": {
"get": {
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 194
Amazon API Gateway Guía para desarrolladores
}
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/DescribeStream",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestTemplates": {
"application/json": "{\n \"StreamName\": \"$input.params('stream-
name')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
},
"post": {
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
}
},
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 195
Amazon API Gateway Guía para desarrolladores
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/CreateStream",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"ShardCount\": 5,\n \"StreamName\":
\"$input.params('stream-name')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
},
"delete": {
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "200 response",
"headers": {
"Content-Type": {
"schema": {
"type": "string"
}
}
},
"content": {
"application/json": {
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 196
Amazon API Gateway Guía para desarrolladores
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
},
"400": {
"description": "400 response",
"headers": {
"Content-Type": {
"schema": {
"type": "string"
}
}
},
"content": {}
},
"500": {
"description": "500 response",
"headers": {
"Content-Type": {
"schema": {
"type": "string"
}
}
},
"content": {}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/DeleteStream",
"responses": {
"4\\d{2}": {
"statusCode": "400",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type"
}
},
"default": {
"statusCode": "200",
"responseParameters": {
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 197
Amazon API Gateway Guía para desarrolladores
"method.response.header.Content-Type":
"integration.response.header.Content-Type"
}
},
"5\\d{2}": {
"statusCode": "500",
"responseParameters": {
"method.response.header.Content-Type":
"integration.response.header.Content-Type"
}
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"StreamName\": \"$input.params('stream-
name')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
}
},
"/streams/{stream-name}/record": {
"put": {
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Empty"
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 198
Amazon API Gateway Guía para desarrolladores
}
}
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/PutRecord",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"StreamName\": \"$input.params('stream-
name')\",\n \"Data\": \"$util.base64Encode($input.json('$.Data'))\",\n
\"PartitionKey\": \"$input.path('$.PartitionKey')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
}
},
"/streams": {
"get": {
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Empty"
}
}
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 199
Amazon API Gateway Guía para desarrolladores
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/ListStreams",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
}
}
},
"components": {
"schemas": {
"Empty": {
"type": "object"
},
"PutRecordsMethodRequestPayload": {
"type": "object",
"properties": {
"records": {
"type": "array",
"items": {
"type": "object",
"properties": {
"data": {
"type": "string"
},
"partition-key": {
"type": "string"
}
}
}
}
}
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 200
Amazon API Gateway Guía para desarrolladores
}
}
}
OpenAPI 2.0
{
"swagger": "2.0",
"info": {
"version": "2016-03-31T18:25:32Z",
"title": "KinesisProxy"
},
"basePath": "/test",
"schemes": [
"https"
],
"paths": {
"/streams": {
"get": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/ListStreams",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 201
Amazon API Gateway Guía para desarrolladores
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
}
},
"/streams/{stream-name}": {
"get": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/DescribeStream",
"responses": {
"default": {
"statusCode": "200"
}
},
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 202
Amazon API Gateway Guía para desarrolladores
"requestTemplates": {
"application/json": "{\n \"StreamName\": \"$input.params('stream-
name')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
},
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/CreateStream",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 203
Amazon API Gateway Guía para desarrolladores
"requestTemplates": {
"application/json": "{\n \"ShardCount\": 5,\n \"StreamName\":
\"$input.params('stream-name')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
},
"delete": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
},
"headers": {
"Content-Type": {
"type": "string"
}
}
},
"400": {
"description": "400 response",
"headers": {
"Content-Type": {
"type": "string"
}
}
},
"500": {
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 204
Amazon API Gateway Guía para desarrolladores
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 205
Amazon API Gateway Guía para desarrolladores
"httpMethod": "POST"
}
}
},
"/streams/{stream-name}/record": {
"put": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/PutRecord",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 206
Amazon API Gateway Guía para desarrolladores
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 207
Amazon API Gateway Guía para desarrolladores
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"ShardIterator\": \"$input.params('Shard-
Iterator')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
},
"put": {
"consumes": [
"application/json",
"application/x-amz-json-1.1"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "Content-Type",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "stream-name",
"in": "path",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "PutRecordsMethodRequestPayload",
"required": true,
"schema": {
"$ref": "#/definitions/PutRecordsMethodRequestPayload"
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 208
Amazon API Gateway Guía para desarrolladores
},
{
"in": "body",
"name": "PutRecordsMethodRequestPayload",
"required": true,
"schema": {
"$ref": "#/definitions/PutRecordsMethodRequestPayload"
}
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/PutRecords",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
},
"requestTemplates": {
"application/json": "{\n \"StreamName\": \"$input.params('stream-
name')\",\n \"Records\": [\n {\n \"Data\":
\"$util.base64Encode($elem.data)\",\n \"PartitionKey\":
\"$elem.partition-key\"\n }#if($foreach.hasNext),#end\n ]\n}",
"application/x-amz-json-1.1": "{\n \"StreamName\":
\"$input.params('stream-name')\",\n \"records\" : [\n {\n \"Data
\" : \"$elem.data\",\n \"PartitionKey\" : \"$elem.partition-key\"\n
}#if($foreach.hasNext),#end\n ]\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 209
Amazon API Gateway Guía para desarrolladores
}
},
"/streams/{stream-name}/sharditerator": {
"get": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "stream-name",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "shard-id",
"in": "query",
"required": false,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/Empty"
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole",
"uri": "arn:aws:apigateway:us-east-1:kinesis:action/GetShardIterator",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.header.Content-Type": "'application/x-amz-
json-1.1'"
Tutorial: Creación de una API de REST como proxy de Amazon Kinesis 210
Amazon API Gateway Guía para desarrolladores
},
"requestTemplates": {
"application/json": "{\n \"ShardId\": \"$input.params('shard-
id')\",\n \"ShardIteratorType\": \"TRIM_HORIZON\",\n \"StreamName\":
\"$input.params('stream-name')\"\n}"
},
"passthroughBehavior": "when_no_match",
"httpMethod": "POST"
}
}
}
},
"definitions": {
"Empty": {
"type": "object"
},
"PutRecordsMethodRequestPayload": {
"type": "object",
"properties": {
"records": {
"type": "array",
"items": {
"type": "object",
"properties": {
"data": {
"type": "string"
},
"partition-key": {
"type": "string"
}
}
}
}
}
}
}
}
En este tutorial, creará una API REST privada. Los clientes solo pueden acceder a la API desde su
Amazon VPC La API está aislada de la Internet pública, que es un requisito de seguridad común.
Este tutorial tarda aproximadamente 30 minutos en completarse. En primer lugar, utilice una plantilla
de AWS CloudFormation para crear una nube de Amazon VPC, un punto de enlace de la VPC, una
función de AWS Lambda y lanzar una instancia de Amazon EC2 que utilizará para probar la API. A
continuación, utilice la AWS Management Console para crear una API privada y adjuntar una política
de recursos que permita el acceso solo desde el punto de enlace de la VPC. Por último, se prueba la
API.
Para completar este tutorial, necesita una cuenta de AWS y un usuario de AWS Identity and Access
Management con acceso a la consola. Para obtener más información, consulte Requisitos previos.
En este tutorial, se utiliza la AWS Management Console. Para obtener una plantilla de AWS
CloudFormation que cree esta API y todos los recursos relacionados, consulte template.yaml.
Temas
• Paso 8: Eliminar
Descargue y descomprima esta plantilla de AWS CloudFormation. Utilice la plantilla para crear todas
las dependencias de su API privada, incluidas una VPC de Amazon, un punto de enlace de la VPC y
una función Lambda que sirve como backend de la API. Creará la API privada más tarde.
AWS CloudFormation aprovisiona las dependencias para su API. Puede tardar unos minutos.
Cuando el estado de la pila de AWS CloudFormation sea CREATE_COMPLETE, elija Outputs
(Salidas). Anote el ID del punto de enlace de la VPC. Los va a necesitar en pasos más adelante de
este tutorial.
Cree una API privada para permitir que solo los clientes de su VPC accedan a ella.
Usted crea un método y la integración de Lambda GET para manejar solicitudes de GET a su API.
Cuando un cliente invoca su API, API Gateway envía la solicitud a la función Lambda que creó en el
paso 1 y, a continuación, devuelve una respuesta al cliente.
Adjuntar una política de recursos a la API que permite a los clientes invocar la API sólo a través del
punto de enlace de la VPC. Para restringir aún más el acceso a la API, también puede configurar una
política de punto de enlace de la VPC para el punto de enlace de su VPC, pero esto no es necesario
para este tutorial.
2. Elija la API.
3. Elija Política de recursos y, a continuación, elija Crear política.
4. Escriba la siguiente política. Reemplace vpceID por su ID de punto de enlace de la VPC desde
las Outputs (Salidas) de su pila de AWS CloudFormation.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*",
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpceID"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*"
}
]
}
A continuación, implemente su API para ponerla a disposición de los clientes de su Amazon VPC
Use curl para verificar que no puede invocar la API desde fuera de su Amazon VPC
curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test
Curl indica que el punto de enlace de su API no se puede resolver. Si obtiene una respuesta
diferente, vuelva al paso 2 y asegúrese de elegir Private (Privado) para el tipo de punto de
enlace de su API.
A continuación, se conecta a una instancia de Amazon EC2 en la VPC para invocar su API.
A continuación, pruebe la API desde su Amazon VPC Para acceder a su API privada, se conecta a
una instancia de Amazon EC2 en su VPC y, a continuación, utilice curl para invocar su API. Utilice el
Administrador de sesiones de Systems Manager para conectarse a la instancia en el navegador.
5. Elija Connect (Conectar) para iniciar una sesión basada en explorador en la instancia.
6. En su sesión de Session Manager, use curl para invocar su API. Puede invocar la API porque
está utilizando una instancia en su Amazon VPC
curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test
Ha creado correctamente una API a la que solo se puede acceder desde su VPC de Amazon y, a
continuación, verificó que funciona.
Paso 8: Eliminar
Para evitar costos innecesarios, elimine los recursos creados como parte de este tutorial Los
siguientes pasos eliminan su API REST y su pila de AWS CloudFormation.
2. En la página API, seleccione una API. Elija Acciones de API, elija Eliminar API y confirme su
elección.
Temas
• Tutorial: creación de una API HTTP con una integración privada en un Servicio Amazon ECS
En este tutorial, creará una API sin servidor para crear, leer, actualizar y eliminar elementos de una
tabla de DynamoDB. DynamoDB es un servicio de bases de datos NoSQL totalmente administrado
que proporciona un rendimiento rápido y predecible, así como una perfecta escalabilidad. Completar
este tutorial lleva aproximadamente 30 minutos, y puede hacerse dentro del nivel gratuito de AWS.
En primer lugar, se crea una tabla DynamoDB utilizando la consola de DynamoDB. Luego, se
crea una función de Lambda con la consola de AWS Lambda. A continuación, crea una API HTTP
mediante la consola de API Gateway. Por último, se prueba la API.
Cuando invoca su API HTTP, API Gateway enruta la solicitud a su función de Lambda. La función
Lambda interactúa con DynamoDB y devuelve una respuesta a API Gateway. API Gateway, a
continuación, le devuelve una respuesta.
Para completar este ejercicio, necesita una cuenta de AWS y un usuario de AWS Identity and Access
Management con acceso a la consola. Para obtener más información, consulte Requisitos previos.
En este tutorial, se utiliza la AWS Management Console. Para obtener una plantilla de AWS SAM
que cree esta API y todos los recursos relacionados, consulte template.yaml.
Temas
• Paso 1: crear una tabla de DynamoDB
• Paso 2: crear una función Lambda
• Paso 3: crear una API HTTP
• Paso 4: crear rutas
• Paso 5: crear una integración
• Paso 6: conectar la integración a las rutas
• Paso 7: probar la API
• Paso 8: Eliminar
• Pasos siguientes: automatización con AWS SAM o AWS CloudFormation
Cada elemento tiene un ID único, que usamos como clave de partición para la tabla.
Se crea una función Lambda para el backend de la API. Esta función Lambda crea, lee, actualiza y
elimina elementos de DynamoDB. La función utiliza eventos de API Gateway para determinar cómo
interactuar con DynamoDB. Para simplificar el proceso, este tutorial utiliza una sola función Lambda.
Como práctica recomendada, se deben crear funciones separadas para cada ruta.
Note
Para simplificar el proceso, este tutorial utiliza una política administrada. Como práctica
recomendada, se deben crear políticas de IAM propias para otorgar los permisos
mínimos requeridos.
DynamoDBDocumentClient,
ScanCommand,
PutCommand,
GetCommand,
DeleteCommand,
} from "@aws-sdk/lib-dynamodb";
try {
switch (event.routeKey) {
case "DELETE /items/{id}":
await dynamo.send(
new DeleteCommand({
TableName: tableName,
Key: {
id: event.pathParameters.id,
},
})
);
body = `Deleted item ${event.pathParameters.id}`;
break;
case "GET /items/{id}":
body = await dynamo.send(
new GetCommand({
TableName: tableName,
Key: {
id: event.pathParameters.id,
},
})
);
body = body.Item;
break;
return {
statusCode,
body,
headers,
};
};
La API HTTP proporciona un punto de enlace HTTP para su función de Lambda. En este paso, se
crea una API vacía. En los siguientes pasos, se configuran rutas e integraciones para conectar la API
y la función Lambda.
Las rutas son una manera de enviar solicitudes entrantes de API a los recursos de backend. Las
rutas constan de dos partes: un método HTTP y una ruta de recurso, por ejempl, GET /items. Para
este ejemplo de API, creamos cuatro rutas:
• GET /items/{id}
• GET /items
• PUT /items
• DELETE /items/{id}
Se crea una integración para conectar una ruta a los recursos de backend. Para este ejemplo de API,
se crea una integración Lambda que se utiliza para todas las rutas.
3. Seleccione Integraciones.
4. Seleccione Administrar integraciones y, a continuación, seleccione Crear.
5. Omitir Conectar esta integración a una ruta. Esta etapa se completará más adelante.
Para este ejemplo de API, se utiliza la misma integración Lambda para todas las rutas. Después de
conectar la integración a todas las rutas de la API, la función Lambda se invoca cuando un cliente
llama a cualquiera de sus rutas.
Todas las rutas muestran que se adjuntó una integración de AWS Lambda.
Ahora que se tiene una API HTTP con rutas e integraciones, se puede probar la API.
2. Elija la API.
3. Tenga en cuenta la URL de invocación de la API. Aparece en Invocar URL en la página Detalles.
• Utilice el siguiente comando para crear o actualizar un artículo. El comando incluye un cuerpo de
solicitud con el ID, el precio y el nombre del artículo.
curl https://abcdef123.execute-api.us-west-2.amazonaws.com/items
curl https://abcdef123.execute-api.us-west-2.amazonaws.com/items/123
curl https://abcdef123.execute-api.us-west-2.amazonaws.com/items
Paso 8: Eliminar
Para evitar costos innecesarios, elimine los recursos creados como parte de este ejercicio
introductorio. Los siguientes pasos eliminan la API HTTP, la función de Lambda y los recursos
asociados.
3. Elija Eliminar.
2. En la página Functions (Funciones), seleccione una función. Seleccione Actions y, luego, Delete.
3. Elija Eliminar.
3. Elija Eliminar.
1. En la consola de AWS Identity and Access Management, abra la página Roles (Roles).
2. Seleccione el rol de la función, por ejempl, http-crud-tutorial-role.
Puede automatizar la creación y la limpieza de los recursos de AWS mediante el uso de AWS
CloudFormation o AWS SAM. Para obtener un ejemplo de plantilla de AWS SAM para este tutorial,
consulte template.yaml.
Para obtener plantillas de AWS CloudFormation de ejemplo, consulte las plantillas de AWS
CloudFormation de ejemplo.
En este tutorial, creará una API sin servidor que se conecta a un Servicio Amazon ECS que se
ejecuta en una Amazon VPC Los clientes fuera de su VPC de Amazon pueden utilizar la API para
acceder al Servicio Amazon ECS.
Para completar este tutorial se necesita aproximadamente una hora. En primer lugar, utilice una
plantilla de AWS CloudFormation para crear una nube de Amazon VPC y un servicio Amazon ECS.
Luego, utilice la consola de API Gateway para crear un enlace de VPC. El vínculo VPC permite a API
Gateway acceder al Servicio Amazon ECS que se ejecuta en su Amazon VPC A continuación, cree
una API HTTP que utilice el vínculo VPC para conectarse al Servicio Amazon ECS. Por último, se
prueba la API.
Al invocar la API HTTP, API Gateway envía la solicitud al Servicio Amazon ECS a través del vínculo
VPC y, a continuación, devuelve la respuesta del servicio.
Para completar este tutorial, necesita una cuenta de AWS y un usuario de AWS Identity and Access
Management con acceso a la consola. Para obtener más información, consulte Requisitos previos.
En este tutorial, se utiliza la AWS Management Console. Para obtener una plantilla de AWS
CloudFormation que cree esta API y todos los recursos relacionados, consulte template.yaml.
Temas
• Paso 1: crear un Servicio Amazon ECS
• Paso 2: crear un enlace de VPC
• Paso 3: crear una API HTTP
• Paso 4: creación de una ruta
• Paso 5: crear una integración
• Paso 6: probar la API
• Paso 7: Limpieza
• Próximos pasos: automatice con AWS CloudFormation
Descargue y descomprima esta plantilla de AWS CloudFormation que crea todas las dependencias
del servicio, incluida una nube de Amazon VPC. Utilice la plantilla para crear un Servicio Amazon
ECS que utilice un Application Load Balancer.
AWS CloudFormation aprovisiona al Servicio ECS. Puede tardar unos minutos. Cuando el estado de
la pila de AWS CloudFormation sea CREATE_COMPLETE, estará listo para continuar con el paso
siguiente.
Un enlace de VPC permite a API Gateway acceder a recursos privados en una Amazon VPC Utilice
un enlace de VPC para permitir a los clientes acceder al Servicio Amazon ECS a través de su API
HTTP.
Después de crear el vínculo VPC, API Gateway aprovisiona las interfaces de red elásticas para
acceder a la VPC. El proceso puede demorar unos minutos. Mientras tanto, puede crear su API.
La API HTTP proporciona un punto de enlace HTTP para su Servicio Amazon ECS. En este paso, se
crea una API vacía. En los pasos 4 y 5, va a configurar una ruta y una integración para conectar la
API y el Servicio Amazon ECS.
Las rutas son una manera de enviar solicitudes entrantes de API a los recursos de backend. Las
rutas constan de dos partes: un método HTTP y una ruta de recurso, por ejempl, GET /items. Para
este ejemplo de API, creamos una ruta.
Se crea una integración para conectar una ruta a los recursos de backend.
3. Seleccione Integraciones.
5. En Atach this intergration to a route (Adjuntar esta integración a una ruta), seleccione la ruta
ANY/{proxy+} que creó anteriormente.
9. En Load balancer (Equilibrador de carga), elija el equilibrador de carga que creó con la plantilla
de AWS CloudFormation en el paso 1. El nombre debería comenzar con http-Priva.
11. Para VPC link (Enlace de VPC), elija el enlace de VPC que creó en el paso 2. El nombre debería
ser private-integrations-tutorial.
Para comprobar que la ruta y la integración están configuradas correctamente, seleccione Attach
integrations to routes (Adjuntar las integraciones a las rutas). La consola muestra que tiene una ruta
ANY /{proxy+} con una integración a un balanceador de carga de VPC.
A continuación, pruebe su API para asegurarse de que se encuentra en funcionamiento. Para mayor
simplicidad, utilice un navegador web para invocar la API.
2. Elija la API.
5. Compruebe que la respuesta de la API sea un mensaje de bienvenida que le indique que su
aplicación se está ejecutando en Amazon ECS.
Paso 7: Limpieza
Para evitar costos innecesarios, elimine los recursos creados como parte de este tutorial Los pasos
siguientes eliminan el enlace de la VPC, la pila de AWS CloudFormation y la API HTTP.
2. En la página API, seleccione una API. Elija Action (Acciones), elija Delete (Eliminar)y, a
continuación, confirme su elección.
Temas
• Tutorial: Creación de una aplicación de chat sin servidor con una API de WebSocket, Lambda y
DynamoDB
Tutorial: Creación de una aplicación de chat sin servidor con una API de
WebSocket, Lambda y DynamoDB
En este tutorial, creará una aplicación de chat sin servidor con una API de WebSocket. Con una
API de WebSocket, puede admitir la comunicación bidireccional entre clientes. Los clientes pueden
recibir mensajes sin tener que sondear para comprobar si hay actualizaciones.
Se tardan aproximadamente 30 minutos en completar este tutorial. En primer lugar, usará una
plantilla de AWS CloudFormation para crear funciones Lambda que gestionarán las solicitudes de
API, así como una tabla de DynamoDB que almacena los ID de cliente. A continuación, utilizará
la consola de API Gateway para crear una API de WebSocket que se integra con las funciones
Lambda. Por último, probarás la API para verificar que se envían y reciben mensajes.
Para completar este tutorial, necesita una cuenta de AWS y un usuario de AWS Identity and Access
Management con acceso a la consola. Para obtener más información, consulte Requisitos previos.
También es necesario wscat para conectarse a la API. Para obtener más información, consulte the
section called “Utilice wscat para conectarse y enviar mensajes a una API de WebSocket”.
En este tutorial, se utiliza AWS Management Console. Para obtener una plantilla de AWS
CloudFormation que cree esta API y todos los recursos relacionados, consulte chat-app.yaml.
Temas
• Paso 1: Crear funciones Lambda y una tabla de DynamoDB
• Paso 2: Crear una API de WebSocket
• Paso 3: probar la API
• Paso 4: Limpiar
• Próximos pasos: automatice con AWS CloudFormation
AWS CloudFormation aprovisiona los recursos especificados en la plantilla. Puede tardar varios
minutos en finalizar el aprovisionamiento de los recursos. Cuando el estado de la pila de AWS
CloudFormation sea CREATE_COMPLETE, estará listo para continuar con el paso siguiente.
Creará una API de WebSocket para gestionar las conexiones de clientes y enrutar solicitudes a las
funciones Lambda que creó en el paso 1.
2. Seleccione Create API (Crear API). En WebSocket API (API de WebSocket), elija Build (Crear).
6. Para Predefined routes (Rutas predefinidas), elija Add $connect (Agregar $connect), Add
$disconnect (Agregar $disconnect) y Add $default (Agregar $default). Las rutas $connect y
$disconnect son rutas especiales que API Gateway invoca automáticamente cuando un cliente
se conecta o se desconecta de una API. API Gateway invoca la ruta $default cuando ninguna
otra ruta coincide con una solicitud.
7. Para Custom routes (Rutas personalizadas), elija Add custom route (Agregar ruta
personalizada). Para Route key (Clave de ruta), ingrese sendmessage. Esta ruta personalizada
gestiona los mensajes que se envían a los clientes conectados.
9. En Attach integrations (Adjuntar integraciones), para cada ruta e Integration type (Tipo de
integración), elija Lambda.
Para Lambda, elija la función Lambda correspondiente que creó con AWS CloudFormation en
el paso 1. El nombre de cada función coincide con una ruta. Por ejemplo, para la ruta $connect,
elija la función denominada websocket-chat-app-tutorial-ConnectHandler.
10. Revise la etapa que API Gateway le crea. De forma predeterminada, API Gateway crea un
nombre de etapa production e implementa automáticamente la API en esa fase. Elija Next
(Siguiente).
A continuación, pruebe la API para asegurarse de que funciona correctamente. Utilice el comando
wscat para conectarse a la API.
1. Para conectarse a la API, utilice el siguiente comando. Cuando se conecte a la API, API
Gateway invoca la ruta $connect. Cuando se invoca esta ruta, llama a una función Lambda
que almacena el ID de conexión en DynamoDB.
wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
2. Abra un nuevo terminal y ejecute el comando wscat de nuevo con los siguientes parámetros.
wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
• API Gateway determina qué ruta invocar en función de la expresión de selección de rutas de
la API. La expresión de selección de rutas de la API es $request.body.action. Como
resultado, API Gateway invoca la ruta sendmessage cuando envía el siguiente mensaje:
• API Gateway invoca la ruta predeterminada de la API cuando un cliente envía un mensaje que
no coincide con las rutas definidas. La función Lambda asociada a la ruta $default utiliza la
API de administración de API Gateway para enviar información al cliente sobre la conexión.
test
Paso 4: Limpiar
Para evitar costos innecesarios, elimine los recursos creados como parte de este tutorial Los
siguientes pasos eliminan la pila y API de WebSocket de AWS CloudFormation.
Puede automatizar la creación y la limpieza de todos los recursos de AWS involucrados en este
tutorial. Para ver un ejemplo de plantilla de AWS CloudFormation que automatiza estas acciones,
consulte chat-app.yaml.
Las API de REST de API Gateway utilizan un modelo de solicitud/respuesta en el que un cliente
envía una solicitud a un servicio y el servicio responde de forma sincrónica. Este tipo de modelo
es adecuado para muchos tipos diferentes de aplicaciones que dependen de la comunicación
sincrónica.
Temas
• Desarrollo de una API REST en API Gateway
• Publicación de una API de REST para que los clientes la invoquen
• Optimización del rendimiento de las API REST
• Distribución de la API de REST a los clientes
• Protección de la API REST
• Monitoreo de las API de REST
A medida que se desarrolla la API de API Gateway, se decide sobre una serie de características de
la API. Estas características dependen del uso de la API. Por ejemplo, es posible que quiera permitir
solo a ciertos clientes llamar a la API o puede que quiera que esté disponible para todos. Puede
querer que una llamada a la API ejecute una función de Lambda, haga una consulta a la base de
datos o llame a una aplicación.
Temas
• Creación de una API REST en Amazon API Gateway
• Control y administración del acceso a una API REST en API Gateway
Desarrollo 243
Amazon API Gateway Guía para desarrolladores
En Amazon API Gateway, las API REST se crean como una colección de entidades programables
conocidas como recursos de API Gateway. Por ejemplo, se utiliza un recurso RestApi para
representar una API que puede contener una colección de entidades Resource. Cada entidad
Resource a su vez puede tener uno o más recursos Method. Expresado en los parámetros de
solicitud y en el cuerpo, un Method define la interfaz de programación de aplicaciones del cliente
para obtener acceso al Resource expuesto y representa una solicitud entrante enviada por el
cliente. A continuación, se crea un recurso Integration para integrar el Method con un punto
de enlace de backend, también conocido como punto de enlace de integración, reenviando la
solicitud entrante a un URI de punto de enlace de integración especificado. Si es necesario, puede
transformar los parámetros de solicitud o el cuerpo para que cumplan los requisitos del backend.
Para las respuestas, puede crear un recurso MethodResponse para representar una respuesta
de solicitud recibida por el cliente y crear un recurso IntegrationResponse para representar la
respuesta de solicitud que devuelve el backend. Puede configurar la respuesta de integración para
transformar los datos de respuesta del backend antes de devolver los datos al cliente o transferir la
respuesta del backend tal y como está al cliente.
Para ayudar a sus clientes a comprender su API, también puede proporcionar documentación para la
API, como parte de la creación de la API o una vez que se ha creado. Para ello, agregue un recurso
DocumentationPart para una entidad de API compatible.
Para controlar el modo en que los clientes llaman a la API, utilice permisos de IAM, un autorizador de
Lambda o un grupo de usuarios de Amazon Cognito. Para medir el uso de la API, configure planes
de uso para limitar las solicitudes a la API. Puede habilitar estos elementos al crear o al actualizar la
API.
Puede realizar estas y otras tareas a través de la consola de API Gateway, la API REST de API
Gateway, la AWS CLI o uno de los AWS SDK. A continuación, trataremos cómo realizar estas tareas.
Temas
• Elección de un tipo de punto de enlace para configurarlo para una API de API Gateway
• Inicialización de la configuración de una API REST en API Gateway
• Configurar métodos de API REST en API Gateway
Elección de un tipo de punto de enlace para configurarlo para una API de API
Gateway
Los tipos de punto de enlace de API hacen referencia al nombre de host de la API. El punto de
enlace de la API puede ser de tres tipos, optimizado para sistemas perimetrales, regional o privado,
en función de dónde se origine la mayoría del tráfico de la API.
Un punto de conexión de API optimizada para límites normalmente dirige las solicitudes al punto
de presencia (POP) de CloudFront más cercano, lo que podría ayudar en caso de que sus clientes
estén en distintas ubicaciones geográficas. Este es el tipo de punto de enlace predeterminado para
las API REST de API Gateway.
Las API optimizadas para sistemas perimetrales utilizan mayúsculas en la inicial de los nombres de
los encabezados HTTP (por ejemplo, Cookie).
CloudFront ordena las cookies HTTP según su nombre antes de reenviar la solicitud al origen.
Para obtener más información sobre el modo en que CloudFront procesa las cookies, consulte
Almacenamiento en caché de contenido en función de cookies.
Cualquier nombre de dominio personalizado que se utilice con una API optimizada para sistemas
perimetrales se aplicará a todas las regiones.
Los puntos de enlace de API regionales están destinados a los clientes que se encuentran en la
misma región. Cuando un cliente que se ejecuta en una instancia EC2 llama a una API en la misma
región, o cuando una API tiene por objeto servir a una cantidad reducida de clientes con altas
demandas, una API regional reduce la sobrecarga de conexión.
En una API regional, el nombre de dominio personalizado es específico de la región en la que está
implementada la API. Si implementa una API regional en varias regiones, esta puede tener el mismo
nombre de dominio personalizado en todas las regiones. Puede utilizar dominios personalizados
junto con Amazon Route 53 para realizar tareas como el direccionamiento basado en latencia.
Para obtener más información, consulte the section called “Configuración de un nombre de dominio
regional personalizado” y the section called “Creación de un nombre de dominio personalizado
optimizado para bordes”.
Los puntos de enlace de API regionales transfieren todos los nombres de encabezado tal y como
están.
Un punto de enlace de API privado es un punto de enlace de la API al que solo se pueda obtener
acceso desde una Amazon Virtual Private Cloud (VPC) mediante un punto de enlace de la VPC
de tipo interfaz, que es una interfaz de red de punto de enlace (ENI) que se crea en la VPC. Para
obtener más información, consulte the section called “API privadas”.
Los puntos de enlace de API privados transfieren todos los nombres de encabezado tal y como
están.
Cambiar el tipo de punto de enlace de una API pública o privada en API Gateway
Para cambiar el tipo de un punto de enlace de la API, es preciso actualizar la configuración de la API.
Puede cambiar un tipo de API existente a través de la consola de API Gateway, la AWS CLI o un
AWS SDK para API Gateway. El tipo de punto de conexión no puede volver a cambiarse hasta que
se complete el cambio actual, pero la API estará disponible.
No puede transformar una API privada en una API optimizada para límites.
Si va a cambiar una API pública optimizada para límites a regional o viceversa, tenga en cuenta que
las API optimizadas para sistemas perimetrales pueden comportarse de forma distinta que las API
regionales. Por ejemplo, una API optimizada para límites elimina el encabezado Content-MD5.
Cualquier valor de hash MD5 transmitido al backend se puede expresar en un parámetro de cadena
de solicitud o una propiedad del cuerpo. Sin embargo, la API regional transmite este encabezado,
aunque puede reasignar el nombre de encabezado a otro nombre. Comprender estas diferencias le
ayuda a decidir cómo actualizar una API optimizada para límites a una regional o bien de una API
regional a una optimizada para límites.
Temas
• Uso de la consola de API Gateway para cambiar el tipo de punto de enlace de la API
• Uso de la AWS CLI para cambiar el tipo de punto de enlace de una API
Uso de la consola de API Gateway para cambiar el tipo de punto de enlace de la API
Para cambiar el tipo de punto de enlace de la API, siga uno de estos procedimientos:
Para convertir un punto de conexión público de regional u optimizado para límites y viceversa
Uso de la AWS CLI para cambiar el tipo de punto de enlace de una API
Si desea utilizar la AWS CLI para actualizar una API optimizada para sistemas perimetrales cuyo ID
es {api-id}, llame a update-resto-api tal y como se indica a continuación:
La respuesta correcta tiene un código de estado 200 OK y una carga similar a la siguiente:
"createdDate": "2017-10-16T04:09:31Z",
"description": "Your first API with Amazon API Gateway. This is a sample API that
integrates via HTTP with our demo Pet Store endpoints",
"endpointConfiguration": {
"types": "REGIONAL"
},
"id": "0gsnjtjck8",
"name": "PetStore imported as edge-optimized"
}
De igual forma, actualice una API regional a una API optimizada para límites del modo siguiente:
Dado que put-rest-api se utiliza para actualizar definiciones de API, no puede utilizarse para
actualizar un tipo de punto de enlace de API.
Para este ejemplo, utilizamos una API PetStore simplificada, con la integración HTTP, que expone
los métodos GET /pets y GET /pets/{petId}. Los métodos se integran con los dos puntos de
Debido a los ajustes predeterminados, la API resultante está optimizada para límites. Una alternativa
es configurar una API regional. Para configurar una API regional, debe establecer explícitamente el
tipo de punto de enlace de la API como REGIONAL. Para configurar una API optimizada para límites
explícitamente, puede establecer EDGE como tipo de endpointConfiguration.
Al configurar una API, debe elegir una región. Cuando se implementa, la API es específica de una
región. En el caso de una API optimizada para bordes, la URL base tiene el formato http[s]://
{restapi-id}.execute-api.amazonaws.com/stage, donde {restapi-id} es el valor de
id de la API generado por API Gateway. Puede asignar un nombre de dominio personalizado (por
ejemplo, apis.example.com) como nombre de host de la API y llamar a la API con una URL base
con el formato https://apis.example.com/myApi.
Temas
• Configuración de una API con la consola de API Gateway
• Configurar una API optimizada para bordes mediante comandos de AWS CLI
• Configurar una API optimizada para bordes con el SDK de AWS para Node.js
• Configurar una API optimizada para bordes importando definiciones de OpenAPI
• Configuración de una API regional en API Gateway
Para configurar una API de API Gateway mediante la consola de API Gateway, consulte Tutorial:
Desarrollo de una API de REST con integración HTTP no de proxy.
Puede obtener información sobre cómo configurar una API siguiendo un ejemplo. Para obtener más
información, consulte Tutorial: Crear una API de REST importando un ejemplo.
Como alternativa, puede crear una API a través de la función Importar API de API Gateway
para cargar una definición de API externa, como la expresada en OpenAPI 2.0 con Trabajar con
extensiones de API Gateway para OpenAPI. En el ejemplo proporcionado en Tutorial: Crear una API
de REST importando un ejemplo se utiliza la característica Import API.
Configurar una API optimizada para bordes mediante comandos de AWS CLI
Para configurar una API mediante la AWS CLI, es necesario trabajar con los comandos create-
rest-api, create-resource o get-resources, put-method, put-method-response, put-
integration y put-integration-response. Los siguientes procedimientos muestran cómo
trabajar con estos comandos de la AWS CLI para crear la API de PetStore del tipo de integración
HTTP.
1. Llame al comando create-rest-api para configurar la RestApi en una región concreta (us-
west-2).
aws apigateway create-rest-api --name 'Simple PetStore (AWS CLI)' --region us-
west-2
{
"id": "vaz7da96z6",
"name": "Simple PetStore (AWS CLI)",
"createdDate": "2022-12-15T08:07:04-08:00",
"apiKeySource": "HEADER",
"endpointConfiguration": {
"types": [
"EDGE"
]
},
"disableExecuteApiEndpoint": false
}
Anote el id devuelto de la RestApi recién creada. Lo necesitará para configurar otras partes de
la API.
{
"items": [
{
"id": "begaltmsm8",
"path": "/"
}
]
}
Anote el del recurso raí Id. Lo necesitará para comenzar a establecer el árbol de recursos de la
API y para configurar métodos e integraciones.
{
"id": "6sxz2j",
"parentId": "begaltmsm8",
"pathPart": "pets",
"path": "/pets"
}
Para asociar un recurso secundario bajo la raíz, se especifica el Id del recurso raíz como
valor de la propiedad parentId. Del forma similar, para asociar un recurso secundario bajo el
recurso pets, se repite el paso anterior y se sustituye el valor parent-id por el pets id del
recurso de 6sxz2j:
Para hacer de una parte de la ruta un parámetro de ruta, sitúela entre llaves. Si se ejecuta
correctamente, este comando devuelve la siguiente respuesta:
{
"id": "rjkmth",
"parentId": "6sxz2j",
"path": "/pets/{petId}",
"pathPart": "{petId}"
}
Ahora que ha creado dos recursos, /pets (6sxz2j) y /pets/{petId} (rjkmth), puede
continuar configurando métodos sobre ellos.
4. Llame al comando put-method para añadir el método HTTP GET en el recurso /pets. Esto
crea un Method de API de GET /pets con acceso abierto, haciendo referencia al recurso /
pets mediante su valor de ID de 6sxz2j.
{
"httpMethod": "GET",
"authorizationType": "NONE",
"apiKeyRequired": false
}
{
"httpMethod": "GET",
"authorizationType": "NONE",
"apiKeyRequired": false,
"requestParameters": {
"method.request.path.petId": true
}
}
Tenga en cuenta que el parámetro de ruta de solicitud de método de petId debe especificarse
como un parámetro de solicitud necesario para que su valor establecido dinámicamente se
asigne a un parámetro de solicitud de integración correspondiente y se transfiera al backend.
{
"statusCode": "200"
}
De forma similar, para establecer la respuesta 200 OK del método GET /pets/{petId},
realice lo siguiente, especificando el recurso /pets/{petId} mediante su valor de ID de
recurso de rjkmth:
Tras configurar una interfaz de cliente sencilla para la API, puede continuar y configurar la
integración de los métodos de la API con el backend.
{
"type": "HTTP",
"httpMethod": "GET",
"uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
"connectionType": "INTERNET",
"passthroughBehavior": "WHEN_NO_MATCH",
"timeoutInMillis": 29000,
"cacheNamespace": "6sxz2j",
"cacheKeyParameters": []
}
De forma similar, se crea una solicitud de integración para el método GET /pets/{petId} del
siguiente modo:
--integration-http-method GET \
--uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}' \
--request-parameters
'{"integration.request.path.id":"method.request.path.petId"}' \
--region us-west-2
{
"type": "HTTP",
"httpMethod": "GET",
"uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}",
"connectionType": "INTERNET",
"requestParameters": {
"integration.request.path.id": "method.request.path.petId"
},
"passthroughBehavior": "WHEN_NO_MATCH",
"timeoutInMillis": 29000,
"cacheNamespace": "rjkmth",
"cacheKeyParameters": []
}
{
"statusCode": "200",
"selectionPattern": ""
Del forma similar, llame al siguiente comando put-integration-response para crear una
IntegrationResponse del método GET /pets/{petId}:
Con los pasos anteriores, ha terminado la configuración de una API sencilla que permite a
sus clientes consultar las mascotas disponibles en el sitio web de PetStore y ver una mascota
concreta con un identificador especificado. Para que el cliente pueda llamar a la API, debe
implementarla.
8. Implemente la API en una etapa stage llamando, por ejemplo, a create-deployment:
{
"id": "ab1c1d",
"description": "First deployment",
"createdDate": "2022-12-15T08:44:13-08:00"
}
[
{
"id": 1,
"type": "dog",
"price": 249.99
},
{
"id": 2,
"type": "cat",
"price": 124.99
},
{
"id": 3,
"type": "fish",
"price": 0.99
}
]
{
"id": 3,
"type": "fish",
"price": 0.99
}
Configurar una API optimizada para bordes con el SDK de AWS para Node.js
Como ejemplo, utilizamos el AWS SDK para Node.js para describir cómo se puede utilizar un AWS
SDK para crear una API de API Gateway. Para obtener más información sobre el uso de un SDK de
AWS, incluida la configuración del entorno de desarrollo, consulte SDK de AWS.
La configuración de una API mediante el SDK de AWS para Node.js implica la llamada
a las funciones createRestApi, createResource o getResources, putMethod,
putMethodResponse, putIntegration y putIntegrationResponse.
Los siguientes procedimientos le guiarán por los pasos necesarios para utilizar estos comandos del
SDK con el fin de configurar una sencilla API de PetStore que admita los métodos GET /pets y
GET /pets/{petId}.
Para configurar una API sencilla de PetStore con el SDK de AWS para Node.js
1. Inicie el SDK:
AWS.config.region = 'us-west-2';
var apig = new AWS.APIGateway({apiVersion: '2015/07/09'});
apig.createRestApi({
name: "Simple PetStore (node.js SDK)",
binaryMediaTypes: [
'*'
],
description: "Demo API created using the AWS SDK for node.js",
version: "0.00.001"
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log('Create API failed:\n', err);
}
});
{
id: 'iuo308uaq7',
name: 'PetStore (node.js SDK)',
description: 'Demo API created using the AWS SDK for node.js',
createdDate: 2017-09-05T19:32:35.000Z,
version: '0.00.001',
binaryMediaTypes: [ '*' ]
}
apig.getResources({
restApiId: 'iuo308uaq7'
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log('Get the root resource failed:\n', err);
}
})
{
"items": [
{
"path": "/",
"id": "s4fb0trnk0"
}
]
}
El identificador de recurso raíz es s4fb0trnk0. Este es el punto de partida para la crear el árbol
de recursos de la API, que es el siguiente paso.
apig.createResource({
restApiId: 'iuo308uaq7',
parentId: 's4fb0trnk0',
pathPart: 'pets'
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log("The '/pets' resource setup failed:\n", err);
}
})
{
"path": "/pets",
"pathPart": "pets",
"id": "8sxa2j",
"parentId": "s4fb0trnk0'"
Crear y configurar 259
Amazon API Gateway Guía para desarrolladores
apig.createResource({
restApiId: 'iuo308uaq7',
parentId: '8sxa2j',
pathPart: '{petId}'
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log("The '/pets/{petId}' resource setup failed:\n", err);
}
})
{
"path": "/pets/{petId}",
"pathPart": "{petId}",
"id": "au5df2",
"parentId": "8sxa2j"
}
apig.putMethod({
restApiId: 'iuo308uaq7',
resourceId: '8sxa2j',
httpMethod: 'GET',
authorizationType: 'NONE'
}, function(err, data){
if (!err) {
console.log(data);
} else {
{
"apiKeyRequired": false,
"httpMethod": "GET",
"authorizationType": "NONE"
}
Para añadir el método HTTP GET en el recurso /pets/{petId} (au5df2), que configura el
método de API de GET /pets/{petId} con acceso abierto, llame a la función putMethod del
siguiente modo.
apig.putMethod({
restApiId: 'iuo308uaq7',
resourceId: 'au5df2',
httpMethod: 'GET',
authorizationType: 'NONE',
requestParameters: {
"method.request.path.petId" : true
}
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log("The 'GET /pets/{petId}' method setup failed:\n", err);
}
})
{
"apiKeyRequired": false,
"httpMethod": "GET",
"authorizationType": "NONE",
"requestParameters": {
"method.request.path.petId": true
}
apig.putMethodResponse({
restApiId: 'iuo308uaq7',
resourceId: "8sxa2j",
httpMethod: 'GET',
statusCode: '200'
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log("Set up the 200 OK response for the 'GET /pets' method failed:\n",
err);
}
})
{
"statusCode": "200"
}
Para establecer la respuesta 200 OK del método GET /pets/{petId}, llame a la función
putMethodResponse, especificando el identificador de recurso /pets/{petId} (au5df2) en
la propiedad resourceId.
apig.putMethodResponse({
restApiId: 'iuo308uaq7',
resourceId: "au5df2",
httpMethod: 'GET',
statusCode: '200'
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log("Set up the 200 OK response for the 'GET /pets/{petId}' method
failed:\n", err);
}
})
apig.putIntegration({
restApiId: 'iuo308uaq7',
resourceId: '8sxa2j',
httpMethod: 'GET',
type: 'HTTP',
integrationHttpMethod: 'GET',
uri: 'http://perstore-demo-endpoint.execute-api.com/pets'
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log("Set up the integration of the 'GET /' method of the API failed:\n",
err);
}
})
{
"httpMethod": "GET",
"passthroughBehavior": "WHEN_NO_MATCH",
"cacheKeyParameters": [],
"type": "HTTP",
"uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
"cacheNamespace": "8sxa2j"
}
Para configurar la integración del método GET /pets/{petId} con el punto de enlace HTTP
de http://perstore-demo-endpoint.execute-api.com/pets/{id} del backend, llame
apig.putIntegration({
restApiId: 'iuo308uaq7',
resourceId: 'au5df2',
httpMethod: 'GET',
type: 'HTTP',
integrationHttpMethod: 'GET',
uri: 'http://perstore-demo-endpoint.execute-api.com/pets/{id}',
requestParameters: {
"integration.request.path.id": "method.request.path.petId"
}
}, function(err, data){
if (!err) {
console.log(data);
} else {
console.log("The 'GET /pets/{petId}' method integration setup failed:\n", err);
}
})
{
"httpMethod": "GET",
"passthroughBehavior": "WHEN_NO_MATCH",
"cacheKeyParameters": [],
"type": "HTTP",
"uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}",
"cacheNamespace": "au5df2",
"requestParameters": {
"integration.request.path.id": "method.request.path.petId"
}
}
apig.putIntegrationResponse({
restApiId: 'iuo308uaq7',
resourceId: '8sxa2j',
httpMethod: 'GET',
statusCode: '200',
selectionPattern: ''
}, function(err, data){
if (!err) {
console.log(data);
} else
console.log("The 'GET /pets' method integration response setup failed:\n", err);
})
{
"selectionPattern": "",
"statusCode": "200"
}
Para configurar la respuesta de integración 200 OK del método GET /pets/{petId}, llame
a la función putIntegrationResponse, especificando el identificador del recurso /pets/
{petId} de la API (au5df2) en la propiedad resourceId.
apig.putIntegrationResponse({
restApiId: 'iuo308uaq7',
resourceId: 'au5df2',
httpMethod: 'GET',
statusCode: '200',
selectionPattern: ''
}, function(err, data){
if (!err) {
console.log(data);
} else
console.log("The 'GET /pets/{petId}' method integration response setup failed:
\n", err);
})
9. Como buena práctica, pruebe a invocar la API antes de implementarla. Para probar la invocación
del método GET /pets, llame al testInvokeMethod, especificando el identificador de recurso
/pets (8sxa2j) en la propiedad resourceId:
apig.testInvokeMethod({
restApiId: 'iuo308uaq7',
resourceId: '8sxa2j',
httpMethod: "GET",
pathWithQueryString: '/'
}, function(err, data){
if (!err) {
console.log(data)
} else {
console.log('Test-invoke-method on 'GET /pets' failed:\n', err);
}
})
apig.testInvokeMethod({
restApiId: 'iuo308uaq7',
resourceId: 'au5df2',
httpMethod: "GET",
pathWithQueryString: '/'
}, function(err, data){
if (!err) {
console.log(data)
} else {
console.log('Test-invoke-method on 'GET /pets/{petId}' failed:\n', err);
}
})
10. Por último, puede implementar la API para que la llamen sus clientes.
apig.createDeployment({
restApiId: 'iuo308uaq7',
stageName: 'test',
stageDescription: 'test deployment',
description: 'API deployment'
}, function(err, data){
if (err) {
console.log('Deploying API failed:\n', err);
} else {
console.log("Deploying API succeeded\n", data);
}
})
Puede configurar una API en API Gateway especificando definiciones de OpenAPI de las entidades
API de API Gateway correspondientes e importando las definiciones de OpenAPI en API Gateway.
Las siguientes definiciones de OpenAPI describen la API sencilla, que expone solo el método
GET / integrado con un punto de enlace HTTP del sitio web PetStore en el backend y devuelve una
respuesta 200 OK.
OpenAPI 2.0
{
"swagger": "2.0",
"info": {
"title": "Simple PetStore (OpenAPI)"
},
"schemes": [
"https"
],
"paths": {
"/pets": {
"get": {
"responses": {
"200": {
"description": "200 response"
}
},
"x-amazon-apigateway-integration": {
"responses": {
"default": {
"statusCode": "200"
}
},
"uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
"passthroughBehavior": "when_no_match",
"httpMethod": "GET",
"type": "http"
}
}
},
"/pets/{petId}": {
"get": {
"parameters": [
{
"name": "petId",
"in": "path",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "200 response"
}
},
"x-amazon-apigateway-integration": {
"responses": {
"default": {
"statusCode": "200"
}
},
"requestParameters": {
"integration.request.path.id": "method.request.path.petId"
},
"uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}",
"passthroughBehavior": "when_no_match",
"httpMethod": "GET",
"type": "http"
}
}
}
}
}
El siguiente procedimiento describe cómo importar estas definiciones de OpenAPI en API Gateway
mediante la consola de API Gateway.
Para importar las definiciones de OpenAPI de la API sencilla utilizando la consola de API Gateway
Para importar las definiciones de OpenAPI utilizando la AWS CLI, guarde las definiciones de
OpenAPI en un archivo y, a continuación, ejecute el siguiente comando, en el que se supone que
la región es us-west-2 y que la ruta absoluta del archivo de OpenAPI es file:///path/to/
API_OpenAPI_template.json:
Cuando las solicitudes de API se originan predominantemente desde una instancia EC2 o servicios
dentro de la misma región donde se ha implementado la API, normalmente un punto de enlace
de API regional reducirá la latencia de las conexiones, lo que se recomienda para este tipo de
situaciones.
Note
En los casos en que los clientes de la API están dispersos geográficamente, sigue teniendo
sentido utilizar un punto de enlace de API regional, junto con su propia distribución de
Amazon CloudFront para garantizar que API Gateway no asocia la API con distribuciones de
CloudFront controladas por servicios. Para obtener más información acerca de este caso de
uso, consulte la sección sobre cómo configurar API Gateway con mi propia distribución de
CloudFront.
Para crear una API regional, siga los pasos que se indican en la sección de creación de una API
optimizada para bordes, pero debe definir de forma explícita el tipo REGIONAL como única opción de
endpointConfiguration en la API.
A continuación, mostramos cómo crear una API regional utilizando la consola de API Gateway, la
AWS CLI y el AWS SDK para JavaScript en Node.js.
Temas
• Crear una API regional mediante la consola de API Gateway
• Creación de una API regional con la AWS CLI
• Creación de una API regional con el SDK de AWS para JavaScript
• Prueba de una API regional
Para crear una API regional con la AWS CLI, llame al comando create-rest-api:
{
"createdDate": "2017-10-13T18:41:39Z",
A partir de aquí, puede seguir las mismas instrucciones dadas en the section called “Configurar
una API optimizada para bordes mediante comandos de AWS CLI” para configurar métodos e
integraciones para esta API.
Para crear una API regional con el SDK de AWS para JavaScript:
apig.createRestApi({
name: "Simple PetStore (node.js SDK, regional)",
endpointConfiguration: {
types: ['REGIONAL']
},
description: "Demo regional API created using the AWS SDK for node.js",
version: "0.00.001"
}, function(err, data){
if (!err) {
console.log('Create API succeeded:\n', data);
restApiId = data.id;
} else {
console.log('Create API failed:\n', err);
}
});
{
"createdDate": "2017-10-13T18:41:39Z",
"description": "Demo regional API created using the AWS SDK for node.js",
"endpointConfiguration": {
"types": "REGIONAL"
},
"id": "0qzs2sy7bh",
"name": "Simple PetStore (node.js SDK, regional)"
Una vez realizados los pasos anteriores, puede seguir las instrucciones en the section called
“Configurar una API optimizada para bordes con el SDK de AWS para Node.js” para configurar
métodos e integraciones para esta API.
Una vez implementada, el nombre de host de la URL predeterminada de la API regional tiene el
siguiente formato:
{restapi-id}.execute-api.{region}.amazonaws.com
https://{restapi-id}.execute-api.{region}.amazonaws.com/{stage}
Suponiendo que configura los métodos GET /pets y GET /pets/{petId} en este ejemplo, puede
probar la API escribiendo las siguientes URL en un navegador:
https://0qzs2sy7bh.execute-api.us-west-2.amazonaws.com/test/pets
https://0qzs2sy7bh.execute-api.us-west-2.amazonaws.com/test/pets/1
En API Gateway, un método de API incluye una solicitud de método y una respuesta de método.
Se configura un método de API para definir lo que un cliente debería o debe hacer para enviar
una solicitud de acceso al servicio en el backend y para definir las respuestas que recibe a
cambio el cliente. Para la entrada, puede elegir los parámetros de solicitud de método, o bien una
carga aplicable, para que el cliente proporcione los datos necesarios u opcionales en el tiempo
de ejecución. Para la salida, se determina el código de estado de respuesta del método, los
encabezados y el cuerpo aplicable como destinos a los que asignar los datos de respuesta del
backend, antes de que se devuelvan al cliente. Para ayudar al desarrollador cliente a comprender los
comportamientos y los formatos de entrada y salida de su API, puede documentar la API y ofrecer
mensajes de error adecuados para solicitudes no válidas.
Una solicitud de método de API es una solicitud HTTP. Para configurar la solicitud de método, debe
configurar un método (o verbo) HTTP, la ruta a un recurso de API, los encabezados y los parámetros
de cadenas de consulta aplicables. También configura una carga cuando el método HTTP es POST,
PUTo PATCH. Por ejemplo, para recuperar una mascota con la API de muestra PetStore, define la
solicitud de método de API de GET /pets/{petId}, donde {petId} es un parámetro de ruta que
puede tomar un número en tiempo de ejecución.
GET /pets/1
Host: apigateway.us-east-1.amazonaws.com
...
Si el cliente especifica una ruta incorrecta, por ejemplo, /pet/1 o /pets/one en lugar de /pets/1,
se lanza una excepción.
Una respuesta de método de API es una respuesta HTTP con un código de estado determinado.
Para una integración que no sea de proxy, debe configurar respuestas de método para especificar
los destinos necesarios u opcionales de las asignaciones. Estos transforman los encabezados o
el cuerpo de respuesta de la integración en encabezados o en cuerpo de respuesta de método. El
mapeo puede ser tan sencillo como una transformación de identidad que pasa los encabezados o
el cuerpo a través de la integración tal y como están. Por ejemplo, la siguiente respuesta de método
200 muestra un ejemplo de transferencia de una respuesta de integración correcta tal y como está.
200 OK
Content-Type: application/json
...
{
"id": "1",
"type": "dog",
"price": "$249.99"
En principio, puede definir una respuesta de método correspondiente a una respuesta específica
desde el backend. Normalmente, esto implica cualquier respuesta 2XX, 4XX y 5XX. Sin embargo,
puede que no sea práctico, porque a menudo es posible que no sepa con antelación todas las
respuestas que puede devolver un backend. En la práctica, puede designar una respuesta de
método como predeterminada para gestionar las respuestas desconocidas o no asignadas desde el
backend. Es una buena práctica designar la respuesta 500 como predeterminada. En cualquier caso,
debe configurar al menos una respuesta de método para integraciones que no sean de proxy. De lo
contrario, API Gateway devuelve una respuesta de error 500 al cliente incluso cuando la solicitud se
completa correctamente en el backend.
Para admitir un SDK con establecimiento inflexible de tipos para la API, como un SDK de Java, debe
definir el modelo de datos de entrada para la solicitud de método y definir el modelo de datos de
salida de la respuesta de método.
Temas
• Configurar una solicitud de método en API Gateway
• Configurar respuestas de método en API Gateway
• Configuración de un método con la consola de API Gateway
Configurar una solicitud de método implica realizar las siguientes tareas, después de la creación de
un recurso RestApi:
1. Creación de una nueva API o elección de una entidad Resource de API existente.
2. Creación de un recurso Method de API que sea un verbo HTTP específico en el Resource nuevo
o elegido de la API. Esta tarea se puede dividir aún más en las siguientes subtareas:
• Añadido de un método HTTP a la solicitud de métodos
• Configuración de parámetros de solicitudes
• Definición de un modelo para el cuerpo de la solicitud
• Aplicación de un esquema de autorización
• Habilitación de la validación de la solicitud
Para ver ejemplos del uso de estas herramientas, consulte Inicialización de la configuración de una
API REST en API Gateway.
Temas
• Configurar recursos de API
• Configurar un método HTTP
• Configurar parámetros de solicitud de método
• Configurar un modelo de solicitud de método
• Configurar la autorización de solicitud de método
• Configurar la validación de solicitud de método
En una API de API Gateway, los recursos que se pueden dirigir se exponen como un árbol de
entidades Resources de API, con el recurso de raíz (/) en la parte superior de la jerarquía. El recurso
de raíz depende de la URL base de la API, que se compone del punto de enlace de la API y un
nombre de etapa. En la consola de API Gateway, este URI base se denomina Invoke URI y se
muestra en el editor de etapas de la API una vez que se implementa la API.
El punto de enlace de la API puede ser un nombre de host predeterminado o un nombre de dominio
personalizado. El nombre de host predeterminado tiene el siguiente formato:
{api-id}.execute-api.{region}.amazonaws.com
En este formato, la {api-id} representa el identificador de la API que genera API Gateway.
La variable {region} representa la región de AWS (por ejemplo, us-east-1) que eligió al
crear la API. Un nombre de dominio personalizado es cualquier nombre fácil de recordar en un
dominio de Internet válido. Por ejemplo, si ha registrado un dominio de Internet de example.com,
*.example.com es un nombre de dominio personalizado válido. Para obtener más información,
consulte configurar nombres de dominio personalizados.
Para la API de ejemplo de PetStore, el recurso de raíz (/) expone la tienda de mascotas. El recurso
/pets representa la variedad de mascotas disponibles en la tienda. El /pets/{petId} expone una
mascota individual de un identificador concreto (petId). El parámetro de la ruta de {petId} forma
parte de los parámetros de solicitudes.
Para configurar un recurso de API, se elige un recurso existente como principal y, a continuación, se
crea el recurso secundario bajo el recurso principal. Se empieza con el recurso raíz como principal,
se añade un recurso a este principal, se añade otro recurso a este recurso secundario como nuevo
principal, etc., a su identificador principal. A continuación, se añade el recurso designado al principal.
Con la AWS CLI, puede llamar al comando get-resources para averiguar qué recursos de una
API están disponibles:
El resultado es una lista de los recursos disponibles de la API actualmente. En la API de nuestro
ejemplo de PetStore, esta lista sería similar a la siguiente:
{
"items": [
{
"path": "/pets",
"resourceMethods": {
"GET": {}
},
"id": "6sxz2j",
"pathPart": "pets",
"parentId": "svzr2028x8"
},
{
"path": "/pets/{petId}",
"resourceMethods": {
"GET": {}
},
"id": "rjkmth",
"pathPart": "{petId}",
"parentId": "6sxz2j"
},
{
"path": "/",
"id": "svzr2028x8"
}
]
}
Cada elemento enumera los identificadores del recurso (id) y, excepto el recurso raíz, su recurso
principal inmediato (parentId), así como el nombre del recurso (pathPart). El recurso raíz es
especial, ya que no tiene ninguno principal. Después de elegir un recurso como principal, llame al
siguiente comando para añadir un recurso secundario.
Por ejemplo, para añadir alimentos de mascotas para la venta en el sitio web de PetStore, añada un
recurso food a la raíz (/), estableciendo path-part para food y parent-id para svzr2028x8. El
resultado es similar al siguiente:
{
"path": "/food",
"pathPart": "food",
"id": "xdsvhp",
"parentId": "svzr2028x8"
}
A medida que crece el negocio, el propietario de PetStore puede que decida añadir a la venta
alimentos, juguetes y otros artículos relacionados con mascotas. Para sustentarlo, puede añadir
/food, /toys y otros recursos debajo del recurso raíz. Debajo de cada categoría de venta, es
posible que también desee añadir más recursos, como por ejemplo /food/{type}/{item},
/toys/{type}/{item}, etc. Esto puede ser una tarea tediosa. Si decide añadir una capa
intermedia {subtype} a las rutas de recursos para cambiar la jerarquía de rutas a /food/{type}/
{subtype}/{item}, /toys/{type}/{subtype}/{item}, etc., los cambios afectarán a la
configuración existente de la API. Para evitarlo, puede utilizar un recurso de proxy de API Gateway
para exponer un conjunto de recursos de la API a la vez.
API Gateway define un recurso de proxy como un marcador de posición para que un recurso se
especifique cuando se envíe la solicitud. Un recurso de proxy se expresa mediante un parámetro
Con la AWS CLI, llama al siguiente comando para configurar un recurso de proxy bajo la raíz (/
{proxy+}):
{
"path": "/{proxy+}",
"pathPart": "{proxy+}",
"id": "234jdr",
"parentId": "svzr2028x8"
}
Para el ejemplo de API de PetStore, puede utilizar /{proxy+} para representar tanto /pets
como /pets/{petId}. Este recurso de proxy también puede hacer referencia a cualquier otro
recurso (existente o que se vaya a añadir), como por ejemplo /food/{type}/{item}, /toys/
{type}/{item}, etc., o /food/{type}/{subtype}/{item}, /toys/{type}/{subtype}/
{item}, etc. El desarrollador del backend determina la jerarquía de recursos y el desarrollador
cliente es responsable de comprenderlo. API Gateway simplemente transfiere lo que envíe el cliente
al backend.
Una API puede tener más de un recurso de proxy. Por ejemplo, los siguientes recursos de proxy
están permitidos dentro de una API.
/{proxy+}
/parent/{proxy+}
/parent/{child}/{proxy+}
Cuando un recurso de proxy tiene elementos secundarios que no son de proxy, los recursos
secundarios se excluyen de la representación del recurso de proxy. En los ejemplos anteriores, /
{proxy+} hace referencia a cualquier recurso bajo el recurso raíz, excepto los recursos /parent[/
*]. En otras palabras, una solicitud de método realizada para un recurso específico prevalece sobre
una solicitud de método realizada para un recurso genérico en el mismo nivel de la jerarquía de
recursos.
Un recurso de proxy no puede tener cualquier recurso secundario. Un recurso de API después de
{proxy+} es redundante y ambiguo. Los siguientes recursos de proxy no se permiten dentro de una
API.
/{proxy+}/child
/parent/{proxy+}/{child}
/parent/{child}/{proxy+}/{grandchild+}
Una solicitud de métodos de API se encapsula mediante el recurso Method de API Gateway. Para
configurar la solicitud de método, primero debe iniciar el recurso Method, configurando al menos un
método HTTP y un tipo de autorización en el método.
API Gateway, estrechamente asociado con el recurso de proxy, admite un método HTTP de ANY.
Este método ANY representa cualquier método HTTP que se suministre en el tiempo de ejecución. Le
permite utilizar una sola configuración de método de API para todos los métodos HTTP admitidos de
DELETE, GET, HEAD, OPTIONS, PATCH, POST y PUT.
También puede configurar el método ANY en un recurso que no sea de proxy. Al combinar el método
ANY con un recurso de proxy, obtiene una configuración de método de API único para todos los
métodos compatibles con HTTP frente a cualquier recurso de una API. Además, el backend puede
evolucionar sin que afecte a la configuración de API existente.
Antes de configurar un método de API, tenga en cuenta quién puede llamar al método. Establezca
el tipo de autorización según su plan. Para un acceso abierto, establézcalo en NONE. Para utilizar
permisos de IAM, establezca el tipo de autorización en AWS_IAM. Para utilizar una función de
autorizador de Lambda, establezca esta propiedad en CUSTOM. Para utilizar un grupo de usuarios de
Amazon Cognito, establezca el tipo de autorización en COGNITO_USER_POOLS.
El siguiente comando de la AWS CLI muestra cómo crear una solicitud de método del verbo ANY
frente a un recurso especificado (6sxz2j), mediante los permisos de IAM para controlar su acceso.
--http-method ANY \
--authorization-type AWS_IAM \
--region us-west-2
Para crear una solicitud de método de API con un tipo de autorización distinta, consulte the section
called “Configurar la autorización de solicitud de método”.
Los parámetros de solicitud de método son una forma para que un cliente proporcione los datos de
entrada o el contexto de ejecución necesarios para completar la solicitud de métodos. Un parámetro
de método puede ser un método de ruta, un encabezado o un parámetro de cadena de consulta.
Como parte de la configuración de solicitud de método, debe declarar los parámetros de solicitud
necesarios para que estén disponibles para el cliente. Para la integración que no sea de proxy,
puede traducir estos parámetros de solicitud en un formato que sea compatible con el requisito del
backend.
Por ejemplo, para la solicitud de métodos GET /pets/{petId}, la variable de ruta {petId} es un
parámetro de solicitud necesario. Puede declarar este parámetro de ruta cuando llame al comando
put-method de la AWS CLI. Esto se detalla de la siguiente manera:
En lugar de esta forma abreviada, puede utilizar una cadena de JSON para establecer el valor
request-parameters:
'{"method.request.querystring.type":false,"method.request.header.breed":false}'
Con esta configuración, el cliente puede consultar las mascotas por tipo:
GET /pets?type=dog
Además, el cliente puede consultar los perros de raza caniche de la siguiente manera:
GET /pets?type=dog
breed:poodle
Para obtener información sobre cómo asignar parámetros de solicitud de método a parámetros de
solicitud de integración, consulte the section called “Integraciones”.
Para un método de API que pueda tomar datos de entrada en una carga, puede utilizar un modelo.
Un modelo se expresa en un esquema JSON, borrador 4 y describe la estructura de datos del cuerpo
de la solicitud. Con un modelo, un cliente puede determinar cómo construir una carga de solicitud
de métodos como entrada. Y lo que es más importante, API Gateway utiliza el modelo para validar
una solicitud, generar un SDK e inicializar una plantilla de mapeo para configurar la integración
en la consola de API Gateway. Para obtener información sobre cómo crear un modelo, consulte
Comprensión de los modelos de datos.
En función de los tipos de contenido, una carga de método puede tener diferentes formatos. Un
modelo se indexa frente al tipo de medio de la carga aplicada. API Gateway utiliza el encabezado
de la solicitud Content-Type para determinar el tipo de contenido. Para configurar modelos de
solicitud de método, añada pares de clave-valor con el formato "<media-type>":"<model-
name>" al mapa requestModels cuando llame al comando put-method de la AWS CLI.
Para utilizar el mismo modelo independientemente del tipo de contenido, especifique $default
como la clave.
Por ejemplo, para establecer un modelo en la carga de JSON de la solicitud de método POST /pets
de la API de ejemplo de PetStore, puede llamar al siguiente comando de la AWS CLI:
--rest-api-id vaz7da96z6 \
--resource-id 6sxz2j \
--http-method POST \
--authorization-type "NONE" \
--region us-west-2 \
--request-models '{"application/json":"petModel"}'
Aquí, petModel es el valor de propiedad name de un recurso Model que describe una mascota. La
definición del esquema real se expresa como un valor de cadena JSON de la propiedad schema del
recurso Model.
En un SDK Java de la API, u otro tipo de SDK con establecimiento inflexible de tipos, los datos de
entrada se forman como la clase petModel derivada de la definición del esquema. Con el modelo
de solicitud, los datos de entrada en el SDK generado se forman en la clase Empty, que se deriva
del modelo Empty predeterminado. En este caso, el cliente no puede crear una instancia de la clase
de datos correcta para proporcionar la entrada necesaria.
Para controlar quién puede llamar al método de la API, puede configurar el tipo de autorización en
el método. Puede utilizar este tipo para aplicar uno de los autorizadores admitidos, incluidos roles y
políticas de IAM (AWS_IAM), un grupo de usuarios de Amazon Cognito (COGNITO_USER_POOLS), o
un autorizador de Lambda basado en funciones de Lambda (CUSTOM).
Para utilizar permisos de IAM para autorizar el acceso al método de la API, establezca la propiedad
de entrada authorization-type en AWS_IAM. Cuando esta opción está establecida, API
Gateway verifica la firma del intermediario en la solicitud en función de las credenciales del
intermediario. Si el usuario verificado tiene permiso para llamar al método, se acepta la solicitud. De
lo contrario, rechaza la solicitud y el intermediario recibe una respuesta de error no autorizado. La
llamada al método no se realiza correctamente a menos que el intermediario tenga permiso para
invocar el método de la API. La siguiente política de IAM concede permiso al intermediario para
llamar a cualquier método de API creado dentro de la misma Cuenta de AWS:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": "arn:aws:execute-api:*:*:*"
}
]
}
Para obtener más información, consulte the section called “Usar permisos de IAM”.
Actualmente, solo puedes conceder esta política a los usuarios, grupos y roles de la Cuenta de AWS
del propietario de la API. Los usuarios de una Cuenta de AWS diferente pueden llamar a los métodos
de la API solo si se les permite asumir un rol de la Cuenta de AWS del propietario de la API con los
permisos necesarios para llamar a la acción execute-api:Invoke. Para obtener más información
sobre los permisos entre cuentas, consulte Uso de roles de IAM.
Puede utilizar la AWS CLI, un AWS SDK o un cliente de API REST, como ser, Postman, que
implementa el proceso de firma Signature Version 4.
Para utilizar un autorizador de Lambda con el fin de autorizar el acceso al método de la API,
establezca la propiedad de entrada authorization-type en CUSTOM y establezca la propiedad de
entrada authorizer-id en el valor de propiedad id de un autorizador de Lambda que ya exista. El
autorizador de Lambda al que se hace referencia puede ser del tipo TOKEN o REQUEST. Para obtener
información acerca de cómo crear un autorizador de Lambda, consulte the section called “Uso de
autorizadores Lambda”.
Para utilizar un grupo de usuarios de Amazon Cognito con el fin de autorizar el acceso al método
de la API, establezca la propiedad de entrada authorization-type en COGNITO_USER_POOLS
y establezca la propiedad de entrada authorizer-id en el valor de propiedad id del autorizador
COGNITO_USER_POOLS que ya se creó. Para obtener información sobre la creación de un
autorizador de grupo de usuarios de Amazon Cognito, consulte the section called “Uso de grupos de
usuarios de Amazon Cognito como autorizador para una API REST”.
Puede habilitar la validación de solicitud al configurar una solicitud de método de API. Primero tiene
que crear un validador de solicitudes:
--validate-request-body \
--no-validate-request-parameters
Este comando de la CLI crea un validador de solicitud de solo cuerpo. A continuación, se muestra un
ejemplo de resultado:
{
"validateRequestParameters": false,
"validateRequestBody": true,
"id": "jgpyy6",
"name": "bodyOnlyValidator"
}
Con este validador de solicitud, puede habilitar la validación de solicitud como parte de la
configuración de solicitud de método:
Una respuesta de método de API encapsula el resultado de una solicitud de método de API que el
cliente recibirá. Los datos de salida incluyen un código de estado HTTP, algunos encabezados y
posiblemente un cuerpo.
Con las integraciones que no sean de proxy, los parámetros de respuesta especificados y el cuerpo
se pueden asignar desde los datos de respuesta de integración asociados o se les pueden asignar
Con una integración de proxy, API Gateway transfiere la respuesta del backend a la respuesta del
método automáticamente. No es necesario configurar la respuesta del método de API. Sin embargo,
con la integración proxy de Lambda, la función de Lambda debe devolver un resultado de este
formato de salida para que API Gateway asigne correctamente la respuesta de integración a una
respuesta de método.
Al establecer códigos de estado para un método de API, debe elegir uno como predeterminado
para gestionar cualquier respuesta de integración de un código de estado no previsto. Es razonable
establecer 500 como predeterminado, ya que esto equivale a emitir respuestas que de otro modo
no estarían asignadas como un error del servidor. Por motivos de instrucción, la consola de API
Gateway establece la respuesta 200 como la opción predeterminada. Pero puede restablecerla en la
respuesta 500.
Para configurar una respuesta de método, debe haber creado la solicitud de método.
El código de estado de una respuesta de método define un tipo de respuesta. Por ejemplo, las
respuestas de 200, 400 y 500 indican respuestas de éxito, de error del lado del cliente y de error del
lado del servidor, respectivamente.
Los parámetros de respuesta de método definen qué encabezados recibe el cliente en respuesta a
la solicitud de método asociado. Los parámetros de respuesta también especifican un objetivo al que
API Gateway asigna un parámetro de respuesta de integración, según los mapeos prescritos en la
respuesta de integración del método de la API.
Un modelo de respuesta de método define un formato del cuerpo de la respuesta del método. Antes
de configurar el modelo de respuesta, primero debe crear el modelo en API Gateway. Para ello,
puede llamar al comando create-model. El siguiente ejemplo muestra cómo crear un modelo
PetStorePet para describir el cuerpo de la respuesta para la solicitud de método GET /pets/
{petId}.
Para configurar los modelos de respuesta de método para definir el formato de la carga, agregue
el par de clave-valor "application/json":"PetStorePet" al mapa requestModels del recurso
MethodResponse. El siguiente comando de la AWS CLI de put-method-response muestra
cómo se realiza:
• El método debe estar disponible en API Gateway. Siga las instrucciones en Tutorial: Desarrollo de
una API de REST con integración HTTP no de proxy.
• Si desea que el método se comunique con una función de Lambda, debe haber creado ya el rol
de invocación de Lambda y el rol de ejecución de Lambda en IAM. También debe haber creado la
función de Lambda con la que el método se comunicará en AWS Lambda. Para crear los roles y
la función, utilice las instrucciones de Creación de una función de Lambda para la integración de
Lambda no de proxy de Desarrollo de una API de REST de API Gateway con integración Lambda.
• Si desea que el método se comunique con una integración HTTP o de proxy HTTP, debe haber
creado y tener acceso a la URL del punto de enlace HTTP con la que se comunicará el método.
• Compruebe que API Gateway admite los certificados de los puntos de enlace HTTP y proxy de
HTTP. Para obtener más información, consulte Entidades de certificación compatibles con API
Gateway para las integraciones HTTP y Proxy HTTP.
Temas
• Configurar una solicitud de método de API Gateway en la consola de API Gateway
• Configurar una respuesta de método de API Gateway en la consola de API Gateway
Para utilizar la consola de API Gateway para especificar una solicitud o respuesta del método de una
API y para configurar la forma en que el método autorizará las solicitudes, siga estas instrucciones.
Note
Estas instrucciones presuponen que ya ha completado los pasos que se detallan en
Configuración de una solicitud de integración de la API mediante la consola de API Gateway.
El mejor modo de utilizarlas es para complementar las conversaciones que se indican en
Desarrollo de una API de REST de API Gateway con integración Lambda.
a. Para habilitar el acceso abierto al método a cualquier usuario, elija Ninguno. Este paso se
puede omitir si el ajuste predeterminado no se ha cambiado.
b. Para utilizar permisos de IAM para controlar el acceso de clientes al método, seleccione
AWS_IAM. Con esta opción, solo los usuarios de los roles de IAM con la política correcta de
IAM asociada pueden llamar a este método.
Para crear el rol de IAM, especifique una política de acceso con un formato como el
siguiente:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"resource-statement"
]
}
]
}
Para crear el rol de IAM, puede adaptar las instrucciones en “To create the Lambda
invocation role and its policy” (Para crear el rol de invocación de Lambda y su política) y “To
create the Lambda execution role and its policy” (Para crear el rol de ejecución de Lambda
y su política) de la sección Create Lambda Functions (Crear funciones de Lambda) de
Desarrollo de una API de REST de API Gateway con integración Lambda.
d. Para utilizar un grupo de usuarios de Amazon Cognito, elija un grupo de usuarios disponible
en Cognito user pool authorizers (Autorizadores de grupos de usuarios de Cognito). Cree
un grupo de usuarios en Amazon Cognito y un autorizador de grupo de usuarios de Amazon
Cognito en API Gateway para que esta opción se muestre en el menú desplegable. Para
obtener información sobre cómo crear un autorizador de grupo de usuarios de Amazon
Cognito, consulte Control del acceso a una API de REST con grupos de usuarios de
Amazon Cognito como autorizador.
5. Seleccione Clave de API obligatoria para que se requiera una clave de API. Cuando se habilita,
las claves de API se utilizan en planes de uso para limitar el tráfico del cliente.
6. De forma opcional, para asignar un nombre de operación en un SDK de Java de esta API,
generado por API Gateway, ingrese un nombre en Nombre de operación. Por ejemplo, para
la solicitud de método de GET /pets/{petId}, el nombre de operación de SDK de Java
correspondiente es por defecto GetPetsPetId. Este nombre se crea a partir del verbo
HTTP del método (GET) y los nombres de variables de la ruta de recursos (Pets y PetId). Si
establece el nombre de operación como getPetById, el nombre de operación de SDK pasa a
ser GetPetById.
Note
El modelo es útil para informar al cliente del formato de datos esperado de una
carga. Resulta útil para generar una plantilla de asignación de esqueleto. Es
importante para generar un SDK con establecimiento inflexible de tipos de la API
en idiomas como Java, C #, Objective-C y Swift. Solo es necesario si se habilita la
validación de solicitudes frente a la carga.
Un método de API puede tener una o más respuestas. Cada respuesta se indexa mediante su código
de estado HTTP. De forma predeterminada, la consola de API Gateway agrega la respuesta 200 a
las respuestas de método. Puede modificarla, por ejemplo, para que el método devuelva 201 en su
lugar. Puede añadir otras respuestas, por ejemplo, 409 para la denegación de acceso y 500 para las
variables de etapa sin inicializar utilizadas.
Para utilizar la consola de API Gateway para modificar, eliminar o agregar una respuesta a un
método de API, siga estas instrucciones.