Resumen

La arquitectura de notificaciones y flujos de trabajo en AWS es fundamental para construir aplicaciones modernas y escalables. Los servicios como SNS y Step Functions permiten crear sistemas asíncronos, basados en eventos y con flujos de trabajo complejos que pueden adaptarse a las necesidades de cualquier organización. Estos servicios serverless eliminan la necesidad de gestionar infraestructura, permitiéndote concentrarte en la lógica de negocio y en crear experiencias excepcionales para tus usuarios.

¿Qué es Amazon SNS y cómo funciona?

Amazon Simple Notification Service (SNS) es un servicio completamente administrado por AWS que permite a las aplicaciones enviar mensajes a destinatarios o usuarios finales. SNS utiliza un enfoque de publicador-suscriptor (pub-sub), donde los mensajes se envían a un tema (topic) y luego se distribuyen a todos los suscriptores de ese tema.

Este servicio ofrece integración con múltiples servicios dentro de AWS, como SQS, Lambda y muchos otros. Una de sus principales ventajas es que permite entregar mensajes y enviar notificaciones a nivel global con alta disponibilidad.

Para implementar SNS necesitamos:

  • Publicadores (Publishers): Aplicaciones o servicios que envían mensajes a un tema de SNS.
  • Temas (Topics): Puntos de acceso lógico y canales de comunicación donde los publicadores envían mensajes.
  • Suscriptores (Subscribers): Entidades que reciben los mensajes publicados en los temas a los que están suscritos.
  • Protocolos de suscripción: SNS soporta múltiples protocolos para la entrega de mensajes, incluyendo HTTP, HTTPS, email, email-JSON, Amazon SQS, Lambda, SMS, entre otros.

¿Qué tipos de suscriptores podemos configurar en SNS?

SNS permite dos enfoques principales para los suscriptores:

  1. Application-to-Application (A2A): Los mensajes se envían a servicios como:

    • SQS (colas de mensajes)
    • Lambda (funciones serverless)
    • Kinesis (para procesamiento de datos en tiempo real)
    • Servicios de almacenamiento como S3
    • Servicios analíticos como RedShift u OpenSearch
    • Proveedores externos como DataDog, NewRelic, MongoDB, Splunk, entre otros
  2. Application-to-Person (A2P): Los mensajes se envían directamente a personas mediante:

    • SMS (mensajes de texto)
    • Notificaciones push en dispositivos móviles
    • Correos electrónicos

Una característica destacada de SNS es su capacidad para implementar arquitecturas "fan-out", que permiten la entrega de un solo mensaje a múltiples suscriptores simultáneamente. Por ejemplo, podríamos enviar un mensaje a través de SNS y distribuirlo a varias colas SQS, donde cada cola tendría consumidores diferentes (como instancias EC2 o funciones Lambda) realizando tareas específicas con ese mismo mensaje.

¿Qué características adicionales ofrece SNS?

SNS proporciona varias funcionalidades que lo hacen extremadamente versátil:

  • Filtrado de mensajes: Los suscriptores pueden filtrar mensajes mediante políticas para consumir solo aquellos que les interesan.
  • Integración con CloudWatch: Permite monitorear diferentes métricas del servicio.
  • Escalabilidad automática: Diseñado para manejar grandes volúmenes de mensajes, escalando automáticamente según la demanda.
  • Alta disponibilidad: Garantiza la entrega de mensajes incluso en caso de fallos.

Entre los casos de uso más comunes encontramos:

  • Notificaciones push
  • Alertas de sistema
  • Monitoreo de aplicaciones
  • Distribución de eventos a múltiples servicios

¿Cómo funciona AWS Step Functions?

AWS Step Functions es un servicio que permite coordinar componentes de aplicaciones distribuidas y microservicios mediante flujos de trabajo visuales. Estos flujos se denominan máquinas de estado y definen una serie de pasos secuenciales o paralelos para ejecutar procesos complejos.

Una de las ventajas principales de Step Functions es que solo pagas por los recursos subyacentes que utilizas, sin costos adicionales por infraestructura.

¿Qué tipos de workflows ofrece Step Functions?

Step Functions ofrece dos tipos principales de workflows:

  1. Workflow Estándar:

    • Duración: Puede ejecutarse hasta por un año
    • Frecuencia: Adecuado para ejecuciones menos frecuentes
    • Características: Proporciona historial de ejecución detallado, manejo robusto de errores y reintentos
    • Ideal para: Procesos de larga duración
  2. Workflow Express:

    • Duración: Limitado a una ejecución máxima de 5 minutos
    • Frecuencia: Diseñado para ejecuciones de alta frecuencia y corta duración
    • Características: Menor costo de ejecución en comparación con el estándar
    • Ideal para: Tareas que requieren alta escalabilidad y no necesitan un historial de ejecución detallado

¿Cómo se crean flujos de trabajo en Step Functions?

Step Functions proporciona un canvas visual donde puedes crear flujos de trabajo mediante drag and drop. Los elementos principales incluyen:

{
  "Comment": "A Hello World example of the Amazon States Language",
  "StartAt": "Pass",
  "States": {
    "Pass": {
      "Type": "Pass",
      "Next": "Choice"
    },
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.condition",
          "BooleanEquals": false,
          "Next": "Fail"
        }
      ],
      "Default": "Wait"
    }
    // Más estados...
  }
}

Los estados más comunes incluyen:

  • Pass State: Transfiere la entrada a la salida sin realizar operaciones
  • Choice State: Permite tomar decisiones basadas en condiciones
  • Fail State: Indica que la ejecución ha fallado
  • Wait State: Pausa la ejecución durante un tiempo determinado
  • Parallel State: Ejecuta ramas de trabajo en paralelo

Step Functions utiliza un lenguaje propietario llamado Amazon State Language (ASL), similar a JSON, para definir las máquinas de estado. Puedes trabajar tanto en el editor visual como directamente con el código ASL.

¿Qué casos de uso son ideales para estos servicios?

Estos servicios son particularmente útiles en escenarios como:

  • Arquitecturas basadas en eventos: Donde los componentes reaccionan a eventos en lugar de comunicarse directamente.
  • Flujos de trabajo complejos: Como procesamiento de préstamos, donde se necesitan varios pasos (recopilación de información, evaluación de riesgo, aprobación, etc.).
  • Pipelines de machine learning: Donde se necesitan coordinar varios pasos de procesamiento de datos, entrenamiento y evaluación.
  • Microservicios: Para coordinar la comunicación entre diferentes servicios independientes.
  • Notificaciones multicanal: Enviar el mismo mensaje a través de diferentes canales (email, SMS, push).

En Nexia, por ejemplo, están implementando un nuevo producto de préstamos que requiere varios pasos: recopilar información de los usuarios, almacenarla, evaluar el riesgo y realizar otros procesos. Step Functions es ideal para este caso, ya que proporciona una forma visual de diseñar y monitorear todo el flujo de trabajo.

La combinación de SNS y Step Functions permite crear arquitecturas serverless robustas, escalables y fáciles de mantener, donde cada componente se enfoca en una tarea específica y la coordinación entre ellos se gestiona de manera eficiente.

¿Qué otros casos de uso se te ocurren para estos servicios? ¿Estás implementando arquitecturas basadas en eventos o flujos de trabajo complejos en tus proyectos? Comparte tu experiencia en los comentarios.