Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Implementación del control de versiones de API basado en rutas mediante dominios personalizados en Amazon API Gateway
Corey Schnedl, Marcelo Barbosa, Mario Lopez Martinez, Anbazhagan Ponnuswamy, Gaurav Samudra y Abhilash Vinod, Amazon Web Services
Resumen
Este patrón demuestra cómo puede utilizar la característica de asignación de API de dominios personalizados para implementar una solución de control de versiones de API basado en rutas para Amazon API Gateway.
Amazon API Gateway es un servicio totalmente gestionado que puede utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Al utilizar la función de dominio personalizado del servicio, puede crear nombres de dominio personalizados que sean más sencillos e intuitivos y URLs que pueda proporcionarlos a los usuarios de su API. Puede utilizar las asignaciones de API para conectar etapas de la API a un nombre de dominio personalizado. Después de crear un nombre de dominio y configurar los registros de DNS, utiliza las asignaciones de API para enviarle tráfico a APIs través de su nombre de dominio personalizado.
Cuando una API pasa a estar disponible públicamente, los consumidores la utilizan. A medida que evoluciona una API pública, su contrato de servicio también evoluciona para reflejar las nuevas características y funcionalidades. Sin embargo, no es aconsejable cambiar ni eliminar las características existentes. Cualquier cambio importante podría afectar a las aplicaciones del consumidor y provocar fallos durante el tiempo de ejecución. El control de versiones de las API es importante para evitar interrumpir la compatibilidad con versiones anteriores e infringir un contrato.
Se necesita una estrategia clara de control de versiones de las API para ayudar a los consumidores a adoptarlas. El control de versiones APIs mediante rutas URLs es el enfoque más sencillo y más utilizado. En este tipo de control de versiones, las versiones se definen explícitamente como parte de la API. URIs El siguiente ejemplo URLs muestra cómo un consumidor puede usar el URI para especificar una versión de API para su solicitud:
https://api.example.com/api/v1/orders
https://api.example.com/api/v2/orders
https://api.example.com/api/vX/orders
Este patrón lo utiliza AWS Cloud Development Kit (AWS CDK) para crear, implementar y probar un ejemplo de implementación de una solución de control de versiones escalable basada en rutas para su API. AWS CDK es un marco de desarrollo de software de código abierto para modelar y aprovisionar los recursos de sus aplicaciones en la nube mediante lenguajes de programación conocidos.
Requisitos previos y limitaciones
Requisitos previos
Un activo Cuenta de AWS.
Se requiere la propiedad de un dominio para usar el repositorio de muestras de este patrón y para usar la funcionalidad de dominios personalizados de Amazon API Gateway. Puede usar Amazon Route 53 para crear y administrar los dominios de su organización. Para obtener información sobre cómo registrar o transferir un dominio con Route 53, consulte Registering new domains en la documentación de Route 53.
Antes de configurar un nombre de dominio personalizado para una API, debe disponer de un certificado SSL/TLS listo en AWS Certificate Manager.
Debe crear o actualizar el registro de recursos del proveedor de DNS para asignarlo al punto de conexión de la API. Si no se lleva a cabo esta asignación, las solicitudes de API vinculadas al nombre de dominio personalizado no pueden llegar a API Gateway.
Limitaciones
Los nombres de dominio personalizados no son compatibles con los nombres de dominio privados APIs.
Un nombre de dominio personalizado debe ser único dentro de un Región de AWS todo Cuentas de AWS.
Para configurar asignaciones de la API con varios niveles, debe usar un nombre de dominio personalizado regional y usar la política de seguridad de TLS 1.2.
En una asignación de API, el nombre de dominio personalizado y el mapeado APIs deben coincidir Cuenta de AWS.
Las asignaciones de API deben contener solo letras, números y los siguientes caracteres:
$-_.+!*'()/La longitud máxima de la ruta en una asignación de API es de 300 caracteres.
Puede tener 200 asignaciones de API con varios niveles para cada nombre de dominio.
Solo puede asignar HTTP APIs a un nombre de dominio personalizado regional con la política de seguridad TLS 1.2.
No puedes asignarlo WebSocket APIs al mismo nombre de dominio personalizado que una API HTTP o una API REST.
Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte AWS Services by Region
. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.
Versiones de producto
Este ejemplo de implementación se usa AWS CDK en la TypeScript versión 2.149.0.
Arquitectura
En el siguiente diagrama se muestra el flujo de trabajo de la arquitectura.

En el siguiente diagrama se ilustra lo siguiente:
El usuario de la API envía una solicitud a Amazon API Gateway con un nombre de dominio personalizado.
API Gateway dirige dinámicamente la solicitud del usuario a una instancia y etapa adecuadas de API Gateway, según la ruta indicada en la URL de la solicitud. En la siguiente tabla se muestra un ejemplo de cómo se pueden enrutar las distintas rutas basadas en URL a etapas específicas para distintas instancias de API Gateway.
API
Etapa
Ruta
Punto de conexión predeterminado
Cálculo APIv1
api
apiv1
Habilitado
Cálculo APIv2
api
apiv2
Habilitado
Cálculo APIv X
api
apivX
Habilitado
La instancia de API Gateway de destino procesa la solicitud y devuelve el resultado al usuario.
Automatización y escala
Te recomendamos que utilices AWS CloudFormation pilas independientes para cada versión de la API. Con este enfoque, puedes tener un aislamiento total entre el backend al APIs que se puede enrutar mediante la función de mapeo de API de dominio personalizado. Una ventaja de este enfoque es que se pueden implementar o eliminar diferentes versiones de la API de forma independiente sin que ello suponga el riesgo de modificar otra API. Este enfoque aumenta la resiliencia mediante el aislamiento de las CloudFormation pilas. Además, le proporciona diferentes opciones de back-end para su API AWS Lambda AWS Fargate, como los puntos finales HTTP y las acciones de. Servicios de AWS
Puedes usar estrategias de ramificación de Git, como Gitflow, en combinación con CloudFormation pilas aisladas para administrar el código fuente que se implementa en las diferentes versiones de la API. Al usar esta opción, puede mantener diferentes versiones de su API sin necesidad de duplicar el código fuente para las nuevas versiones. Con Gitflow, puede agregar etiquetas a las confirmaciones dentro de su repositorio de Git a medida que se vayan llevando a cabo los lanzamientos. Como resultado, tiene una instantánea completa del código fuente en relación con un lanzamiento específico. Como es necesario realizar actualizaciones, puedes consultar el código de una versión específica, realizar actualizaciones y, después, implementar el código fuente actualizado en la CloudFormation pila que se ajuste a la versión principal correspondiente. Este enfoque reduce el riesgo de interrumpir otra versión de la API, ya que cada versión de la API tiene un código fuente aislado y se implementa en CloudFormation pilas independientes.
Tools (Herramientas)
Servicios de AWS
Amazon API Gateway le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
AWS Certificate Manager (ACM) le ayuda a crear, almacenar y renovar claves y certificados SSL/TLS X.509 públicos y privados que protegen sus AWS sitios web y aplicaciones.
AWS Cloud Development Kit (AWS CDK)es un marco de desarrollo de software de código abierto para definir su infraestructura de nube en código y aprovisionarla mediante ella. CloudFormationEl ejemplo de implementación de este patrón utiliza el AWS CDK in. TypeScript Para trabajar con AWS CDK in se TypeScript utilizan herramientas conocidas, como el TypeScript compilador de Microsoft (
tsc), Node.jsy el administrador de paquetes de nodos ( npm). Si lo prefiere, puede usar Yarn, aunque en los ejemplos de este patrón se utiliza npm. Los módulos que componen la Biblioteca de constructos de AWS se distribuyen a través del repositorionpm, npmjs.org. CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos durante todo su ciclo de vida en Cuentas de AWS y Regiones de AWS.
AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
Amazon Route 53 es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.
AWS WAF es un firewall de aplicación web que lo ayuda a supervisar las solicitudes HTTP y HTTPS que se reenvían a los recursos de su aplicación web protegida.
Otras herramientas
Repositorio de código
Prácticas recomendadas
Utilice una sólida canalización de integración y entrega continuas (CI/CD) para automatizar las pruebas y el despliegue de las CloudFormation pilas creadas con. AWS CDK Para obtener más información relacionada con esta recomendación, consulte la Guía de AWS DevOps Well-Architected.
AWS WAF es un firewall gestionado que se integra fácilmente con servicios como Amazon API Gateway. Si bien AWS WAF no es un componente necesario para que este patrón de control de versiones funcione, recomendamos incluirlo en API Gateway como práctica recomendada AWS WAF de seguridad.
Anime a los consumidores de la API a que actualicen periódicamente a la versión más reciente de su API para que las versiones anteriores queden obsoletas y se eliminen de forma eficiente.
Antes de utilizar este enfoque en un entorno de producción, implemente una estrategia de firewall y autorización para su API.
Implemente el acceso a la administración de sus AWS recursos Cuenta de AWS mediante el modelo de acceso con privilegios mínimos.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Clonar el repositorio. | Para clonar el repositorio de la aplicación de ejemplo, ejecute el siguiente ejemplo:
| Desarrollador de aplicaciones |
Navegue hasta el repositorio clonado. | Para ir a la ubicación de la carpeta del repositorio clonado, ejecute el siguiente comando:
| Desarrollador de aplicaciones |
Instale las dependencias requeridas. | Para instalar las dependencias necesarias, ejecute el siguiente comando:
| Desarrollador de aplicaciones |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Iniciar la implementación de la pila de enrutamiento. | Para iniciar la implementación de la pila de CloudFormation enrutamiento
notaLa implementación de la pila no se llevará a cabo correctamente hasta que la siguiente tarea de validación del DNS del dominio se efectúe correctamente. | Desarrollador de aplicaciones |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Verificar la propiedad de su dominio. | El certificado permanecerá en estado Pendiente de validación hasta que demuestre la propiedad del dominio asociado. Para demostrar la propiedad, agregue registros CNAME a la zona alojada asociada al dominio. Para obtener más información, consulte la validación de DNS en la AWS Certificate Manager documentación. Agregar los registros adecuados permite que la implementación de | Desarrollador de aplicaciones, administrador de sistemas de AWS, administrador de redes |
Crear un registro de alias que apunte a su dominio personalizado de API Gateway. | Una vez que el certificado se haya emitido y validado correctamente, cree un registro de DNS que apunte a la URL del dominio personalizado de Amazon API Gateway. La URL del dominio personalizado se genera exclusivamente mediante el aprovisionamiento del dominio personalizado y se especifica como parámetro de CloudFormation salida. A continuación, se muestra un ejemplo del registro: Política de enrutamiento: enrutamiento sencillo Nombre del registro: Alias: sí Tipo de registro: registro DNS de tipo «A» que apunta a un AWS recurso Valor: TTL (segundos): 300 | Desarrollador de aplicaciones, administrador de sistemas de AWS, administrador de redes |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Implemente la pila de | Para implementar la pila de
El siguiente código de CDK agrega la asignación de API:
| Desarrollador de aplicaciones |
Implemente la pila de | Para implementar la pila de
| Desarrollador de aplicaciones |
Invoque la API . | Para invocar la API y probar los puntos de conexión de la API mediante Bruno, consulte las instrucciones de Información adicional. | Desarrollador de aplicaciones |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Eliminación de recursos. | Para destruir los recursos asociados a esta aplicación de ejemplo, utilice el comando siguiente:
notaAsegúrese de limpiar todos los registros de DNS de Route 53 que se hayan agregado manualmente para el proceso de verificación de la propiedad del dominio. | Desarrollador de aplicaciones |
Resolución de problemas
| Problema | Solución |
|---|---|
La implementación de | Asegúrese de haber agregado los registros CNAME de validación de DNS adecuados, tal como se describió en la tarea anterior. El nuevo certificado podría continuar mostrando el estado Pendiente de validación durante un máximo de 30 minutos después de agregar los registros de validación de DNS. Para obtener más información, consulta la validación de DNS en la AWS Certificate Manager documentación. |
Recursos relacionados
Implementación del control de versiones de API Gateway basado en encabezados con Amazon CloudFront
: esta entrada del blog de AWS Compute ofrece una estrategia de control de versiones basada en encabezados como alternativa a la estrategia de control de versiones basada en rutas que se describe en este patrón. AWS CDK Taller: este taller
introductorio se centra en la creación e implementación de aplicaciones mediante el uso de. AWS AWS Cloud Development Kit (AWS CDK) Este taller es compatible con Go, Python y TypeScript.
Información adicional
Prueba de la API con Bruno
Le recomendamos que utilice Bruno
Para invocar y probar la API, use los siguientes pasos:
Abra Bruno.
En el repositorio de código
de este patrón, selecciona Bruno/Sample-API- Gateway-Custom-Domain-Versioning y abre la colección. Para ver el menú desplegable Entornos en la parte superior derecha de la interfaz de usuario (UI), seleccione cualquier solicitud de la colección.
En el menú desplegable Entornos, seleccione Configurar.
Sustituya el valor de
REPLACE_ME_WITH_YOUR_DOMAINpor su dominio personalizado.Elija Guardar y, a continuación, cierre la sección Configuración.
En Entorno de pruebas, compruebe que esté seleccionada la opción Activo.
Invoque su API mediante el botón -> de la solicitud seleccionada.
Observe cómo se gestiona la validación (pasando valores no numéricos) en V1 en comparación con V2.
Para ver capturas de pantalla de ejemplos de invocación de la API y una comparación de las validaciones de V1 y V2, consulte Testing your sample API en el archivo README.md del repositorio de código