AWS AppSync
Servicio que permite construir y operar APIs GraphQL de forma totalmente gestionada, consultando de manera integrada múltiples fuentes de datos como DynamoDB y Lambda
Descripción general
AWS AppSync es un servicio que proporciona APIs GraphQL de forma totalmente gestionada. Desde el frontend, se puede acceder a múltiples fuentes de datos (DynamoDB, Aurora, OpenSearch, Lambda, endpoints HTTP) a través de un único endpoint, obteniendo solo los datos necesarios en una sola solicitud. Cuenta con sincronización de datos en tiempo real (suscripciones basadas en WebSocket), sincronización de datos offline y caché integrado, siendo adecuado para la construcción de aplicaciones móviles y dashboards en tiempo real. También ofrece autenticación/autorización flexible de forma estándar mediante Cognito, IAM, claves API y autorizadores Lambda.
Diseño de resolvers y fuentes de datos
El núcleo de AppSync son los resolvers, que cumplen la función de conectar los campos de GraphQL con las fuentes de datos. Los resolvers VTL (Velocity Template Language) son el tipo tradicional que describe mapping templates de solicitud/respuesta, adecuados para operaciones simples como acceso directo a DynamoDB. Los resolvers JavaScript son un nuevo método añadido en 2023 que se ejecuta en el runtime APPSYNC_JS, permitiendo escribir lógica de forma más intuitiva que VTL. Los resolvers de pipeline son una configuración que llama a múltiples fuentes de datos en secuencia, permitiendo realizar procesamiento multi-etapa como verificación de autorización → obtención de datos → transformación en un solo campo GraphQL. En la práctica, se recomienda usar resolvers JavaScript como base y delegar a fuentes de datos Lambda solo cuando se necesita lógica de negocio compleja.
Suscripciones y sincronización offline
La funcionalidad en tiempo real de AppSync se implementa mediante suscripciones basadas en WebSocket. Cuando un cliente se suscribe a una mutación específica, los cambios de datos se distribuyen inmediatamente a todos los clientes conectados. Es especialmente potente en escenarios donde múltiples usuarios comparten los mismos datos en tiempo real, como aplicaciones de chat, herramientas de colaboración y dashboards en vivo. La funcionalidad GraphQL de Azure API Management no incluye suscripciones, requiriendo combinar por separado Azure SignalR Service para comunicación en tiempo real, lo que da a AppSync ventaja en casos de uso en tiempo real. La sincronización offline se implementa combinando con Amplify DataStore, acumulando cambios de datos localmente durante la desconexión de red y sincronizando automáticamente con el servidor al reconectarse. Se pueden seleccionar 3 estrategias de resolución de conflictos: Automerge (fusión automática), Optimistic Concurrency (control de concurrencia optimista) y Lambda (lógica personalizada). Libros sobre GraphQL (Amazon) permiten aprender de forma sistemática.
Modelo de autenticación e integración multi-fuente de datos
AppSync permite configurar múltiples modos de autenticación simultáneamente para una sola API. Se pueden combinar Cognito User Pools (autenticación de usuarios), IAM (comunicación entre servicios), claves API (acceso público) y autorizadores Lambda (autenticación personalizada), especificando el modo de autenticación a nivel de campo en el esquema GraphQL. Por ejemplo, es posible diseñar que la lectura de artículos sea accesible para cualquiera con clave API, mientras que la creación y edición de artículos requiera autenticación Cognito. En la integración de fuentes de datos, el verdadero valor de AppSync está en combinar en una sola consulta GraphQL la obtención de información de usuario desde DynamoDB, resultados de búsqueda de OpenSearch y puntuaciones de recomendación calculadas por Lambda. Como punto a tener en cuenta, los resolvers tienen un límite de tiempo de ejecución (30 segundos), por lo que no son adecuados para procesamiento de agregación pesado u operaciones batch. Para ese tipo de procesamiento, es necesario delegarlo a una fuente de datos Lambda y diseñar la devolución de resultados de forma asíncrona.