Tras la publicación del informe de Forrester del último trimestre de 2018, comparando diferentes proveedores de plataformas API Management, inicialmente sorprende que un producto como Amazon API Gateway no esté contemplado en este análisis.
Pero la respuesta es sencilla, como su nombre indica es un producto que ofrece “solo” el Gateway, no es una plataforma completa de gestión de APIs.
Entonces, ¿qué ocurre con aquellos clientes que hayan optado por usar este producto y quieran establecer una estrategia de APIficación en su compañía?
AWS ofrece la posibilidad de integrar su gateway con el producto de API Management ofertado por RedHat, 3Scale para convertirlo en una plataforma de gestión de APIs completa.
Como paso inicial se analiza a alto nivel las funcionalidades de cada uno de los productos para corroborar qué ofrecen de manera independiente y así entender mejor qué se obtiene a través de su integración.
3Scale es una plataforma completa de API Management (gateway, manager y portal) proporcionada por RedHat, que disponibiliza una arquitectura flexible, distribuida y escalable. Se basa en una arquitectura de dos capas:
- La capa con los servicios de administración (manager y portal). Permite a los usuarios definir los métodos de autenticación, límites y control de acceso, así como el análisis del uso de las APIs y un portal para los desarrolladores. Estos servicios de administración se ofrecen de dos formas:
- Servicio autogestionado como Software as a Service (Saas) en la nube desplegados en la infraestructura de Amazon, lo cual proporciona la escalabilidad y velocidad necesarias incluso con un volumen elevado de peticiones. Es la opción incluida por defecto al crearse una cuenta en 3Scale. Si se apuesta por esta opción, las máquinas y su gestión se delegan a 3Scale y el cliente paga a través de la licencia del producto.
- Servicio gestionado por el cliente, cuya implantación puede efectuarse en Azure o Amazon EC2 mediante máquinas virtuales y la opción recomendada para la implantación on-premise mediante su despliegue en Openshift.
- La capa de control de tráfico e integración con los backend (gateway). Para controlar el tráfico, 3Scale permite la integración con 3 tipos de gateway:
- APICast incluido por defecto en la plataforma permite su despliegue tanto en la nube como on-premise.
- Amazon API Gateway, que será la opción a considerar aquí.
- Y, por último, con plugins específicos en diferentes lenguajes de programación para integraciones adhoc.
Las funcionalidades más destacables de la plataforma son las siguientes:
- Control del tráfico**:** 3Scale protege los servidores backend que exponen las APIs del tráfico de entrada mediante un gateway, el cual se puede desplegar tanto en la nube como on-premise. El gateway actúa como un gestor de políticas para proteger los recursos expuestos, realizar su seguimiento y distribuir llamadas a diferentes backend desde un mismo punto de entrada. En resumen, pone control en el flujo de los datos.
- Control de acceso mediante el cual se puede determinar exactamente quién usa la API, cómo y cuánto. Además, proporciona la gestión de planes de consumo para las aplicaciones que vayan a usar las APIs pudiéndose configurar el número de llamadas por unidad de tiempo para proteger la infraestructura y mantener el flujo de tráfico sin problemas. También permite disparar alertas cuando las aplicaciones se aproximen a los límites de uso definidos.
- Seguridad**:** la plataforma oferta diferentes patrones de autenticación y credenciales para cubrir todas las casuísticas de exposición de las APIs desde publicas a completamente privadas o internas, incluyendo gestión de claves y tokens Oauth.
- Portal de desarrolladores: el uso de esta funcionalidad es una de las mejores formas de conseguir el éxito en el consumo de las APIs creando una experiencia de usuario para los desarrolladores que favorezca su uso. 3Scale incluye un portal en CMS que permite su customización de una forma sencilla. Además, proporciona diferentes flujos configurables para el onboarding de usuarios y acceso a la documentación de definición de las APIs.
- Documentación de las APIs con ActiveDocs: incluye la importación y gestión de la definición de las APIs con Swagger mediante ActiveDocs, permitiendo a los desarrolladores explorar la documentación, agruparla por etiquetas, probar los servicios e incluso incorporar por defecto las claves de 3Scale para hacer las pruebas más cómodamente.
- Analítica**:** 3Scale permite definir métricas a nivel de método como: cuantificar el número de peticiones, el volumen de la transferencia de datos en MB o GB (tanto subidos como descargados), el número de registros enviados por cada petición e incluso la monitorización de tiempo de uso y CPU por cada servicio.
- Dashboards integrados en el portal de administración incluidos en el producto de caja que permiten acceder a estadísticas como: el número de APIs invocadas en el último mes y el porcentaje de progresión, gráficos sobre el registro de los nuevos usuarios y las aplicaciones que más consumen un determinado recurso.
- Monetización de las APIs. 3Scale permite la integración con múltiples herramientas de gestión de pago como son: Stripe, Braintree, Authorize.net, Ogone y mediante tarjeta de crédito. Dentro de la plataforma se pueden configurar reglas de precio y planes de pago llegando a nivel de recurso, permitiendo configurar de manera flexible si los métodos son de libre acceso o de pago. La tarifa puede definirse por volumen o por uso y el modelo de cobro permite incluso definir en caso de que se supere el límite de peticiones establecido en una tarifa, seguir dando servicio a la aplicación a un precio diferente.
Sobre esta herramienta ya se habló en un post anterior, pero en resumen AWS API Gateway es un servicio completamente gestionado que permite exponer, monitorizar y securizar APIs de una forma escalable. Las funcionalidades principales que ofrece son las siguientes:
- Gestión del ciclo de vida de las APIs: es posible definir diferentes stages junto a sus variables de configuración, lo que permite una gestión entre entornos y despliegues de una manera mucho más ordenada.
- Integra por defecto la posibilidad de crear mocks, lo cual enlaza directamente con el concepto API First, que permite disponibilizar la API desde un primer momento sin tener los servicios backend implementados.
- Generación de SDKs.
- Comunicación con los backends**:** actúa como proxy permitiendo la comunicación con múltiples tipos de servicios: funciones Lambda, servicios AWS, endpoints HTTP, etc.
- Modelado y transformación de mensajes**:** permite a los desarrolladores modificar el esquema Json, tanto a nivel de petición como respuesta hacia los backends. Además se pueden incluir "plantillas" o modelos de los cuerpos de mensaje lo cual junto con la importación del Swagger hace posible el modelado de forma completa tanto del lado del cliente como del lado del backend.
- Seguridad**:** expone las APIs directamente con HTTPs, permite la integración de herramientas de seguridad como IAM y Cognito para autorizar el acceso, permite configurar custom authorizers mediante funciones Lambda que gestionen la autenticación y protege contra los ataques de denegación de servicio.
- Monitorización**:** ofrece métricas y dashboards de las peticiones con la integración de CloudWatch como: número de llamadas, latencia, logs, etc.
- Throttling**:** proporciona mecanismos de control de throttling limitando el número de peticiones para mantener la disponibilidad de la infraestructura.
- Cacheo**:** envía respuestas cacheadas para peticiones duplicadas durante un lapso de tiempo entre ellas configurable, mejorando la gestión de la infraestructura y reduciendo el tráfico hacia los backend.
Amazon API Gateway y 3Scale API Management Platform son dos productos muy diferentes que se complementan aprovechando lo mejor de cada una de ellos.
Ambas plataformas promueven dicha integración dotando a cada una de ellas de un rol específico: Amazon API Gateway como API gateway de la plataforma y 3Scale como API Manager y API portal.
La integración tiene sentido desde las siguientes perspectivas:
- Desde la perspectiva del cliente, ya que permite a todos aquellos que utilicen en su organización AWS Amazon API Gateway dar un paso más hacia una estrategia efectiva de monetización de las APIs y exposición a terceros beneficiándose de la plataforma de gestión de APIs de 3Scale sin migrar su plataforma actual.
- Desde el punto de vista del desarrollador, ya que el gateway de Amazon ofrece unas funcionalidades técnicas más completas que el propio gateway integrado en 3Scale, como son los stages, variables de entorno, SDKs y transformación de mensajes.
- Desde el punto de vista de los proveedores de ambas herramientas. Esta integración es favorecida por Amazon, ya que 3Scale completa su gateway y desde 3Scale le permite acceder a todos aquellos clientes que ya tienen en su stack tecnológico el gateway de Amazon.
En detalle las funciones que realiza cada producto son:
- Amazon API Gateway es el punto de acceso a las APIs mediante el cual: se controla el límite de acceso, el cacheo y logging de los servicios y se ofrece protección contra ataques de denegación de servicio. Además se utilizan las funcionalidades que más destacan de esta herramienta como son: la gestión de stages de cada una de las APIs y la generación de SDKs.
- 3Scale por su parte ofrece una funcionalidad de gestión más enfocada al ámbito de negocio: analítica y reporting de los servicios, gestión de alertas e integración con diferentes plataformas para monetizar las APIs. Por otra parte también proporciona un portal de desarrolladores customizable en el cual se incluyen: los flujos de onboarding de usuarios, configuración de cuentas y notificaciones, suscripción de aplicaciones y por supuesto la documentación interactiva (Swagger) de las APIs que se exponen en la plataforma.
-
Lambda: en este escenario la lógica de negocio de la API está construida en AWS Lambda, es decir, no es necesario disponer de recursos o servidores a mayores. Tras la autenticación de una petición se ejecuta la función Lambda y se envía la respuesta de la misma al cliente que inició la petición.
-
Servicios backends: en este escenario la plataforma se integra con HTTP endpoints, software ad-hoc o servicios de AWS simplemente configurando en el gateway de Amazon el acceso a ellos. Después de autenticar la petición se invoca al HTTP endpoint y la respuesta proporcionada por dicho endpoint se devuelve al cliente que inició la petición.
En ambos escenarios es el gateway de Amazon el que actúa como punto de entrada de la solicitud invocando al resto de componentes de la integración y es 3Scale el que autentica la petición.
En la integración de 3Scale con Amazon API Gateway intervienen diferentes partes cada una de ellas con el siguiente propósito:
- Amazon API Gateway en esta herramienta está publicada la API, hace una gestión básica del tráfico siendo el punto de entrada de las peticiones.
- AWS Lambda tiene dos propósitos, el primero es implementar la lógica que hay detrás de la API (escenario 1 de aplicación) y el segundo objetivo es implementar un custom authorizer que llame a 3Scale para comprobar la autorización de la petición.
- Amazon ElastiCache permite cachear las claves de acceso a la API y reducir la latencia.
- VPC para conectar AWS Lambda con Amazon ElastiCache.
- 3scale API Management Platform es el gestor de las peticiones para: autorizar la petición, controlar los límites de acceso mediante planes, monetizar las API y actuar como portal de desarrollador donde se encuentra la documentación de la definición de las APIs y los flujos de onboarding de los consumidores de las APIs.
- Serverless Framework: Se utiliza para realizar todo el despliegue y configuración de las herramientas anteriores.
El flujo del funcionamiento de esta integración se resume en los siguientes diagramas. El primero de ellos evidencia los componentes que intervienen cuando una API se llama por primera vez con unas claves de acceso.
- Una petición a una API expuesta llega al gateway de Amazon y este invoca a 3Scale mediante un custom authorizer implementado en una función Lambda para comprobar si la petición está autorizada.
- 3Scale custom authorizer comprueba si la petición está en la caché de una llamada anterior mediante Amazon ElastiCache.
- Al ser la primera llamada la caché no tiene datos luego se comprueba la autorización de le petición invocando a 3scale API Management Platform.
- La respuesta desde 3scale API Management Platform se almacena en la caché para sucesivas peticiones.
- Esa misma respuesta sobre la autorización se devuelve al gateway de Amazon.
- Si la petición está autorizada Amazon API Gateway invoca directamente al *backend, *en este caso la función Lambda.
En el caso de llamar al mismo recurso que se procesó en el diagrama anterior el flujo sería el siguiente:
- Amazon API Gateway comprueba mediante el custom authorizer de 3Scale si la petición está autorizada.
- El custom authorizer comprueba si existe en la caché datos almacenados para esa petición. Como la solicitud anterior fue almacenada se recogen los datos que contiene la caché.
- El custom authorizer devuelve la respuesta de la caché al gateway de Amazon.
- Si la petición fue autorizada el gateway de Amazon invoca directamente al backend, en nuestro caso una función Lambda.
- Además, el custom authorizer de 3Scale invoca a la función de reporting 3Scale async.
- La función de reporting 3Scale async informa del tráfico a 3scale API Management Platform de forma que esta información pueda ser utilizada desde la API de analítica que ofrece la plataforma 3Scale.
Es necesario disponer de una API desplegada y configurada en Amazon API Gateway. Si no se dispone de una, se puede utilizar Serverless CLI para generarla de una manera muy sencilla. Se pueden ver los detalles en el punto 1.3 del siguiente tutorial.
Para hacer el despliegue se hace uso de Serverless Framework, que permite configurar y desplegar fácilmente diferentes funciones Lambda y CloudFormation, que permite configurar distintos servicios AWS mediante un archivo.
1. El primer paso consiste en clonar el repositorio con toda la configuración y código del proyecto. En este proyecto nos encontramos dentro de la carpeta awsThreeScale_Authorizer lo siguiente:
- handler.js - Contiene las funciones necesarias para la integración:
- authorizer: función Lambda que invoca el gateway de Amazon para autorizar las peticiones de invocación a la API siguiendo los dos diagramas de flujo anteriores.
- Si se usa oauth se invoca a la función interna oauthAuthorizer, no se utiliza en este caso.
- Si se usa userKey se invoca a la función interna userKeyAuthorizer, es la que utilizaremos en nuestro ejemplo.
- authRepAsync: función Lambda invocada por la función authorizer, que invoca a la función async de 3Scale para el reporting y analítica de las peticiones de la API según el segundo diagrama de flujo.
- serverless.yml: contiene la configuración de Serverless y CloudFormation para su despliegue.
2. Instalar las dependencias de Serverless, desde la consola de comandos en la ruta donde nos hemos clonado el repositorio ejecutamos: npm install*.*
3. Configurar el fichero de configuración serverless.yml para Serverless:
- Cambiar la región por la región de nuestro Amazon API Gateway:
- Incluir el identificador de cuenta de AWS:
Para obtener el identificador simplemente entramos desde la consola de AWS a Support Center y vemos lo siguiente:
- Incluir el Service-id de 3Scale:
Para obtener el identificador del servicio entramos en el portal de gestión de 3Scale y copiamos el valor:
- Incluir el Provider-key de 3Scale:
Para obtener el valor de Provider Key se entra en el portal de gestión de 3Scale se entra en la configuración de la cuenta:
Y el valor del provider key nos aparece directamente:
Guardamos los cambios en el fichero serverless.yml.
4. Desplegar las funciones y los recursos en AWS ejecutando desde la línea de comandos: sls deploy.
Como resultado tras la configuración y despliegue vemos dentro de la consola de AWS las siguientes funciones Lambda:
- Crear un custom authorizer desde la consola de Amazon API Gateway en la API que hemos desplegado en los requisitos previos:
- Configurar el *custom authorizer *usando el nombre de la función lambda desplegada en el paso previo (ThreeScale-test-authorizer):
- Desplegar la API para que se actualicen los cambios.
Para testear el flujo obtenemos el User Key desde la consola de gestión de 3Scale desde la aplicación suscrita a la API:
Se utiliza Postman como cliente invocando a la url del gateway, que nos ha proporcionado Amazon tras el deploy, incluyendo como cabecera el valor del User Key de 3Scale:
Para comprobar el uso de la caché se puede verificar que la primera vez que se invoca la latencia en obtener respuesta es mucho más elevada, mientras que en las sucesivas ejecuciones la respuesta se obtiene mucho más rápido.
Si queremos probar un caso en que la autenticación falla simplemente deshabilitamos el envío del token obteniendo lo siguiente:
Las ventajas del uso de la integración entre Amazon API Gateway y 3Scale residen en aprovechar los puntos fuertes de cada uno de los productos para generar una plataforma completa de gestión de APIs.
Desde el punto de vista del uso de Amazon API Gateway las ventajas que tenemos son:
- Al ser AWS uno de los líderes de mercado como IaaS, todos los clientes que ya tengan esta herramienta como solución cloud corporativa no necesitan migrar los servicios, evitando los costes derivados de esa migración.
- Permite aprovecharse de gran parte de la funcionalidad de las operaciones técnicas que ofrece el producto: la gestión del ciclo de vida mediante los *stages y *las variables de configuración, la generación de SDKs, la facilidad de integración con funciones Lambda y HTTP endpoints, la transformación de mensajes y la facilidad para crear mocks.
Desde el punto de vista de 3Scale su uso proporciona todas las piezas necesarias para una estrategia de gestión y consumo de APIs exitosa con las siguientes ventajas:
- Mediante el portal de administración se puede controlar el acceso a las APIs a través de planes de consumo configurables, autorizar las peticiones mediante diferentes técnicas (pares de clave de aplicación y secret, Oauth 2.0), configurar la analítica de las peticiones y dashboard para analizar el comportamiento y uso de los servicios y dar la posibilidad de integrar la plataforma con herramientas que permitan el cobro por uso de los servicios.
- Dar la visibilidad necesaria mediante el portal de desarrolladores con la documentación accesible, gestionando el onboarding de clientes, gestión de aplicaciones y suscripción a planes de consumo.
Cuéntanos qué te parece.