Qué es
Amazon SQS (Simple Queue Service) es un servicio de colas de mensajes sin servidores que gestionar. Un componente (el productor) envía mensajes a la cola y otro (el consumidor) los recoge cuando puede, los procesa y los borra. Así las dos partes quedan desacopladas: si el consumidor va lento o se cae, los mensajes esperan en la cola en lugar de perderse, y cada parte escala por su cuenta. Es uno de los servicios más antiguos de AWS y la pieza básica de las arquitecturas asíncronas.
Conceptos clave
- Modelo pull: los consumidores preguntan a la cola
(
ReceiveMessage); SQS no empuja los mensajes. Cada mensaje lo procesa un solo consumidor (a diferencia de SNS (Simple Notification Service), que reparte a todos). - Cola estándar: rendimiento casi ilimitado, entrega al menos una vez (puede llegar algún duplicado) y orden aproximado. La aplicación debe ser idempotente, es decir, procesar dos veces el mismo mensaje sin efectos indeseados.
- Cola FIFO (First In, First Out, el nombre acaba en
.fifo): orden estricto dentro de cada grupo de mensajes (MessageGroupId) y procesamiento exactamente una vez con deduplicación durante 5 minutos. Rendimiento más limitado, ampliable con el modo de alto rendimiento. - Tiempo de visibilidad: cuando un consumidor recibe un mensaje, este se oculta al resto durante ese tiempo (30 s por defecto, hasta 12 horas). Si no se borra antes de que venza, vuelve a la cola y otro consumidor lo recibe.
- Long polling: la llamada espera hasta 20 segundos a que llegue algo, en vez de volver vacía al instante. Reduce respuestas vacías y coste.
- Cola de mensajes fallidos (DLQ): tras un número máximo de intentos
(
maxReceiveCount), el mensaje pasa a otra cola para analizarlo sin bloquear al resto. Se puede devolver a la cola original con redrive. - Límites: mensajes de hasta 1 MiB; para cargas mayores (hasta 2 GB) se guarda el contenido en S3 (Simple Storage Service) y en la cola solo la referencia, con la biblioteca Extended Client. Retención de 1 minuto a 14 días (4 días por defecto). Retraso de entrega de hasta 15 minutos (delay queues).
- Integración con Lambda: un event source mapping lee la cola por lotes, invoca la función y borra los mensajes procesados; con respuestas parciales de lote solo se reintentan los mensajes que fallaron.
Casos de uso típicos
- Absorber picos: el frontal acepta pedidos al instante y los trabajadores los procesan a su ritmo.
- Repartir trabajo entre una flota de instancias o contenedores que escala según los mensajes pendientes.
- Procesamiento asíncrono con Lambda (miniaturas, correos, integraciones).
- Pedidos o transacciones que deben procesarse en orden por cliente (FIFO con
MessageGroupIdpor cliente). - Patrón fan-out junto a SNS: un tema reparte cada mensaje a varias colas.
Cuándo NO usarlo
- Si varios consumidores deben recibir el mismo mensaje: SNS o EventBridge (o SNS delante de varias colas).
- Si hay que releer los datos o mantener un flujo ordenado para varios lectores: Kinesis Data Streams o MSK (Managed Streaming for Apache Kafka).
- Si migras una aplicación que usa JMS (Java Message Service: API estándar de mensajería de Java), AMQP (Advanced Message Queuing Protocol: protocolo estándar de mensajería) o MQTT (Message Queuing Telemetry Transport: protocolo ligero de mensajería para dispositivos) sin reescribirla: Amazon MQ.
- Para orquestar pasos con estado, esperas y ramas: Step Functions.
Comparativa de mensajería
| Necesidad | Servicio adecuado |
|---|---|
| Cola: un consumidor por mensaje, desacoplar | SQS |
| Publicar y que lo reciban muchos suscriptores | SNS |
| Enrutar eventos por su contenido entre servicios y SaaS (software como servicio) | EventBridge |
| Streaming con varios lectores y relectura | Kinesis Data Streams |
| Protocolos estándar (JMS, AMQP, MQTT) en una migración | Amazon MQ |
| Flujos de varios pasos con estado | Step Functions |
Modelo de precios
Se paga por petición a la API (enviar, recibir, borrar…), contando cada bloque de 64 KB de la carga como una petición, con un nivel gratuito mensual. FIFO cuesta algo más que estándar. Se suma la transferencia de datos de salida. Recibir por lotes (hasta 10 mensajes) y usar long polling reduce mucho el número de peticiones.
Seguridad y alta disponibilidad
- Mensajes guardados de forma redundante en varias zonas de disponibilidad.
- Cifrado en reposo con SSE-SQS (claves gestionadas por SQS) o con claves de KMS (Key Management Service).
- Políticas de acceso de la cola (por ejemplo, permitir solo a un tema SNS concreto enviar mensajes) además de IAM (Identity and Access Management).
- Endpoint de VPC (Virtual Private Cloud) para usar SQS sin salir a internet.
Trampas de examen
- "Desacoplar" o "absorber picos" entre componentes: SQS.
- "Orden estricto" o "sin duplicados": cola FIFO.
- "Un mensaje se procesa dos veces": el tiempo de visibilidad es menor que lo que tarda el procesamiento; auméntalo (o amplíalo con
ChangeMessageVisibility). - "Muchas respuestas vacías y coste alto": long polling.
- "Un mensaje erróneo bloquea o se reintenta sin fin": cola de mensajes fallidos (DLQ).
- "Mensajes de varios MB": guardar en S3 y enviar la referencia (Extended Client).
- "Escalar los trabajadores según la cola": Auto Scaling con la métrica de mensajes pendientes por instancia.
- "Un evento debe llegar a varios sistemas": SNS con varias colas suscritas (fan-out), no una sola cola.
Preguntas de práctica
Preguntas originales escritas para estos apuntes. No son preguntas reales de examen.
Fuentes
- What is Amazon Simple Queue Service?, documentación de AWS (consultada el 26/09/2026).
- Amazon SQS visibility timeout, documentación de AWS (consultada el 26/09/2026).
- Using dead-letter queues in Amazon SQS, documentación de AWS (consultada el 26/09/2026).
- FIFO queue and message identifiers in Amazon SQS, documentación de AWS (consultada el 26/09/2026).
- Amazon SQS increases maximum message payload size to 1 MiB, documentación de AWS (consultada el 26/09/2026).