amazon simple queue service · 2020-03-11 · servidores. las colas estándar admiten la entrega de...

259
Amazon Simple Queue Service Guía para desarrolladores

Upload: others

Post on 07-Apr-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue ServiceGuía para desarrolladores

Page 2: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Amazon Simple Queue Service: Guía para desarrolladoresCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Table of Contents¿Qué es Amazon SQS? ...................................................................................................................... 1

¿Cuáles son los principales beneficios de Amazon SQS? ................................................................. 1¿En qué se diferencia Amazon SQS de Amazon MQ o Amazon SNS? ............................................... 2¿Qué tipo de cola necesito? ........................................................................................................ 2¿Cómo puedo comenzar a utilizar Amazon SQS? ........................................................................... 3Esperamos tener noticias suyas ................................................................................................... 3

Configuración ..................................................................................................................................... 4Paso 1: Cree una cuenta de AWS ................................................................................................ 4Paso 2: Cree un usuario de IAM .................................................................................................. 4Paso 3: Obtener su ID de clave de acceso y la clave de acceso secreta ............................................. 5Paso 4: Prepararse para usar el código de ejemplo ......................................................................... 6Pasos siguientes ........................................................................................................................ 6

Introducción ....................................................................................................................................... 7Requisitos previos ...................................................................................................................... 7Paso 1: Creación de una cola ...................................................................................................... 7Paso 2: Envío de un mensaje ...................................................................................................... 8Paso 3: Recepción y eliminación del mensaje ............................................................................... 10Paso 4: Eliminación de la cola .................................................................................................... 12Pasos siguientes ....................................................................................................................... 13

Tutoriales ......................................................................................................................................... 15Creación de colas ..................................................................................................................... 15

Creación de una cola ........................................................................................................ 15Creación de una cola con SSE ........................................................................................... 19

Mostrar todas las colas .............................................................................................................. 23Consola de administración de AWS ..................................................................................... 23AWS SDK for Java ........................................................................................................... 23

Adición de permisos a una cola .................................................................................................. 24Consola de administración de AWS ..................................................................................... 24

Añadir, actualizar y quitar etiquetas de una cola ............................................................................ 27Consola de administración de AWS ..................................................................................... 27AWS SDK for Java ........................................................................................................... 28

Envío de mensajes ................................................................................................................... 28Envío de un mensaje ........................................................................................................ 29Envío de un mensaje con atributos ...................................................................................... 32Envío de un mensaje con un temporizador ........................................................................... 38Envío de mensajes desde una VPC .................................................................................... 41

Recepción y eliminación de mensajes .......................................................................................... 45Consola de administración de AWS ..................................................................................... 46AWS SDK for Java ........................................................................................................... 48

Suscripción de una cola a un tema ............................................................................................. 50Consola de administración de AWS ..................................................................................... 51

Configuración de un disparador de Lambda .................................................................................. 53Requisitos previos ............................................................................................................. 53Consola de administración de AWS ..................................................................................... 53

Depuración de una cola ............................................................................................................. 55Consola de administración de AWS ..................................................................................... 56

Eliminación de una cola ............................................................................................................. 57Consola de administración de AWS ..................................................................................... 57AWS SDK for Java ........................................................................................................... 58

Configuración de colas .............................................................................................................. 59Configuración de SSE para una cola ................................................................................... 59Configuración de sondeos largos para una cola ..................................................................... 62Configuración de una cola de mensajes fallidos ..................................................................... 65Configuración del tiempo de espera de visibilidad de una cola ................................................. 69

iii

Page 4: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Configuración de una cola con retraso de Amazon SQS ......................................................... 73Funcionamiento de Amazon SQS ........................................................................................................ 77

Arquitectura básica .................................................................................................................... 77Colas distribuidas .............................................................................................................. 77Ciclo de vida del mensaje .................................................................................................. 78

Colas Estándar ......................................................................................................................... 80Ordenación de los mensajes .............................................................................................. 80Al menos una entrega ....................................................................................................... 80Ejemplo funcional en Java de colas Estándar ........................................................................ 81

Colas FIFO .............................................................................................................................. 83Ordenación de los mensajes .............................................................................................. 84Términos clave ................................................................................................................. 84FIFO Lógica de entrega ..................................................................................................... 85Procesamiento único ......................................................................................................... 86Pasar de una cola de Estándar a una cola de FIFO ............................................................... 86Compatibilidad .................................................................................................................. 87Ejemplo funcional en Java de colas FIFO ............................................................................. 87

Identificadores de colas y mensajes ............................................................................................ 90Identificadores de colas Estándar y FIFO ............................................................................. 90Identificadores adicionales para las colas FIFO ..................................................................... 91

Metadatos de mensajes ............................................................................................................. 91Atributos de mensajes ....................................................................................................... 92Atributos del sistema de mensajes ...................................................................................... 94

Recursos necesarios para procesar mensajes ............................................................................... 95Etiquetas de asignación de costos .............................................................................................. 95Sondeos cortos y largos ............................................................................................................ 96

Consumo de mensajes mediante sondeo corto ...................................................................... 96Consumo de mensajes utilizando sondeos largos .................................................................. 97Diferencias entre el sondeo corto y el sondeo largo ............................................................... 98

Colas de mensajes fallidos ......................................................................................................... 98Funcionamiento de las colas de mensajes fallidos ................................................................. 98¿Cuáles son los beneficios de las colas de mensajes fallidos? ................................................. 99¿Cómo los diferentes tipos de cola gestionan los errores en los mensajes? ................................ 99¿Cuándo debo usar una cola de mensajes fallidos? ............................................................. 100Solución de problemas de las colas de mensajes fallidos ...................................................... 100

Tiempo de espera de visibilidad ................................................................................................ 101Mensajes en tránsito ....................................................................................................... 102Configuración del tiempo de espera de visibilidad ................................................................ 103Cambio del tiempo de espera de visibilidad de un mensaje .................................................... 103Finalización del tiempo de espera de visibilidad de un mensaje .............................................. 103

Colas con retraso .................................................................................................................... 104Colas temporales .................................................................................................................... 104

Colas virtuales ................................................................................................................ 105Patrón de mensajes de respuesta a solicitudes (colas virtuales) ............................................. 106Situación de ejemplo: Procesamiento de una solicitud de inicio de sesión ................................. 107Limpieza de colas ........................................................................................................... 108

Temporizadores de mensajes ................................................................................................... 108Administración de mensajes grandes ......................................................................................... 109

Ejemplo funcional de Java sobre el uso de Amazon S3 ........................................................ 109Uso de JMS ........................................................................................................................... 112

Requisitos previos ........................................................................................................... 113Introducción a Biblioteca de mensajería para Java ............................................................... 114Uso de Cliente de JMS con otros clientes de Amazon SQS ................................................... 119Ejemplo funcional de Java sobre el uso de JMS con colas Estándar de Amazon SQS ................. 120Implementaciones de JMS 1.1 admitidas ............................................................................ 134

Prácticas recomendadas .................................................................................................................. 136Recomendaciones para las colas Estándar y FIFO ....................................................................... 136

iv

Page 5: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Uso de los mensajes ....................................................................................................... 136Reducción de costos ....................................................................................................... 138Pasar de una cola de Estándar a una cola de FIFO ............................................................. 139

Recomendaciones adicionales para las colas FIFO ...................................................................... 139Uso del ID de desduplicación de mensajes ......................................................................... 140Uso del ID de grupo de mensajes ..................................................................................... 141Uso del ID de intento de solicitud de recepción ................................................................... 142

Cuotas ........................................................................................................................................... 143Cuotas relacionadas con las colas ............................................................................................. 143Cuotas relacionadas con los mensajes ....................................................................................... 144Cuotas relacionadas con las políticas ......................................................................................... 145

Automatización y solución de problemas ............................................................................................ 147Automatización de notificaciones mediante Eventos de CloudWatch ................................................ 147Solución de problemas de colas con X-Ray ................................................................................ 147

Seguridad ...................................................................................................................................... 149Protección de los datos ............................................................................................................ 149

Cifrado de datos ............................................................................................................. 149Privacidad del tráfico entre redes ...................................................................................... 156

Identity and Access Management .............................................................................................. 158Autenticación .................................................................................................................. 158Control de acceso ........................................................................................................... 160Información general ......................................................................................................... 160Uso de políticas basadas en identidad ............................................................................... 166Uso de políticas personalizadas con el Access Policy Language ............................................. 174Usar credenciales de seguridad temporales ........................................................................ 185Referencia de permisos de la API ..................................................................................... 186

Registro y monitorización ......................................................................................................... 188Registro de llamadas a la API mediante CloudTrail .............................................................. 189Monitoreo de colas con CloudWatch .................................................................................. 193

Validación de la conformidad .................................................................................................... 201Resiliencia .............................................................................................................................. 201

Colas distribuidas ............................................................................................................ 201Seguridad de la infraestructura .................................................................................................. 202Prácticas recomendadas .......................................................................................................... 202

Prácticas recomendadas preventivas .................................................................................. 203Trabajo con las API ......................................................................................................................... 205

Realizar solicitudes de la API de consulta ................................................................................... 205Construcción de un punto de enlace .................................................................................. 205Realizar una solicitud GET ............................................................................................... 206Realizar una solicitud POST ............................................................................................. 206Autenticación de solicitudes .............................................................................................. 207Interpretación de las respuestas ........................................................................................ 210

Acciones de procesamiento por lotes ......................................................................................... 211Habilitación del almacenamiento en búfer del lado del cliente y del agrupamiento en lotes desolicitudes ...................................................................................................................... 212Aumento del desempeño mediante el escalado horizontal y agrupación en lotes de acciones dela .................................................................................................................................. 216

Recursos relacionados ..................................................................................................................... 226Notas de la versión ......................................................................................................................... 227

Historial de revisión ................................................................................................................. 234AWS Glossary ................................................................................................................................ 254

v

Page 6: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores¿Cuáles son los principales beneficios de Amazon SQS?

¿Qué es Amazon Simple QueueService?

Amazon Simple Queue Service (Amazon SQS) dispone de una cola alojada que es segura y disponibleque le permite integrar y desacoplar sistemas y componentes de software distribuidos. Amazon SQScuenta con constructores comunes, como colas de mensajes fallidos (p. 98) y etiquetas de asignaciónde costos (p. 95). Proporciona una API de servicios web genérica a la que se puede obtener accesomediante cualquier lenguaje de programación que admita el SDK de AWS.

Amazon SQS admite tanto colas estándar (p. 80) como colas FIFO (p. 83). Para obtener másinformación, consulte ¿Qué tipo de cola necesito? (p. 2)

Temas• ¿Cuáles son los principales beneficios de Amazon SQS? (p. 1)• ¿En qué se diferencia Amazon SQS de Amazon MQ o Amazon SNS? (p. 2)• ¿Qué tipo de cola necesito? (p. 2)• ¿Cómo puedo comenzar a utilizar Amazon SQS? (p. 3)• Esperamos tener noticias suyas (p. 3)

¿Cuáles son los principales beneficios de AmazonSQS?

• Seguridad: usted controla (p. 158) quién puede enviar mensajes a la cola de Amazon SQS o recibirlosde ella.

Cifrado en el servidor (SSE) (p. 149) le permite transferir información confidencial mediante laprotección del contenido de los mensajes en las colas mediante claves administradas en AWS KeyManagement Service (AWS KMS).

• Durabilidad: para garantizar la seguridad de los mensajes, Amazon SQS los guarda en diferentesservidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientrasque las colas FIFO admiten el procesamiento único de mensajes (p. 86).

• Disponibilidad: Amazon SQS utiliza una infraestructura redundante (p. 77) para proporcionar accesoaltamente recurrente a los mensajes y una elevada disponibilidad para producir y consumir mensajes.

• Escalabilidad: Amazon SQS puede procesar cada solicitud almacenada en el búfer (p. 212) de formaindependiente y escalar de forma transparente para administrar cualquier pico o aumento de la carga sininstrucciones de aprovisionamiento.

• Fiabilidad: Amazon SQS bloque los mensajes durante el procesamiento, de forma que variosproductores pueden enviar mensajes mientras varios consumidores reciben mensajes al mismo tiempo.

• Personalización: las consultas no tienen que ser exactamente iguales; por ejemplo, puede establecer unretraso predeterminado en una cola (p. 104). Puede almacenar el contenido de los mensajes con untamaño superior a 256 KB utilizando Amazon Simple Storage Service (Amazon S3) (p. 109) o AmazonDynamoDB (donde Amazon SQS mantiene un puntero que señala al objeto de Amazon S3) o puededividir los mensajes grandes en mensajes más pequeños.

1

Page 7: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores¿En qué se diferencia Amazon SQS

de Amazon MQ o Amazon SNS?

¿En qué se diferencia Amazon SQS de AmazonMQ o Amazon SNS?

Amazon SQS y Amazon SNS son servicios de colas y temas que tienen una gran escalabilidad, resultanfáciles de usar y no requieren que se configuren agentes de mensajes. Recomendamos estos serviciospara las aplicaciones nuevas que pueden beneficiarse de una escalabilidad casi ilimitada y API sencillas.

Amazon MQ es un servicio de agente de mensajes administrado que proporciona compatibilidadcon muchos de los agentes de mensajes más populares. Recomendamos Amazon MQ para migraraplicaciones desde agentes de mensajes existentes que dependen de la compatibilidad con las API, comoJMS, o los protocolos, como AMQP, MQTT, OpenWire y STOMP.

¿Qué tipo de cola necesito?Cola de Estándar Cola de FIFO

Rendimiento ilimitado: Las colas Estándar admitenun número casi ilimitado de transaccionespor segundo (TPS) para cada acción de laAPI (SendMessage, ReceiveMessage oDeleteMessage).

Al menos una entrega: los mensajes se entregan almenos una vez, aunque en ocasiones se entreganvarias copias el mensaje.

Orden para optimizar el esfuerzo: en ocasiones, losmensajes se entregan en un orden distinto al quese enviaron.

Alto rendimiento: De forma predeterminada,con el procesamiento por lotes (p. 211), lascolas FIFO admiten hasta 3000 mensajes porsegundo (TPS), por acción de API (SendMessage,ReceiveMessage o DeleteMessage). Parasolicitar un aumento de la cuota, envíe unasolicitud de soporte técnico. Sin procesamiento porlotes, las colas FIFO admiten hasta 300 mensajespor segundo, por acción de API (SendMessage,ReceiveMessage o DeleteMessage).

Procesamiento único: los mensajes se envían unavez y permanecen disponibles hasta que el clientelos procesa y elimina. No se introducen duplicadosen la cola.

Entrega donde el primero en entrar es el primeroen salir: el orden en que se enviaron los mensajesse mantiene estrictamente.

Envíe datos entre aplicaciones cuando eldesempeño sea importante, por ejemplo:

• Desacoplar solicitudes de usuario en tiemporeal de un trabajo en segundo plano intensivo:permitir a los usuarios cargar archivosmultimedia mientras cambia el tamaño o secodifican.

• Asignar tareas para múltiples nodos de trabajo:procesar un elevado número de solicitudes devalidación de tarjetas de crédito.

Envíe datos entre aplicaciones cuando el orden delos eventos sea importante, por ejemplo:

• Para garantizar que los comandos introducidospor el usuario se ejecutan en el orden correcto.

• Para mostrar el precio correcto del productoenviando las modificaciones de precios en elorden adecuado.

2

Page 8: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores¿Cómo puedo comenzar a utilizar Amazon SQS?

Cola de Estándar Cola de FIFO• Agrupar mensajes para procesarlos más

adelante: programar varias entradas paraañadirlas a una base de datos.

• Para evitar que un estudiante se matricule enun curso antes de registrarse para obtener unacuenta.

¿Cómo puedo comenzar a utilizar Amazon SQS?• Para crear la primera cola con Amazon SQS y enviar, recibir y eliminar un mensaje, consulte

Introducción a Amazon SQS (p. 7).• Para activar una función Lambda, consulte Configuración de mensajes que llegan a una cola de Amazon

SQS para activar una función de Lambda (p. 53).• Para obtener más información sobre la funcionalidad y la arquitectura de Amazon SQS, consulte

Funcionamiento de Amazon SQS (p. 77).• Para obtener instrucciones y advertencias que le ayudarán a sacar el máximo partido de Amazon SQS,

consulte Prácticas recomendadas para Amazon SQS (p. 136).• Para obtener información acerca de las acciones de Amazon SQS, consulte la Amazon Simple Queue

Service API Reference.• Para obtener más información sobre los comandos de la Amazon SQS de AWS CLI, consulte Amazon

SQS en la AWS CLI Command Reference.

Esperamos tener noticias suyasAgradecemos sus comentarios. Para ponerse en contacto con nosotros, visite el foro de debate deAmazon SQS.

3

Page 9: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 1: Cree una cuenta de AWS

Configuración de Amazon SQSPara poder usar Amazon SQS por primera vez, debe completar los pasos siguientes.

Paso 1: Cree una cuenta de AWSPara obtener acceso a cualquier servicio de AWS, primero debe crear una cuenta de AWS, que es unacuenta de Amazon.com que puede utilizar productos de AWS. Puede utilizar su cuenta de AWS para verlos informes de actividad y uso y para administrar la autenticación y el acceso.

Para no tener que utilizar el usuario raíz de la cuenta de AWS con las acciones de Amazon SQS, serecomienda crear un usuario de IAM para cada persona que necesite acceso administrativo a AmazonSQS.

Para configurar una nueva cuenta

1. Abra https://portal.aws.amazon.com/billing/signup.2. Siga las instrucciones en línea.

Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e indicar un código deverificación en el teclado del teléfono.

Paso 2: Cree un usuario de IAMPara crearse usted mismo un usuario administrador y agregarlo a un grupo de administradores(consola)

1. Utilice la dirección de correo electrónico y la contraseña de su cuenta de AWS para iniciar sesióncomo Usuario de la cuenta raíz de AWS en la consola de IAM en https://console.aws.amazon.com/iam/.

Note

Le recomendamos que siga la práctica recomendada de utilizar el usuario de IAMAdministrator como se indica a continuación y guardar de forma segura las credencialesde usuario raíz. Inicie sesión como usuario raíz únicamente para realizar algunas tareas deadministración de servicios y de cuentas.

2. En el panel de navegación, elija Users (Usuarios) y, a continuación, elija Add user (Añadir usuario).3. En User name (Nombre de usuario), escriba Administrator.4. Marque la casilla situada junto a Consola de administración de AWS access (Acceso a la Consola de

administración de AWS). A continuación, seleccione Custom password (Contraseña personalizada) yluego escriba la nueva contraseña en el cuadro de texto.

5. (Opcional) De forma predeterminada, AWS requiere al nuevo usuario que cree una nueva contraseñala primera vez que inicia sesión. Puede quitar la marca de selección de la casilla de verificaciónsituada junto a User must create a new password at next sign-in (El usuario debe crear una nuevacontraseña en el siguiente inicio de sesión) para permitir al nuevo usuario restablecer su contraseñadespués de iniciar sesión.

6. Elija Next: Permissions.

4

Page 10: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 3: Obtener su ID de clave de

acceso y la clave de acceso secreta

7. En Set permissions (Establecer persmisos), elija Add user to group (Añadir usuario a grupo).8. Elija Create group (Crear grupo).9. En el cuadro de diálogo Create group (Crear grupo), en Group name (Nombre del grupo) escriba

Administrators.10. Elija Filter policies (Filtrar políticas) y, a continuación, seleccione AWS managed -job function (Función

de trabajo administrada por AWS) para filtrar el contenido de la tabla.11. En la lista de políticas, active la casilla de verificación AdministratorAccess. A continuación, elija

Create group (Crear grupo).

Note

Debe activar el acceso de usuarios y roles de IAM a Facturación para poder utilizar la lospermisos AdministratorAccess para el acceso a la consola de AWS Billing and CostManagement. Para ello, siga las instrucciones que se indican en el paso 1 del tutorial sobrecómo delegar el acceso a la consola de facturación.

12. Retroceda a la lista de grupos y active la casilla de verificación del nuevo grupo. Elija Refresh si esnecesario para ver el grupo en la lista.

13. Elija Next: Tags (Siguiente: Etiquetas).14. (Opcional) Añadir metadatos al rol asociando las etiquetas como pares de clave-valor. Para obtener

más información sobre el uso de etiquetas en IAM, consulte Etiquetado de entidades de IAM en laGuía del usuario de IAM.

15. Elija Next: Review para ver la lista de suscripciones a grupos que se van a añadir al nuevo usuario.Cuando esté listo para continuar, elija Create user (Crear usuario).

Puede usar este mismo proceso para crear más grupos y usuarios y para conceder a los usuarios accesoa los recursos de la cuenta de AWS. Para obtener información sobre cómo usar las políticas que restringenlos permisos de los usuarios a recursos de AWS específicos, consulte Administración de acceso y Políticasde ejemplo.

Paso 3: Obtener su ID de clave de acceso y laclave de acceso secreta

Para utilizar acciones de Amazon SQS (por ejemplo, mediante Java o a través de la AWS Command LineInterface), necesita un ID de clave de acceso y una clave de acceso secreta.

Note

La clave de acceso secreta y el ID de clave de acceso son específicos de AWS Identity andAccess Management. No los confunda con las credenciales de otros servicios de AWS, como lospares de claves de Amazon EC2.

Las claves de acceso constan de un ID de clave de acceso y una clave de acceso secreta, que se utilizanpara firmar mediante programación las solicitudes que realiza a AWS. Si no tiene claves de acceso, puedecrearlas desde la Consola de administración de AWS. Como práctica recomendada, no utilice las clavesde acceso de Usuario de la cuenta raíz de AWS para realizar ninguna tarea en la que no sea necesariousarlas. En su lugar, cree un nuevo usuario de IAM administrador con claves de acceso para usted.

El único momento en que puede ver o descargar la clave de acceso secreta es cuando crea las claves.No puede recuperarlas más adelante. Sin embargo, puede crear nuevas claves de acceso en cualquiermomento. También debe tener permisos para realizar las acciones de IAM requeridas. Para obtener másinformación, consulte Permisos obligatorios para obtener acceso a recursos de IAM en la Guía del usuariode IAM.

5

Page 11: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 4: Prepararse para usar el código de ejemplo

Para crear claves de acceso para un usuario de IAM

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://console.aws.amazon.com/iam/.

2. En el panel de navegación, seleccione Users.3. Seleccione el nombre del usuario cuyas claves de acceso desee crear y, a continuación, elija la

pestaña Security credentials (Credenciales de seguridad).4. En la sección Access keys (Claves de acceso), elija Create access key (Crear clave de acceso).5. Para ver el nuevo par de claves de acceso, elija Show (Mostrar). No podrá obtener acceso de nuevo

a la clave de acceso secreta cuando este cuadro de diálogo se cierre. Sus credenciales tendrán elaspecto siguiente:

• ID de clave de acceso: AKIAIOSFODNN7EXAMPLE• Clave de acceso secreta: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

6. Para descargar el par de claves, elija Download .csv file (Descargar archivo .csv). Almacene las clavesen un lugar seguro. No podrá obtener acceso de nuevo a la clave de acceso secreta cuando estecuadro de diálogo se cierre.

Mantenga las claves en secreto para proteger su cuenta de AWS y no las envíe nunca por correoelectrónico. No las comparta fuera de su organización, aunque reciba una petición que parezcaprovenir de AWS o Amazon.com. Nadie que represente legítimamente a Amazon le pedirá nunca suclave secreta.

7. Cuando descargue el archivo .csv, elija Close (Cerrar). Cuando cree una clave de acceso, el par declaves se activa de forma predeterminada, y puede utilizarlo de inmediato.

Temas relacionados

• ¿Qué es IAM? en la Guía del usuario de IAM• Credenciales de seguridad de AWS en AWS General Reference

Paso 4: Prepararse para usar el código de ejemploEn esta guía se muestra cómo trabajar con Amazon SQS usando la Consola de administración de AWS yJava. Si quiere usar el código de ejemplo, debe instalar Java Standard Edition Development Kit y efectuaralgunos cambios de configuración en el código de ejemplo.

Puede escribir código en otros lenguajes de programación. Para obtener más información, consulte ladocumentación de los SDK de AWS.

Note

Puede explorar Amazon SQS sin escribir un código con herramientas como la AWS CommandLine Interface (AWS CLI) o Windows PowerShell. Encontrará ejemplos de AWS CLI en lasección de Amazon SQS de la AWS CLI Command Reference. Encontrará ejemplos de WindowsPowerShell en la sección de Amazon Simple Queue Service de la Herramientas de AWS paraPowerShell Cmdlet Reference.

Pasos siguientesAhora que ya está preparado para trabajar con Amazon SQS, puede comenzar (p. 7) a administrarcolas y mensajes de Amazon SQS con la Consola de administración de AWS. También puede probar lostutoriales (p. 15) de Amazon SQS más avanzados.

6

Page 12: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRequisitos previos

Introducción a Amazon SQSEsta sección le ayuda a familiarizarse con Amazon SQS al mostrarle cómo administrar las colas y losmensajes con la Consola de administración de AWS.

Requisitos previosAntes de comenzar, complete los pasos de Configuración de Amazon SQS (p. 4).

Paso 1: Creación de una colaLa primera tarea, y la más habitual, en Amazon SQS es la creación de colas. En este tutorial, aprenderá acrear y configurar una cola.

1. Inicie sesión en la consola de Amazon SQS.2. Elija Create New Queue (Crear nueva cola).3. En la página Create New Queue (Crear nueva cola), asegúrese de que está en la región correcta y, a

continuación, escriba el Queue Name (Nombre de la cola).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.4. Estándar está seleccionado de forma predeterminada. Elija FIFO.5. Para crear una cola con los parámetros predeterminados, elija Quick-Create Queue (Creación rápida

de cola).

La nueva cola se crea y se selecciona en la lista de colas.

Note

Cuando crea una cola, puede llevar un tiempo su propagación completa en Amazon SQS.

La columna Queue Type (Tipo de cola) ayuda a distinguir las colas estándar de las colas FIFO asimple vista. Con una cola FIFO, la columna Content-Based Deduplication (Desduplicación basada encontenido) muestra si exactly-once processing (Procesamiento exactamente una vez) (p. 86) estáhabilitado.

El Name (Nombre), URL y ARN de la cola se muestran en la pestaña Details (Detalles).

7

Page 13: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 2: Envío de un mensaje

Paso 2: Envío de un mensajeUna vez creada la cola, puede enviarle un mensaje. En el ejemplo siguiente, se muestra cómo se envía unmensaje a una cola existente.

1. En la lista de colas, seleccione la que ha creado.

2. En Queue Actions (Acciones de cola), seleccione Send a Message (Enviar un mensaje).

Se muestra el cuadro de diálogoSend a Message to QueueName (Enviar un mensaje a[nombre de cola]).

En el ejemplo siguiente se muestran los parámetros Message Group ID (ID de grupo de mensaje)y Message Deduplication ID (ID de desduplicación de mensaje) específicos de las colas FIFO (ladesduplicación basada en contenido (p. 86) está deshabilitada).

8

Page 14: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 2: Envío de un mensaje

3. Para enviar un mensaje a un FIFO, escriba el Message Body (Cuerpo del mensaje), el MessageGroup ID (ID de grupo de mensaje)MyMessageGroupId1234567890 y el Message Deduplication ID(ID de desduplicación de mensaje)MyMessageDeduplicationId1234567890 y elija Send Message(Enviar mensaje). Para obtener más información, consulte FIFO Lógica de entrega (p. 85).

Note

El ID de grupo de mensajes siempre se requiere. Sin embargo, si la desduplicación basadaen contenido está habilitada, el ID de desduplicación de mensajes es opcional.

El mensaje se envía y se muestra el cuadro de diálogo Send a Message to QueueName (Enviar unmensaje a [nombre de cola], que muestra los atributos del mensaje enviado.

En el ejemplo siguiente se muestra el atributo Sequence Number (Número de secuencia) específicode las colas FIFO.

9

Page 15: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 3: Recepción y eliminación del mensaje

4. Elija Close (Cerrar).

Paso 3: Recepción y eliminación del mensajeDespués de enviar un mensaje a una cola, puede consumirlo (recuperarla de la cola). Cuando solicitaun mensaje de una cola, no puede especificar qué mensaje obtiene. En cambio, especifique el númeromáximo de mensajes (hasta 10) que quiere obtener.

En este tutorial, aprenderá a recibir y eliminar un mensaje.

1. En la lista de colas, seleccione la que acaba de crear.2. En Queue Actions (Acciones de cola), seleccione View/Delete Messages (Ver/Eliminar mensajes).

Se muestra el cuadro de diálogo View/Delete Messages (Ver/Eliminar mensajes) en el cuadro dediálogo QueueName.

Note

La primera vez que emprende esta acción, se muestra una pantalla de información. Paraocultar la pantalla, seleccione Don't show this again (No mostrar esto de nuevo).

10

Page 16: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 3: Recepción y eliminación del mensaje

3. Elija Start Polling for messages (Comenzar el sondeo de mensajes).

Amazon SQS comienza a sondear los mensajes de la cola. El cuadro de diálogo muestra un mensajede la cola. Una barra de progreso en la parte inferior del cuadro de diálogo muestra el estado deltiempo de espera de visibilidad del mensaje.

En el ejemplo siguiente se muestran las columnas Message Group ID (ID de grupo de mensajes),Message Deduplication ID (ID de desduplicación de mensajes) y Sequence Number (Número desecuencia) específicas de las colas FIFO.

Note

Cuando la barra de progreso se completa, el tiempo de espera de visibilidad (p. 101)termina y el mensaje se vuelve visible para los consumidores.

4. Antes de que termine el tiempo de espera de visibilidad, seleccione el mensaje que quiere eliminar ydespués elija Delete 1 Message (Eliminar 1 mensaje).

11

Page 17: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPaso 4: Eliminación de la cola

5. En el cuadro de diálogo Delete Messages (Eliminar mensajes), confirme que el mensaje que quiereeliminar está marcado y elija Yes, Delete Checked Messages (Sí, eliminar los mensajes marcados).

Se eliminará el mensaje seleccionado.6. Seleccione Close (Cerrar).

Paso 4: Eliminación de la colaSi no utiliza una cola de Amazon SQS (y no prevé usarla en un futuro cercano), se recomienda eliminarlade Amazon SQS. En este tutorial, aprenderá a eliminar una cola.

12

Page 18: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPasos siguientes

1. En la lista de colas, seleccione la que acaba de crear.

2. En Queue Actions (Acciones de cola), seleccione Delete Queue (Eliminar cola).

Se muestra el cuadro de diálogo Delete Queues (Eliminar colas).

3. Elija Yes, Delete Queues (Sí, eliminar colas).

La cola se elimina.

Pasos siguientesAhora que ha creado una cola y ha aprendido a enviar, recibir y eliminar mensajes y cómo eliminar unacola, es posible que desee probar lo siguiente:

13

Page 19: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPasos siguientes

• Habilitación de cifrado en el servidor (SSE) para una nueva cola (p. 19) o configurar SSE para unacola existente. (p. 59)

• Adición de permisos a una cola. (p. 24)• Añadir, actualizar o quitar etiquetas de una cola. (p. 27)• Configurar el sondeo largo para una cola. (p. 62)• Enviar un mensaje con atributos. (p. 32)• Enviar un mensaje con un temporizador. (p. 38)• Enviar un mensaje desde una VPC. (p. 41)• Configurar una cola de mensajes fallidos. (p. 65)• Configurar el tiempo de espera de visibilidad de una cola. (p. 69)• Configurar una cola con retraso. (p. 73)• Suscripción de una cola a un tema de Amazon SNS. (p. 50)• Configurar mensajes entrantes en una cola para activar una función de Lambda. (p. 53)• Purgado de una cola. (p. 55)• Obtenga más información acerca de los flujos de trabajo y los procesos de Amazon SQS: lea Cómo

funcionan las colas (p. 77), Prácticas recomendadas (p. 136) y Cuotas (p. 143). También puedeexplorar los Artículos y tutoriales de Amazon SQS. Si tiene alguna pregunta, examine la lista depreguntas frecuentes de Amazon SQS o participe en los foros para desarrolladores de Amazon SQS.

• Aprenda a interactuar con Amazon SQS mediante programación: lea Trabajo con las API (p. 205) yexplore Código de muestra y bibliotecas y los centros de desarrolladores:• Java• JavaScript• PHP• Python• Ruby• Windows y .NET

• Obtenga información sobre cómo controlar los costos y los recursos en la sección Automatización ysolución de problemas de Amazon SQS (p. 147).

• Obtenga información sobre la protección de los datos y el acceso a ellos en la secciónSeguridad (p. 149).

14

Page 20: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de colas

Tutoriales de Amazon SQSEn esta guía se muestra cómo trabajar con Amazon SQS usando la Consola de administración de AWS yJava. Si quiere usar el código de ejemplo, debe instalar Java Standard Edition Development Kit y efectuaralgunos cambios de configuración en el código de ejemplo.

Puede escribir código en otros lenguajes de programación. Para obtener más información, consulte ladocumentación de los SDK de AWS.

Note

Puede explorar Amazon SQS sin escribir un código con herramientas como la AWS CommandLine Interface (AWS CLI) o Windows PowerShell. Encontrará ejemplos de AWS CLI en lasección de Amazon SQS de la AWS CLI Command Reference. Encontrará ejemplos de WindowsPowerShell en la sección de Amazon Simple Queue Service de la Herramientas de AWS paraPowerShell Cmdlet Reference.

Temas• Tutoriales: Creación de colas de Amazon SQS (p. 15)• Tutorial: Mostrar todas las colas de Amazon SQS de una región (p. 23)• Tutorial: Adición de permisos a una cola de Amazon SQS (p. 24)• Tutorial: Añadir, actualizar y quitar etiquetas de asignación de costos en una cola de Amazon

SQS (p. 27)• Tutoriales: Envío de mensajes a colas de Amazon SQS (p. 28)• Tutorial: Recepción y eliminación de mensajes de una cola de Amazon SQS (p. 45)• Tutorial: Suscripción de una cola de Amazon SQS a un tema de Amazon SNS (p. 50)• Tutorial: Configuración de mensajes que llegan a una cola de Amazon SQS para activar una función

de AWS Lambda (p. 53)• Tutorial: Depuración de mensajes de una cola de Amazon SQS (p. 55)• Tutorial: Eliminación de una cola de Amazon SQS (p. 57)• Tutoriales: Configuración de colas de Amazon SQS (p. 59)

Tutoriales: Creación de colas de Amazon SQSEn los siguientes tutoriales, se explican distintos mecanismos para crear colas de Amazon SQS.

Temas• Tutorial: Creación de una cola de Amazon SQS (p. 15)• Tutorial: Creación de una cola de Amazon SQS con Cifrado en el servidor (SSE) (p. 19)

Tutorial: Creación de una cola de Amazon SQSLa primera tarea, y la más habitual, en Amazon SQS es la creación de colas. En este tutorial, aprenderá acrear y configurar una cola.

Temas

15

Page 21: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de una cola

• Consola de administración de AWS (p. 16)• AWS SDK for Java (p. 17)• AWS CloudFormation (p. 18)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. Elija Create New Queue (Crear nueva cola).3. En la página Create New Queue (Crear nueva cola), asegúrese de que está en la región correcta y, a

continuación, escriba el Queue Name (Nombre de la cola).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.4. Estándar está seleccionado de forma predeterminada. Elija FIFO.5. Cree la cola.

• Para crear una cola con los parámetros predeterminados, elija Quick-Create Queue (Creaciónrápida de cola).

• Para configurar los parámetros de la cola, elija Configure Queue (Configurar cola). Cuando terminede configurar los parámetros, elija Create Queue (Crear cola). Para obtener más informaciónacerca de la creación de una cola con SSE, consulte Creación de una cola de Amazon SQS conSSE (p. 19).

En el ejemplo siguiente se muestra el parámetro Content-Based Deduplication (Desduplicaciónbasada en contenido) específico de las colas FIFO.

La nueva cola se crea y se selecciona en la lista de colas.

Note

Cuando crea una cola, puede llevar un tiempo su propagación completa en Amazon SQS.

La columna Queue Type (Tipo de cola) ayuda a distinguir las colas estándar de las colas FIFO asimple vista. Con una cola FIFO, la columna Content-Based Deduplication (Desduplicación basada en

16

Page 22: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de una cola

contenido) muestra si exactly-once processing (Procesamiento exactamente una vez) (p. 86) estáhabilitado.

El Name (Nombre), URL y ARN de la cola se muestran en la pestaña Details (Detalles).

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para crear una cola de estándar

1. Copie el programa de ejemplo (p. 81).

La siguiente sección del código crea la cola MyQueue:

// Create a queueSystem.out.println("Creating a new SQS queue called MyQueue.\n");final CreateQueueRequest createQueueRequest = new CreateQueueRequest("MyQueue");final String myQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();

2. Compile y ejecute el ejemplo.

Se crea la cola.

Para crear una cola de FIFO

1. Copie el programa de ejemplo (p. 87).

La siguiente sección del código crea la cola MyFifoQueue.fifo:

// Create a FIFO queueSystem.out.println("Creating a new Amazon SQS FIFO queue called " + "MyFifoQueue.fifo.\n");final Map<String, String> attributes = new HashMap<String, String>();

// A FIFO queue must have the FifoQueue attribute set to Trueattributes.put("FifoQueue", "true");

// If the user doesn't provide a MessageDeduplicationId, generate a MessageDeduplicationId based on the content.attributes.put("ContentBasedDeduplication", "true");

// The FIFO queue name must end with the .fifo suffixfinal CreateQueueRequest createQueueRequest = new CreateQueueRequest("MyFifoQueue.fifo")

17

Page 23: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de una cola

.withAttributes(attributes);final String myQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();

2. Compile y ejecute el ejemplo.

Se crea la cola.

AWS CloudFormationPuede utilizar la consola de AWS CloudFormation y una plantilla JSON (o YAML) para crear una cola deAmazon SQS. Para obtener más información, consulte Trabajo con plantillas de AWS CloudFormation y elrecurso AWS::SQS::Queue en la Guía del usuario de AWS CloudFormation.

1. Copie el siguiente código JSON a un archivo denominado MyQueue.json. Para crear una cola deestándar, omita las propiedades FifoQueue y ContentBasedDeduplication. Para obtener másinformación sobre la desduplicación basada en el contenido, consulte Procesamiento único (p. 86).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyQueue": { "Properties": { "QueueName": "MyQueue.fifo", "FifoQueue": true, "ContentBasedDeduplication": true }, "Type": "AWS::SQS::Queue" } }, "Outputs": { "QueueName": { "Description": "The name of the queue", "Value": { "Fn::GetAtt": [ "MyQueue", "QueueName" ] } }, "QueueURL": { "Description": "The URL of the queue", "Value": { "Ref": "MyQueue" } }, "QueueARN": { "Description": "The ARN of the queue", "Value": { "Fn::GetAtt": [ "MyQueue", "Arn" ] } } }}

2. Inicie sesión en la consola de AWS CloudFormation y seleccione Create Stack (Crear pila).

18

Page 24: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de una cola con SSE

3. En la página Select Template (Seleccionar plantilla), haga clic en Upload a template to Amazon S3(Cargar una plantilla en ), elija el archivo MyQueue.json y haga clic en Next (Siguiente).

4. En la página Specify Details, escriba MyQueue en Stack Name y, a continuación, elija Next.5. En la página Options, seleccione Next.6. En la página Review, elija Create.

AWS CloudFormation empieza a crear la pila MyQueue y muestra el estadoCREATE_IN_PROGRESS. Cuando el proceso se haya completado, AWS CloudFormation mostrará elestado CREATE_COMPLETE.

7. (Opcional) Para mostrar el nombre, la URL y el ARN de la cola, elija el nombre de la pila y, acontinuación, en la página siguiente, expanda la sección Outputs.

Tutorial: Creación de una cola de Amazon SQS conCifrado en el servidor (SSE)Puede habilitar SSE para que una cola proteja sus datos. Para obtener más información acerca del uso deSSE, consulte Cifrado en reposo (p. 149).

Important

Todas las solicitudes hechas a las colas con SSE habilitado deben usar HTTPS y SignatureVersion 4.

En este tutorial, aprenderá a crear una cola de Amazon SQS con SSE habilitado. Aunque en el ejemplo seutiliza una cola FIFO, SSE pude trabajar con colas estándar y FIFO.

Temas

19

Page 25: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de una cola con SSE

• Consola de administración de AWS (p. 20)• AWS SDK for Java (p. 21)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. Elija Create New Queue (Crear nueva cola).3. En la página Create New Queue (Crear nueva cola), asegúrese de que está en la región correcta y, a

continuación, escriba el Queue Name (Nombre de la cola).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.4. Estándar está seleccionado de forma predeterminada. Elija FIFO.5. Elija Configure Queue y, a continuación, elija Use SSE.6. Especifique el ID de la clave maestra del cliente (CMK). Para obtener más información, consulte

Términos clave (p. 151)..

Se muestran los valores de Description (Descripción), Account (Cuenta) y Key ARN (ARN de clave) decada CMK.

Important

Si no es el propietario de la CMK o si ha iniciado sesión con una cuenta que no tiene lospermisos kms:ListAliases y kms:DescribeKey, no podrá ver la información sobre laCMK en la consola de Amazon SQS.Pida al propietario de la CMK que le conceda estos permisos. Para obtener más información,consulte Permisos API de AWS KMS: Referencia de recursos y acciones en la AWS KeyManagement Service Developer Guide.

• La CMK administrada por AWS para Amazon SQS está seleccionada de forma predeterminada.

Note

Tenga en cuenta lo siguiente:• Si no se especifica una CMK personalizada, Amazon SQS utiliza la CMK administrada

por AWS en Amazon SQS. Para obtener instrucciones acerca de la creación de CMKpersonalizadas, consulte Creating Keys en la AWS Key Management Service DeveloperGuide.

• La primera vez que usa la Consola de administración de AWS para especificar la CMKadministrada por AWS para Amazon SQS para una cola, AWS KMS crea la CMKadministrada por AWS para Amazon SQS.

• Asimismo, la primera vez que utilice la acción SendMessage o SendMessageBatch enun tema que tenga SSE habilitado, AWS KMS creará la CMK que administra AWS paraAmazon SQS.

• Para usar una CMK personalizada para la cuenta de AWS, selecciónela en la lista.

20

Page 26: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de una cola con SSE

Note

Para obtener instrucciones acerca de la creación de CMK personalizadas, consulteCreating Keys en la AWS Key Management Service Developer Guide.

• Para usar un ARN de CMK personalizado desde su cuenta de AWS o desde otra cuenta de AWS,seleccione Enter an existing CMK ARN (Escribir ARN de CMK existente) en la lista y escriba o copiela CMK.

7. (Opcional) En Data key reuse period (Periodo de reutilización de clave de datos), especifique un valorentre 1 minuto y 24 horas. El valor predeterminado es 5 minutos. Para obtener más información,consulte Descripción del período de reutilización de la clave de datos (p. 152).

8. Elija Create Queue.

La nueva cola se crea con SSE. En la pestaña Encryption se muestran el estado de cifrado, el alias dela CMK, la descripción (Description), la cuenta (Account), el ARN de clave (Key ARN) y el periodo dereutilización de la clave de datos (Data Key Reuse Period).

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para poder usar SSE, debe configurar las políticas de claves de AWS KMS para permitir el cifrado de lascolas y el cifrado y descifrado de mensajes. Para obtener más información, consulte Configuración de lospermisos de AWS KMS (p. 154)

1. Obtenga el ID de la clave maestra del cliente (CMK). Para obtener más información, consulteTérminos clave (p. 151)..

Note

Tenga en cuenta lo siguiente:

• Si no se especifica una CMK personalizada, Amazon SQS utiliza la CMK administradapor AWS en Amazon SQS. Para obtener instrucciones acerca de la creación de CMK

21

Page 27: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCreación de una cola con SSE

personalizadas, consulte Creating Keys en la AWS Key Management Service DeveloperGuide.

• La primera vez que usa la Consola de administración de AWS para especificar la CMKadministrada por AWS para Amazon SQS para una cola, AWS KMS crea la CMKadministrada por AWS para Amazon SQS.

• Asimismo, la primera vez que utilice la acción SendMessage o SendMessageBatch enun tema que tenga SSE habilitado, AWS KMS creará la CMK que administra AWS paraAmazon SQS.

2. Para habilitar cifrado en el servidor, especifique el ID de la CMK estableciendo el atributoKmsMasterKeyId de la acción CreateQueue o SetQueueAttributes.

En el siguiente ejemplo de código, se crea una nueva cola con SSE mediante la CMK administradapor AWS para Amazon SQS:

final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();final Map<String, String> attributes = new HashMap<String, String>();final CreateQueueRequest createRequest = new CreateQueueRequest("MyQueue").withAttributes(attributes); // Enable cifrado en el servidor by specifying the alias ARN of the// AWS managed CMK for Amazon SQS.final String kmsMasterKeyAlias = "arn:aws:kms:us-east-2:123456789012:alias/aws/sqs";attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); // (Optional) Specify the length of time, in seconds, for which Amazon SQS can reuse attributes.put("KmsDataKeyReusePeriodSeconds", "60");

final CreateQueueResult createResult = client.createQueue(createRequest);

En el siguiente ejemplo de código, se crea una nueva cola con SSE mediante una CMK personalizada:

final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();final Map<String, String> attributes = new HashMap<String, String>();final CreateQueueRequest createRequest = new CreateQueueRequest("MyQueue").withAttributes(attributes); // Enable cifrado en el servidor by specifying the alias ARN of the custom CMK.final String kmsMasterKeyAlias = "arn:aws:kms:us-east-2:123456789012:alias/MyAlias";attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); // (Optional) Specify the length of time, in seconds, for which Amazon SQS can reuse // a data key to encrypt or decrypt messages before calling AWS KMS again.attributes.put("KmsDataKeyReusePeriodSeconds", "864000"); final CreateQueueResult createResult = client.createQueue(createRequest);

3. (Opcional) Especifique el período de tiempo, en segundos, durante los cuales Amazon SQS puedereutilizar una clave de datos (p. 151) para cifrar o descifrar los mensajes antes de llamar de nuevo aAWS KMS. Establezca el atributo KmsDataKeyReusePeriodSeconds de la acción CreateQueueo SetQueueAttributes. Los valores posibles pueden estar entre 60 segundos (1 minuto) y86 400 segundos (24 horas). Si no especifica ningún valor, se utiliza el valor predeterminado de 300segundos (5 minutos).

El primer ejemplo de código anterior establece el período de reutilización de la clave de datos en 60segundos (1 minuto). El segundo ejemplo de código lo establece en 86 400 segundos (24 horas). Elsiguiente ejemplo de código establece el período de reutilización de la clave de datos en 60 segundos(1 minuto):

// (Optional) Specify the length of time, in seconds, for which Amazon SQS can reuse

22

Page 28: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMostrar todas las colas

// a data key to encrypt or decrypt messages before calling AWS KMS again.attributes.put("KmsDataKeyReusePeriodSeconds", "60");

Para obtener información sobre cómo recuperar los atributos de una cola, consulte los ejemplos de laAmazon Simple Queue Service API Reference.

Para recuperar el ID de CMK o el periodo de volver a usar la clave de datos de una cola determinada,use los atributos KmsMasterKeyId y KmsDataKeyReusePeriodSeconds de la acciónGetQueueAttributes.

Para obtener información sobre cómo cambiar una cola a una CMK diferente con el mismo alias, consulteActualización de un alias en la AWS Key Management Service Developer Guide.

Tutorial: Mostrar todas las colas de Amazon SQSde una región

Cuando crea una cola, puede llevar un tiempo su propagación completa en Amazon SQS. En este tutorial,aprenderá a confirmar la existencia de una cola enumerando todas las colas de la región actual.

Temas• Consola de administración de AWS (p. 23)• AWS SDK for Java (p. 23)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. Se enumeran las colas de la región actual.

La columna Queue Type (Tipo de cola) ayuda a distinguir las colas estándar de las colas FIFO asimple vista. Con una cola FIFO, la columna Content-Based Deduplication (Desduplicación basada encontenido) muestra si exactly-once processing (Procesamiento exactamente una vez) (p. 86) estáhabilitado.

El Name (Nombre), URL y ARN de la cola se muestran en la pestaña Details (Detalles).

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

23

Page 29: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAdición de permisos a una cola

Note

Esta acción es idéntica para las colas estándar y FIFO.

1. Copie el programa de ejemplo de la cola estándar (p. 81) o el programa de ejemplo de la colaFIFO (p. 87).

La siguiente sección del código enumera todas las colas de la región actual:

// List queuesSystem.out.println("Listing all queues in your account.\n");for (final String queueUrl : sqs.listQueues().getQueueUrls()) { System.out.println(" QueueUrl: " + queueUrl);}System.out.println();

2. Compile y ejecute el ejemplo.

Se enumeran todas las colas de la región actual que se han creado con la versión de la API2012-11-05. La respuesta incluye los elementos siguientes:

• La URL de cola única.• El ID de solicitud que Amazon SQS asignó a la solicitud.

Tutorial: Adición de permisos a una cola de AmazonSQS

Puede especificar a quién permite (o deniega explícitamente) interactuar con la cola de diversas manerascon la adición de permisos a una cola. El siguiente ejemplo muestra cómo añadir el permiso para quecualquier persona obtenga la URL de una cola.

Note

Una política de Amazon SQS puede tener un máximo de siete acciones.

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

3. En Queue Actions, seleccione Add a Permission.

24

Page 30: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

Se muestra el cuadro de diálogo Add a Permission.4. En este ejemplo, permite que cualquier persona obtenga la URL de la cola:

25

Page 31: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

Asegúrese de que junto a Effect esté seleccionada la opción Allow.

Junto a Principal, marque la casilla Everybody.

Desde el menú desplegable Actions, seleccione la casilla GetQueueUrl.

Elija Add Permission.

El permiso se añade a la cola.

En la pestaña Permissions (Permisos) de la política de la cola, se muestran los valores de Effect(Efecto), Principals (Entidades de seguridad), Actions (Acciones) y Conditions (Condiciones).

26

Page 32: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAñadir, actualizar y quitar etiquetas de una cola

Tutorial: Añadir, actualizar y quitar etiquetas deasignación de costos en una cola de Amazon SQS

Puede añadir etiquetas de asignación de costos a las colas de Amazon SQS para organizarlas eidentificarlas. En el siguiente ejemplo se muestra cómo añadir, actualizar y eliminar etiquetas de una cola.Para obtener más información, consulte Amazon SQS Etiquetas de asignación de costos (p. 95).

Temas• Consola de administración de AWS (p. 27)• AWS SDK for Java (p. 28)

Consola de administración de AWSEn el procedimiento siguiente, se presupone que ya ha creado una cola de Amazon SQS (p. 15).

1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

3. Elija la pestaña Tags.

Se listan las etiquetas añadidas a la cola.

4. Elija Add/Edit Tags.5. Modificar las etiquetas de la cola:

• Para añadir una etiqueta, elija Añadir nueva etiqueta, escriba una Key y un Value, y a continuaciónelija Apply Changes.

• Para actualizar una etiqueta, cambie su Key y Value y a continuación elija Apply Changes.• Para eliminar una etiqueta, seleccione la opción junto a un par clave/valor y haga clic en Apply

Changes (Aplicar cambios).

Se aplican los cambios en la etiqueta de la cola.

27

Page 33: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAWS SDK for Java

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Añadir, actualizar y quitar etiquetas de una cola1. Copie el programa de ejemplo de la cola estándar (p. 81) o de la cola FIFO (p. 87).2. Para enumerar las etiquetas agregadas a una cola, incorpore el siguiente código que utiliza la acción

de la ListQueueTags:

final ListQueueTagsRequest listQueueTagsRequest = new ListQueueTagsRequest(queueUrl);final ListQueueTagsResult listQueueTagsResult = SQSClientFactory.newSQSClient() .listQueueTags(listQueueTagsRequest);System.out.println(String.format("ListQueueTags: \tTags for queue %s are %s.\n", QUEUE_NAME, listQueueTagsResult.getTags()));

3. Para agregar o actualizar los valores de las etiquetas de la cola con la clave de la etiqueta, agregue elsiguiente código que agrega la acción de la TagQueue:

final Map<String, String> addedTags = new HashMap<>();addedTags.put("Team", "Development");addedTags.put("Priority", "Beta");addedTags.put("Accounting ID", "456def");final TagQueueRequest tagQueueRequest = new TagQueueRequest(queueUrl, addedTags);

System.out.println(String.format("TagQueue: \t\tAdd tags %s to queue %s.\n", addedTags, QUEUE_NAME));SQSClientFactory.newSQSClient().tagQueue(tagQueueRequest);

4. Para quitar una etiqueta de una cola con la clave de la etiqueta, agregue el siguiente código queagrega la acción de la UntagQueue:

final List<String> tagKeys = Arrays.asList("Accounting ID");final UntagQueueRequest untagQueueRequest = new UntagQueueRequest(queueUrl, tagKeys);System.out.println(String.format("UntagQueue: \tRemove tags %s from queue %s.\n", tagKeys, QUEUE_NAME));SQSClientFactory.newSQSClient().untagQueue(untagQueueRequest);

5. Compile y ejecute el programa.

Se listan las etiquetas existentes, se actualizan tres y una etiqueta se quita de la cola.

Tutoriales: Envío de mensajes a colas de AmazonSQS

En los siguientes tutoriales, se explican diversos mecanismos para enviar mensajes a colas de AmazonSQS.

Temas• Tutorial: Envío de un mensaje a una cola Amazon SQS (p. 29)• Tutorial: Envío de un mensaje con atributos a una cola de Amazon SQS (p. 32)• Tutorial: Envío de un mensaje con un temporizador a una cola de Amazon SQS (p. 38)

28

Page 34: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje

• Tutorial: Envío de mensajes a una cola de Amazon SQS desde Amazon Virtual PrivateCloud (p. 41)

Tutorial: Envío de un mensaje a una cola AmazonSQSUna vez creada la cola, puede enviarle un mensaje. En el ejemplo siguiente, se muestra cómo se envía unmensaje a una cola existente.

Temas• Consola de administración de AWS (p. 29)• AWS SDK for Java (p. 31)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

3. En Queue Actions (Acciones de cola), seleccione Send a Message (Enviar un mensaje).

Se muestra el cuadro de diálogoSend a Message to QueueName (Enviar un mensaje a[nombre de cola]).

29

Page 35: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje

En el ejemplo siguiente se muestran los parámetros Message Group ID (ID de grupo de mensaje)y Message Deduplication ID (ID de desduplicación de mensaje) específicos de las colas FIFO (ladesduplicación basada en contenido (p. 86) está deshabilitada).

4. Para enviar un mensaje a un FIFO, escriba el Message Body (Cuerpo del mensaje), el MessageGroup ID (ID de grupo de mensaje)MyMessageGroupId1234567890 y el Message Deduplication ID(ID de desduplicación de mensaje)MyMessageDeduplicationId1234567890 y elija Send Message(Enviar mensaje). Para obtener más información, consulte FIFO Lógica de entrega (p. 85).

Note

El ID de grupo de mensajes siempre se requiere. Sin embargo, si la desduplicación basadaen contenido está habilitada, el ID de desduplicación de mensajes es opcional.

30

Page 36: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje

El mensaje se envía y se muestra el cuadro de diálogo Send a Message to QueueName (Enviar unmensaje a [nombre de cola], que muestra los atributos del mensaje enviado.

En el ejemplo siguiente se muestra el atributo Sequence Number (Número de secuencia) específicode las colas FIFO.

5. Elija Close (Cerrar).

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para enviar un mensaje a una cola estándar

1. Copie el programa de ejemplo (p. 81).

La siguiente sección del código envía el mensaje This is my message text. a su cola:

// Send a messageSystem.out.println("Sending a message to MyQueue.\n");sqs.sendMessage(new SendMessageRequest(myQueueUrl, "This is my message text."));

2. Compile y ejecute el ejemplo.

El mensaje se envía a la cola. La respuesta incluye los elementos siguientes:

• El ID de mensaje (p. 90) que Amazon SQS asigna al mensaje.• Un resumen MD5 del cuerpo del mensaje, utilizado para confirmar que Amazon SQS recibió el

mensaje correctamente (para obtener más información, consulte RFC1321).• El ID de solicitud que Amazon SQS asignó a la solicitud.

Para enviar un mensaje a una cola FIFO

1. Copie el programa de ejemplo (p. 87).

La siguiente sección del código envía el mensaje This is my message text. a su cola:

// Send a messageSystem.out.println("Sending a message to MyFifoQueue.fifo.\n");

31

Page 37: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con atributos

final SendMessageRequest sendMessageRequest = new SendMessageRequest(myQueueUrl, "This is my message text.");

// When you send messages to a FIFO queue, you must provide a non-empty MessageGroupId.sendMessageRequest.setMessageGroupId("messageGroup1");

// Uncomment the following to provide the MessageDeduplicationId//sendMessageRequest.setMessageDeduplicationId("1");final SendMessageResult sendMessageResult = sqs.sendMessage(sendMessageRequest);final String sequenceNumber = sendMessageResult.getSequenceNumber();final String messageId = sendMessageResult.getMessageId();System.out.println("SendMessage succeed with messageId " + messageId + ", sequence number " + sequenceNumber + "\n");

2. Compile y ejecute el ejemplo.

El mensaje se envía a su cola.

Tutorial: Envío de un mensaje con atributos a una colade Amazon SQSPuede incluir metadatos estructurados (como, por ejemplo, marcas temporales, datos geoespaciales,firmas e identificadores) en los mensajes utilizando los atributos de los mensajes.. En este tutorial,aprenderá a enviar un mensaje con atributos a una cola existente. Para obtener más información, consulteAtributos de mensajes de Amazon SQS (p. 92).

Para obtener una explicación más detallada del envío de mensajes a las colas estándar y FIFO, consulteEnvío de un mensaje a una cola de Amazon SQS (p. 29).

Temas• Consola de administración de AWS (p. 32)• AWS SDK for Java (p. 36)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

3. En Queue Actions (Acciones de cola), seleccione Send a Message (Enviar un mensaje).

32

Page 38: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con atributos

Se muestra el cuadro de diálogoSend a Message to QueueName (Enviar un mensaje a[nombre de cola]).

En el ejemplo siguiente se muestran los parámetros Message Group ID (ID de grupo de mensaje)y Message Deduplication ID (ID de desduplicación de mensaje) específicos de las colas FIFO (ladesduplicación basada en contenido (p. 86) está deshabilitada).

33

Page 39: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con atributos

4. Para enviar un mensaje a una cola FIFO, escriba el Message Body (Cuerpo del mensaje), el MessageGroup ID (ID del grupo de mensajes) MyMessageGroupId1234567890 y el Message DeduplicationID (ID de desduplicación de mensajes) MyMessageDeduplicationId1234567890 y haga clic enMessage Attributes (Atributos del mensaje).

34

Page 40: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con atributos

5. Defina los parámetros de atributos de mensajes. Para obtener más información, consulteComponentes de atributos de mensajes (p. 92) y Tipos de datos de atributos demensajes (p. 93).

a. En Name (Nombre) del atributo de mensaje, escriba MyMessageAttribute.b. En el valor Type (Tipo) de los datos de atributo de mensaje, seleccione Number (Número) y

escriba byte para el tipo personalizado opcional.c. En Value (Valor) del atributo de mensaje, escriba 24.

Elija Add Attribute (Agregar atributo).

El atributo se agrega al mensaje como Number.byte.

35

Page 41: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con atributos

Puede modificar el valor antes de enviar el mensaje. Para eliminar el atributo, elija .6. Cuando termine de agregar atributos al mensaje, elija Send Message (Enviar mensaje).

El mensaje se envía y se muestra el cuadro de diálogo Send a Message to QueueName, que muestralos atributos del mensaje enviado.

En el siguiente ejemplo, se muestra el valor MD5 of Message Attributes (MD5 de atributos demensaje) específico del atributo de mensaje personalizado y el atributo Sequence Number (Númerode secuencia) específico de las colas FIFO.

7. Seleccione la opción Close.

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para enviar un mensaje con atributos a una cola

1. Copie el programa de ejemplo de la cola estándar (p. 81) o el programa de ejemplo de la colaFIFO (p. 87).

2. Para definir un atributo para un mensaje, agregue el siguiente código que utiliza el tipo de datosMessageAttributeValue. Para obtener más información, consulte Componentes de atributos demensajes (p. 92) y Tipos de datos de atributos de mensajes (p. 93).

Note

AWS SDK for Java calcula automáticamente las sumas de comprobación del cuerpo delmensaje y de los atributos del mensaje, y las compara con los datos que devuelve AmazonSQS. Para obtener más información, consulte la AWS SDK for Java Developer Guide yCálculo del resumen del mensaje MD5 para atributos de mensajes (p. 93) para otroslenguajes de programación.

String

En este ejemplo se define un atributo String denominado Name con el valor Jane.

final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();messageAttributes.put("Name", new MessageAttributeValue() .withDataType("String")

36

Page 42: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con atributos

.withStringValue("Jane"));

Number

En este ejemplo se define un atributo Number denominado AccurateWeight con el valor230.000000000000000001.

final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();messageAttributes.put("AccurateWeight", new MessageAttributeValue() .withDataType("Number") .withStringValue("230.000000000000000001"));

Binary

En este ejemplo se define un atributo Binary denominado ByteArray con el valor de una matrizde 10 bytes sin inicializar.

final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();messageAttributes.put("ByteArray", new MessageAttributeValue() .withDataType("Binary") .withBinaryValue(ByteBuffer.wrap(new byte[10])));

String (Custom)

En este ejemplo se define el atributo personalizado String.EmployeeId denominadoEmployeeId con el valor ABC123456.

final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();messageAttributes.put("EmployeeId", new MessageAttributeValue() .withDataType("String.EmployeeId") .withStringValue("ABC123456"));

Number (Custom)

En este ejemplo se define el atributo personalizado Number.AccountId denominadoAccountId con el valor 0023456.

final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();messageAttributes.put("AccountId", new MessageAttributeValue() .withDataType("Number.AccountId") .withStringValue("000123456"));

Note

Dado que el tipo de datos base es Number, la acción ReceiveMessage devuelve123456.

Binary (Custom)

En este ejemplo se define el atributo personalizado Binary.JPEG denominadoApplicationIcon con el valor de una matriz de 10 bytes sin inicializar.

final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();messageAttributes.put("ApplicationIcon", new MessageAttributeValue() .withDataType("Binary.JPEG") .withBinaryValue(ByteBuffer.wrap(new byte[10])));

3. Reemplace la sección del código que envía el mensaje por lo siguiente:37

Page 43: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con un temporizador

// Send a message with an attributefinal SendMessageRequest sendMessageRequest = new SendMessageRequest();sendMessageRequest.withMessageBody("This is my message text.");sendMessageRequest.withQueueUrl(myQueueUrl);sendMessageRequest.withMessageAttributes(messageAttributes);sqs.sendMessage(sendMessageRequest);

Important

Si envía un mensaje a una cola FIFO, asegúrese de que el método sendMessage se ejecutadespués de proporcionar el ID del grupo de mensajes.Si utiliza la acción SendMessageBatch en lugar de SendMessage, debe especificar losatributos de los mensajes individuales del lote.

4. Compile y ejecute el ejemplo.

El mensaje se envía a la cola. La respuesta incluye los elementos siguientes:

• El ID de mensaje (p. 90) que Amazon SQS asigna al mensaje.• Un resumen MD5 del cuerpo del mensaje, utilizado para confirmar que Amazon SQS recibió el

mensaje correctamente (para obtener más información, consulte RFC1321).• Un resumen MD5 de los atributos del mensaje, que se utiliza para confirmar que Amazon SQS

recibió los atributos del mensaje correctamente.• El ID de solicitud que Amazon SQS asignó a la solicitud.

Tutorial: Envío de un mensaje con un temporizador auna cola de Amazon SQSLos temporizadores de mensajes permiten establecer un período de invisibilidad inicial para los mensajesque se añaden a una cola. Por ejemplo, si envía un mensaje con un temporizador de 45 segundos, elmensaje no será visible para los consumidores en la cola durante los primeros 45 segundos. El tiempo deretraso (mínimo) predeterminado de un mensaje es de 0 segundos. El tiempo máximo es de 15 minutos.Eneste tutorial, aprenderá a enviar un mensaje con un temporizador a una cola existente. Para obtener másinformación, consulte Temporizadores de mensajes de Amazon SQS (p. 108).

Note

Las colas FIFO no admiten temporizadores en mensajes individuales.

Para obtener una explicación más detallada del envío de mensajes a las colas estándar y FIFO, consulteEnvío de un mensaje a una cola de Amazon SQS (p. 29).

Temas• Consola de administración de AWS (p. 38)• AWS SDK for Java (p. 41)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

38

Page 44: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con un temporizador

3. En Queue Actions, seleccione Send a Message.

Se muestra el cuadro de diálogo Send a Message to QueueName.

39

Page 45: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de un mensaje con un temporizador

4. Para enviar un mensaje a una cola estándar, escriba el Message Body (Cuerpo del mensaje), elijaDelay delivery of this message by (Retrasar entrega de este mensaje en) y escriba un valor; porejemplo, 60 segundos.

5. Elija Send Message.

El mensaje se envía y se muestra el cuadro de diálogo Send a Message to QueueName, que muestralos atributos del mensaje enviado.

40

Page 46: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de mensajes desde una VPC

6. Seleccione la opción Close.

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para enviar un mensaje con un temporizador a una cola

1. Copie el programa de ejemplo de la cola estándar (p. 81).2. Cambie la firma del método main a la siguiente:

public static void main(String[] args) throws InterruptedException

3. Reemplace la sección del código que envía el mensaje por lo siguiente:

// Send a message with a 5-second timer.System.out.println("Sending a message with a 5-second timer to MyQueue.\n");SendMessageRequest request = new SendMessageRequest(myQueueUrl, "This is my message text.");request.setDelaySeconds(5);sqs.sendMessage(request);

// Wait for 10 seconds.System.out.println("Waiting for 10 seconds.");Thread.sleep(10000L);

4. Compile y ejecute el ejemplo.

El mensaje se envía a la cola. La respuesta incluye los elementos siguientes:

• El ID de mensaje (p. 90) que Amazon SQS asigna al mensaje.• Un resumen MD5 del cuerpo del mensaje, utilizado para confirmar que Amazon SQS recibió el

mensaje correctamente (para obtener más información, consulte RFC1321).• El ID de solicitud que Amazon SQS asignó a la solicitud.

Tutorial: Envío de mensajes a una cola de AmazonSQS desde Amazon Virtual Private CloudEn este tutorial, aprenderá a enviar mensajes a una cola de Amazon SQS a través de una red privada ysegura. Esta red consta de una VPC que contiene una instancia Amazon EC2. La instancia se conectaa Amazon SQS través de un punto de enlace de la VPC de interfaz, lo que le permite conectarse a lainstancia de Amazon EC2 y enviar mensajes a la cola de Amazon SQS aunque la red esté desconectadade la red de Internet pública. Para obtener más información, consulte Puntos de enlace de Amazon VirtualPrivate Cloud para Amazon SQS (p. 157).

Important

• Puede utilizar Amazon Virtual Private Cloud solo con los puntos de enlace HTTPS de AmazonSQS.

• Cuando configure Amazon SQS para enviar mensajes desde Amazon VPC, debehabilitar un DNS privado y especificar los puntos de enlace con el formato sqs.us-east-2.amazonaws.com.

41

Page 47: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de mensajes desde una VPC

• Los DNS privados no admiten los puntos de enlace heredados, como queue.amazonaws.como us-east-2.queue.amazonaws.com.

Temas• Paso 1: Crear un par de claves de Amazon EC2 (p. 42)• Paso 2: Crear recursos de AWS (p. 42)• Paso 3: Confirmar que la instancia EC2 no es de acceso público (p. 43)• Paso 4: Crear un punto de enlace de la Amazon VPC para Amazon SQS (p. 44)• Paso 5: Enviar un mensaje a la cola de Amazon SQS (p. 44)

Paso 1: Crear un par de claves de Amazon EC2Los pares de claves permiten conectarse a una instancia de Amazon EC2. Se componen de una clavepública que cifra la información de inicio de sesión y de una clave privada que la descifra.

1. Inicie sesión en la consola de Amazon EC2.2. En el menú de navegación, en Network & Security (Red y seguridad), seleccione Key Pairs (Pares de

claves).3. Seleccione Create Key Pair.4. En el cuadro de diálogo Create Key Pair (Crear par de claves), en Key pair name (Nombre del par de

claves), escriba SQS-VPCE-Tutorial-Key-Pair y haga clic en Create (Crear).5. El navegador descarga el archivo de clave privada SQS-VPCE-Tutorial-Key-Pair.pem

automáticamente.

Important

Guarde este archivo en un lugar seguro. EC2 no generará un archivo .pem para el mismo parde claves por segunda vez.

6. Para permitir que un cliente SSH pueda conectarse a una instancia EC2, configure los permisos delarchivo de clave privada para que solo el usuario pueda leer los permisos; por ejemplo:

chmod 400 SQS-VPCE-Tutorial-KeyPair.pem

Paso 2: Crear recursos de AWSPara configurar la infraestructura necesaria, debe utilizar una plantilla de AWS CloudFormation, que es unesquema para crear una pila que se compone de recursos de AWS, como instancias Amazon EC2 y colasde Amazon SQS.

La pila de este tutorial incluye los siguientes recursos:

• Una VPC y los recursos de red asociados, como una subred, un grupo de seguridad, una gateway deInternet y una tabla de ruteo.

• Una instancia Amazon EC2 lanzada en la subred de la VPC• Una cola de Amazon SQS

1. Descargue la plantilla SQS-VPCE-Tutorial-CloudFormation.yaml de AWS CloudFormation enGitHub.

2. Inicie sesión en la consola de AWS CloudFormation.3. Elija Create Stack.

42

Page 48: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de mensajes desde una VPC

4. En la página Select Template (Seleccionar plantilla), seleccione Upload a template to AmazonS3 (Cargar una plantilla en Amazon S3), elija el archivo SQS-VPCE-SQS-Tutorial-CloudFormation.yaml y haga clic en Next (Siguiente).

5. En la página Specify Details (Especificar detalles), haga lo siguiente:

a. En Stack name (Nombre de pila), escriba SQS-VPCE-Tutorial-Stack.b. En KeyName, seleccione SQS-VPCE-Tutorial-Key-Pair.c. Seleccione Next (Siguiente).

6. En la página Options, seleccione Next.7. En la página Review (Revisar), en la sección Capabilities (Funcionalidades), seleccione I acknowledge

that AWS CloudFormation might create IAM resources with custom names (Soy consciente de queAWS CloudFormation puede crear recursos de IAM con nombres personalizados) y haga clic enCreate (Crear).

AWS CloudFormation comienza a crear la pila y muestra el estado CREATE_IN_PROGRESS. Cuando elproceso se haya completado, AWS CloudFormation mostrará el estado CREATE_COMPLETE.

Paso 3: Confirmar que la instancia EC2 no es de acceso públicoLa plantilla de AWS CloudFormation lanza una instancia EC2 llamada SQS-VPCE-Tutorial-EC2-Instance en la VPC. Esta instancia EC2 no permite el tráfico de salida y no puede enviar mensajes aAmazon SQS. Para comprobarlo, debe conectarse a la instancia, intentar conectarse a un punto de enlacepúblico y tratar de enviar un mensaje a Amazon SQS.

1. Inicie sesión en la consola de Amazon EC2.2. En el menú de navegación, en Instances (Instancias), haga clic en Instances (Instancias).3. Seleccione SQS-VPCE-Tutorial-EC2Instance.4. Copie el nombre de host de Public DNS (IPv4); por ejemplo, ec2-203-0-113-0.us-

west-2.compute.amazonaws.com.5. En el directorio que contiene el par de claves que creó anteriormente (p. 42), conéctese a la

instancia utilizando el comando siguiente; por ejemplo:

ssh -i SQS-VPCE-Tutorial-KeyPair.pem [email protected]

6. Intente conectarse a un punto de enlace público; por ejemplo:

ping amazon.com

Tal y como se esperaba, se produce un error en el intento de conexión.7. Inicie sesión en la consola de Amazon SQS.8. En la lista de colas, seleccione la cola creada por la plantilla de AWS CloudFormation; por ejemplo,

VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK.9. En la tabla Details (Detalles), copie la URL; por ejemplo, https://sqs.us-

east-2.amazonaws.com/123456789012/.10. En la instancia EC2, intente publicar un mensaje en una cola utilizando el comando siguiente; por

ejemplo:

aws sqs send-message --region us-east-2 --endpoint-url https://sqs.us-east-2.amazonaws.com/ --queue-url https://sqs.us-east-2.amazonaws.com/123456789012/ --message-body "Hello from Amazon SQS."

43

Page 49: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEnvío de mensajes desde una VPC

Tal y como se esperaba, se produce un error al enviar el mensaje.Important

Posteriormente, cuando cree un punto de enlace de la VPC para Amazon SQS, el envío serealizará correctamente.

Paso 4: Crear un punto de enlace de la Amazon VPC paraAmazon SQSPara conectar la VPC a Amazon SQS, debe definir un punto de enlace de la VPC de tipo interfaz. Una vezañadido el punto de enlace, podrá utilizar la API de Amazon SQS en la instancia EC2 de la VPC. De estemodo, podrá enviar mensajes a una cola de la red de AWS sin atravesar la Internet pública.

Note

La instancia EC2 sigue sin tener acceso a otros servicios de AWS y los puntos de enlace deInternet.

1. Inicie sesión en la consola de Amazon VPC.2. En el menú de navegación, seleccione Endpoints (Puntos de enlace).3. Elija Create Endpoint.4. En la página Create Endpoint (Crear punto de enlace), en Service Name (Nombre de servicio),

seleccione el nombre de servicio de Amazon SQS.Note

Los nombres de los servicios varían en función de la región actual de AWS. Por ejemplo, siestá en EE.UU. Este (Ohio), el nombre de servicio será com.amazonaws.us-east-2.sqs.

5. En VPC, seleccione SQS-VPCE-Tutorial-VPC.6. En Subnets (Subredes), seleccione la red cuyo ID de subred contiene SQS-VPCE-Tutorial-Subnet.7. En Security group (Grupo de seguridad), haga clic en Select security groups (Seleccionar grupos de

seguridad) y elija el grupo de seguridad cuyo nombre de grupo contiene SQS VPCE Tutorial SecurityGroup.

8. Elija Create endpoint.

Se crea el punto de enlace de la VPC de interfaz y se muestra su ID; por ejemplo,vpce-0ab1cdef2ghi3j456k.

9. Seleccione la opción Close.

En la consola de Amazon VPC se abre la página Endpoints (Puntos de enlace).

Amazon VPC comienza a crear el punto de enlace y muestra el estado pending (pendiente). Cuando elproceso se haya completado, Amazon VPC mostrará el estado available (disponible).

Paso 5: Enviar un mensaje a la cola de Amazon SQSAhora que la VPC contiene un punto de enlace de Amazon SQS, puede conectarse a la instancia EC2 yenviar mensajes a la cola.

1. Vuelva a conectarse a la instancia EC2; por ejemplo:

ssh -i SQS-VPCE-Tutorial-KeyPair.pem [email protected]

44

Page 50: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRecepción y eliminación de mensajes

2. Intente publicar de nuevo un mensaje en la cola utilizando el comando siguiente; por ejemplo:

aws sqs send-message --region us-east-2 --endpoint-url https://sqs.us-east-2.amazonaws.com/ --queue-url https://sqs.us-east-2.amazonaws.com/123456789012/ --message-body "Hello from Amazon SQS."

El intento de envío se realizará correctamente y aparecerán el resumen MD5 del cuerpo del mensaje yel ID del mensaje; por ejemplo:

{ "MD5OfMessageBody": "a1bcd2ef3g45hi678j90klmn12p34qr5", "MessageId": "12345a67-8901-2345-bc67-d890123e45fg"}

Para obtener más información sobre el envío y la eliminación de mensajes en la cola creada por la plantillade AWS CloudFormation (por ejemplo, VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK), consulteRecepción y eliminación de mensajes de una cola de Amazon SQS (p. 45).

Para obtener más información sobre la eliminación de recursos, consulte los siguientes temas:

• Eliminación de un punto de enlace de la VPC en la Guía del usuario de Amazon VPC• Eliminación de una cola de Amazon SQS (p. 57)• Terminar una instancia en la Guía del usuario de Amazon EC2 para instancias de Linux• Eliminación de su VPC en la Guía del usuario de Amazon VPC• Eliminación de una pila en la consola de AWS CloudFormation en la Guía del usuario de AWS

CloudFormation• Eliminación del par de claves en la Guía del usuario de Amazon EC2 para instancias de Linux

Tutorial: Recepción y eliminación de mensajes deuna cola de Amazon SQS

Después de enviar un mensaje a una cola, puede consumirlo desde ella. Cuando solicita un mensajede una cola, no puede especificar qué mensaje obtiene. En cambio, especifique el número máximo demensajes (hasta 10) que quiere obtener.

Note

Dado que Amazon SQS es un sistema distribuido, una cola con muy pocos mensajes puedemostrar una respuesta vacía a una solicitud de recepción. En este caso, puede volver a ejecutarla solicitud para obtener el mensaje. Dependiendo de las necesidades de la aplicación, tendrá queusar sondeo largo (p. 96) o corto para recibir mensajes.

Amazon SQS no elimina automáticamente un mensaje después de recibirlo, en caso de que no lo recibacorrectamente (por ejemplo, los usuarios pueden perder la conexión o tener un error). Para eliminar unmensaje, debe enviar una solicitud separada que reconozca que ya no necesita el mensaje porque lo harecibido y procesado correctamente.

En este tutorial, aprenderá a recibir y eliminar un mensaje.

Temas• Consola de administración de AWS (p. 46)• AWS SDK for Java (p. 48)

45

Page 51: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

3. En Queue Actions (Acciones de cola), seleccione View/Delete Messages (Ver/Eliminar mensajes).

Se muestra el cuadro de diálogo View/Delete Messages (Ver/Eliminar mensajes) en el cuadro dediálogo QueueName.

Note

La primera vez que emprende esta acción, se muestra una pantalla de información. Paraocultar la pantalla, seleccione Don't show this again (No mostrar esto de nuevo).

4. Elija Start Polling for messages (Comenzar el sondeo de mensajes).

Amazon SQS comienza a sondear los mensajes de la cola. El cuadro de diálogo muestra un mensajede la cola. Una barra de progreso en la parte inferior del cuadro de diálogo muestra el estado deltiempo de espera de visibilidad del mensaje.

46

Page 52: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

En el ejemplo siguiente se muestran las columnas Message Group ID (ID de grupo de mensajes),Message Deduplication ID (ID de desduplicación de mensajes) y Sequence Number (Número desecuencia) específicas de las colas FIFO.

Note

Cuando la barra de progreso se completa, el tiempo de espera de visibilidad (p. 101)termina y el mensaje se vuelve visible para los consumidores.

5. Antes de que termine el tiempo de espera de visibilidad, seleccione el mensaje que quiere eliminar ydespués elija Delete 1 Message (Eliminar 1 mensaje).

47

Page 53: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAWS SDK for Java

6. En el cuadro de diálogo Delete Messages (Eliminar mensajes), confirme que el mensaje que quiereeliminar está marcado y elija Yes, Delete Checked Messages (Sí, eliminar los mensajes marcados).

Se eliminará el mensaje seleccionado.7. Seleccione Close (Cerrar).

AWS SDK for JavaPara especificar el mensaje que se va a eliminar, proporcione el identificador de recepción (p. 91)que Amazon SQS devolvió cuando recibió el mensaje. Solo puede devolver un mensaje por acción. Para

48

Page 54: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAWS SDK for Java

eliminar una cola entera, debe emplear la acción DeleteQueue. (Es posible eliminar una cola completaaunque contenga mensajes).

Note

Si no tiene el identificador de recepción del mensaje, puede llamar a la acción ReceiveMessagepara recibir el mensaje de nuevo. Cada vez que recibe el mensaje, obtiene un identificador derecepción diferente. Use el último identificador de recepción con la acción DeleteMessage. De locontrario, el mensaje tal vez no se elimine de la cola.

Antes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para recibir y eliminar un mensaje de una cola estándar1. Copie el programa de ejemplo (p. 81).

La siguiente sección del código recibe un mensaje de su cola:

// Receive messagesSystem.out.println("Receiving messages from MyQueue.\n");final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);final List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();for (final Message message : messages) { System.out.println("Message"); System.out.println(" MessageId: " + message.getMessageId()); System.out.println(" ReceiptHandle: " + message.getReceiptHandle()); System.out.println(" MD5OfBody: " + message.getMD5OfBody()); System.out.println(" Body: " + message.getBody()); for (final Entry<String, String> entry : message.getAttributes().entrySet()) { System.out.println("Attribute"); System.out.println(" Name: " + entry.getKey()); System.out.println(" Value: " + entry.getValue()); }}System.out.println();

La siguiente sección del código elimina el mensaje:

// Delete the messageSystem.out.println("Deleting a message.\n");final String messageReceiptHandle = messages.get(0).getReceiptHandle();sqs.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageReceiptHandle));

2. Compile y ejecute el ejemplo.

El sondeo de la cola devuelve 0 o más mensajes. El ejemplo imprime los elementos siguientes:

• El ID de mensaje (p. 90) que ha recibido al enviar el mensaje a la cola.• El identificador de recepción (p. 91) que usará posteriormente para eliminar el mensaje.• Un resumen MD5 del cuerpo del mensaje (para obtener más información, consulte RFC1321).• El texto del mensaje.• El ID de solicitud que Amazon SQS asignó a la solicitud.

Si no se reciben mensajes en esta llamada concreta, la respuesta incluye solo el ID de la solicitud.

Se elimina el mensaje. La respuesta incluye el ID de solicitud que Amazon SQS asignó a la solicitud.

49

Page 55: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresSuscripción de una cola a un tema

Para recibir y eliminar un mensaje de una cola FIFO1. Copie el programa de ejemplo (p. 87).

La siguiente sección del código recibe un mensaje de su cola:

// Receive messagesSystem.out.println("Receiving messages from MyFifoQueue.fifo.\n");final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);

// Uncomment the following to provide the ReceiveRequestDeduplicationId//receiveMessageRequest.setReceiveRequestAttemptId("1");final List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();for (final Message message : messages) { System.out.println("Message"); System.out.println(" MessageId: " + message.getMessageId()); System.out.println(" ReceiptHandle: " + message.getReceiptHandle()); System.out.println(" MD5OfBody: " + message.getMD5OfBody()); System.out.println(" Body: " + message.getBody()); for (final Entry<String, String> entry : message.getAttributes().entrySet()) { System.out.println("Attribute"); System.out.println(" Name: " + entry.getKey()); System.out.println(" Value: " + entry.getValue()); }}System.out.println();

La siguiente sección del código elimina el mensaje:

// Delete the messageSystem.out.println("Deleting the message.\n");final String messageReceiptHandle = messages.get(0).getReceiptHandle();sqs.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageReceiptHandle));

2. Compile y ejecute el ejemplo.

El mensaje se recibe y elimina.

Tutorial: Suscripción de una cola de Amazon SQS aun tema de Amazon SNS

Puede suscribir una o varias colas de Amazon SQS a un tema de Amazon SNS desde una lista de temasdisponibles para la cola seleccionada. Amazon SQS administra la suscripción y los permisos necesarios.Cuando publica un mensaje en un tema, Amazon SNS lo envía a todas las colas suscritas. Para obtenermás información acerca de Amazon SNS, consulte ¿Qué es Amazon Simple Notification Service? en laGuía para desarrolladores de Amazon Simple Notification Service.

Important

• Amazon SNS no es compatible actualmente con colas FIFO.• Para obtener información sobre el uso de Amazon SNS con colas cifradas de Amazon SQS,

consulte Habilitar la compatibilidad entre servicios de AWS y colas cifradas (p. 155).• Cuando se suscribe una cola de Amazon SQS a un tema de Amazon SNS, Amazon SNS utiliza

HTTPS para reenviar mensajes a Amazon SQS.

50

Page 56: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

En este tutorial, aprenderá a suscribir una cola de Amazon SQS existente a un tema de Amazon SNSexistente.

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de colas, elija la cola (o colas) que desea suscribir a un tema de Amazon SNS.

3. En Queue Actions, seleccione Subscribe Queue to SNS Topic (o Subscribe Queues to SNS Topic).

Se muestra el cuadro de diálogo Subscribe to a Topic.4. En la lista desplegable Choose a Topic (Seleccione un tema), elija el tema de Amazon SNS al que

desea suscribir la cola (o colas), seleccione la región del tema en Topic Region (Región del tema)(opcional) y haga clic en Subscribe (Suscribir).

51

Page 57: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

Note

Escribir un ARN de tema diferente en Topic ARN es útil cuando desea suscribir una cola a untema de Amazon SNS desde una cuenta de AWS distinta a la que utilizó para crear la cola deAmazon SQS.También es útil si el tema de Amazon SNS no aparece en la lista desplegable Choose aTopic (Seleccione un tema).

Se muestra el cuadro de diálogo Topic Subscription Result.5. Revise la lista de colas de Amazon SQS suscritas al tema de Amazon SNS y haga clic en OK

(Aceptar).

La cola se ha suscrito al tema.

Note

Si la cola de Amazon SQS y el tema de Amazon SNS están en distintas cuentas de AWS, eldueño del tema debe confirmar la suscripción en primer lugar. Para obtener más información,consulte Confirmar la suscripción en la Guía para desarrolladores de Amazon SimpleNotification Service.Para enumerar las suscripciones, cancelar la suscripción a temas y eliminar temas, utilice laconsola de Amazon SNS. Para obtener más información, consulte Eliminación.

Para verificar el resultado de la suscripción, puede publicar en el tema y, a continuación, ver elmensaje que el tema envía a la cola. Para obtener más información, consulte Envío de mensajesAmazon SNS a colas de Amazon SQS en la Guía para desarrolladores de Amazon Simple NotificationService.

52

Page 58: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de un disparador de Lambda

Tutorial: Configuración de mensajes que llegan auna cola de Amazon SQS para activar una funciónde AWS Lambda

En este tutorial, aprenderá a configurar una cola de Amazon SQS existente para activar una función deAWS Lambda cuando lleguen nuevos mensajes a una cola.

Las funciones Lambda le permiten ejecutar código sin aprovisionar ni administrar un servidor. Por ejemplo,puede configurar una función de Lambda para procesar mensajes desde una cola mientras otra colaactúa como cola de mensajes fallidos para los mensajes que la función de Lambda no puede procesarcorrectamente. Para resolver el problema, puede redireccionar los mensajes desde la cola de mensajesfallidos a través de la función de Lambda. Para obtener más información, consulte Colas de mensajesfallidos de Amazon SQS (p. 98), ¿Qué es AWS Lambda? y Uso de AWS Lambda con Amazon SQS enla AWS Lambda Developer Guide.

Note

• La cola y la función de Lambda deben estar en la misma región de AWS.• Solo se puede asociar una cola a una o varias funciones de Lambda.

• No se puede asociar una cola cifrada (p. 149) que utiliza una clave maestra del clienteadministrada por AWS para Amazon SQS con una función Lambda de otra cuenta de AWS.

• Si asocia una cola cifrada a una función de Lambda, pero Lambda no sondea los mensajes,añada el permiso kms:Decrypt al rol de Lambda.

Requisitos previosPara configurar los disparadores de la función de Lambda a través de la consola, debe asegurarse de losiguiente:

• Si es usted un usuario de IAM, el rol de Amazon SQS debe incluir los permisos siguientes:• lambda:CreateEventSourceMapping

• lambda:ListEventSourceMappings

• lambda:ListFunctions

• El rol de Lambda debe incluir los permisos siguientes:• sqs:DeleteMessage

• sqs:GetQueueAttributes

• sqs:ReceiveMessage

Para obtener más información, consulte Información general sobre la administración de acceso (p. 160).

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de colas, elija la cola que desea que active una función Lambda.

53

Page 59: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

3. En Queue Actions (Acciones de cola), seleccione Configure Trigger for Lambda Function (Configurardisparador para función de ).

4. En el cuadro de diálogo Configure Incoming Messages to Trigger a Lambda Function (Configurarmensajes de entrada para activar una función ), realice una de las siguientes operaciones:

• Para utilizar una función de Lambda existente, seleccione una función mediante Select a LambdaFunction (Seleccionar una función ).

• Para crear una nueva función Lambda en la consola de AWS Lambda, elija Create New (Crearnueva). Para obtener más información, consulte Creación de una función Lambda sencilla en laAWS Lambda Developer Guide.

54

Page 60: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresDepuración de una cola

5. Seleccione Save.6. En el cuadro de diálogo Lambda Function Trigger Configuration Result (Resultado de configuración de

disparador de función Lambda), revise la función Lambda que activará la cola de Amazon SQS y hagaclic en OK (Aceptar).

Note

Se tarda aproximadamente un minuto en asociar la función Lambda a la cola.

La función Lambda y su estado se muestran en la pestaña Lambda Triggers (Disparadores Lambda).

• Para verificar los resultados de la configuración, puede enviar un mensaje a la cola (p. 29) yconsultar la función Lambda activada en la consola de Lambda.

• Para eliminar la asociación entre una función Lambda y la cola, haga clic en el botón situadojunto al ARN de la función Lambda.

Tutorial: Depuración de mensajes de una cola deAmazon SQS

Si no desea eliminar una cola de Amazon SQS pero necesita eliminar todos los mensajes que contiene,puede depurar la cola. En este tutorial, aprenderá a purgar una cola.

Important

Al purgar una cola, no puede recuperar de ella ningún mensaje eliminado.El proceso de eliminación de mensajes puede tardar hasta 60 segundos. Le recomendamos queespere 60 segundos independientemente del tamaño de la cola.

55

Page 61: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsola de administración de AWS

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

3. En Queue Actions, seleccione Purge Queue.

Se muestra el cuadro de diálogo Purge Queues.

4. Elija Yes, Purge Queues.

Todos los mensajes se purgan de la cola.

Se muestra el cuadro de diálogo de confirmación de Purge Queues.

56

Page 62: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEliminación de una cola

5. Seleccione OK.

Tutorial: Eliminación de una cola de Amazon SQSSi no utiliza una cola de Amazon SQS (y no prevé usarla en un futuro cercano), se recomienda eliminarlade Amazon SQS. En este tutorial, aprenderá a eliminar una cola.

Note

Puede eliminar una cola aunque no esté vacía. Si desea eliminar los mensajes de una cola, perono la propia cola, puede purgarla (p. 55).De forma predeterminada, una cola conserva un mensaje durante cuatro días después de que seenvíe. Puede configurar una cola para que conserve los mensajes durante un máximo de 14 días.

Temas• Consola de administración de AWS (p. 57)• AWS SDK for Java (p. 58)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

3. En Queue Actions (Acciones de cola), seleccione Delete Queue (Eliminar cola).

57

Page 63: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAWS SDK for Java

Se muestra el cuadro de diálogo Delete Queues (Eliminar colas).

4. Elija Yes, Delete Queues (Sí, eliminar colas).

La cola se elimina.

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Note

Esta acción es idéntica para las colas estándar y FIFO.

1. Copie el programa de ejemplo de la cola estándar (p. 81) o el programa de ejemplo de la colaFIFO (p. 87).

La siguiente sección del código elimina la cola:

// Delete the queueSystem.out.println("Deleting the test queue.\n");sqs.deleteQueue(new DeleteQueueRequest(myQueueUrl));

58

Page 64: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de colas

2. Compile y ejecute el ejemplo.

La cola se elimina.

Tutoriales: Configuración de colas de Amazon SQSEn los siguientes tutoriales, se explican distintos mecanismos para configurar las colas de Amazon SQS.

Temas• Tutorial: Configuración de Cifrado en el servidor (SSE) para una cola de Amazon SQS

existente (p. 59)• Tutorial: Configuración de sondeos largos para una cola de Amazon SQS (p. 62)• Tutorial: Configuración de una cola de mensajes fallidos de Amazon SQS (p. 65)• Tutorial: Configuración del tiempo de espera de visibilidad de una cola de Amazon SQS (p. 69)• Tutorial: Configuración de una cola con retraso de Amazon SQS (p. 73)

Tutorial: Configuración de Cifrado en el servidor (SSE)para una cola de Amazon SQS existentePuede habilitar SSE para que una cola proteja sus datos. Para obtener más información acerca del uso deSSE, consulte Cifrado en reposo (p. 149).

Important

Todas las solicitudes hechas a las colas con SSE habilitado deben usar HTTPS y SignatureVersion 4.Cuando deshabilita SSE, los mensajes existentes de una cola permanecen cifrados. Sin embargo,estos mensajes siguen estando disponibles para los consumidores siempre que la clave de KMSpermanezca habilitada y accesible.

En este tutorial, aprenderá a habilitar, deshabilitar y configurar SSE para una cola de Amazon SQSexistente.

Temas• Consola de administración de AWS (p. 59)• AWS SDK for Java (p. 61)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. En la lista de las colas, seleccione una cola.

59

Page 65: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de SSE para una cola

3. En Queue Actions (Acciones de la cola), seleccione Configure Queue (Configurar cola).

Aparece el cuadro de diálogo Configure QueueName (Configurar QueueName).4. Para habilitar o deshabilitar SSE, utilice la casilla Use SSE (Usar SSE).5. Especifique el ID de la clave maestra del cliente (CMK). Para obtener más información, consulte

Términos clave (p. 151)..

Se muestran los valores de Description (Descripción), Account (Cuenta) y Key ARN (ARN de clave) decada CMK.

Important

Si no es el propietario de la CMK o si ha iniciado sesión con una cuenta que no tiene lospermisos kms:ListAliases y kms:DescribeKey, no podrá ver la información sobre laCMK en la consola de Amazon SQS.Pida al propietario de la CMK que le conceda estos permisos. Para obtener más información,consulte Permisos API de AWS KMS: Referencia de recursos y acciones en la AWS KeyManagement Service Developer Guide.

• Para utilizar la CMK administrada por AWS para Amazon SQS, selecciónela en la lista.

Note

Tenga en cuenta lo siguiente:• Si no se especifica una CMK personalizada, Amazon SQS utiliza la CMK administrada

por AWS en Amazon SQS. Para obtener instrucciones acerca de la creación de CMKpersonalizadas, consulte Creating Keys en la AWS Key Management Service DeveloperGuide.

• La primera vez que usa la Consola de administración de AWS para especificar la CMKadministrada por AWS para Amazon SQS para una cola, AWS KMS crea la CMKadministrada por AWS para Amazon SQS.

60

Page 66: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de SSE para una cola

• Asimismo, la primera vez que utilice la acción SendMessage o SendMessageBatch enun tema que tenga SSE habilitado, AWS KMS creará la CMK que administra AWS paraAmazon SQS.

• Para usar una CMK personalizada para la cuenta de AWS, selecciónela en la lista.

Note

Para obtener instrucciones acerca de la creación de CMK personalizadas, consulteCreating Keys en la AWS Key Management Service Developer Guide.

• Para usar un ARN de CMK personalizado desde su cuenta de AWS o desde otra cuenta de AWS,seleccione Enter an existing CMK ARN (Escribir ARN de CMK existente) en la lista y escriba o copiela CMK.

6. (Opcional) En Data key reuse period (Periodo de reutilización de clave de datos), especifique un valorentre 1 minuto y 24 horas. El valor predeterminado es 5 minutos. Para obtener más información,consulte Descripción del período de reutilización de la clave de datos (p. 152).

7. Haga clic en Save Changes (Guardar cambios).

Los cambios se aplican a la cola.

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para poder usar SSE, debe configurar las políticas de claves de AWS KMS para permitir el cifrado de lascolas y el cifrado y descifrado de mensajes. Para obtener más información, consulte Configuración de lospermisos de AWS KMS (p. 154)

1. Obtenga el ID de la clave maestra del cliente (CMK). Para obtener más información, consulteTérminos clave (p. 151)..

Note

Tenga en cuenta lo siguiente:

• Si no se especifica una CMK personalizada, Amazon SQS utiliza la CMK administradapor AWS en Amazon SQS. Para obtener instrucciones acerca de la creación de CMKpersonalizadas, consulte Creating Keys en la AWS Key Management Service DeveloperGuide.

• La primera vez que usa la Consola de administración de AWS para especificar la CMKadministrada por AWS para Amazon SQS para una cola, AWS KMS crea la CMKadministrada por AWS para Amazon SQS.

61

Page 67: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de sondeos largos para una cola

• Asimismo, la primera vez que utilice la acción SendMessage o SendMessageBatch enun tema que tenga SSE habilitado, AWS KMS creará la CMK que administra AWS paraAmazon SQS.

2. Para habilitar cifrado en el servidor, especifique el ID de la CMK estableciendo el atributoKmsMasterKeyId de la acción CreateQueue o SetQueueAttributes.

En el siguiente ejemplo de código, SSE se habilita para una cola existente mediante la CMKadministrada por AWS para Amazon SQS:

final SetQueueAttributesRequest setAttributesRequest = new SetQueueAttributesRequest();setAttributesRequest.setQueueUrl(queueUrl); // Enable cifrado en el servidor by specifying the alias ARN of the// AWS managed CMK for Amazon SQS.final String kmsMasterKeyAlias = "arn:aws:kms:us-east-2:123456789012:alias/aws/sqs";attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); final SetQueueAttributesResult setAttributesResult = client.setQueueAttributes(setAttributesRequest);

Para deshabilitar cifrado en el servidor en una cola existente, establezca el atributo KmsMasterKeyIden una cadena vacía mediante la acción SetQueueAttributes.

Important

null no es un valor válido para KmsMasterKeyId.3. (Opcional) Especifique el período de tiempo, en segundos, durante el cual Amazon SQS puede

reutilizar una clave de datos (p. 151) para cifrar o descifrar mensajes antes de llamar a AWSKMS. Establezca el atributo KmsDataKeyReusePeriodSeconds de la acción CreateQueueo SetQueueAttributes. Los valores posibles pueden estar entre 60 segundos (1 minuto) y86 400 segundos (24 horas). Si no especifica ningún valor, se utiliza el valor predeterminado de 300segundos (5 minutos).

El siguiente ejemplo de código establece el período de reutilización de la clave de datos en 60segundos (1 minuto):

// (Optional) Specify the length of time, in seconds, for which Amazon SQS can reuse // a data key to encrypt or decrypt messages before calling AWS KMS again.attributes.put("KmsDataKeyReusePeriodSeconds", "60");

Para obtener información sobre cómo recuperar los atributos de una cola, consulte los ejemplos de laAmazon Simple Queue Service API Reference.

Para recuperar el ID de CMK o el periodo de volver a usar la clave de datos de una cola determinada,use los atributos KmsMasterKeyId y KmsDataKeyReusePeriodSeconds de la acciónGetQueueAttributes.

Para obtener información sobre cómo cambiar una cola a una CMK diferente con el mismo alias, consulteActualización de un alias en la AWS Key Management Service Developer Guide.

Tutorial: Configuración de sondeos largos para unacola de Amazon SQSCuando el tiempo de espera de la acción de la API ReceiveMessage es superior a 0, se produce unsondeo largo. El tiempo máximo de espera de sondeo largo es de 20 segundos. El sondeo largo ayuda areducir el costo de uso de Amazon SQS al eliminar el número de respuestas vacías (cuando no hay ningún

62

Page 68: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de sondeos largos para una cola

mensaje disponible para una solicitud ReceiveMessage) y las falsas respuestas vacías (cuando losmensajes están disponibles en la cola, pero no se incluyen en una respuesta). En este tutorial, aprenderá aconfigurar el sondeo largo de una cola de Amazon SQS. Para obtener más información, consulte Sondeoscortos y largos de Amazon SQS (p. 96).

Temas• Consola de administración de AWS (p. 63)• AWS SDK for Java (p. 63)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. Elija Create New Queue (Crear nueva cola).3. En la página Create New Queue (Crear nueva cola), asegúrese de que está en la región correcta y, a

continuación, escriba el Queue Name (Nombre de la cola).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.4. Estándar está seleccionado de forma predeterminada. Elija FIFO.5. Elija Configure Queue.6. En Receive Message Wait Time (Tiempo de espera de recepción del mensaje), escriba un número

comprendido entre 1 y 20.

Note

Un valor de 0 configura el sondeo corto. Para obtener más información, consulte Diferenciasentre el sondeo corto y el sondeo largo (p. 98).

7. Elija Create Queue.

La cola nueva está configurada para utilizar el sondeo largo, que se crea y se selecciona en la lista decolas.

Note

Cuando crea una cola, puede llevar un tiempo su propagación completa en Amazon SQS.

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para configurar el sondeo largo para una cola

Requisitos previos

Añada el paquete aws-java-sdk-sqs.jar en la ruta de clases de Java. En el siguiente ejemplo semuestra esta dependencia en el archivo pom.xml de un proyecto Maven.

<dependencies> <dependency>

63

Page 69: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de sondeos largos para una cola

<groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version><replaceable>LATEST</replaceable></version> </dependency></dependencies>

SQSLongPollingExample.java

En el siguiente ejemplo de código Java, se crea una cola estándar y se configura un sondeo largo paraella.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */ import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.CreateQueueRequest;import com.amazonaws.services.sqs.model.QueueAttributeName;

import java.util.Scanner;

public class SQSLongPollingExample { public static void main(String[] args) {

final Scanner input = new Scanner(System.in);

System.out.print("Enter the queue name: "); final String queueName = input.nextLine();

System.out.print("Enter the ReceiveMessage wait time (1-20 seconds): "); final String receiveMessageWaitTime = input.nextLine();

/* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

try { // Create a queue with long polling. final CreateQueueRequest createQueueRequest = new CreateQueueRequest() .withQueueName(queueName) .addAttributesEntry(QueueAttributeName.ReceiveMessageWaitTimeSeconds .toString(), receiveMessageWaitTime); sqs.createQueue(createQueueRequest);

System.out.println("Created queue " + queueName + " with " + "ReceiveMessage wait time set to " + receiveMessageWaitTime +

64

Page 70: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola de mensajes fallidos

" seconds.");

} catch (final AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which means " + "your request made it to Amazon SQS, but was " + "rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (final AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means " + "the client encountered a serious internal problem while " + "trying to communicate with Amazon SQS, such as not " + "being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } }}

Para configurar el sondeo largo para una cola y enviar, recibir y eliminar unmensaje

1. Copie el programa de ejemplo de la cola estándar (p. 81) o de la cola FIFO (p. 87).2. Recupere la URL de la cola:

final String queueUrl = sqs.getQueueUrl(queueName).getQueueUrl();

3. Utilice la acción SetQueueAttributesRequest para configurar el sondeo largo para una colaexistente:

final SetQueueAttributesRequest setQueueAttributesRequest = new SetQueueAttributesRequest() .withQueueUrl(queueUrl) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20");sqs.setQueueAttributes(setQueueAttributesRequest);

4. Utilice la acción ReceiveMessageRequest para configurar el sondeo largo para la recepción de unmensaje:

final ReceiveMessageRequest receive_request = new ReceiveMessageRequest() .withQueueUrl(queueUrl) .withWaitTimeSeconds(20);sqs.receiveMessage(receive_request);

5. Compile y ejecute el programa.

El sondeo largo de la cola se ha configurado y el mensaje se ha enviado, recibido y eliminado.

Tutorial: Configuración de una cola de mensajesfallidos de Amazon SQSUna cola de mensajes fallidos es una cola a la que otras colas (de origen) pueden enviar mensajes queno se pueden procesar (consumir) correctamente. En este tutorial, aprenderá a crear una cola de origende Amazon SQS y a configurar una segunda cola de mensajes fallidos para ella. Para obtener másinformación, consulte Colas de mensajes fallidos de Amazon SQS (p. 98).

65

Page 71: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola de mensajes fallidos

Important

Al designar una cola como cola de origen, no se crea ninguna cola de mensajes fallidos de formaautomática. Primero deberá crear una cola estándar o FIFO antes de designarla como cola demensajes fallidos. En este tutorial, se presupone que ya tiene una cola de FIFO normal llamadaMyDeadLetterQueue.fifo.La cola de mensajes fallidos de una cola FIFO también debe ser una cola FIFO. De igual manera,la cola de mensajes fallidos de una cola estándar también debe ser una cola estándar.

Temas• Consola de administración de AWS (p. 66)• AWS SDK for Java (p. 67)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. Elija Create New Queue (Crear nueva cola).3. En la página Create New Queue (Crear nueva cola), asegúrese de que está en la región correcta y, a

continuación, escriba el Queue Name (Nombre de la cola).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.4. Estándar está seleccionado de forma predeterminada. Elija FIFO.5. Elija Configure Queue.6. En este ejemplo, habilita la política de redireccionamiento para su nueva cola, define la cola

MyDeadLetterQueue.fifo como la cola de mensajes fallidos y define el número máximo derecepciones en 50.

Para configurar la cola de mensajes fallidos, elija Use Redrive Policy.

Introduzca en Dead Letter Queue el nombre de la cola de mensajes fallidos existente a la que deseaque las colas de origen envíen mensajes.

Para configurar el número de veces que se puede recibir un mensaje antes de que se envíe a unacola de mensajes fallidos, defina en Maximum Receives un valor comprendido entre 1 y 1 000.

66

Page 72: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola de mensajes fallidos

Note

La configuración de Maximum Receives máxima se aplica únicamente a los mensajesindividuales.

Elija Create Queue.

La cola nueva está configurada para utilizar una cola de mensajes fallidos, que se crea y se seleccionaen la lista de colas.

Note

Cuando crea una cola, puede llevar un tiempo su propagación completa en Amazon SQS.

En la pestaña Redrive Policy se muestran el valor de Maximum Receives y el ARN de Dead LetterQueue.

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para configurar una cola de mensajes fallidosRequisitos previos

Añada el paquete aws-java-sdk-sqs.jar en la ruta de clases de Java. En el siguiente ejemplo semuestra esta dependencia en el archivo pom.xml de un proyecto Maven.

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version><replaceable>LATEST</replaceable></version> </dependency></dependencies>

SQSDeadLetterQueueExample.java

En el siguiente ejemplo de código Java, se crean dos colas de estándar y se configura una cola que actúacomo origen de otra: la cola de mensajes fallidos.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing

67

Page 73: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola de mensajes fallidos

* permissions and limitations under the License. * */

import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;import com.amazonaws.services.sqs.model.GetQueueAttributesResult;import com.amazonaws.services.sqs.model.QueueAttributeName;import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

import java.util.Scanner;

public class SQSDeadLetterQueueExample { public static void main(String[] args) {

final Scanner input = new Scanner(System.in);

System.out.print("Enter the source queue name: "); final String sourceQueueName = input.nextLine();

System.out.print("Enter the dead-letter queue name: "); final String deadLetterQueueName = input.nextLine();

/* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

try { // Create a source queue. sqs.createQueue(sourceQueueName);

// Create a dead-letter queue. sqs.createQueue(deadLetterQueueName);

// Get the dead-letter queue ARN. final String deadLetterQueueUrl = sqs.getQueueUrl(deadLetterQueueName) .getQueueUrl(); final GetQueueAttributesResult deadLetterQueueAttributes = sqs.getQueueAttributes( new GetQueueAttributesRequest(deadLetterQueueUrl) .withAttributeNames("QueueArn")); final String deadLetterQueueArn = deadLetterQueueAttributes.getAttributes().get("QueueArn");

// Set the dead-letter queue for the source queue using the redrive policy. final String sourceQueueUrl = sqs.getQueueUrl(sourceQueueName) .getQueueUrl(); final SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(sourceQueueUrl) .addAttributesEntry(QueueAttributeName.RedrivePolicy.toString(), "{\"maxReceiveCount\":\"5\", \"deadLetterTargetArn\":\"" + deadLetterQueueArn + "\"}"); sqs.setQueueAttributes(request);

System.out.println("Set queue " + sourceQueueName + " as source queue " + "for dead-letter queue " + deadLetterQueueName + ".");

} catch (final AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which means " + "your request made it to Amazon SQS, but was " +

68

Page 74: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración del tiempo de

espera de visibilidad de una cola

"rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (final AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means " + "the client encountered a serious internal problem while " + "trying to communicate with Amazon SQS, such as not " + "being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } }}

Para configurar una cola de mensajes fallidos y enviar, recibir y eliminar unmensaje

1. Copie el programa de ejemplo de la cola estándar (p. 81) o de la cola FIFO (p. 87).2. Defina una cadena que contenga los valores y parámetros con formato JSON del atributo de cola

RedrivePolicy:

final String redrivePolicy = "{\"maxReceiveCount\":\"5\", \"deadLetterTargetArn\":\"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}";

3. Use la acción CreateQueue o SetQueueAttributesRequest para configurar el atributoRedrivePolicy de la cola:

final SetQueueAttributesRequest queueAttributes = new SetQueueAttributesRequest();final Map<String,String> attributes = new HashMap<String,String>(); attributes.put("RedrivePolicy", redrivePolicy); queueAttributes.setAttributes(attributes);queueAttributes.setQueueUrl(myQueueUrl);sqs.setQueueAttributes(queueAttributes);

4. Compile y ejecute el programa.

La cola de mensajes fallidos se ha configurado y el mensaje se ha enviado, recibido y eliminado.

Tutorial: Configuración del tiempo de espera devisibilidad de una cola de Amazon SQSInmediatamente después de recibir un mensaje, este permanece en la cola. Para evitar que otrosconsumidores procesen el mensaje de nuevo, Amazon SQS establece un tiempo de espera de visibilidad,que es un periodo de tiempo durante el cual Amazon SQS impide que otros consumidores recibany procesen el mensaje. El tiempo de espera de visibilidad predeterminado de un mensaje es de 30segundos. La duración mínima es de 0 segundos. El valor máximo es 12 horas. En este tutorial, aprenderáa configurar el tiempo de espera de visibilidad de una cola con la Consola de administración de AWS yel tiempo de espera de visibilidad de uno o varios mensajes con AWS SDK for Java. Para obtener másinformación, consulte Amazon SQS Tiempo de espera de visibilidad (p. 101).

Note

Puede utilizar la Consola de administración de AWS para configurar el tiempo de espera devisibilidad de las colas, pero no de uno o varios mensajes. Para ello, debe utilizar uno de los SDK

69

Page 75: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración del tiempo de

espera de visibilidad de una cola

de AWS. Para obtener más información, consulte el segundo código Java de ejemplo que seincluye a continuación.

Temas• Consola de administración de AWS (p. 70)• AWS SDK for Java (p. 70)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. Elija Create New Queue (Crear nueva cola).3. En la página Create New Queue (Crear nueva cola), asegúrese de que está en la región correcta y, a

continuación, escriba el Queue Name (Nombre de la cola).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.4. Estándar está seleccionado de forma predeterminada. Elija FIFO.5. Elija Configure Queue.6. En este ejemplo, el tiempo de espera de visibilidad predeterminado se establece en 1 minuto.

7. Elija Create Queue.

La cola nueva está configurada para utilizar un tiempo de espera de visibilidad de 1 minuto, que secrea y se selecciona en la lista de colas.

Note

Cuando crea una cola, puede llevar un tiempo su propagación completa en Amazon SQS.

El valor de Default Visibility Timeout (Tiempo de espera de visibilidad predeterminado) de la cola semuestra en la pestaña Details (Detalles).

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para configurar el tiempo de espera de visibilidad de una cola

Requisitos previos

Añada el paquete aws-java-sdk-sqs.jar en la ruta de clases de Java. En el siguiente ejemplo semuestra esta dependencia en el archivo pom.xml de un proyecto Maven.

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version><replaceable>LATEST</replaceable></version>

70

Page 76: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración del tiempo de

espera de visibilidad de una cola

</dependency></dependencies>

SQSVisibilityTimeoutExample.java

En el siguiente ejemplo de código Java, se crea una cola estándar y se establece su tiempo de espera devisibilidad en 1 minuto.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */ import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.CreateQueueRequest;import com.amazonaws.services.sqs.model.QueueAttributeName;import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

import java.util.Scanner;

public class SQSVisibilityTimeoutExample { public static void main(String[] args) {

final Scanner input = new Scanner(System.in);

System.out.print("Enter the queue name: "); final String queueName = input.nextLine();

System.out.print("Enter the visibility timeout in seconds " + "(0 seconds to 12 hours): "); final String visibilityTimeout = input.nextLine();

/* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

try { // Create a queue. final CreateQueueRequest createQueueRequest = new CreateQueueRequest() .withQueueName(queueName); sqs.createQueue(createQueueRequest);

// Set the visibility timeout for the queue. final String queueUrl = sqs.getQueueUrl(queueName) .getQueueUrl(); final SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(queueUrl)

71

Page 77: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración del tiempo de

espera de visibilidad de una cola

.addAttributesEntry(QueueAttributeName.VisibilityTimeout .toString(), visibilityTimeout); sqs.setQueueAttributes(request);

System.out.println("Created queue " + queueName + " with " + "visibility timeout set to " + visibilityTimeout + " seconds.");

} catch (final AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which means " + "your request made it to Amazon SQS, but was " + "rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (final AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means " + "the client encountered a serious internal problem while " + "trying to communicate with Amazon SQS, such as not " + "being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } }}

Para configurar el tiempo de espera de visibilidad de un único mensaje o variosmensajes y enviar, recibir y eliminar mensajes

1. Copie el programa de ejemplo de la cola estándar (p. 81) o de la cola FIFO (p. 87).2. Para configurar el tiempo de espera de visibilidad de un único mensaje, pase la URL de la cola, el

identificador de recepción del mensaje y el valor de tiempo de espera de visibilidad en segundos.

// Get the message receipt handle.String receiptHandle = sqs.receiveMessage(myQueueUrl) .getMessages() .get(0) .getReceiptHandle();

// Pass the queue URL, the message receipt handle, and the visibility timeout value.sqs.changeMessageVisibility(myQueueUrl, receiptHandle, timeoutValue);

3. Para configurar el tiempo de espera de visibilidad de varios mensajes (por ejemplo, si desea configurarvalores de tiempo de espera diferentes para distintos mensajes), cree una ArrayList, añádalemensajes con el valor de tiempo de espera de visibilidad en segundos y, a continuación, pase la URLde la cola y la ArrayList de mensajes.

// Create an ArrayList for batched messages.List<ChangeMessageVisibilityBatchRequestEntry> entries = new ArrayList<ChangeMessageVisibilityBatchRequestEntry>();

// Add the first message to the ArrayList with a visibility timeout value.entries.add(new ChangeMessageVisibilityBatchRequestEntry( "uniqueMessageId123", sqs.receiveMessage(myQueueUrl) .getMessages() .get(0) .getReceiptHandle()) .withVisibilityTimeout(timeoutValue));

// Add the second message to the ArrayList with a different timeout value. entries.add(new ChangeMessageVisibilityBatchRequestEntry(

72

Page 78: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola con retraso de Amazon SQS

"uniqueMessageId456", sqs.receiveMessage(myQueueUrl) .getMessages() .get(0) .getReceiptHandle()) .withVisibilityTimeout(timeoutValue + 60));

sqs.changeMessageVisibilityBatch(myQueueUrl, entries);

4. Compile y ejecute el programa.

El tiempo de espera de visibilidad de uno o varios mensajes se ha configurado y el mensaje se haenviado, recibido y eliminado.

Tutorial: Configuración de una cola con retraso deAmazon SQSLas colas con retraso le permiten posponer la entrega de nuevos mensajes a una cola durante una seriede segundos, por ejemplo, cuando la aplicación consumidora necesita tiempo adicional para procesarmensajes. Si crea una cola con retraso, cualquier mensaje que envíe a dicha cola permanecerá invisiblepara los consumidores mientras dure el período de retraso. El tiempo de retraso (mínimo) predeterminadode una cola es de 0 segundos. El tiempo máximo es de 15 minutos. En este tutorial, aprenderá a configuraruna cola con retraso utilizando la Consola de administración de AWS o AWS SDK for Java. Para obtenermás información, consulte Amazon SQS Colas con retraso (p. 104).

Temas• Consola de administración de AWS (p. 73)• AWS SDK for Java (p. 74)

Consola de administración de AWS1. Inicie sesión en la consola de Amazon SQS.2. Elija Create New Queue (Crear nueva cola).3. En la página Create New Queue (Crear nueva cola), asegúrese de que está en la región correcta y, a

continuación, escriba el Queue Name (Nombre de la cola).

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.4. Estándar está seleccionado de forma predeterminada. Elija FIFO.5. Elija Configure Queue.6. En este ejemplo, establece el retraso de entrega en 1 minuto.

7. Elija Create Queue.

La cola nueva está configurada para utilizar un retraso de 1 minuto, que se crea y se selecciona en lalista de colas.

Note

Cuando crea una cola, puede llevar un tiempo su propagación completa en Amazon SQS.

El Delivery Delay (Retraso de entrega) de la cola se muestra en la pestaña Details (Detalles).

73

Page 79: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola con retraso de Amazon SQS

AWS SDK for JavaAntes de comenzar a trabajar con el código de ejemplo, especifique sus credenciales de AWS. Paraobtener más información, consulte Configuración de credenciales y regiones de AWS para desarrollo en laAWS SDK for Java Developer Guide.

Para configurar una cola con retraso

Requisitos previos

Añada el paquete aws-java-sdk-sqs.jar en la ruta de clases de Java. En el siguiente ejemplo semuestra esta dependencia en el archivo pom.xml de un proyecto Maven.

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version><replaceable>LATEST</replaceable></version> </dependency></dependencies>

SQSDelayQueueExample.java

En el siguiente ejemplo de código Java, se crea una cola estándar y se establece el tiempo de espera deretraso en 1 minuto.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */ import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.CreateQueueRequest;import com.amazonaws.services.sqs.model.QueueAttributeName;import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

import java.util.Scanner;

public class SQSDelayQueueExample { public static void main(String[] args) {

final Scanner input = new Scanner(System.in);

74

Page 80: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola con retraso de Amazon SQS

System.out.print("Enter the queue name: "); final String queueName = input.nextLine();

System.out.print("Enter the delay in seconds (0 seconds to 15 minutes): "); final String queueDelay = input.nextLine();

/* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

try { // Create a queue. final CreateQueueRequest createQueueRequest = new CreateQueueRequest() .withQueueName(queueName); sqs.createQueue(createQueueRequest);

// Set the delay for the queue. final String queueUrl = sqs.getQueueUrl(queueName) .getQueueUrl(); final SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(queueUrl) .addAttributesEntry(QueueAttributeName.DelaySeconds .toString(), queueDelay); sqs.setQueueAttributes(request);

System.out.println("Created queue " + queueName + " with " + "delay set to " + queueDelay + " seconds.");

} catch (final AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which means " + "your request made it to Amazon SQS, but was " + "rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (final AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means " + "the client encountered a serious internal problem while " + "trying to communicate with Amazon SQS, such as not " + "being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } }}

Para configurar una cola con retraso y enviar, recibir y eliminar mensajes

1. Copie el programa de ejemplo de la cola estándar (p. 81) o de la cola FIFO (p. 87).2. Para configurar una cola con retraso, transfiera el valor de retraso en segundos.

// Set the delay for the queue.final String queueUrl = sqs.getQueueUrl(queueName).getQueueUrl();final SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(queueUrl) .addAttributesEntry(QueueAttributeName.DelaySeconds.toString(), queueDelay);sqs.setQueueAttributes(request);

3. Compile y ejecute el programa.

75

Page 81: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración de una cola con retraso de Amazon SQS

La cola con retraso se ha configurado y el mensaje se ha enviado, recibido y eliminado.

76

Page 82: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresArquitectura básica

Funcionamiento de Amazon SQSEn esta sección se describen los tipos de colas de Amazon SQS y sus propiedades básicas. También sedescriben los identificadores de colas y mensajes y varios flujos de trabajo de gestión de colas y mensajes.

Temas• Arquitectura básica de Amazon SQS (p. 77)• Amazon SQS Colas Estándar (p. 80)• Amazon SQS Colas FIFO (First-In-First-Out) (p. 83)• Amazon SQS Identificadores de colas y mensajes (p. 90)• Metadatos de mensajes (p. 91)• Recursos necesarios para procesar mensajes de Amazon SQS (p. 95)• Amazon SQS Etiquetas de asignación de costos (p. 95)• Sondeos cortos y largos de Amazon SQS (p. 96)• Colas de mensajes fallidos de Amazon SQS (p. 98)• Amazon SQS Tiempo de espera de visibilidad (p. 101)• Amazon SQS Colas con retraso (p. 104)• Colas temporales de Amazon SQS (p. 104)• Temporizadores de mensajes de Amazon SQS (p. 108)• Administración de mensajes grandes de Amazon SQS mediante Amazon S3 (p. 109)• Uso de JMS y Amazon SQS (p. 112)

Arquitectura básica de Amazon SQS

En esta sección se describen las partes de un sistema de mensajería distribuido y se explica el ciclo devida de un mensaje de Amazon SQS.

Colas distribuidasUn sistema de mensajería distribuido consta de tres partes principales: los componentes del sistemadistribuido, la cola (distribuida en los servidores de Amazon SQS) y los mensajes de la cola.

En la siguiente situación, el sistema dispone de varios productores (componentes que envían mensajesa la cola) y consumidores (componentes que reciben mensajes desde la cola). La cola (que contiene losmensajes A a E) almacena de forma redundante los mensajes en varios servidores de Amazon SQS.

77

Page 83: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCiclo de vida del mensaje

Ciclo de vida del mensajeEn el escenario siguiente se describe el ciclo de vida de un mensaje Amazon SQS en una cola, desde lacreación hasta la eliminación.

78

Page 84: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCiclo de vida del mensaje

A producer (component 1) sends message A to a queue, and the message is distributed across theAmazon SQS servers redundantly.

Cuando un consumidor (componente 2) está preparado para procesar mensajes, consume mensajesde la cola y se devuelve el mensaje A. Mientras se procesa, el mensaje A permanece en la cola y no sedevuelve a las solicitudes de recepción posteriores durante el tiempo de espera de visibilidad (p. 101).

El consumidor (componente 2) elimina el mensaje A de la cola para evitar que se reciba y procese denuevo cuando termina el tiempo de espera de visibilidad.

Note

Amazon SQS elimina automáticamente los mensajes que han estado en una cola durante mástiempo que el periodo máximo de retención de mensajes. El periodo de retención de mensajespredeterminado es de 4 días. Sin embargo, puede establecer el periodo de retención de unmensaje en un valor comprendido entre 60 y 1.209.600 segundos (14 días) mediante la acciónSetQueueAttributes .

79

Page 85: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresColas Estándar

Amazon SQS Colas EstándarAmazon SQS ofrece estándar como el tipo de cola. Las colas Estándar de Las colas Estándar admiten unnúmero casi ilimitado de transacciones por segundo (TPS) para cada acción de la API (SendMessage,ReceiveMessage o DeleteMessage). admiten la entrega de mensajes al menos una vez. Sin embargo,ocasionalmente (debido a la arquitectura altamente distribuida que permite una capacidad de procesocasi ilimitada), puede suceder que más de una copia de un mensaje no se entregue en orden. Lascolas Estándar proporcionan un protocolo de ordenación del máximo esfuerzo, lo que garantiza que losmensajes se entregan en términos generales en el mismo orden en que se envían.

Para obtener información acerca de cómo crear colas estándar con o sin cifrado en el servidorutilizando la Consola de administración de AWS, AWS SDK for Java (y la acción CreateQueue) o AWSCloudFormation, consulte Creación de una cola de Amazon SQS (p. 15) y Creación de una cola deAmazon SQS con SSE (p. 19).

Puede usar colas de mensajes estándar en muchos escenarios, siempre que su aplicación pueda procesarlos mensajes que llegan más de una vez y fuera de orden, por ejemplo:

• Para desacoplar solicitudes de usuario en tiempo real de un trabajo en segundo plano intensivo –Permite a los usuarios cargar archivos multimedia mientras cambia el tamaño o se codifican.

• Para asignar tareas a varios nodos de empleado – Procesa un alto número de solicitudes de validaciónde tarjetas de crédito.

• Para agrupar mensajes para procesarlos más adelante – Programa varias entradas para añadirlas a unabase de datos.

Para ver las cuotas relacionadas con las colas de estándar, consulte Cuotas relacionadas con lascolas (p. 143).

Para conocer las prácticas recomendadas del trabajo con colas estándar, consulte Recomendaciones paralas colas Amazon SQS Estándar y FIFO (First-In-First-Out) (p. 136).

Temas• Ordenación de los mensajes (p. 80)• Al menos una entrega (p. 80)• Ejemplo funcional en Java de colas Estándar (p. 81)

Ordenación de los mensajesUna cola estándar hace todo lo posible para conservar el orden de los mensajes, pero puede sucederque más de una copia de un mensaje no se entregue en orden. Si el sistema necesita que este ordense conserve, recomendamos utilizar una cola FIFO (First-In-First-Out) (p. 83) o añadir información desecuenciación en cada mensaje para que pueda reordenar los mensajes cuando se reciban.

Al menos una entregaAmazon SQS almacena copias de sus mensajes en varios servidores para mejorar la redundancia y lograruna alta disponibilidad. En raras ocasiones, uno de los servidores que almacena una copia de un mensajepodría no estar disponible cuando usted reciba o elimine un mensaje.

En este caso, la copia no se elimina en el servidor no disponible y podría recibir una nueva copia alrecibir mensajes. Diseñe sus aplicaciones de modo que sean idempotentes (no deben verse afectadasnegativamente si se procesa el mismo mensaje más de una vez).

80

Page 86: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional en Java de colas Estándar

Ejemplo funcional en Java de colas EstándarObtenga información sobre la funcionalidad de colas estándar de Amazon SQS con los requisitos Mavenproporcionados y el código Java de ejemplo.

Requisitos previosAñada el paquete aws-java-sdk-sqs.jar en la ruta de clases de Java. En el siguiente ejemplo semuestra esta dependencia en el archivo pom.xml de un proyecto Maven.

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version><replaceable>LATEST</replaceable></version> </dependency></dependencies>

SQSSimpleJavaClientExample.javaEl siguiente ejemplo de código Java crea una cola y envía, recibe y elimina un mensaje.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.*;

import java.util.List;import java.util.Map.Entry;

/** * This sample demonstrates how to make basic requests to Amazon SQS using the * AWS SDK for Java. * <p> * Prerequisites: You must have a valid Amazon Web Services developer account, * and be signed up to use Amazon SQS. For more information about Amazon SQS, * see https://aws.amazon.com/sqs * <p> * Make sure that your credentials are located in ~/.aws/credentials */public class SQSSimpleJavaClientExample { public static void main(String[] args) { /* * Create a new instance of the builder with all defaults (credentials

81

Page 87: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional en Java de colas Estándar

* and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

System.out.println("==============================================="); System.out.println("Getting Started with Amazon SQS Estándar Queues"); System.out.println("===============================================\n");

try { // Create a queue. System.out.println("Creating a new SQS queue called MyQueue.\n"); final CreateQueueRequest createQueueRequest = new CreateQueueRequest("MyQueue"); final String myQueueUrl = sqs.createQueue(createQueueRequest) .getQueueUrl();

// List all queues. System.out.println("Listing all queues in your account.\n"); for (final String queueUrl : sqs.listQueues().getQueueUrls()) { System.out.println(" QueueUrl: " + queueUrl); } System.out.println();

// Send a message. System.out.println("Sending a message to MyQueue.\n"); sqs.sendMessage(new SendMessageRequest(myQueueUrl, "This is my message text."));

// Receive messages. System.out.println("Receiving messages from MyQueue.\n"); final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl); final List<Message> messages = sqs.receiveMessage(receiveMessageRequest) .getMessages(); for (final Message message : messages) { System.out.println("Message"); System.out.println(" MessageId: " + message.getMessageId()); System.out.println(" ReceiptHandle: " + message.getReceiptHandle()); System.out.println(" MD5OfBody: " + message.getMD5OfBody()); System.out.println(" Body: " + message.getBody()); for (final Entry<String, String> entry : message.getAttributes() .entrySet()) { System.out.println("Attribute"); System.out.println(" Name: " + entry .getKey()); System.out.println(" Value: " + entry .getValue()); } } System.out.println();

// Delete the message. System.out.println("Deleting a message.\n"); final String messageReceiptHandle = messages.get(0).getReceiptHandle(); sqs.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageReceiptHandle));

// Delete the queue. System.out.println("Deleting the test queue.\n"); sqs.deleteQueue(new DeleteQueueRequest(myQueueUrl)); } catch (final AmazonServiceException ase) {

82

Page 88: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresColas FIFO

System.out.println("Caught an AmazonServiceException, which means " + "your request made it to Amazon SQS, but was " + "rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (final AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means " + "the client encountered a serious internal problem while " + "trying to communicate with Amazon SQS, such as not " + "being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } }}

Amazon SQS Colas FIFO (First-In-First-Out)Las colas FIFO tienen todas las capacidades de las colas estándar (p. 80).

Para obtener información acerca de cómo crear colas FIFO con o sin cifrado en el servidor utilizandola Consola de administración de AWS, AWS SDK for Java (y la acción CreateQueue) o AWSCloudFormation, consulte Creación de una cola de Amazon SQS (p. 15) y Creación de una cola deAmazon SQS con SSE (p. 19).

Las colas FIFO (First-In-First-Out) están diseñadas para mejorar la mensajería entre aplicaciones cuandoel orden de las operaciones y los eventos es fundamental o cuando no se permiten duplicados, porejemplo:

• Para garantizar que los comandos introducidos por el usuario se ejecutan en el orden correcto.• Para mostrar el precio correcto del producto enviando las modificaciones de precios en el orden

adecuado.• Para evitar que un estudiante se matricule en un curso antes de registrarse para obtener una cuenta.

Las colas FIFO también proporcionan procesamiento único, pero tienen número limitado de transaccionespor segundo (TPS):

• De forma predeterminada, con el procesamiento por lotes (p. 211), las colas FIFO admitenhasta 3000 mensajes por segundo (TPS), por acción de API (SendMessage, ReceiveMessage oDeleteMessage). Para solicitar un aumento de la cuota, envíe una solicitud de soporte técnico.

• Sin procesamiento por lotes, las colas FIFO admiten hasta 300 mensajes por segundo, por acción deAPI (SendMessage, ReceiveMessage o DeleteMessage).

Note

• Amazon SNS no es compatible actualmente con colas FIFO.• El nombre de una cola FIFO deber terminar por el sufijo .fifo. El sufijo se tiene en cuenta en

la cuota del nombre de la cola de 80 caracteres. Para determinar si una cola es FIFO (p. 83),puede comprobar si el nombre termina por el sufijo.

Para ver las cuotas relacionadas con las colas de FIFO, consulte Cuotas relacionadas con lascolas (p. 143).

83

Page 89: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresOrdenación de los mensajes

Para conocer las prácticas recomendadas del trabajo con colas FIFO, consulte Recomendacionesadicionales para las colas FIFO de Amazon SQS (p. 139) y Recomendaciones para las colas AmazonSQS Estándar y FIFO (First-In-First-Out) (p. 136).

Para obtener información acerca de la compatibilidad de clientes y servicios con las colas FIFO, consulteCompatibilidad (p. 87).

Temas• Ordenación de los mensajes (p. 84)• Términos clave (p. 84)• FIFO Lógica de entrega (p. 85)• Procesamiento único (p. 86)• Pasar de una cola de Estándar a una cola de FIFO (p. 86)• Compatibilidad (p. 87)• Ejemplo funcional en Java de colas FIFO (p. 87)

Ordenación de los mensajesLa cola FIFO mejora y complementa la cola estándar (p. 80). Las características más importantes deeste tipo de cola son entrega FIFO (First-In-First-Out) (p. 85) y procesamiento único (p. 86):

• El orden en que se envían y reciben los mensajes se conserva estrictamente, y un mensaje se envía unasola vez y permanece disponible hasta que un consumidor lo procesa y elimina.

• No se introducen duplicados en la cola.

Además, las colas FIFO admiten grupos de mensajes que permiten varios grupos de mensajes ordenadosen una única cola. No existe ninguna cuota para el número de grupos de mensaje dentro de una colaFIFO.

Términos claveLos siguientes términos clave pueden ayudarle a comprender mejor la funcionalidad de las colas FIFO.Para obtener más información, consulte Amazon Simple Queue Service API Reference.

ID de desduplicación de mensajes

The token utilizado para la desduplicación de los mensajes enviados. Si un mensaje con un ID dedesduplicación concreto se envía satisfactoriamente, cualquier otro mensaje con el mismo ID dedesduplicación de mensajes se acepta pero no se entregan durante el intervalo de desduplicación decinco minutos.

Note

La desduplicación de mensajes se aplica a una cola completa, no a grupos de mensajesindividuales.Amazon SQS continua haciendo un seguimiento del ID de la deduplicación del mensajeincluso después de que el mensaje se reciba y elimine.

ID de grupo de mensajes

etiqueta que especifica que un mensaje pertenece a un grupo de mensajes específico. Los mensajesque pertenecen al mismo grupo de mensajes siempre se procesan de uno en uno, en orden estrictorelativo al grupo de mensajes (sin embargo, un mensaje que pertenezca a diferentes grupos demensajes pueden procesarse sin guardar el orden).

84

Page 90: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresFIFO Lógica de entrega

ID de intento de solicitud de recepción

token utilizado para la desduplicación de las llamadas ReceiveMessage.Número secuencial

número grande, no consecutivo que Amazon SQS asigna a cada mensaje.

FIFO Lógica de entregaLos siguientes conceptos puede ayudarle a entender mejor cómo se envían y reciben mensajes desdeFIFO.

Envío de mensajes

Si se envían varios mensajes de forma sucesiva a una cola FIFO, cada uno de ellos con un ID dedesduplicación de mensajes distinto, Amazon SQS almacena los mensajes y reconoce la transmisión.A continuación, se puede recibir y procesar cada mensaje en el mismo orden en que se transmitieron.

En las colas FIFO, los mensajes se ordenan en función del ID de grupo de mensajes. Si varios hosts(o subprocesos diferentes del mismo host) envían mensajes con el mismo ID de grupo de mensajes auna cola FIFO, Amazon SQS entrega los mensajes en el orden en que llegan para su procesamiento.Para garantizar que Amazon SQS conserva el orden en que los mensajes se envían y reciben,asegúrese de que cada productor utiliza un ID de grupo de mensajes único para enviar todos susmensajes.

La lógica de las colas FIFO se aplica únicamente por ID de grupo de mensajes. Cada ID de grupode mensajes representa un grupo de mensajes con una ordenación distinta dentro de una cola deAmazon SQS. Para cada ID de grupo de mensajes, todos los mensajes se envían y reciben porriguroso orden. No obstante, es posible que los mensajes con diferentes valores de ID de grupo demensajes no se envíen y reciban en orden. Debe asociar un ID de grupo de mensajes al mensaje.Si no proporciona un ID de grupo de mensajes, la acción da error. Si necesita un único grupo demensajes ordenados, proporcione el mismo ID de grupo de mensajes para los mensajes enviados a lacola FIFO.

Recepción de mensajes

No puede solicitar la recepción de mensajes con un ID de grupo de mensajes específico.

Cuando se reciben mensajes de una cola FIFO con varios ID de grupo de mensajes, AmazonSQS intenta primero devolver el máximo número de mensajes que tienen el mismo ID de grupo demensajes como sea posible. Esto permite que otros consumidores procesen los mensajes que tienenun ID de grupo de mensajes diferente.

Note

Es posible recibir hasta 10 mensajes en una sola llamada mediante el parámetro de solicitudMaxNumberOfMessages de la acción ReceiveMessage de la Estos mensajes conservansu orden FIFO y pueden tener el mismo ID de grupo de mensajes. Por lo tanto, si hay menosde 10 mensajes disponibles con el mismo ID de grupo de mensajes, es posible que recibamensajes de otro ID de grupo de mensajes en el mismo lote de 10 mensajes, pero aun así enorden FIFO.

Varios reintentos

Las colas FIFO permiten que el consumidor o productor haga varios intentos:• Si el productor detecta una acción SendMessage fallida, puede intentar el envío cuantas

veces sean necesarias utilizando el mismo ID de desduplicación del mensaje. Suponiendoque el productor reciba por lo menos un reconocimiento antes de que finalice el intervalo dedesduplicación, los intentos sucesivos no afectan al orden de los mensajes ni introduce duplicados.

85

Page 91: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresProcesamiento único

• Si el consumidor detecta una acción ReceiveMessage fallida, puede intentar el envío cuantasveces sean necesarias utilizando el mismo ID de intento de solicitud. Suponiendo que el consumidorreciba por lo menos una confirmación antes de que finalice el tiempo de espera de visibilidad, losintentos sucesivos no afectan al orden de los mensajes.

• Cuando recibe un mensaje con un ID de grupo de mensajes, no se devuelven más mensajes para elmismo ID del grupo de mensajes salvo que elimine el mensaje o se haga visible.

Procesamiento únicoA diferencia de las colas estándar, las colas FIFO no introducen mensajes duplicados. Las colas FIFO leayudan a evitar el envío de duplicados a una cola. Si reintenta la acción SendMessage dentro del intervalode desduplicación de 5 minutos, Amazon SQS no introduce ningún duplicado en la cola.

Para configurar la desduplicación, debe realizar una de las siguientes acciones:

• Habilitar la desduplicación basada en el contenido. Esto indica a Amazon SQS que debe utilizar un hashSHA-256 para generar el ID de desduplicación de mensajes utilizando el cuerpo del mensaje,—pero nolos atributos del mensaje. Para obtener más información, consulte la documentación de las accionesCreateQueue, GetQueueAttributes y SetQueueAttributes en la Amazon Simple Queue ServiceAPI Reference.

• Proporcionar de manera explícita el ID de desduplicación de mensajes (o ver el número secuencial) delmensaje. Para obtener más información, consulte la documentación de las acciones SendMessage,SendMessageBatch y ReceiveMessage en la Amazon Simple Queue Service API Reference.

Pasar de una cola de Estándar a una cola de FIFOSi dispone de una aplicación que utiliza colas estándar y desea aprovechar las características deordenación o procesamiento único de las colas FIFO, debe configurar correctamente tanto la cola como laaplicación.

Note

No se puede convertir una cola estándar existente en una cola FIFO. Para hacer la transferencia,debe crear una nueva cola FIFO para su aplicación o eliminar su cola estándar existente y volvera crearla como una cola FIFO.

Utilice la siguiente lista de comprobación para garantizar que la aplicación funciona correctamente con uncola FIFO.

• De forma predeterminada, con el procesamiento por lotes (p. 211), las colas FIFO admitenhasta 3000 mensajes por segundo (TPS), por acción de API (SendMessage, ReceiveMessage oDeleteMessage). Para solicitar un aumento de la cuota, envíe una solicitud de soporte técnico. Sinprocesamiento por lotes, las colas FIFO admiten hasta 300 mensajes por segundo, por acción de API(SendMessage, ReceiveMessage o DeleteMessage).

• Las colas FIFO no admiten retrasos por mensaje, solo por cola. Si su aplicación establece el mismovalor del parámetro DelaySeconds en todos los mensajes, debe modificar la aplicación para eliminar elretraso por mensaje y establecer DelaySeconds en toda la cola.

• Cada mensaje enviado a una cola FIFO requiere un ID de grupo de mensajes. Si no necesita variosgrupos de mensajes ordenados, especifique el mismo ID de grupo de mensajes para todos losmensajes.

• Antes de enviar mensajes a una cola FIFO, confirme lo siguiente:• Si su aplicación puede enviar mensajes con cuerpos idénticos, puede modificar la aplicación para

proporcionar un ID único de desduplicación de mensajes para cada mensaje enviado.• Si su aplicación envía mensajes con cuerpos únicos, puede habilitar la desduplicación basada en el

contenido.

86

Page 92: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCompatibilidad

• No es necesario hacer ningún cambio en el código del consumidor. Sin embargo, si se tarda muchotiempo en procesar los mensajes y el tiempo de espera de visibilidad es un alto valor, considere laposibilidad de añadir un ID de intento de solicitud de recepción para cada acción ReceiveMessage.Esto le permite reintentar la recepción en caso de que se produzcan errores de red e impide que lascolas se pausen debido a intentos fallidos de recepción.

Para obtener más información, consulte la Amazon Simple Queue Service API Reference.

CompatibilidadClientes

En la actualidad, Cliente asincrónico en búfer de Amazon SQS no admite colas FIFO.Servicios

Si la aplicación utiliza varios servicios de AWS o una combinación de servicios de AWS y serviciosexternos, es importante entender qué funcionalidad de servicio no admite colas FIFO.

Puede que algunos servicios externos o de AWS que envían notificaciones a Amazon SQS no seancompatibles con las colas FIFO, a pesar de que permiten establecer una cola FIFO como destino.

Las características siguientes de los servicios AWS no son compatibles con colas FIFO:• Notificaciones de eventos de Amazon S3• Enlaces de ciclo de vida de Auto Scaling• Acciones de reglas de AWS IoT• Colas de mensajes fallidos de AWS Lambda

Para obtener información acerca de la compatibilidad de otros servicios con colas FIFO, consulta ladocumentación del servicio correspondiente.

Ejemplo funcional en Java de colas FIFOObtenga información sobre la funcionalidad de colas FIFO de Amazon SQS con los requisitos Mavenproporcionados y el código Java de ejemplo.

Requisitos previosAñada el paquete aws-java-sdk-sqs.jar en la ruta de clases de Java. En el siguiente ejemplo semuestra esta dependencia en el archivo pom.xml de un proyecto Maven.

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version><replaceable>LATEST</replaceable></version> </dependency></dependencies>

SQSFIFOJavaClientExample.javaEl siguiente ejemplo de código Java crea una cola y envía, recibe y elimina un mensaje.

/*

87

Page 93: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional en Java de colas FIFO

* Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.*;

import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;

public class SQSFIFOJavaClientExample { public static void main(String[] args) { /* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

System.out.println("==========================================="); System.out.println("Getting Started with Amazon SQS FIFO Queues"); System.out.println("===========================================\n");

try {

// Create a FIFO queue. System.out.println("Creating a new Amazon SQS FIFO queue called " + "MyFifoQueue.fifo.\n"); final Map<String, String> attributes = new HashMap<>();

// A FIFO queue must have the FifoQueue attribute set to true. attributes.put("FifoQueue", "true");

/* * If the user doesn't provide a MessageDeduplicationId, generate a * MessageDeduplicationId based on the content. */ attributes.put("ContentBasedDeduplication", "true");

// The FIFO queue name must end with the .fifo suffix. final CreateQueueRequest createQueueRequest = new CreateQueueRequest("MyFifoQueue.fifo") .withAttributes(attributes); final String myQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();

// List all queues. System.out.println("Listing all queues in your account.\n"); for (final String queueUrl : sqs.listQueues().getQueueUrls()) { System.out.println(" QueueUrl: " + queueUrl); }

88

Page 94: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional en Java de colas FIFO

System.out.println();

// Send a message. System.out.println("Sending a message to MyFifoQueue.fifo.\n"); final SendMessageRequest sendMessageRequest = new SendMessageRequest(myQueueUrl, "This is my message text.");

/* * When you send messages to a FIFO queue, you must provide a * non-empty MessageGroupId. */ sendMessageRequest.setMessageGroupId("messageGroup1");

// Uncomment the following to provide the MessageDeduplicationId //sendMessageRequest.setMessageDeduplicationId("1"); final SendMessageResult sendMessageResult = sqs .sendMessage(sendMessageRequest); final String sequenceNumber = sendMessageResult.getSequenceNumber(); final String messageId = sendMessageResult.getMessageId(); System.out.println("SendMessage succeed with messageId " + messageId + ", sequence number " + sequenceNumber + "\n");

// Receive messages. System.out.println("Receiving messages from MyFifoQueue.fifo.\n"); final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);

// Uncomment the following to provide the ReceiveRequestDeduplicationId //receiveMessageRequest.setReceiveRequestAttemptId("1"); final List<Message> messages = sqs.receiveMessage(receiveMessageRequest) .getMessages(); for (final Message message : messages) { System.out.println("Message"); System.out.println(" MessageId: " + message.getMessageId()); System.out.println(" ReceiptHandle: " + message.getReceiptHandle()); System.out.println(" MD5OfBody: " + message.getMD5OfBody()); System.out.println(" Body: " + message.getBody()); for (final Entry<String, String> entry : message.getAttributes() .entrySet()) { System.out.println("Attribute"); System.out.println(" Name: " + entry.getKey()); System.out.println(" Value: " + entry.getValue()); } } System.out.println();

// Delete the message. System.out.println("Deleting the message.\n"); final String messageReceiptHandle = messages.get(0).getReceiptHandle(); sqs.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageReceiptHandle));

// Delete the queue. System.out.println("Deleting the queue.\n"); sqs.deleteQueue(new DeleteQueueRequest(myQueueUrl)); } catch (final AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which means " + "your request made it to Amazon SQS, but was " + "rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode());

89

Page 95: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIdentificadores de colas y mensajes

System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (final AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means " + "the client encountered a serious internal problem while " + "trying to communicate with Amazon SQS, such as not " + "being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } }}

Amazon SQS Identificadores de colas y mensajesEn esta sección se describen los identificadores de las colas estándar y FIFO. Estos identificadorespueden ayudarle a encontrar y manipular colas y mensajes específicos.

Temas• Identificadores de colas Estándar y FIFO de Amazon SQS (p. 90)• Identificadores adicionales para las colas FIFO de Amazon SQS (p. 91)

Identificadores de colas Estándar y FIFO de AmazonSQSPara obtener más información acerca de los siguientes identificadores, consulte la Amazon Simple QueueService API Reference.

Nombre y URL de colaCuando crea una nueva cola, debe especificar un nombre único para su cuenta y región de AWS. AmazonSQS asigna a cada cola que crea un identificador llamado una URL de cola que incluye el nombre de lacola y otros componentes de Amazon SQS. Siempre que desee realizar una acción en una cola, tiene queproporcionar su URL de cola.

El nombre de una cola FIFO deber terminar por el sufijo .fifo. El sufijo se tiene en cuenta en la cuota delnombre de la cola de 80 caracteres. Para determinar si una cola es FIFO (p. 83), puede comprobar si elnombre termina por el sufijo.

A continuación se muestra la URL de una cola denominada MyQueue que pertenece a un usuario quetiene el número de cuenta de AWS 123456789012.

https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue

Puede recuperar la dirección URL de una cola mediante programación enumerando las colas y analizandola cadena que sigue al número de cuenta. Para obtener más información, consulte ListQueues.

ID de mensajeCada mensaje recibe un ID de mensaje asignado por el sistema que Amazon SQS le devuelve en larespuesta SendMessage. Este identificador es útil para identificar los mensajes. (Sin embargo, paraeliminar un mensaje necesita el identificador de recepción del mensaje). La longitud máxima de un ID demensaje es 100 caracteres.

90

Page 96: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIdentificadores adicionales para las colas FIFO

Identificador de recepciónCada vez que recibe un mensaje de una cola, recibe un identificador de recepción para ese mensaje. Estecontrolador está asociado a la acción de recepción del mensaje, no al propio mensaje. Para eliminar elmensaje o cambiar la visibilidad de los mensajes, debe proporcionar el identificador de recepción (no elID de mensaje). Por tanto, siempre debe recibir un mensaje para poder eliminarlo (no puede poner unmensaje en la cola y, a continuación, recuperarlo). La longitud máxima de un identificador de recepción es1024 caracteres.

Important

Si recibe un mensaje más de una vez, cada vez que lo reciba, obtendrá un identificador derecepción diferente. Cuando solicite eliminar el mensaje, debe proporcionar el identificador derecepción recibido más recientemente (de lo contrario, el mensaje podría no eliminarse).

A continuación se muestra un ejemplo de un identificador de recepción (dividido en tres líneas).

MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+CwLj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QEauMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0=

Identificadores adicionales para las colas FIFO deAmazon SQSPara obtener más información acerca de los siguientes identificadores, consulte Procesamientoúnico (p. 86) y la Amazon Simple Queue Service API Reference.

ID de desduplicación de mensajesThe token utilizado para la desduplicación de los mensajes enviados. Si un mensaje con un ID dedesduplicación concreto se envía satisfactoriamente, cualquier otro mensaje con el mismo ID dedesduplicación de mensajes se acepta pero no se entregan durante el intervalo de desduplicación de cincominutos.

ID de grupo de mensajesetiqueta que especifica que un mensaje pertenece a un grupo de mensajes específico. Los mensajes quepertenecen al mismo grupo de mensajes siempre se procesan de uno en uno, en orden estricto relativo algrupo de mensajes (sin embargo, un mensaje que pertenezca a diferentes grupos de mensajes puedenprocesarse sin guardar el orden).

Número de secuencianúmero grande, no consecutivo que Amazon SQS asigna a cada mensaje.

Metadatos de mensajesPuede utilizar atributos de mensajes para adjuntar metadatos personalizados a los mensajes de AmazonSQS para sus aplicaciones. Puede utilizar atributos del sistema de mensajes para almacenar metadatospara otros servicios de AWS, como AWS X-Ray.

Temas

91

Page 97: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAtributos de mensajes

• Atributos de mensajes de Amazon SQS (p. 92)• Atributos del sistema de mensajes de Amazon SQS (p. 94)

Atributos de mensajes de Amazon SQSAmazon SQS le permite incluir metadatos estructurados (como, por ejemplo, marcas temporales, datosgeoespaciales, firmas e identificadores) en los mensajes utilizando los atributos de los mensajes.. Cadamensaje puede tener hasta 10 atributos. Los atributos de los mensajes son opcionales y están separadosdel cuerpo del mensaje (sin embargo, se envían con él). El consumidor puede utilizar los atributos demensajes para controlar un mensaje de una forma concreta sin tener que procesar el cuerpo del mensajeen primer lugar. Para obtener información sobre cómo enviar mensajes con atributos mediante la Consolade administración de AWS o AWS SDK for Java, consulte Envío de un mensaje con atributos a una cola deAmazon SQS (p. 32).

Note

No confunda los atributos de mensaje con los atributos del sistema de mensajes: mientras quepuede utilizar atributos de mensaje para adjuntar metadatos personalizados a los mensajesdeAmazon SQS para sus aplicaciones, puede utilizar atributos del sistema de mensajes (p. 94)para almacenar metadatos de otros servicios de AWS, como AWS X-Ray.

Temas• Componentes de atributos de mensajes (p. 92)• Tipos de datos de atributos de mensajes (p. 93)• Cálculo del resumen del mensaje MD5 para atributos de mensajes (p. 93)

Componentes de atributos de mensajesImportant

Todos los componentes de un atributo de mensaje están incluidos en la restricción de tamaño demensaje de 256 KB.Name, Type, Value y el cuerpo del mensaje no deben estar vacíos ni ser null.

Cada atributo de mensaje consta de los siguientes componentes:

• Name – El atributo de nombre del mensaje puede contener los siguientes caracteres: A-Z, a-z, 0-9,guion bajo (_), guion (-) y punto (.). Se aplican las siguientes restricciones:• Puede tener hasta 256 caracteres• No puede comenzar por AWS. o Amazon. (ni ninguna variación de mayúsculas y minúsculas)• Distingue entre mayúsculas y minúsculas• Debe ser único entre todos los nombres de atributo del mensaje• No debe comenzar ni terminar por un punto• No debe tener puntos seguidos

• Type – El tipo de datos de atributo de mensaje. Los tipos admitidos son String, Number y Binary.También puede agregar información personalizada para cualquier tipo de datos. El tipo de datostiene las mismas restricciones que el cuerpo del mensaje (para obtener más información, consulteSendMessage en la Amazon Simple Queue Service API Reference). Además, se aplican las siguientesrestricciones:• Puede tener hasta 256 caracteres• Distingue entre mayúsculas y minúsculas

• Value – El valor del atributo de mensaje. Para los tipos de datos String, los valores de atributo tienenlas mismas restricciones el cuerpo del mensaje.

92

Page 98: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAtributos de mensajes

Tipos de datos de atributos de mensajesLos tipos de datos de atributos de mensajes indican a Amazon SQS cómo tratar los correspondientesvalores de atributos de mensajes. Por ejemplo, si el tipo es Number, Amazon SQS valida valoresnuméricos.

Amazon SQS admite los tipos de datos lógicos String, Number y Binary con etiquetas de tipo de datospersonalizadas opcionales con el formato .custom-data-type.

• String: los atributos pueden almacenar texto Unicode que utilice cualquier carácter XML válido.• Number – Los atributos Number pueden almacenar valores numéricos positivos o negativos. Un número

puede tener hasta 38 dígitos de precisión y puede estar comprendido entre 10^-128 y 10^+126.

Note

Amazon SQS quita los ceros al principio y al final.• Binary – Los atributos Binary permiten almacenar datos binarios de cualquier índole, como datos

comprimidos, datos cifrados o imágenes.• Custom – Para crear un tipo de datos personalizado, añada la etiqueta custom-type a cualquier tipo de

datos. Por ejemplo:• Number.byte, Number.short, Number.int y Number.float pueden ayudarle a distinguir entre

tipos de números.• Binary.gif y Binary.png pueden ayudarle a distinguir entre tipos de archivos.

Note

Amazon SQS no interpreta, valida ni utiliza los datos añadidos.La etiqueta custom-type tiene las mismas restricciones que el cuerpo del mensaje.

Cálculo del resumen del mensaje MD5 para atributos demensajesSi utiliza AWS SDK for Java, puede saltarse esta sección. La clase MessageMD5ChecksumHandler deSDK para Java admite los resúmenes de mensajes MD5 para los atributos de mensajes de Amazon SQS.

Si utiliza la API de consulta o uno de los SDK de AWS que no admita resúmenes de mensajes MD5 paralos atributos de mensajes de Amazon SQS, debe seguir estas directrices para realizar el cálculo delresumen del mensaje MD5.

Note

Incluya siempre los sufijos de los tipos de datos personalizados en el cálculo del resumen delmensaje MD5.

Información general

A continuación se ofrece información general del algoritmo del cálculo del resumen del mensaje MD5:

1. Ordenar todos los atributos de mensajes por nombre en orden ascendente.2. Codificar las partes individuales de cada atributo (Name, Type y Value) en un búfer.3. Calcular el resumen de mensaje de todo el búfer.

En el siguiente diagrama se muestra la codificación del resumen del mensaje MD5 para un único atributode mensaje:

93

Page 99: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAtributos del sistema de mensajes

Para codificar un único atributo de mensaje de Amazon SQS

1. Codifique el nombre: la longitud (4 bytes) y los bytes UTF-8 del nombre.2. Codifique el tipo de datos: la longitud (4 bytes) y los bytes UTF-8 del tipo de datos.3. Codifique el tipo de transporte (String o Binary) del valor (1 byte).

Note

Los tipos de datos lógicos String y Number utilizan el tipo de transporte String.El tipo de datos lógicos Binary utiliza el tipo de transporte Binary.

a. Para el tipo de transporte String, codifique 1.b. Para el tipo de transporte Binary, codifique 2.

4. Codifique el valor del atributo.

a. Para el tipo de transporte String, codifique el valor del atributo: la longitud (4 bytes) y los bytesUTF-8 del valor.

b. En el tipo de transporte Binary, codifique el valor del atributo: la longitud (4 bytes) y los bytes sinformato del valor.

Atributos del sistema de mensajes de Amazon SQSMientras que puede utilizar atributos de mensajes (p. 92) para adjuntar metadatos personalizadosa mensajes de Amazon SQS para sus aplicaciones, puede utilizar atributos del sistema de mensajespara almacenar metadatos para otros servicios de AWS, como AWS X-Ray. Para obtener másinformación, consulte el parámetro de solicitud MessageSystemAttribute de las acciones de laAPI SendMessageBatch y SendMessage, el atributo AWSTraceHeader de la acción de la APIReceiveMessage y el tipo de datos MessageSystemAttributeValue datos en la Amazon SimpleQueue Service API Reference.

Los atributos del sistema de mensajes se estructuran exactamente igual que los atributos del mensaje, conlas siguientes excepciones:

• En la actualidad, el único atributo del sistema de mensajes admitido es AWSTraceHeader. Su tipo debeser String y su valor debe ser una cadena de encabezado de rastreo de AWS X-Ray con el formatocorrecto.

94

Page 100: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRecursos necesarios para procesar mensajes

• El tamaño de un atributo del sistema de mensajes no cuenta para el tamaño total de un mensaje.

Recursos necesarios para procesar mensajes deAmazon SQS

Para ayudarle a calcular los recursos que necesita para procesar los mensajes que hay en cola, AmazonSQS puede determinar el número aproximado de mensajes retrasados, visibles y no visibles de unacola. Para obtener más información acerca de la visibilidad, consulte Amazon SQS Tiempo de espera devisibilidad (p. 101).

Note

Para las colas estándar, el resultado es aproximado debido a la arquitectura distribuida deAmazon SQS. En la mayoría de los casos, el recuento debería aproximarse al número real demensajes de la cola.Con las colas FIFO, el resultado es exacto.

En la tabla siguiente se muestra el nombre de atributo que se utilizará con la acciónGetQueueAttributes:

Tarea Nombre del atributo

Obtenga el número aproximado de mensajesdisponibles para recuperar de la cola.

ApproximateNumberOfMessages

Obtenga el número aproximado de mensajes dela cola que se retrasan y no están disponiblespara su lectura inmediata. Esto puede ocurrircuando la cola está configurada como una cola deretraso o cuando se ha enviado un mensaje con unparámetro de retraso.

ApproximateNumberOfMessagesDelayed

Obtenga el número aproximado de mensajes quese encuentran en tránsito. Se considera que losmensajes están en tránsito si se han enviado a uncliente pero aún no se han eliminado o aún no hanllegado al final de su periodo de visibilidad.

ApproximateNumberOfMessagesNotVisible

Amazon SQS Etiquetas de asignación de costosPara organizar e identificar las colas de Amazon SQS para asignación de costos, puede agregaretiquetas de metadatos que identifiquen el propósito, el propietario o el entorno de una cola. —Esto es útilespecialmente cuando dispone de muchas colas. Para obtener información sobre cómo administrar lasetiquetas de colas de Amazon SQS mediante la Consola de administración de AWS o AWS SDK for Java(y las acciones TagQueue, UntagQueue y ListQueueTags), consulte el tutorial Añadir, actualizar y quitaretiquetas de una cola de Amazon SQS (p. 27).

Puede utilizar las etiquetas de asignación de costos para organizar la factura de AWS de modo que reflejesu propia estructura de costos. Para ello, regístrese para obtener una factura de su cuenta de AWS queincluya valores y claves de etiquetas. Para obtener más información, consulte Informe de asignación decostos mensual en la Guía del usuario de AWS Billing and Cost Management.

95

Page 101: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresSondeos cortos y largos

Cada etiqueta consta de un par clave-valor, que usted define. Por ejemplo, puede identificar fácilmente suscolas de producción y prueba si etiqueta sus colas de la siguiente forma:

Cola Clave Valor

MyQueueA QueueType Production

MyQueueB QueueType Testing

Note

Cuando utilice etiquetas en las colas, recuerde las directrices siguientes:

• No es conveniente agregar más de 50 etiquetas a una cola.• Las etiquetas no tienen ningún significado semántico. Amazon SQS las interpreta como

cadenas de caracteres.• Las etiquetas distinguen entre mayúsculas y minúsculas.• Una nueva etiqueta con una clave idéntica a una etiqueta existente sobrescribe la etiqueta

existente.• Las acciones de etiquetado están limitadas a 5 TPS por cada cuenta de AWS. Si la aplicación

requiere un nivel de rendimiento mayor, envíe una solicitud.

Para obtener una lista completa de las restricciones de las etiquetas, consulte Cuotasrelacionadas con las colas (p. 143).

No puede añadir etiquetas a una nueva cola cuando la crea utilizando Consola de administración de AWS(puede añadir etiquetas después de crear la cola). Sin embargo, puede agregar, actualizar o eliminaretiquetas de cola en cualquier momento utilizando las acciones de Amazon SQS.

Sondeos cortos y largos de Amazon SQSEl proceso de consumo de mensajes de una cola depende de si se utiliza un sondeo largo o corto. Deforma predeterminada, Amazon SQS utiliza sondeos cortos: consulta únicamente un subconjunto delos servidores (en función de la distribución aleatoria ponderada) para determinar si hay algún mensajedisponible que deba responerse. Puede utilizar sondeos largos para reducir sus costos y que los clientesreciban mensajes tan pronto como lleguen a la cola. En las siguientes secciones se explican las diferenciasentre el consumo de mensajes mediante sondeo corto y sondeo largo.

Temas• Consumo de mensajes mediante sondeo corto (p. 96)• Consumo de mensajes utilizando sondeos largos (p. 97)• Diferencias entre el sondeo corto y el sondeo largo (p. 98)

Consumo de mensajes mediante sondeo cortoCuando se consumen mensajes de una cola mediante sondeo corto, Amazon SQS muestrea unsubconjunto de sus servidores (en función de una distribución aleatoria ponderada) y devuelve mensajessolo de esos servidores. Por tanto, una solicitud ReceiveMessage determinada podría no devolver todoslos mensajes. Sin embargo, si tiene menos de 1 000 mensajes en la cola, una solicitud posterior devolverá

96

Page 102: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConsumo de mensajes utilizando sondeos largos

sus mensajes. Si sigue consumiendo mensajes de sus colas, Amazon SQS muestrea todos sus servidoresy se reciben todos los mensajes.

En el siguiente diagrama se muestra el comportamiento de sondeo corto de los mensajes devueltos de unacola de estándar después de que uno de los componentes del sistema realice una solicitud de recepción.Amazon SQS muestrea varios de sus servidores (en gris) y devuelve los mensajes A, C, D y B de estosservidores. El mensaje E no se devuelve en esta solicitud concreta, pero se devuelve en una solicitudposterior.

Consumo de mensajes utilizando sondeos largosCuando el tiempo de espera de la acción de la API ReceiveMessage es superior a 0, se produceun sondeo largo. El tiempo máximo de espera de sondeo largo es de 20 segundos. El sondeo largoayuda a reducir el costo de uso de Amazon SQS al eliminar el número de respuestas vacías (cuandono hay ningún mensaje disponible para una solicitud ReceiveMessage) y las falsas respuestas vacías(cuando los mensajes están disponibles en la cola, pero no se incluyen en una respuesta). Para obtenerinformación acerca de cómo habilitar el sondeo largo para una cola nueva o existente con la Consola deadministración de AWS o AWS SDK for Java (y las acciones CreateQueue, SetQueueAttributesy ReceiveMessage), consulte el tutorial Configuración de sondeos largos para una cola de AmazonSQS (p. 62). Para obtener las prácticas recomendadas, consulte Configuración del sondeo largo (p. 137).

El sondeo largo ofrece los siguientes beneficios:

• Eliminación de las respuestas vacías al permitir que Amazon SQS espere hasta que haya un mensajedisponible en una cola antes de enviar una respuesta. A menos que la conexión agote el tiempode espera, la respuesta a la solicitud ReceiveMessage contiene al menos uno de los mensajesdisponibles, hasta el número máximo de mensajes especificado en la acción ReceiveMessage.

• Elimine las respuestas vacías falsa al consultar todos los servidores de — en lugar de un subconjunto deservidores —Amazon SQS.

Note

Puede confirmar que una cola está vacía al realizar un sondeolargo y las métricas ApproximateNumberOfMessagesDelayed,ApproximateNumberOfMessagesNotVisible yApproximateNumberOfMessagesVisible son igual a 0 al menos 1 minuto después deque los productores dejen de enviar mensajes (cuando los metadatos de la cola alcanzan laconsistencia final). Para obtener más información, consulte Métricas de CloudWatch disponiblespara Amazon SQS (p. 196).

• Devolución de mensajes en cuanto estén disponibles.

97

Page 103: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresDiferencias entre el sondeo corto y el sondeo largo

Diferencias entre el sondeo corto y el sondeo largoEl sondeo corto se produce cuando el parámetro WaitTimeSeconds de una solicitud ReceiveMessageestá establecido en 0 de una de las dos formas siguientes:

• La llamada a ReceiveMessage establece WaitTimeSeconds en 0.• La llamada a ReceiveMessage no establece WaitTimeSeconds y el atributo de colaReceiveMessageWaitTimeSeconds está establecido en 0.

Colas de mensajes fallidos de Amazon SQSAmazon SQS admite colas de mensajes fallidos, a las que otras colas (colas de origen) pueden enviarmensajes que no se puedan procesar (consumir) correctamente. Las colas de mensajes fallidos resultanútiles para depurar la aplicación o el sistema de mensajería, ya que le permiten aislar los mensajesproblemáticos para determinar por qué no se procesaron correctamente. Para obtener información acercade cómo crear una cola y configurar una cola de mensajes fallidos para ella mediante la Consola deadministración de AWS o AWS SDK for Java (y las acciones CreateQueue, SetQueueAttributesy GetQueueAttributes), consulte Configuración de una cola de mensajes fallidos de AmazonSQS (p. 65).

Important

Al designar una cola como cola de origen, no se crea ninguna cola de mensajes fallidos de formaautomática. Primero deberá crear una cola estándar o FIFO antes de designarla como cola demensajes fallidos.

Temas• Funcionamiento de las colas de mensajes fallidos (p. 98)• ¿Cuáles son los beneficios de las colas de mensajes fallidos? (p. 99)• ¿Cómo los diferentes tipos de cola gestionan los errores en los mensajes? (p. 99)• ¿Cuándo debo usar una cola de mensajes fallidos? (p. 100)• Solución de problemas de las colas de mensajes fallidos (p. 100)

Funcionamiento de las colas de mensajes fallidosA veces, los mensajes no se pueden procesar debido a una serie de problemas posibles, como, porejemplo, condiciones erróneas dentro de la aplicación productora o consumidora, o un cambio de estadoinesperado que provoca un problema con el código de la aplicación. Por ejemplo, si un usuario realiza unpedido en una página web con un ID de producto determinado, pero el ID del producto se ha eliminado, elcódigo de la tienda web muestra un error, y el mensaje con la solicitud de pedido se envía a una cola demensajes fallidos.

Ocasionalmente, puede que los productores y los consumidores no interpreten aspectos del protocolo queutilizan para comunicarse entre sí, lo que puede provocar daños o pérdidas de mensajes. Además, loserrores de hardware del consumidor podrían dañar la carga del mensaje.

La política de redireccionamiento especifica la cola de origen, la cola de mensajes fallidos y lascondiciones bajo las cuales Amazon SQS mueve los mensajes de la primera a la segunda si el consumidorde la cola de origen no puede procesar un mensaje un número especificado de veces. Cuando el valor deReceiveCount de un mensaje supera el valor de maxReceiveCount, Amazon SQS mueve el mensajea una cola de mensajes fallidos (con su ID de mensaje original). Por ejemplo, si la cola de origen tiene unapolítica de redireccionamiento con el valor de maxReceiveCount establecido en 5 y el consumidor de lacola de origen recibe un mensaje seis veces sin haberlo eliminado, Amazon SQS mueve el mensaje a lacola de mensajes fallidos.

98

Page 104: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores¿Cuáles son los beneficios delas colas de mensajes fallidos?

Para especificar una cola de mensajes fallidos, puede utilizar la Consola de administración de AWS oAWS SDK for Java (p. 65). Debe hacerlo para cada cola que envíe mensajes a una cola de mensajesfallidos. Varias colas del mismo tipo pueden dirigirse a una sola cola de mensajes fallidos. Para obtenermás información, consulte Configuración de una cola de mensajes fallidos de Amazon SQS (p. 65) y elatributo RedrivePolicy de la acción de la CreateQueue o SetQueueAttributes.

Important

La cola de mensajes fallidos de una cola FIFO también debe ser una cola FIFO. De igual manera,la cola de mensajes fallidos de una cola estándar también debe ser una cola estándar.Debe utilizar la misma cuenta de AWS para crear la cola de mensajes fallidos y las demás colasque envían mensajes a la cola de mensajes fallidos. Además, las colas de mensajes fallidosdeben residir en la misma región que el resto de colas que utilizan la cola de mensajes fallidos.Por ejemplo, si crea una cola en la región EE.UU. Este (Ohio) y desea utilizar una cola demensajes fallidos con dicha cola, la segunda cola también debe estar en la región EE.UU. Este(Ohio).El vencimiento de un mensaje siempre irá en función de su marca temporal de puesta en colaoriginal. Cuando se mueve un mensaje a unacola de mensajes fallidos (p. 98), la marcatemporal de puesta en cola no cambia. Por ejemplo, si un mensaje permanece 1 día en la colaoriginal antes de su traslado a una cola de mensajes fallidos, y el periodo de retención de dichacola se ha establecido en 4 días, el mensaje se borrará de la cola de mensajes fallidos al cabo de3 días. Por tanto, se recomienda siempre que el periodo de retención de una cola de mensajesfallidos sea más extenso que el periodo de retención de la cola original.

¿Cuáles son los beneficios de las colas de mensajesfallidos?La principal tarea de una cola de mensajes fallidos es gestionar los errores en los mensajes. Una cola demensajes fallidos le permite apartar y aislar los mensajes que no se pueden procesar correctamente paradeterminar por qué no se procesaron correctamente. La configuración de una cola de mensajes fallidos lepermite hacer lo siguiente:

• Configurar una alarma para todos los mensajes que se entregan a una cola de mensajes fallidos.• Examinar los logs para ver si hay excepciones que podrían haber causado la entrega de mensajes a una

cola de mensajes fallidos.• Analizar el contenido de los mensajes entregados a una cola de mensajes fallidos para diagnosticar

problemas de software o problemas de hardware del productor o el consumidor.• Determinar si ha concedido al consumidor tiempo suficiente para procesar los mensajes.

¿Cómo los diferentes tipos de cola gestionan loserrores en los mensajes?Colas EstándarLas colas Estándar (p. 80) siguen procesando mensajes hasta que termina el periodo de retención.Esto garantiza el procesamiento continuo de los mensajes, lo que minimiza las posibilidades de que la colaquede bloqueada por los mensajes que no se pueden procesar. También garantiza la rápida recuperaciónde la cola.

En un sistema que procesa miles de mensajes, el hecho de tener un gran número de mensajes que elconsumidor no reconoce ni elimina de forma reiterada podría aumentar los costos y suponer una cargaadicional para el hardware. En lugar de intentar procesar mensajes con errores hasta que caducan, esmejor moverlos a una cola de mensajes fallidos después de algunos intentos de procesamiento.

99

Page 105: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores¿Cuándo debo usar una cola de mensajes fallidos?

Note

Las colas Estándar permiten un número elevado de mensajes en tránsito. Si la mayoría de losmensajes no se pueden consumir y no se envían a una cola de mensajes fallidos, la tasa deprocesamiento de mensajes válidos se puede ralentizar. Por tanto, para mantener la eficaciade la cola, debe asegurarse de que su aplicación gestiona correctamente el procesamiento demensajes.

Colas FIFOLas colas FIFO (p. 83) garantizan el procesamiento único al consumir los mensajes de forma secuencialdesde un grupo de mensajes. Así, aunque el consumidor puede seguir recuperando mensajes ordenadosde otro grupo de mensajes, el primer grupo de mensajes sigue sin estar disponible hasta que el mensajeque bloquea la cola se procesa correctamente.

Note

Las colas FIFO permiten que haya menos mensajes en tránsito. Por tanto, para garantizar que sucola FIFO no quede bloqueada por un mensaje, debe asegurarse de que su aplicación gestionecorrectamente el procesamiento de mensajes.

¿Cuándo debo usar una cola de mensajes fallidos?

Utilice colas de mensajes fallidos con las colas estándar. Siempre debe utilizar las colas demensajes fallidos cuando sus aplicaciones no dependan de la ordenación. Las colas de mensajes fallidospueden ayudarle a solucionar problemas de las operaciones incorrectas de transmisión de mensajes.

Note

Aunque utilice colas de mensajes fallidos, debe seguir monitorizando las colas y reintentar elenvío de los mensajes que fallan por motivos transitorios.

Utilice las colas de mensajes fallidos para reducir el número de mensajes y para reducir laposibilidad de exponer su sistema a mensajes de píldoras venenosas (mensajes que se pueden recibirpero no se pueden procesar).

No utilice una cola de mensajes fallidos con colas estándar cuando desee poder seguir reintentandola transmisión de un mensaje de forma indefinida. Por ejemplo, no utilice una cola de mensajes fallidos sisu programa debe esperar hasta que un proceso dependiente esté activo o disponible.

No utilice una cola de mensajes fallidos con una cola FIFO si no desea romper el orden exacto de losmensajes o las operaciones. Por ejemplo, no utilice una cola de mensajes fallidos con instrucciones de unalista de decisiones de edición (EDL) para un programa de edición de vídeo, donde al cambiar el orden delas ediciones se cambia el contexto de las ediciones posteriores.

Solución de problemas de las colas de mensajesfallidosEn algunos casos, las colas de mensajes fallidos de Amazon SQS no siempre se comportan según loprevisto. En esta sección se proporciona información general sobre los problemas comunes y se muestracómo resolverlos.

100

Page 106: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresTiempo de espera de visibilidad

La visualización de mensajes con la Consola de administraciónde AWS podría hacer que los mensajes se movieran a una colade mensajes fallidosAmazon SQS cuenta la visualización de un mensaje en la Consola de administración de AWS para lapolítica de redireccionamiento de la cola correspondiente. Por tanto, si ve un mensaje en la Consola deadministración de AWS el número de veces especificado en la política de redireccionamiento de la colacorrespondiente, el mensaje se enviará a la cola de mensajes fallidos de dicha cola.

Para configurar este comportamiento, puede elegir una de las siguientes opciones:

• Aumentar la configuración Maximum Receives de la política de redireccionamiento de la colacorrespondiente.

• Evitar visualizar los mensajes de la cola correspondiente en la Consola de administración de AWS.

Los valores de NumberOfMessagesSent yNumberOfMessagesReceived para una cola de mensajesfallidos no coincidenSi envía manualmente un mensaje a una cola de mensajes fallidos, la métrica NumberOfMessagesSentlo captura. Sin embargo, si se envía un mensaje a una cola de mensajes fallidos como consecuencia deun intento fallido de procesamiento, esta métrica no lo captura. Por tanto, es posible que los valores deNumberOfMessagesSent y NumberOfMessagesReceived sean diferentes.

Amazon SQS Tiempo de espera de visibilidadCuando un consumidor recibe y procesa un mensaje de una cola, el mensaje permanece en la cola.Amazon SQS no elimina automáticamente el mensaje. Dado que Amazon SQS es un sistema distribuido,no garantiza que el consumidor reciba realmente el mensaje (por ejemplo, debido a un problema deconectividad o a un problema en la aplicación del consumidor). Por tanto, el consumidor debe eliminar elmensaje de la cola después de recibirlo y procesarlo.

Inmediatamente después de recibir un mensaje, este permanece en la cola. Para evitar que otrosconsumidores procesen el mensaje de nuevo, Amazon SQS establece un tiempo de espera de visibilidad,que es un periodo de tiempo durante el cual Amazon SQS impide que otros consumidores recibany procesen el mensaje. El tiempo de espera de visibilidad predeterminado de un mensaje es de30 segundos. La duración mínima es de 0 segundos. El valor máximo es 12 horas. Para obtener

101

Page 107: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMensajes en tránsito

información sobre cómo configurar el tiempo de espera de visibilidad de una cola mediante la Consolade administración de AWS y para uno o varios mensajes mediante AWS SDK for Java (y las accionesSetQueueAttributes, GetQueueAttributes, ReceiveMessage, ChangeMessageVisibility yChangeMessageVisibilityBatch), consulte Configuración del tiempo de espera de visibilidad de unacola de Amazon SQS (p. 69).

Note

En las colas estándar, el tiempo de espera de visibilidad no es una garantía de que un mensaje nose recibirá dos veces. Para obtener más información, consulte Al menos una entrega (p. 80).Las colas FIFO permiten que el consumidor o productor haga varios intentos:

• Si el productor detecta una acción SendMessage fallida, puede intentar el envío cuantasveces sean necesarias utilizando el mismo ID de desduplicación del mensaje. Suponiendoque el productor reciba por lo menos un reconocimiento antes de que finalice el intervalode desduplicación, los intentos sucesivos no afectan al orden de los mensajes ni introduceduplicados.

• Si el consumidor detecta una acción ReceiveMessage fallida, puede intentar el envío cuantasveces sean necesarias utilizando el mismo ID de intento de solicitud. Suponiendo que elconsumidor reciba por lo menos una confirmación antes de que finalice el tiempo de espera devisibilidad, los intentos sucesivos no afectan al orden de los mensajes.

• Cuando recibe un mensaje con un ID de grupo de mensajes, no se devuelven más mensajespara el mismo ID del grupo de mensajes salvo que elimine el mensaje o se haga visible.

Temas• Mensajes en tránsito (p. 102)• Configuración del tiempo de espera de visibilidad (p. 103)• Cambio del tiempo de espera de visibilidad de un mensaje (p. 103)• Finalización del tiempo de espera de visibilidad de un mensaje (p. 103)

Mensajes en tránsitoUn mensaje de Amazon SQS tiene tres estados básicos:

1. Enviado a una cola por un productor.2. Recibido de la cola por un consumidor.3. Eliminado de la cola.

Un mensaje se considera almacenado después de ser enviado a una cola por un productor, pero todavíano recibido de la cola por un consumidor (es decir, entre los estados 1 y 2). No existe ninguna cuota parael número de mensajes almacenados. Un mensaje se considera en tránsito después de ser recibido deuna cola por un consumidor, pero todavía no eliminado de la cola (es decir, entre los estados 2 y 3). Noexiste ninguna cuota para el número de mensajes en tránsito.

Important

Quotas that apply to inflight messages are unrelated to the unlimited number of stored messages.

En la mayoría de colas estándar (en función del tráfico de la cola y las tareas pendientes del mensaje)puede haber un máximo de 120 000 mensajes en tránsito (recibido de una cola por un consumidor,pero todavía no eliminado de la cola). Si alcanza esta cuota, Amazon SQS devuelve el mensaje de errorOverLimit. Para evitar llegar a la cuota, conviene eliminar los mensajes de la cola una vez procesados.

102

Page 108: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresConfiguración del tiempo de espera de visibilidad

También puede aumentar el número de las colas que usa para procesar los mensajes. Para solicitar unaumento de la cuota, envíe una solicitud de soporte técnico.

Para las colas FIFO, el máximo de mensajes en tránsito es de 20 000 mensajes (recibido de una cola porun consumidor, pero todavía no eliminado de la cola). Si alcanza esta cuota, Amazon SQS no devuelveningún mensaje de error.

Configuración del tiempo de espera de visibilidadEl tiempo de espera de visibilidad comienza cuando Amazon SQS devuelve un mensaje. Durante estetiempo, el consumidor procesa y elimina el mensaje. Sin embargo, si se produce un error en el consumidor,se elimina el mensaje y su sistema no llama a la DeleteMessage acción para dicho mensaje antes deque expire el tiempo de espera de visibilidad, el mensaje se hace visible para otros consumidores y serecibe nuevamente. Si un mensaje solo se debe recibir una vez, el consumidor debe eliminarlo dentro de laduración del tiempo de espera de visibilidad.

Cada cola de Amazon SQS posee un tiempo de espera de visibilidad predeterminado de 30 segundos.Puede cambiar esta configuración para toda la cola. Normalmente, debe definir el tiempo de espera devisibilidad como el tiempo máximo que tarda su aplicación en procesar y eliminar un mensaje de la cola.Cuando reciba mensajes, también puede establecer un tiempo de espera de visibilidad especial para losmensajes devueltos sin cambiar el tiempo de espera general de la cola. Para obtener más información,consulte las prácticas recomendadas en la sección Procesamiento de los mensajes a tiempo (p. 136).

Si no sabe cuánto se tarda en procesar un mensaje, cree un latido para el proceso del consumidor:especifique el tiempo de espera de visibilidad (por ejemplo, 2 minutos) y (si el consumidor sigue trabajandoen el mensaje), amplíe cada minuto el tiempo de espera de visibilidad en 2 minutos.

Cambio del tiempo de espera de visibilidad de unmensajeCuando se recibe un mensaje de una cola y empieza a procesarse, el tiempo de espera de visibilidad dela cola puede ser insuficiente (por ejemplo, es posible que deba procesar y eliminar un mensaje). Puedeespecificar un nuevo valor de tiempo de espera mediante la acción ChangeMessageVisibility parareducir o ampliar la visibilidad de un mensaje.

Por ejemplo, si el tiempo de espera predeterminado de una cola es de 60 segundos, han transcurrido15 segundos desde que recibió el mensaje y envía una llamada a ChangeMessageVisibility conVisibilityTimeout establecido en 10 segundos, los 10 segundos empiezan a contar a partir delmomento en que se realiza la llamada a ChangeMessageVisibility. Por tanto, cualquier intento decambiar el tiempo de espera de visibilidad o de eliminar el mensaje 10 segundos después de cambiarinicialmente el tiempo de espera de visibilidad (un total de 25 segundos) podría dar lugar a un error.

Note

El nuevo periodo de tiempo de espera entra en vigor desde el momento en que llama a laacción ChangeMessageVisibility. Además, el nuevo periodo de tiempo de espera se aplicaúnicamente a la recepción concreta del mensaje. ChangeMessageVisibility no afecta altiempo de espera de recepciones posteriores del mensaje ni a colas posteriores.

Finalización del tiempo de espera de visibilidad de unmensajeCuando recibe un mensaje de una cola, puede que realmente no desee procesar y eliminar ese mensaje.Amazon SQS le permite terminar el tiempo de espera de visibilidad de un mensaje concreto. De este

103

Page 109: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresColas con retraso

modo, el mensaje será visible de inmediato para otros componentes del sistema y estará disponible parasu procesamiento.

Para terminar el tiempo de espera de visibilidad de un mensaje después de llamar a ReceiveMessage,llame a ChangeMessageVisibility con VisibilityTimeout establecido en 0 segundos.

Amazon SQS Colas con retrasoLas colas con retraso le permiten posponer la entrega de nuevos mensajes a una cola durante una seriede segundos, por ejemplo, cuando la aplicación consumidora necesita tiempo adicional para procesarmensajes. Si crea una cola con retraso, cualquier mensaje que envíe a dicha cola permanecerá invisiblepara los consumidores mientras dure el período de retraso. El tiempo de retraso (mínimo) predeterminadode una cola es de 0 segundos. El tiempo máximo es de 15 minutos. Para obtener información acercade la configuración de colas de retraso utilizando la Consola de administración de AWS o AWS SDK forJava (y la acción SetQueueAttributes), consulte Configuración de una cola con retraso de AmazonSQS (p. 73).

Note

En las colas estándar, la configuración de retraso por cola no es retroactiva— el cambio del ajusteno afecta al retraso de los mensajes que ya están en la cola.En las colas FIFO, la configuración de retraso por cola es retroactiva— el cambio del ajuste afectaal retraso de los mensajes que ya están en la cola.

Las colas con retraso son similares a los tiempos de espera de visibilidad (p. 101) porque ambos hacenque los mensajes no estén disponibles para los consumidores durante un periodo de tiempo determinado.La diferencia es que para las colas con retraso un mensaje está oculto cuando es la primera vez quese añade a la cola, mientras que para los tiempos de espera de visibilidad un mensaje está oculto solodespués de que se consuma un mensaje de la cola. El siguiente diagrama ilustra la relación existente entrelas colas con retraso y los tiempos de espera de visibilidad.

Si desea establecer los segundos de retraso en mensajes específicos en lugar de en toda la cola, utilicetemporizadores de mensajes (p. 108) para permitir que Amazon SQS use el valor DelaySeconds deltemporizador de mensajes en lugar del valor DelaySeconds de la cola con retraso.

Colas temporales de Amazon SQSLas colas temporales lo ayudan a ahorrar tiempo de desarrollo y costos de implementación al utilizarpatrones de mensajes comunes como solicitud-respuesta. Puede utilizar el cliente de colas temporalespara crear colas temporales de alto rendimiento, rentables y administradas por aplicaciones.

104

Page 110: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresColas virtuales

El cliente asigna automáticamente varias colas temporales (colas administradas por la aplicación creadasa demanda para un proceso específico) a una cola de Amazon SQS. De este modo, la aplicación puederealizar menos llamadas y tiene un rendimiento superior cuando el tráfico de cada cola temporal es bajo.Cuando una cola temporal ya no está en uso, el cliente la limpia automáticamente, incluso aunque algunosprocesos que utilicen el cliente no se hayan cerrado correctamente.

Estas son las ventajas que brindan las colas temporales:

• Actúan como canales de comunicación ligeros para procesos o subprocesos específicos.• Se pueden crear y eliminar sin generar costos adicionales.• Son compatibles con las colas estáticas (normales) de Amazon SQS a través de una API. Esto significa

que el código existente que envía y recibe los mensajes puede enviar mensajes a colas virtuales y recibirmensajes de estas.

Temas

• Colas virtuales (p. 105)• Patrón de mensajes de respuesta a solicitudes (colas virtuales) (p. 106)• Situación de ejemplo: Procesamiento de una solicitud de inicio de sesión (p. 107)

• En el lado del cliente (p. 107)• En el lado del servidor (p. 107)

• Limpieza de colas (p. 108)

Colas virtualesLas colas virtuales son estructuras de datos locales que el Cliente de colas temporales crea. Las colasvirtuales permiten combinar varios destinos con poco tráfico en una única cola de Amazon SQS. Paraobtener las prácticas recomendadas, consulte Evite reutilizar el mismo ID de grupo de mensajes con colasvirtuales (p. 142).

Note

• Cuando se crea una cola virtual, solo se crean estructuras de datos temporales en las que losconsumidores reciben mensajes. Como las colas virtuales no hacen llamadas de API a AmazonSQS, no generan costo alguno.

• Las cuotas de TPS se aplican a todas las colas virtuales en una sola cola de host. Para obtenermás información, consulte Cuotas relacionadas con los mensajes (p. 144).

La clase de encapsulamiento AmazonSQSVirtualQueuesClient proporciona compatibilidad conatributos relacionados con las colas virtuales. Para crear una cola virtual, debe llamar a la acciónCreateQueue de la API con el atributo HostQueueURL. Este atributo especifica la cola existente quehospeda las colas virtuales.

La dirección URL de una cola virtual tiene el siguiente formato.

https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue#MyVirtualQueueName

Cuando un productor llama a la acción SendMessage o SendMessageBatch de la API en una direcciónURL de una cola virtual, el Cliente de colas temporales hace lo siguiente:

1. Extrae el nombre de la cola virtual.2. Lo adjunta como un atributo más del mensaje.

105

Page 111: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPatrón de mensajes de respuesta

a solicitudes (colas virtuales)

3. Envía el mensaje a la cola del host.

Mientras el productor envía mensajes, un subproceso en segundo plano sondea la cola del host y envía losmensajes recibidos a las colas virtuales en función de los atributos del mensaje correspondiente.

Mientras el consumidor llama a la acción ReceiveMessage de la API en una dirección URL de unacola virtual, el Cliente de colas temporales bloquea la llamada de este cliente localmente hasta que elsubproceso en segundo plano envíe un mensaje a la cola virtual. (Este proceso es similar a la recopilaciónprevia de mensajes del Cliente asíncrono en búfer (p. 212): una sola acción de la API puede proporcionarmensajes en hasta 10 colas virtuales). Al eliminar una cola virtual, se elimina cualquier recurso del lado delcliente sin necesidad de llamar al propio servicio Amazon SQS.

La clase AmazonSQSTemporaryQueuesClient convierte automáticamente todas las colas quecrea en colas temporales. También crea colas de host de forma automática con los mismos atributos,bajo demanda. Los nombres de estas colas comparten un prefijo común que se puede configurar (deforma predeterminada, __RequesterClientQueues__) y que las identifica como colas temporales.De este modo, el cliente puede actuar como un sustituto inmediato que optimiza el código existente,encargado de crear y eliminar las colas. El cliente también incluye las interfaces AmazonSQSRequester yAmazonSQSResponder, que posibilitan la comunicación bidireccional entre las colas.

Patrón de mensajes de respuesta a solicitudes (colasvirtuales)El caso de uso más común de las colas temporales es el patrón de mensajes de respuesta a solicitudes,donde un solicitante crea una cola temporal para recibir cada mensaje de respuesta. Para no tener quecrear una cola de Amazon SQS por cada mensaje de respuesta, el Cliente de colas temporales permitecrear y eliminar varias colas temporales sin necesidad de hacer llamadas a la API de Amazon SQS. Paraobtener más información, consulte Implementación de sistemas de solicitud-respuesta (p. 138).

En el siguiente diagrama, se muestra una configuración frecuente con este patrón.

106

Page 112: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresSituación de ejemplo: Procesamientode una solicitud de inicio de sesión

Situación de ejemplo: Procesamiento de una solicitudde inicio de sesiónEn el siguiente ejemplo, se muestra cómo puede utilizar las interfaces AmazonSQSRequester yAmazonSQSResponder para procesar una solicitud de inicio de sesión del usuario.

En el lado del clientepublic class LoginClient {

// Specify the Amazon SQS queue to which to send requests. private final String requestQueueUrl;

// Use the AmazonSQSRequester interface to create // a temporary queue for each response. private final AmazonSQSRequester sqsRequester = AmazonSQSRequesterClientBuilder.defaultClient();

private final LoginClient(String requestQueueUrl) { this.requestQueueUrl = requestQueueUrl; }

// Send a login request. public String login(String body) throws TimeoutException { SendMessageRequest request = new SendMessageRequest() .withMessageBody(body) .withQueueUrl(requestQueueUrl);

// If no response is received, in 20 seconds, // trigger the TimeoutException. Message reply = sqsRequester.sendMessageAndGetResponse(request, 20, TimeUnit.SECONDS);

return reply.getBody(); }}

Al enviar una solicitud de inicio de sesión, ocurre lo siguiente:

1. Se crea una tabla temporal.2. Se adjunta la URL de la cola temporal al mensaje como un atributo.3. Se envía el mensaje.4. Se recibe una respuesta de la cola temporal.5. Se elimina la cola temporal.6. Se devuelve la respuesta.

En el lado del servidorEn el siguiente ejemplo se presupone que, en el momento de la construcción, se crea un subproceso quesondea la cola y llama al método handleLoginRequest() en cada mensaje. Además, se presupone quese utiliza el método doLogin().

public class LoginServer {

// Specify the Amazon SQS queue to poll for login requests. private final String requestQueueUrl;

107

Page 113: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresLimpieza de colas

// Use the AmazonSQSResponder interface to take care // of sending responses to the correct response destination. private final AmazonSQSResponder sqsResponder = AmazonSQSResponderClientBuilder.defaultClient();

private final AmazonSQS(String requestQueueUrl) { this.requestQueueUrl = requestQueueUrl; }

// Process login requests from the client. public void handleLoginRequest(Message message) {

// Process the login and return a serialized result. String response = doLogin(message.getBody());

// Extract the URL of the temporary queue from the message attribute // and send the response to the temporary queue. sqsResponder.sendResponseMessage(MessageContent.fromMessage(message), new MessageContent(response)); }}

Limpieza de colasPara asegurarse de que Amazon SQS recupera los recursos en memoria utilizados por las colas virtuales,cuando la aplicación ya no necesite el Cliente de colas temporales, debería llamar al método shutdown().También se puede utilizar el método shutdown() de la interfaz AmazonSQSRequester.

El Cliente de colas temporales también cuenta con un mecanismo para eliminar las colas huérfanas delhost. En cada una de las colas que recibe llamadas de la API durante un determinado periodo de tiempo(de forma predeterminada, cinco minutos), el cliente utiliza la acción TagQueue de la API para etiquetar lascolas que permanecen en uso.

Note

Cualquier acción de la API que se realice en una cola marcará dicha cola como no inactiva,incluidas las acciones ReceiveMessage que no devuelven mensajes.

El subproceso en segundo plano utiliza las acciones ListQueues y ListTags de la API para comprobartodas las colas con el prefijo configurado y eliminar las colas que no se han etiquetado en los últimoscinco minutos. De esta forma, si un cliente no se cierra de forma limpia, el resto de los clientes activoslimpiarán después. Para reducir las cargas de trabajo duplicadas, todos los clientes con el mismo prefijo secomunican a través de una cola de trabajo interna y compartida.

Si utiliza la clase AmazonSQSTemporaryQueuesClient directamente, puede configurar el atributoIdleQueueRetentionPeriodSeconds de la cola para personalizar el tiempo que la cola puede estarinactiva antes de que Amazon SQS la elimine. Tanto las colas del host como las colas virtuales admiteneste atributo.

Temporizadores de mensajes de Amazon SQSLos temporizadores de mensajes permiten establecer un período de invisibilidad inicial para los mensajesque se añaden a una cola. Por ejemplo, si envía un mensaje con un temporizador de 45 segundos, elmensaje no será visible para los consumidores en la cola durante los primeros 45 segundos. El tiempo deretraso (mínimo) predeterminado de un mensaje es de 0 segundos. El tiempo máximo es de 15 minutos.Para obtener información acerca de cómo enviar mensajes con temporizadores utilizando la Consola deadministración de AWS o AWS SDK for Java (la acción SetQueueAttributes), consulte Envío de unmensaje con un temporizador a una cola de Amazon SQS (p. 38).

108

Page 114: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAdministración de mensajes grandes

Note

Las colas FIFO no admiten temporizadores en mensajes individuales.

Para establecer un período de retraso en una cola entera, en lugar de en mensajes individuales, utilicecolas de retraso (p. 104). La configuración de un temporizador de mensajes para un mensaje individualanula cualquier valor DelaySeconds de una cola con retraso de Amazon SQS.

Administración de mensajes grandes de AmazonSQS mediante Amazon S3

Puede usar Amazon S3 y Biblioteca de cliente ampliada para Java de Amazon SQS para administrarmensajes de Amazon SQS. Esto resulta especialmente útil para almacenar y consumir mensajes conun tamaño de hasta 2 GB. A menos que la aplicación requiera que se creen colas repetidamente y sedejen inactivas o necesite almacenar grandes cantidades de datos en una cola, considere la posibilidad deutilizar Amazon S3 para almacenar los datos.

Puede utilizar la biblioteca de Biblioteca de cliente ampliada para Java de Amazon SQS para hacer losiguiente:

• Especificar si los mensajes se almacenan siempre en Amazon S3 o solo cuando su tamaño supera los256 KB.

• Enviar un mensaje que haga referencia a un único objeto de mensaje almacenado en un bucket deAmazon S3.

• Obtener el objeto de mensaje correspondiente de un bucket de Amazon S3.• Eliminar el objeto de mensaje correspondiente de un bucket de Amazon S3.

Note

El SDK para Java y la Biblioteca de cliente ampliada para Java de Amazon SQS requieren J2SEDevelopment Kit 8.0 o una versión posterior.Puede usar Biblioteca de cliente ampliada para Java de Amazon SQS para administrar mensajesde Amazon SQS con Amazon S3. Sin embargo, no puede hacerlo utilizando la AWS CLI, laconsola de Amazon SQS, la API HTTP de Amazon SQS ni ninguno de los SDK de AWS, exceptoSDK para Java.

Ejemplo funcional de Java sobre el uso de Amazon S3con mensajes grandes de Amazon SQSRequisitos previosAñada los paquetes amazon-sqs-java-extended-client-lib.jar, aws-java-sdk-sqs.jar yaws-java-sdk-s3.jar a la ruta de clases de compilación Java. Los siguientes ejemplos muestran estasdependencias en el archivo pom.xml de un proyecto Maven.

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-sqs-java-extended-client-lib</artifactId> <version>1.0.1</version> </dependency>

109

Page 115: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso de Amazon S3

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version>LATEST</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>LATEST</version> </dependency></dependencies>

SQSExtendedClientExample.javaEn el siguiente ejemplo de código, se crea un bucket de Amazon S3 con un nombre aleatorio y seañade una regla de ciclo de vida para eliminar de forma permanente los objetos después de 14 días. Acontinuación, el código crea una cola denominada MyQueue y envía a esta cola un mensaje aleatorio conun tamaño superior a 256 KB; el mensaje se almacena en el bucket de Amazon S3. Por último, el códigoconsume el mensaje, devuelve información sobre el mensaje y elimina el mensaje, la cola y el bucket.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

import com.amazon.sqs.javamessaging.AmazonSQSExtendedClient;import com.amazon.sqs.javamessaging.ExtendedClientConfiguration;import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3ClientBuilder;import com.amazonaws.services.s3.model.*;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.*;import org.joda.time.DateTime;import org.joda.time.format.DateTimeFormat;

import java.util.Arrays;import java.util.List;import java.util.UUID;

public class SQSExtendedClientExample {

// Create an Amazon S3 bucket with a random name. private final static String S3_BUCKET_NAME = UUID.randomUUID() + "-" + DateTimeFormat.forPattern("yyMMdd-hhmmss").print(new DateTime());

public static void main(String[] args) {

/* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide.

110

Page 116: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso de Amazon S3

*/ final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();

/* * Set the Amazon S3 bucket name, and then set a lifecycle rule on the * bucket to permanently delete objects 14 days after each object's * creation date. */ final BucketLifecycleConfiguration.Rule expirationRule = new BucketLifecycleConfiguration.Rule(); expirationRule.withExpirationInDays(14).withStatus("Enabled"); final BucketLifecycleConfiguration lifecycleConfig = new BucketLifecycleConfiguration().withRules(expirationRule);

// Create the bucket and allow message objects to be stored in the bucket. s3.createBucket(S3_BUCKET_NAME); s3.setBucketLifecycleConfiguration(S3_BUCKET_NAME, lifecycleConfig); System.out.println("Bucket created and configured.");

/* * Set the Amazon SQS extended client configuration with large payload * support enabled. */ final ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration() .withLargePayloadSupportEnabled(s3, S3_BUCKET_NAME);

final AmazonSQS sqsExtended = new AmazonSQSExtendedClient(AmazonSQSClientBuilder .defaultClient(), extendedClientConfig);

/* * Create a long string of characters for the message object which will * be stored in the bucket. */ int stringLength = 300000; char[] chars = new char[stringLength]; Arrays.fill(chars, 'x'); final String myLongString = new String(chars);

// Create a message queue for this example. final String QueueName = "MyQueue" + UUID.randomUUID().toString(); final CreateQueueRequest createQueueRequest = new CreateQueueRequest(QueueName); final String myQueueUrl = sqsExtended .createQueue(createQueueRequest).getQueueUrl(); System.out.println("Queue created.");

// Send the message. final SendMessageRequest myMessageRequest = new SendMessageRequest(myQueueUrl, myLongString); sqsExtended.sendMessage(myMessageRequest); System.out.println("Sent the message.");

// Receive the message. final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl); List<Message> messages = sqsExtended .receiveMessage(receiveMessageRequest).getMessages();

// Print information about the message. for (Message message : messages) { System.out.println("\nMessage received."); System.out.println(" ID: " + message.getMessageId()); System.out.println(" Receipt handle: " + message.getReceiptHandle()); System.out.println(" Message body (first 5 characters): "

111

Page 117: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de JMS

+ message.getBody().substring(0, 5)); }

// Delete the message, the queue, and the bucket. final String messageReceiptHandle = messages.get(0).getReceiptHandle(); sqsExtended.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageReceiptHandle)); System.out.println("Deleted the message.");

sqsExtended.deleteQueue(new DeleteQueueRequest(myQueueUrl)); System.out.println("Deleted the queue.");

deleteBucketAndAllContents(s3); System.out.println("Deleted the bucket."); }

private static void deleteBucketAndAllContents(AmazonS3 client) {

ObjectListing objectListing = client.listObjects(S3_BUCKET_NAME);

while (true) { for (S3ObjectSummary objectSummary : objectListing .getObjectSummaries()) { client.deleteObject(S3_BUCKET_NAME, objectSummary.getKey()); }

if (objectListing.isTruncated()) { objectListing = client.listNextBatchOfObjects(objectListing); } else { break; } }

final VersionListing list = client.listVersions( new ListVersionsRequest().withBucketName(S3_BUCKET_NAME));

for (S3VersionSummary s : list.getVersionSummaries()) { client.deleteVersion(S3_BUCKET_NAME, s.getKey(), s.getVersionId()); }

client.deleteBucket(S3_BUCKET_NAME); }}

Uso de JMS y Amazon SQSLa Biblioteca de mensajería Amazon SQS para Java es una interfaz de JMS para Amazon SQS que lepermite utilizar Amazon SQS en aplicaciones que ya utilizan JMS. La interfaz le permite utilizar AmazonSQS como proveedor de JMS sin tener que realizar apenas cambios en el código. Junto con el AWS SDKfor Java, la biblioteca de mensajería para Java de Amazon SQS le permite crear conexiones y sesionesde JMS, así como productores y consumidores que envían y reciben mensajes hacia y desde las colas deAmazon SQS.

La biblioteca es compatible con el envío y la recepción de mensajes en una cola (el modelo punto a puntode JMS) de acuerdo con la especificación JMS 1.1. La biblioteca permite enviar mensajes de texto, bytes uobjetos de forma sincrónica a colas de Amazon SQS. La biblioteca también admite la recepción de objetosde forma sincrónica o asincrónica.

Para obtener más información sobre las características de la Biblioteca de mensajería Amazon SQS paraJava que admiten la especificación JMS 1.1, consulte Implementaciones de JMS 1.1 admitidas (p. 134) yla lista de preguntas frecuentes de Amazon SQS.

112

Page 118: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRequisitos previos

Temas• Requisitos previos (p. 113)• Introducción a Biblioteca de mensajería Amazon SQS para Java (p. 114)• Uso de Cliente de Amazon SQS Java Message Service (JMS) con otros clientes de Amazon

SQS (p. 119)• Ejemplo funcional de Java sobre el uso de JMS con colas Estándar de Amazon SQS (p. 120)• Implementaciones de JMS 1.1 admitidas (p. 134)

Requisitos previosAntes de empezar, debe disponer de los siguientes requisitos previos:

• SDK para Java

Hay dos formas de incluir SDK para Java en el proyecto:• Descargar e instalar SDK para Java.• Utilizar Maven para obtener la Biblioteca de mensajería Amazon SQS para Java.

Note

SDK para Java se incluye como dependencia.El SDK para Java y la Biblioteca de cliente ampliada para Java de Amazon SQS requierenJ2SE Development Kit 8.0 o una versión posterior.

Para obtener más información sobre la descarga de SDK para Java, consulte SDK para Java.• Biblioteca de mensajería Amazon SQS para Java

Si no utiliza Maven, debe añadir el paquete amazon-sqs-java-messaging-lib.jar a la ruta declases de Java. Para obtener más información sobre la descarga de la biblioteca, consulte Biblioteca demensajería Amazon SQS para Java.

Note

La Biblioteca de mensajería Amazon SQS para Java incluye compatibilidad con Maven y elmarco Spring.Para obtener ejemplos de código en los que se utiliza Maven, el marco Spring y la Biblioteca demensajería Amazon SQS para Java, consulte Ejemplo funcional de Java sobre el uso de JMScon colas Estándar de Amazon SQS (p. 120).

<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-sqs-java-messaging-lib</artifactId> <version>1.0.4</version> <type>jar</type></dependency>

• Cola de Amazon SQS

Cree una cola mediante la Consola de administración de AWS de Amazon SQS, la API CreateQueue oel cliente de Amazon SQS integrado que se incluye en la biblioteca de mensajería para Java de AmazonSQS.• Para obtener información acerca de cómo crear una cola con Amazon SQS a través de la Consola de

administración de AWS o la API CreateQueue, consulte el tema sobre creación de colas (p. 15).• Para obtener más información acerca del uso de la Biblioteca de mensajería Amazon SQS para Java,

consulte Introducción a Biblioteca de mensajería Amazon SQS para Java (p. 114).113

Page 119: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIntroducción a Biblioteca de mensajería para Java

Introducción a Biblioteca de mensajería Amazon SQSpara JavaPara empezar a usar JMS con Amazon SQS, utilice los ejemplos de código de esta sección. En laspróximas secciones se muestra cómo crear una conexión JMS y una sesión y cómo enviar y recibir unmensaje.

El objeto de cliente de Amazon SQS integrado que se incluye en la Biblioteca de mensajería Amazon SQSpara Java comprueba si existe una cola de Amazon SQS. Si la cola no existe, el cliente la crea.

Creación de una conexión JMS1. Cree una fábrica de conexiones y llame al método createConnection de la fábrica.

// Create a new connection factory with all defaults (credentials and region) set automaticallySQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.defaultClient() ); // Create the connection.SQSConnection connection = connectionFactory.createConnection();

La clase SQSConnection amplía javax.jms.Connection. Junto con los métodos deconexión estándar de JMS, SQSConnection ofrece métodos adicionales como, por ejemplo,getAmazonSQSClient y getWrappedAmazonSQSClient. Ambos métodos le permiten llevar acabo operaciones administrativas no incluidas en la especificación JMS, como la creación de nuevascolas. Sin embargo, el método getWrappedAmazonSQSClient también ofrece una versión integradadel cliente de Amazon SQS que se utiliza en la conexión actual. El contenedor transforma cadaexcepción del cliente en una JMSException, por lo que es más fácil que la utilice el código existente,que espera encontrar JMSException.

2. Puede utilizar los objetos de cliente devueltos por getAmazonSQSClient ygetWrappedAmazonSQSClient para realizar operaciones administrativas que no están incluidas enla especificación JMS (por ejemplo, puede crear una cola de Amazon SQS).

Si dispone de código que espera encontrar excepciones de JMS, debería utilizargetWrappedAmazonSQSClient:

• Si utiliza getWrappedAmazonSQSClient, el objeto de cliente devuelto transforma todas lasexcepciones en las excepciones de JMS.

• Si utiliza getAmazonSQSClient, todas las excepciones serán excepciones de Amazon SQS.

Creación de una cola de Amazon SQSEl objeto de cliente integrado comprueba si existe una cola de Amazon SQS.

Si no existe una cola, el cliente la crea. Si la cola existe, la función no devuelve nada. Paraobtener más información, consulte la sección "Create the queue if needed" en el ejemploTextMessageSender.java (p. 122).

Para crear una cola de estándar

// Get the wrapped client

114

Page 120: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIntroducción a Biblioteca de mensajería para Java

AmazonSQSMessagingClientWrapper client = connection.getWrappedAmazonSQSClient(); // Create an SQS queue named MyQueue, if it doesn't already existif (!client.queueExists("MyQueue")) { client.createQueue("MyQueue");}

Para crear una cola de FIFO

// Get the wrapped clientAmazonSQSMessagingClientWrapper client = connection.getWrappedAmazonSQSClient();

// Create an Amazon SQS FIFO queue named MyQueue.fifo, if it doesn't already existif (!client.queueExists("MyQueue.fifo")) { Map<String, String> attributes = new HashMap<String, String>(); attributes.put("FifoQueue", "true"); attributes.put("ContentBasedDeduplication", "true"); client.createQueue(new CreateQueueRequest().withQueueName("MyQueue.fifo").withAttributes(attributes));}

Note

El nombre de una cola FIFO deber terminar por el sufijo .fifo.Para obtener más información acerca del atributo ContentBasedDeduplication, consulteProcesamiento único (p. 86).

Envío de mensajes de forma sincrónica1. Cuando la conexión y la cola de Amazon SQS subyacente estén listas, cree una sesión de JMS sin

transacciones con el modo AUTO_ACKNOWLEDGE.

// Create the nontransacted session with AUTO_ACKNOWLEDGE modeSession session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

2. Para enviar un mensaje de texto a la cola, cree una identidad de cola de JMS y un productor demensajes.

// Create a queue identity and specify the queue name to the sessionQueue queue = session.createQueue("MyQueue"); // Create a producer for the 'MyQueue'MessageProducer producer = session.createProducer(queue);

3. Cree un mensaje de texto y envíelo a la cola.

• Para enviar un mensaje a una cola estándar, no es necesario configurar ningún parámetro adicional.

// Create the text messageTextMessage message = session.createTextMessage("Hello World!"); // Send the messageproducer.send(message);System.out.println("JMS Message " + message.getJMSMessageID());

• Para enviar un mensaje a una cola FIFO, debe establecerse el ID del grupo de mensajes. Tambiénpuede establecer un ID de desduplicación de mensajes. Para obtener más información, consulteTérminos clave (p. 84).

115

Page 121: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIntroducción a Biblioteca de mensajería para Java

// Create the text messageTextMessage message = session.createTextMessage("Hello World!");

// Set the message group IDmessage.setStringProperty("JMSXGroupID", "Default");

// You can also set a custom message deduplication ID// message.setStringProperty("JMS_SQS_DeduplicationId", "hello");// Here, it's not needed because content-based deduplication is enabled for the queue

// Send the messageproducer.send(message);System.out.println("JMS Message " + message.getJMSMessageID());System.out.println("JMS Message Sequence Number " + message.getStringProperty("JMS_SQS_SequenceNumber"));

Recepción de mensajes de forma sincrónica1. Para recibir mensajes, cree un consumidor para la misma cola e invoque el método start.

Puede llamar al método start de la conexión en cualquier momento. Sin embargo, el consumidor noempieza a recibir mensajes hasta que no se le llama.

// Create a consumer for the 'MyQueue'MessageConsumer consumer = session.createConsumer(queue);// Start receiving incoming messagesconnection.start();

2. Llame al método receive del consumidor con un tiempo de espera establecido en 1 segundo y, acontinuación, imprima el contenido del mensaje recibido.

• Cuando se recibe un mensaje de una cola estándar, se puede obtener acceso al contenido delmensaje.

// Receive a message from 'MyQueue' and wait up to 1 secondMessage receivedMessage = consumer.receive(1000); // Cast the received message as TextMessage and display the textif (receivedMessage != null) { System.out.println("Received: " + ((TextMessage) receivedMessage).getText());}

• Tras recibir un mensaje de una cola FIFO, puede obtener acceso al contenido del mensaje yotros atributos del mensaje específicos de FIFO, como el ID del grupo de mensajes, el ID dedesduplicación de mensajes y el número de secuencia. Para obtener más información, consulteTérminos clave (p. 84).

// Receive a message from 'MyQueue' and wait up to 1 secondMessage receivedMessage = consumer.receive(1000);

// Cast the received message as TextMessage and display the textif (receivedMessage != null) { System.out.println("Received: " + ((TextMessage) receivedMessage).getText()); System.out.println("Group id: " + receivedMessage.getStringProperty("JMSXGroupID")); System.out.println("Message deduplication id: " + receivedMessage.getStringProperty("JMS_SQS_DeduplicationId")); System.out.println("Message sequence number: " + receivedMessage.getStringProperty("JMS_SQS_SequenceNumber"));

116

Page 122: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIntroducción a Biblioteca de mensajería para Java

}

3. Cierre la conexión y la sesión.

// Close the connection (and the session).connection.close();

El resultado tiene un aspecto similar al siguiente:

JMS Message ID:8example-588b-44e5-bbcf-d816example2Received: Hello World!

Note

Puede utilizar el marco Spring para inicializar estos objetos.Para obtener más información, consulte SpringExampleConfiguration.xml,SpringExample.java y el resto de clases auxiliares en ExampleConfiguration.java yExampleCommon.java en la sección Ejemplo funcional de Java sobre el uso de JMS con colasEstándar de Amazon SQS (p. 120).

Para obtener ejemplos completos del envío y la recepción de objetos, consulteTextMessageSender.java (p. 122) y SyncMessageReceiver.java (p. 123).

Recepción de mensajes de forma asincrónicaEn el ejemplo de Introducción a Biblioteca de mensajería Amazon SQS para Java (p. 114), se envía unmensaje a MyQueue y se recibe de forma sincrónica.

El siguiente ejemplo muestra cómo recibir los mensajes de forma asíncrona a través de un agente deescucha.

1. Implemente la interfaz MessageListener.

class MyListener implements MessageListener { @Override public void onMessage(Message message) { try { // Cast the received message as TextMessage and print the text to screen. System.out.println("Received: " + ((TextMessage) message).getText()); } catch (JMSException e) { e.printStackTrace(); } }}

Se llama al método onMessage de la interfaz MessageListener cuando recibe un mensaje. En estaimplementación del agente de escucha, se imprime el texto almacenados en el mensaje.

2. En lugar de llamar explícitamente al método receive del consumidor, establezca el agente deescucha de mensajes del consumidor en una instancia de la implementación de MyListener. Elsubproceso principal espera un segundo.

// Create a consumer for the 'MyQueue'.MessageConsumer consumer = session.createConsumer(queue); // Instantiate and set the message listener for the consumer.

117

Page 123: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIntroducción a Biblioteca de mensajería para Java

consumer.setMessageListener(new MyListener()); // Start receiving incoming messages.connection.start(); // Wait for 1 second. The listener onMessage() method is invoked when a message is received.Thread.sleep(1000);

Los pasos restantes son idénticos a los del ejemplo Introducción a Biblioteca de mensajería AmazonSQS para Java (p. 114). Para obtener un ejemplo completo de un consumidor asíncrono, consulteAsyncMessageReceiver.java Ejemplo funcional de Java sobre el uso de JMS con colas Estándar deAmazon SQS (p. 120).

El resultado de este ejemplo tiene un aspecto similar al siguiente:

JMS Message ID:8example-588b-44e5-bbcf-d816example2Received: Hello World!

Uso del modo de reconocimiento del clienteEn el ejemplo Introducción a Biblioteca de mensajería Amazon SQS para Java (p. 114), se utiliza elmodo AUTO_ACKNOWLEDGE, en el que cada mensaje recibido se reconoce automáticamente (y, por tanto,se elimina de la cola subyacente de Amazon SQS).

1. Para reconocer explícitamente los mensajes una vez procesados, debe crear la sesión con el modoCLIENT_ACKNOWLEDGE.

// Create the non-transacted session with CLIENT_ACKNOWLEDGE mode.Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

2. Cuando se reciba el mensaje, muéstrelo y acéptelo explícitamente.

// Cast the received message as TextMessage and print the text to screen. Also acknowledge the message.if (receivedMessage != null) { System.out.println("Received: " + ((TextMessage) receivedMessage).getText()); receivedMessage.acknowledge(); System.out.println("Acknowledged: " + message.getJMSMessageID());}

Note

En este modo, cuando un mensaje se reconoce, todos los mensajes recibidos antes que estemensaje también se reconocen implícitamente. Por ejemplo, si se reciben 10 mensajes ysolo se reconoce el décimo mensaje (en el orden en que los mensajes se reciben), los nuevemensajes anteriores también se reconocen.

Los pasos restantes son idénticos a los del ejemplo Introducción a Biblioteca de mensajería AmazonSQS para Java (p. 114). Para ver un ejemplo completo de un consumidor sincrónico con el modo dereconocimiento del cliente, consulte SyncMessageReceiverClientAcknowledge.java en Ejemplofuncional de Java sobre el uso de JMS con colas Estándar de Amazon SQS (p. 120).

El resultado de este ejemplo tiene un aspecto similar al siguiente:

JMS Message ID:4example-aa0e-403f-b6df-5e02example5

118

Page 124: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de Cliente de JMS con otros clientes de Amazon SQS

Received: Hello World!Acknowledged: ID:4example-aa0e-403f-b6df-5e02example5

Uso del modo de reconocimiento sin ordenCuando se utiliza el modo CLIENT_ACKNOWLEDGE, todos los mensajes recibidos antes que un mensajereconocido explícitamente se reconocen automáticamente. Para obtener más información, consulte Usodel modo de reconocimiento del cliente (p. 118).

La Biblioteca de mensajería Amazon SQS para Java proporciona otro modo de reconocimiento. Cuando seutiliza el modo UNORDERED_ACKNOWLEDGE, el cliente debe reconocer individualmente y de forma explícitatodos los mensajes recibidos, independientemente del orden de recepción. Para ello, cree una sesión conel modo UNORDERED_ACKNOWLEDGE.

// Create the non-transacted session with UNORDERED_ACKNOWLEDGE mode.Session session = connection.createSession(false, SQSSession.UNORDERED_ACKNOWLEDGE);

Los pasos restantes son idénticos a los del ejemplo Uso del modo de reconocimiento del cliente (p. 118).Para obtener un ejemplo completo de un consumidor síncrono con el modo UNORDERED_ACKNOWLEDGE,consulte SyncMessageReceiverUnorderedAcknowledge.java.

En este ejemplo, el resultado tiene un aspecto similar al siguiente:

JMS Message ID:dexample-73ad-4adb-bc6c-4357example7Received: Hello World!Acknowledged: ID:dexample-73ad-4adb-bc6c-4357example7

Uso de Cliente de Amazon SQS Java MessageService (JMS) con otros clientes de Amazon SQSCuando se utiliza el Cliente de Amazon SQS Java Message Service (JMS) con el SDK de AWS, el tamañode los mensajes de Amazon SQS tiene un límite de 256 KB. No obstante, puede crear un proveedorde JMS mediante cualquier cliente de Amazon SQS. Por ejemplo, puede utilizar el Cliente de JMScon la Biblioteca de cliente ampliada para Java de Amazon SQS para enviar un mensaje de AmazonSQS que contenga una referencia a una carga de mensaje (hasta 2 GB) en Amazon S3. Para obtenermás información, consulte Administración de mensajes grandes de Amazon SQS mediante AmazonS3 (p. 109).

En el siguiente ejemplo de código de Java, se crea el proveedor de JMS para la Biblioteca de clienteampliada:

AmazonS3 s3 = new AmazonS3Client(credentials);Region s3Region = Region.getRegion(Regions.US_WEST_2);s3.setRegion(s3Region); // Set the Amazon S3 bucket name, and set a lifecycle rule on the bucket to// permanently delete objects a certain number of days after each object's creation date.// Next, create the bucket, and enable message objects to be stored in the bucket.BucketLifecycleConfiguration.Rule expirationRule = new BucketLifecycleConfiguration.Rule();expirationRule.withExpirationInDays(14).withStatus("Enabled");BucketLifecycleConfiguration lifecycleConfig = new BucketLifecycleConfiguration().withRules(expirationRule); s3.createBucket(s3BucketName);s3.setBucketLifecycleConfiguration(s3BucketName, lifecycleConfig);System.out.println("Bucket created and configured.");

119

Page 125: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

// Set the SQS extended client configuration with large payload support enabled.ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration() .withLargePayloadSupportEnabled(s3, s3BucketName); AmazonSQS sqsExtended = new AmazonSQSExtendedClient(new AmazonSQSClient(credentials), extendedClientConfig);Region sqsRegion = Region.getRegion(Regions.US_WEST_2);sqsExtended.setRegion(sqsRegion);

El siguiente ejemplo de código de Java crea la fábrica de conexiones:

// Create the connection factory using the environment variable credential provider.// Pass the configured Amazon SQS Extended Client to the JMS connection factory.SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), sqsExtended ); // Create the connection.SQSConnection connection = connectionFactory.createConnection();

Ejemplo funcional de Java sobre el uso de JMS concolas Estándar de Amazon SQSEn los siguientes ejemplos de código, se muestra cómo se utiliza JMS con colas estándar de AmazonSQS. Para obtener más información acerca de cómo utilizar las colas de FIFO, consulte Para crear unacola de FIFO (p. 115), Envío de mensajes de forma sincrónica (p. 115) y Recepción de mensajesde forma sincrónica (p. 116). (La recepción de mensajes de forma sincrónica es igual para las colasestándar y FIFO. Sin embargo, los mensajes de las colas FIFO contienen más atributos).

ExampleConfiguration.javaEl siguiente ejemplo de código de Java establece el nombre de cola predeterminado, la región y lascredenciales que se van a utilizar con los demás ejemplos de Java.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

public class ExampleConfiguration { public static final String DEFAULT_QUEUE_NAME = "SQSJMSClientExampleQueue"; public static final Region DEFAULT_REGION = Region.getRegion(Regions.US_EAST_2); private static String getParameter( String args[], int i ) { if( i + 1 >= args.length ) {

120

Page 126: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

throw new IllegalArgumentException( "Missing parameter for " + args[i] ); } return args[i+1]; } /** * Parse the command line and return the resulting config. If the config parsing fails * print the error and the usage message and then call System.exit * * @param app the app to use when printing the usage string * @param args the command line arguments * @return the parsed config */ public static ExampleConfiguration parseConfig(String app, String args[]) { try { return new ExampleConfiguration(args); } catch (IllegalArgumentException e) { System.err.println( "ERROR: " + e.getMessage() ); System.err.println(); System.err.println( "Usage: " + app + " [--queue <queue>] [--region <region>] [--credentials <credentials>] "); System.err.println( " or" ); System.err.println( " " + app + " <spring.xml>" ); System.exit(-1); return null; } } private ExampleConfiguration(String args[]) { for( int i = 0; i < args.length; ++i ) { String arg = args[i]; if( arg.equals( "--queue" ) ) { setQueueName(getParameter(args, i)); i++; } else if( arg.equals( "--region" ) ) { String regionName = getParameter(args, i); try { setRegion(Region.getRegion(Regions.fromName(regionName))); } catch( IllegalArgumentException e ) { throw new IllegalArgumentException( "Unrecognized region " + regionName ); } i++; } else if( arg.equals( "--credentials" ) ) { String credsFile = getParameter(args, i); try { setCredentialsProvider( new PropertiesFileCredentialsProvider(credsFile) ); } catch (AmazonClientException e) { throw new IllegalArgumentException("Error reading credentials from " + credsFile, e ); } i++; } else { throw new IllegalArgumentException("Unrecognized option " + arg); } } } private String queueName = DEFAULT_QUEUE_NAME; private Region region = DEFAULT_REGION; private AWSCredentialsProvider credentialsProvider = new DefaultAWSCredentialsProviderChain(); public String getQueueName() { return queueName;

121

Page 127: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

} public void setQueueName(String queueName) { this.queueName = queueName; } public Region getRegion() { return region; } public void setRegion(Region region) { this.region = region; } public AWSCredentialsProvider getCredentialsProvider() { return credentialsProvider; } public void setCredentialsProvider(AWSCredentialsProvider credentialsProvider) { // Make sure they're usable first credentialsProvider.getCredentials(); this.credentialsProvider = credentialsProvider; }}

TextMessageSender.javaEl siguiente ejemplo de código de Java crea un productor de mensajes de texto.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

public class TextMessageSender { public static void main(String args[]) throws JMSException { ExampleConfiguration config = ExampleConfiguration.parseConfig("TextMessageSender", args); ExampleCommon.setupLogging(); // Create the connection factory based on the config SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.standard() .withRegion(config.getRegion().getName()) .withCredentials(config.getCredentialsProvider()) ); // Create the connection SQSConnection connection = connectionFactory.createConnection(); // Create the queue if needed

122

Page 128: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

ExampleCommon.ensureQueueExists(connection, config.getQueueName()); // Create the session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer( session.createQueue( config.getQueueName() ) ); sendMessages(session, producer); // Close the connection. This closes the session automatically connection.close(); System.out.println( "Connection closed" ); } private static void sendMessages( Session session, MessageProducer producer ) { BufferedReader inputReader = new BufferedReader( new InputStreamReader( System.in, Charset.defaultCharset() ) ); try { String input; while( true ) { System.out.print( "Enter message to send (leave empty to exit): " ); input = inputReader.readLine(); if( input == null || input.equals("" ) ) break; TextMessage message = session.createTextMessage(input); producer.send(message); System.out.println( "Send message " + message.getJMSMessageID() ); } } catch (EOFException e) { // Just return on EOF } catch (IOException e) { System.err.println( "Failed reading input: " + e.getMessage() ); } catch (JMSException e) { System.err.println( "Failed sending message: " + e.getMessage() ); e.printStackTrace(); } }}

SyncMessageReceiver.javaEl siguiente ejemplo de código de Java crea un consumidor de mensajes sincrónico.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

public class SyncMessageReceiver {public static void main(String args[]) throws JMSException { ExampleConfiguration config = ExampleConfiguration.parseConfig("SyncMessageReceiver", args);

123

Page 129: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

ExampleCommon.setupLogging(); // Create the connection factory based on the config SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.standard() .withRegion(config.getRegion().getName()) .withCredentials(config.getCredentialsProvider()) ); // Create the connection SQSConnection connection = connectionFactory.createConnection(); // Create the queue if needed ExampleCommon.ensureQueueExists(connection, config.getQueueName()); // Create the session Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); MessageConsumer consumer = session.createConsumer( session.createQueue( config.getQueueName() ) );

connection.start(); receiveMessages(session, consumer);

// Close the connection. This closes the session automatically connection.close(); System.out.println( "Connection closed" );}

private static void receiveMessages( Session session, MessageConsumer consumer ) { try { while( true ) { System.out.println( "Waiting for messages"); // Wait 1 minute for a message Message message = consumer.receive(TimeUnit.MINUTES.toMillis(1)); if( message == null ) { System.out.println( "Shutting down after 1 minute of silence" ); break; } ExampleCommon.handleMessage(message); message.acknowledge(); System.out.println( "Acknowledged message " + message.getJMSMessageID() ); } } catch (JMSException e) { System.err.println( "Error receiving from SQS: " + e.getMessage() ); e.printStackTrace(); }}}

AsyncMessageReceiver.javaEl siguiente ejemplo de código de Java crea un consumidor de mensajes asincrónico.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0

124

Page 130: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

* * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

public class AsyncMessageReceiver { public static void main(String args[]) throws JMSException, InterruptedException { ExampleConfiguration config = ExampleConfiguration.parseConfig("AsyncMessageReceiver", args); ExampleCommon.setupLogging(); // Create the connection factory based on the config SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.standard() .withRegion(config.getRegion().getName()) .withCredentials(config.getCredentialsProvider()) ); // Create the connection SQSConnection connection = connectionFactory.createConnection(); // Create the queue if needed ExampleCommon.ensureQueueExists(connection, config.getQueueName()); // Create the session Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); MessageConsumer consumer = session.createConsumer( session.createQueue( config.getQueueName() ) ); ReceiverCallback callback = new ReceiverCallback(); consumer.setMessageListener( callback );

// No messages are processed until this is called connection.start(); callback.waitForOneMinuteOfSilence(); System.out.println( "Returning after one minute of silence" );

// Close the connection. This closes the session automatically connection.close(); System.out.println( "Connection closed" ); } private static class ReceiverCallback implements MessageListener { // Used to listen for message silence private volatile long timeOfLastMessage = System.nanoTime(); public void waitForOneMinuteOfSilence() throws InterruptedException { for(;;) { long timeSinceLastMessage = System.nanoTime() - timeOfLastMessage; long remainingTillOneMinuteOfSilence = TimeUnit.MINUTES.toNanos(1) - timeSinceLastMessage; if( remainingTillOneMinuteOfSilence < 0 ) { break; } TimeUnit.NANOSECONDS.sleep(remainingTillOneMinuteOfSilence); } }

125

Page 131: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

@Override public void onMessage(Message message) { try { ExampleCommon.handleMessage(message); message.acknowledge(); System.out.println( "Acknowledged message " + message.getJMSMessageID() ); timeOfLastMessage = System.nanoTime(); } catch (JMSException e) { System.err.println( "Error processing message: " + e.getMessage() ); e.printStackTrace(); } } }}

SyncMessageReceiverClientAcknowledge.javaEl siguiente ejemplo de código de Java crea un consumidor sincrónico con el modo de reconocimiento delcliente.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

/** * An example class to demonstrate the behavior of CLIENT_ACKNOWLEDGE mode for received messages. This example * complements the example given in {@link SyncMessageReceiverUnorderedAcknowledge} for UNORDERED_ACKNOWLEDGE mode. * * First, a session, a message producer, and a message consumer are created. Then, two messages are sent. Next, two messages * are received but only the second one is acknowledged. After waiting for the visibility time out period, an attempt to * receive another message is made. It's shown that no message is returned for this attempt since in CLIENT_ACKNOWLEDGE mode, * as expected, all the messages prior to the acknowledged messages are also acknowledged. * * This ISN'T the behavior for UNORDERED_ACKNOWLEDGE mode. Please see {@link SyncMessageReceiverUnorderedAcknowledge} * for an example. */public class SyncMessageReceiverClientAcknowledge { // Visibility time-out for the queue. It must match to the one set for the queue for this example to work. private static final long TIME_OUT_SECONDS = 1; public static void main(String args[]) throws JMSException, InterruptedException { // Create the configuration for the example ExampleConfiguration config = ExampleConfiguration.parseConfig("SyncMessageReceiverClientAcknowledge", args);

126

Page 132: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

// Setup logging for the example ExampleCommon.setupLogging(); // Create the connection factory based on the config SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.standard() .withRegion(config.getRegion().getName()) .withCredentials(config.getCredentialsProvider()) ); // Create the connection SQSConnection connection = connectionFactory.createConnection(); // Create the queue if needed ExampleCommon.ensureQueueExists(connection, config.getQueueName()); // Create the session with client acknowledge mode Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); // Create the producer and consume MessageProducer producer = session.createProducer(session.createQueue(config.getQueueName())); MessageConsumer consumer = session.createConsumer(session.createQueue(config.getQueueName())); // Open the connection connection.start(); // Send two text messages sendMessage(producer, session, "Message 1"); sendMessage(producer, session, "Message 2"); // Receive a message and don't acknowledge it receiveMessage(consumer, false); // Receive another message and acknowledge it receiveMessage(consumer, true); // Wait for the visibility time out, so that unacknowledged messages reappear in the queue System.out.println("Waiting for visibility timeout..."); Thread.sleep(TimeUnit.SECONDS.toMillis(TIME_OUT_SECONDS)); // Attempt to receive another message and acknowledge it. This results in receiving no messages since // we have acknowledged the second message. Although we didn't explicitly acknowledge the first message, // in the CLIENT_ACKNOWLEDGE mode, all the messages received prior to the explicitly acknowledged message // are also acknowledged. Therefore, we have implicitly acknowledged the first message. receiveMessage(consumer, true); // Close the connection. This closes the session automatically connection.close(); System.out.println("Connection closed."); } /** * Sends a message through the producer. * * @param producer Message producer * @param session Session * @param messageText Text for the message to be sent

127

Page 133: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

* @throws JMSException */ private static void sendMessage(MessageProducer producer, Session session, String messageText) throws JMSException { // Create a text message and send it producer.send(session.createTextMessage(messageText)); } /** * Receives a message through the consumer synchronously with the default timeout (TIME_OUT_SECONDS). * If a message is received, the message is printed. If no message is received, "Queue is empty!" is * printed. * * @param consumer Message consumer * @param acknowledge If true and a message is received, the received message is acknowledged. * @throws JMSException */ private static void receiveMessage(MessageConsumer consumer, boolean acknowledge) throws JMSException { // Receive a message Message message = consumer.receive(TimeUnit.SECONDS.toMillis(TIME_OUT_SECONDS)); if (message == null) { System.out.println("Queue is empty!"); } else { // Since this queue has only text messages, cast the message object and print the text System.out.println("Received: " + ((TextMessage) message).getText()); // Acknowledge the message if asked if (acknowledge) message.acknowledge(); } }}

SyncMessageReceiverUnorderedAcknowledge.javaEl siguiente ejemplo de código de Java crea un consumidor sincrónico con el modo de reconocimiento sinorden.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

/** * An example class to demonstrate the behavior of UNORDERED_ACKNOWLEDGE mode for received messages. This example * complements the example given in {@link SyncMessageReceiverClientAcknowledge} for CLIENT_ACKNOWLEDGE mode.

128

Page 134: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

* * First, a session, a message producer, and a message consumer are created. Then, two messages are sent. Next, two messages * are received but only the second one is acknowledged. After waiting for the visibility time out period, an attempt to * receive another message is made. It's shown that the first message received in the prior attempt is returned again * for the second attempt. In UNORDERED_ACKNOWLEDGE mode, all the messages must be explicitly acknowledged no matter what * the order they're received. * * This ISN'T the behavior for CLIENT_ACKNOWLEDGE mode. Please see {@link SyncMessageReceiverClientAcknowledge} * for an example. */public class SyncMessageReceiverUnorderedAcknowledge { // Visibility time-out for the queue. It must match to the one set for the queue for this example to work. private static final long TIME_OUT_SECONDS = 1; public static void main(String args[]) throws JMSException, InterruptedException { // Create the configuration for the example ExampleConfiguration config = ExampleConfiguration.parseConfig("SyncMessageReceiverUnorderedAcknowledge", args); // Setup logging for the example ExampleCommon.setupLogging(); // Create the connection factory based on the config SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.standard() .withRegion(config.getRegion().getName()) .withCredentials(config.getCredentialsProvider()) ); // Create the connection SQSConnection connection = connectionFactory.createConnection(); // Create the queue if needed ExampleCommon.ensureQueueExists(connection, config.getQueueName()); // Create the session with unordered acknowledge mode Session session = connection.createSession(false, SQSSession.UNORDERED_ACKNOWLEDGE); // Create the producer and consume MessageProducer producer = session.createProducer(session.createQueue(config.getQueueName())); MessageConsumer consumer = session.createConsumer(session.createQueue(config.getQueueName())); // Open the connection connection.start(); // Send two text messages sendMessage(producer, session, "Message 1"); sendMessage(producer, session, "Message 2"); // Receive a message and don't acknowledge it receiveMessage(consumer, false); // Receive another message and acknowledge it receiveMessage(consumer, true);

129

Page 135: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

// Wait for the visibility time out, so that unacknowledged messages reappear in the queue System.out.println("Waiting for visibility timeout..."); Thread.sleep(TimeUnit.SECONDS.toMillis(TIME_OUT_SECONDS)); // Attempt to receive another message and acknowledge it. This results in receiving the first message since // we have acknowledged only the second message. In the UNORDERED_ACKNOWLEDGE mode, all the messages must // be explicitly acknowledged. receiveMessage(consumer, true); // Close the connection. This closes the session automatically connection.close(); System.out.println("Connection closed."); } /** * Sends a message through the producer. * * @param producer Message producer * @param session Session * @param messageText Text for the message to be sent * @throws JMSException */ private static void sendMessage(MessageProducer producer, Session session, String messageText) throws JMSException { // Create a text message and send it producer.send(session.createTextMessage(messageText)); } /** * Receives a message through the consumer synchronously with the default timeout (TIME_OUT_SECONDS). * If a message is received, the message is printed. If no message is received, "Queue is empty!" is * printed. * * @param consumer Message consumer * @param acknowledge If true and a message is received, the received message is acknowledged. * @throws JMSException */ private static void receiveMessage(MessageConsumer consumer, boolean acknowledge) throws JMSException { // Receive a message Message message = consumer.receive(TimeUnit.SECONDS.toMillis(TIME_OUT_SECONDS)); if (message == null) { System.out.println("Queue is empty!"); } else { // Since this queue has only text messages, cast the message object and print the text System.out.println("Received: " + ((TextMessage) message).getText()); // Acknowledge the message if asked if (acknowledge) message.acknowledge(); } }}

130

Page 136: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

SpringExampleConfiguration.xmlEl siguiente ejemplo de código XML es un archivo de configuración bean paraSpringExample.java (p. 132).

<!-- Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at

https://aws.amazon.com/apache2.0

or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.-->

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <bean id="CredentialsProviderBean" class="com.amazonaws.auth.DefaultAWSCredentialsProviderChain"/> <bean id="ClientBuilder" class="com.amazonaws.services.sqs.AmazonSQSClientBuilder" factory-method="standard"> <property name="region" value="us-east-2"/> <property name="credentials" ref="CredentialsProviderBean"/> </bean> <bean id="ProviderConfiguration" class="com.amazon.sqs.javamessaging.ProviderConfiguration"> <property name="numberOfMessagesToPrefetch" value="5"/> </bean> <bean id="ConnectionFactory" class="com.amazon.sqs.javamessaging.SQSConnectionFactory"> <constructor-arg ref="ProviderConfiguration" /> <constructor-arg ref="ClientBuilder" /> </bean> <bean id="Connection" class="javax.jms.Connection" factory-bean="ConnectionFactory" factory-method="createConnection" init-method="start" destroy-method="close" /> <bean id="QueueName" class="java.lang.String"> <constructor-arg value="SQSJMSClientExampleQueue"/> </bean></beans>

131

Page 137: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

SpringExample.javaEl siguiente ejemplo de código Java utiliza el archivo de configuración bean para inicializar sus objetos.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */ public class SpringExample { public static void main(String args[]) throws JMSException { if( args.length != 1 || !args[0].endsWith(".xml")) { System.err.println( "Usage: " + SpringExample.class.getName() + " <spring config.xml>" ); System.exit(1); } File springFile = new File( args[0] ); if( !springFile.exists() || !springFile.canRead() ) { System.err.println( "File " + args[0] + " doesn't exist or isn't readable."); System.exit(2); } ExampleCommon.setupLogging(); FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext( "file://" + springFile.getAbsolutePath() ); Connection connection; try { connection = context.getBean(Connection.class); } catch( NoSuchBeanDefinitionException e ) { System.err.println( "Can't find the JMS connection to use: " + e.getMessage() ); System.exit(3); return; } String queueName; try { queueName = context.getBean("QueueName", String.class); } catch( NoSuchBeanDefinitionException e ) { System.err.println( "Can't find the name of the queue to use: " + e.getMessage() ); System.exit(3); return; } if( connection instanceof SQSConnection ) { ExampleCommon.ensureQueueExists( (SQSConnection) connection, queueName ); }

132

Page 138: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresEjemplo funcional de Java sobre el uso deJMS con colas Estándar de Amazon SQS

// Create the session Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); MessageConsumer consumer = session.createConsumer( session.createQueue( queueName) ); receiveMessages(session, consumer); // The context can be setup to close the connection for us context.close(); System.out.println( "Context closed" ); } private static void receiveMessages( Session session, MessageConsumer consumer ) { try { while( true ) { System.out.println( "Waiting for messages"); // Wait 1 minute for a message Message message = consumer.receive(TimeUnit.MINUTES.toMillis(1)); if( message == null ) { System.out.println( "Shutting down after 1 minute of silence" ); break; } ExampleCommon.handleMessage(message); message.acknowledge(); System.out.println( "Acknowledged message" ); } } catch (JMSException e) { System.err.println( "Error receiving from SQS: " + e.getMessage() ); e.printStackTrace(); } }}

ExampleCommon.javaEn el siguiente ejemplo de código Java, se comprueba si existe una cola de Amazon SQS y, si no existe,se crea. También incluye ejemplos de código de registro.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

public class ExampleCommon { /** * A utility function to check the queue exists and create it if needed. For most * use cases this is usually done by an administrator before the application is run. */ public static void ensureQueueExists(SQSConnection connection, String queueName) throws JMSException { AmazonSQSMessagingClientWrapper client = connection.getWrappedAmazonSQSClient(); /**

133

Page 139: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresImplementaciones de JMS 1.1 admitidas

* In most cases, you can do this with just a createQueue call, but GetQueueUrl * (called by queueExists) is a faster operation for the common case where the queue * already exists. Also many users and roles have permission to call GetQueueUrl * but don't have permission to call CreateQueue. */ if( !client.queueExists(queueName) ) { client.createQueue( queueName ); } } public static void setupLogging() { // Setup logging BasicConfigurator.configure(); Logger.getRootLogger().setLevel(Level.WARN); } public static void handleMessage(Message message) throws JMSException { System.out.println( "Got message " + message.getJMSMessageID() ); System.out.println( "Content: "); if( message instanceof TextMessage ) { TextMessage txtMessage = ( TextMessage ) message; System.out.println( "\t" + txtMessage.getText() ); } else if( message instanceof BytesMessage ){ BytesMessage byteMessage = ( BytesMessage ) message; // Assume the length fits in an int - SQS only supports sizes up to 256k so that // should be true byte[] bytes = new byte[(int)byteMessage.getBodyLength()]; byteMessage.readBytes(bytes); System.out.println( "\t" + Base64.encodeAsString( bytes ) ); } else if( message instanceof ObjectMessage ) { ObjectMessage objMessage = (ObjectMessage) message; System.out.println( "\t" + objMessage.getObject() ); } }}

Implementaciones de JMS 1.1 admitidasBiblioteca de mensajería Amazon SQS para Java admite las siguientes implementaciones de JMS 1.1.Para obtener más información sobre las características y funcionalidades de Biblioteca de mensajeríaAmazon SQS para Java compatibles, consulte las Preguntas frecuentes sobre Amazon SQS.

Interfaces comunes admitidas• Connection

• ConnectionFactory

• Destination

• Session

• MessageConsumer

• MessageProducer

Tipos de mensajes admitidos• ByteMessage

• ObjectMessage

• TextMessage

134

Page 140: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresImplementaciones de JMS 1.1 admitidas

Modos de confirmación de mensajes admitidos• AUTO_ACKNOWLEDGE

• CLIENT_ACKNOWLEDGE

• DUPS_OK_ACKNOWLEDGE

• UNORDERED_ACKNOWLEDGE

Note

El modo UNORDERED_ACKNOWLEDGE no forma parte de la especificación JMS 1.1. Este modoayuda a Amazon SQS a permitir que un cliente de JMS reconozca explícitamente un mensaje.

Propiedades reservadas y encabezados definidos por JMSPara enviar mensajes

Al enviar mensajes, puede definir los siguientes encabezados y propiedades para cada mensaje:

• JMSXGroupID (necesario con las colas FIFO, no permitido con las colas estándar)• JMS_SQS_DeduplicationId (opcional con las colas FIFO, no permitido con las colas estándar)

Después de enviar mensajes, Amazon SQS establece los siguientes encabezados y propiedades paracada mensaje:

• JMSMessageID

• JMS_SQS_SequenceNumber (solo con colas FIFO)

Para recibir mensajes

Después de recibir mensajes, Amazon SQS establece los siguientes encabezados y propiedades paracada mensaje:

• JMSDestination

• JMSMessageID

• JMSRedelivered

• JMSXDeliveryCount

• JMSXGroupID (solo con colas FIFO)• JMS_SQS_DeduplicationId (solo con colas FIFO)• JMS_SQS_SequenceNumber (solo con colas FIFO)

135

Page 141: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRecomendaciones para las colas Estándar y FIFO

Prácticas recomendadas paraAmazon SQS

Estas prácticas recomendadas pueden ayudarle a sacar el máximo partido de Amazon SQS.

Temas• Recomendaciones para las colas Amazon SQS Estándar y FIFO (First-In-First-Out) (p. 136)• Recomendaciones adicionales para las colas FIFO de Amazon SQS (p. 139)

Recomendaciones para las colas Amazon SQSEstándar y FIFO (First-In-First-Out)

Las siguientes prácticas recomendadas pueden ayudarle a reducir costos y procesar los mensajes deforma eficaz mediante Amazon SQS.

Temas• Uso de los mensajes de Amazon SQS (p. 136)• Reducción de costos de Amazon SQS (p. 138)• Pasar de una cola Estándar de Amazon SQS a una cola de FIFO (p. 139)

Uso de los mensajes de Amazon SQSLas siguientes directrices pueden ayudarle a procesar los mensajes de forma eficaz mediante AmazonSQS.

Temas• Procesamiento de los mensajes a tiempo (p. 136)• Gestión de los errores de solicitud (p. 137)• Configuración del sondeo largo (p. 137)• Captura de mensajes problemáticos (p. 138)• Configuración de la retención de la cola de mensajes fallidos (p. 138)• Cómo evitar el procesamiento incoherente de los mensajes (p. 138)• Implementación de sistemas de solicitud-respuesta (p. 138)

Procesamiento de los mensajes a tiempoLa configuración del tiempo de espera de visibilidad depende de lo que tarde la aplicación en procesary eliminar un mensaje. Por ejemplo, si la aplicación necesita 10 segundos para procesar un mensaje yestablece el tiempo de espera de visibilidad en 15 minutos, debe esperar un tiempo relativamente largopara intentar procesar el mensaje de nuevo si el intento de procesamiento anterior produce un error.

136

Page 142: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de los mensajes

Asimismo, si la aplicación requiere 10 segundos para procesar un mensaje pero el usuario establece eltiempo de espera de visibilidad en solo 2 segundos, otro consumidor recibe un mensaje duplicado mientrasque el consumidor original sigue trabajando en el mensaje.

Para asegurarse de que hay tiempo suficiente para procesar los mensajes, utilice una de las siguientesestrategias:

• Si sabe (o puede calcular razonablemente) el tiempo que se tarda en procesar un mensaje, amplíeel tiempo de espera de visibilidad del mensaje al tiempo máximo que se tarda en procesar yeliminar el mensaje. Para obtener más información, consulte Configuración del tiempo de espera devisibilidad (p. 103) y Cambio del tiempo de espera de visibilidad de un mensaje (p. 103).

• Si no sabe cuánto se tarda en procesar un mensaje, cree un latido para el proceso del consumidor:especifique el tiempo de espera de visibilidad (por ejemplo, 2 minutos) y (si el consumidor siguetrabajando en el mensaje), amplíe cada minuto el tiempo de espera de visibilidad en 2 minutos.

Note

Si necesita ampliar el tiempo de espera de visibilidad a más de 12 horas, considere la posibilidadde utilizar AWS Step Functions.

Gestión de los errores de solicitudPara gestionar los errores de solicitud, utilice una de las siguientes estrategias:

• Si utiliza un SDK de AWS, ya dispone de lógica automática de reintento y retardo. Para obtener másinformación, consulte Reintentos de error y retardo exponencial en AWS en la Referencia general deAmazon Web Services.

• Si no utiliza las características de un SDK de AWS para el reintento y el retardo, haga una pausa (porejemplo, 200 ms) antes de reintentar la acción ReceiveMessage después de que no se reciba ningúnmensaje, un tiempo de espera o un mensaje de error de Amazon SQS. Si quiere utilizar posteriormenteReceiveMessage con los mismos resultados, haga una pausa mayor (por ejemplo, 400 ms).

Configuración del sondeo largoCuando el tiempo de espera de la acción de la API ReceiveMessage es superior a 0, se produce unsondeo largo. El tiempo máximo de espera de sondeo largo es de 20 segundos. El sondeo largo ayudaa reducir el costo de uso de Amazon SQS al eliminar el número de respuestas vacías (cuando no hayningún mensaje disponible para una solicitud ReceiveMessage) y las falsas respuestas vacías (cuandolos mensajes están disponibles en la cola, pero no se incluyen en una respuesta). Para obtener másinformación, consulte Sondeos cortos y largos de Amazon SQS (p. 96).

Para garantizar el procesamiento óptimo de los mensajes, utilice las siguientes estrategias:

• En la mayoría de los casos, puede establecer el tiempo de espera de ReceiveMessage en 20segundos. Si 20 segundos es demasiado tiempo para su aplicación, establezca un tiempo de esperade ReceiveMessage más corto (1 segundo como mínimo). Si no utiliza un SDK de AWS para obteneracceso a Amazon SQS, o si configura un SDK de AWS para tener un tiempo de espera más corto, esposible que tenga que modificar el cliente de Amazon SQS; para que permita solicitudes más largas opara que use un tiempo de espera más breve para el sondeo largo.

• Si implementa el sondeo largo para varias colas, utilice un subproceso para cada cola en lugar de unsolo subproceso para todas las colas. El uso de un único subproceso para cada cola permite que laaplicación procese los mensajes de cada una de las colas en cuanto estén disponibles, mientras que eluso de un único subproceso para sondear varias colas podría impedir que su aplicación procesara losmensajes disponibles en otras colas mientras la aplicación espera (hasta 20 segundos) para la cola queno tiene ningún mensaje disponible.

137

Page 143: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresReducción de costos

Captura de mensajes problemáticosPara capturar todos los mensajes que no se pueden procesar y garantizar la exactitud de las métricas deCloudWatch, configure una cola de mensajes fallidos (p. 98).

• La política de redireccionamiento redirige los mensajes a una cola de mensajes fallidos después de quela cola de origen no puede procesar un mensaje un número especificado de veces.

• El uso de una cola de mensajes fallidos reduce el número de mensajes y la posibilidad de exponer elsistema a mensajes de píldoras venenosas (mensajes que se reciben pero no se pueden procesar).

• La inclusión de un mensaje de píldora venenosa en una cola puede distorsionar la métrica deApproximateAgeOfOldestMessage (p. 196) CloudWatch y ofrecer una antigüedad incorrecta de unmensaje de píldora venenosa. Cuando se utiliza esta métrica, la configuración de una cola de mensajesfallidos ayuda a evitar falsas alarmas.

Configuración de la retención de la cola de mensajes fallidosEl vencimiento de un mensaje siempre irá en función de su marca temporal de puesta en cola original.Cuando se mueve un mensaje a unacola de mensajes fallidos (p. 98), la marca temporal de puesta en colano cambia. Por ejemplo, si un mensaje permanece 1 día en la cola original antes de su traslado a una colade mensajes fallidos, y el periodo de retención de dicha cola se ha establecido en 4 días, el mensaje seborrará de la cola de mensajes fallidos al cabo de 3 días. Por tanto, se recomienda siempre que el periodode retención de una cola de mensajes fallidos sea más extenso que el periodo de retención de la colaoriginal.

Cómo evitar el procesamiento incoherente de los mensajesDebido a que Amazon SQS es un sistema distribuido, es posible que un consumidor no reciba un mensajeaunque Amazon SQS lo marque como entregado al regresar correctamente de una llamada de métodode API ReceiveMessage. En este caso, Amazon SQS registra el mensaje como entregado al menos unavez, aunque el consumidor no lo haya recibido. Dado que no se realizan intentos adicionales de entregarmensajes en estas condiciones, no recomendamos establecer el número máximo de recepciones en 1para una cola de mensajes fallidos (p. 98).

Implementación de sistemas de solicitud-respuestaAl implementar un sistema de solicitud-respuesta o de llamada a procedimiento remoto (RPC), tenga encuenta las siguientes prácticas recomendadas:

• No cree colas de respuestas por mensaje. En su lugar, cree colas de respuestas durante el inicio,por productor, y utilice un atributo de mensaje de ID de correlación para mapear las respuestas a lassolicitudes.

• No permita que sus productores compartan colas de respuestas. Esto puede provocar que un productorreciba mensajes de respuesta destinados a otro productor.

Para obtener más información acerca de cómo implementar el patrón de solicitud de respuestautilizando el Cliente de colas temporales, consulte Patrón de mensajes de respuesta a solicitudes (colasvirtuales) (p. 106).

Reducción de costos de Amazon SQSLas siguientes prácticas recomendadas pueden ayudarle a reducir costos y aprovechar la posiblereducción de costos adicionales y una respuesta casi instantánea.

138

Page 144: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPasar de una cola de Estándar a una cola de FIFO

Procesamiento por lotes de las acciones de los mensajesPara reducir los costos, procese por lotes las acciones de los mensajes:

• Para enviar, recibir y eliminar mensajes, y para cambiar el tiempo de espera de visibilidad de variosmensajes con una sola acción, utilice las acciones de la API de procesamiento por lotes de AmazonSQS (p. 211).

• Para combinar el almacenamiento en búfer del lado del cliente con el agrupamiento en lotes desolicitudes, utilice el sondeo largo junto con el cliente asincrónico en búfer (p. 212) incluido con la AWSSDK for Java.

Note

Cliente asincrónico en búfer de Amazon SQSno admite actualmente colas FIFO.

Uso del modo de sondeo apropiado• El sondeo largo le permite consumir mensajes de la cola de Amazon SQS tan pronto como estén

disponibles.• Para reducir el costo derivado del uso de Amazon SQS y reducir el número de recepciones vacías

en una cola vacía (respuestas a la acción ReceiveMessage que no devuelven ningún mensaje),habilite el sondeo largo. Para obtener más información, consulte el artículo sobre los sondeos largosen Amazon SQS (p. 96).

• Para aumentar la eficacia cuando se sondean varios subprocesos con varias recepciones, reduzca elnúmero de procesos.

• En la mayoría de los casos, el sondeo largo es preferible al sondeo corto.• El sondeo corto devuelve respuestas inmediatamente, incluso aunque la cola de Amazon SQS

sondeada esté vacía.• Para satisfacer los requisitos de una aplicación que espera respuestas inmediatas a la solicitudReceiveMessage, utilice el sondeo corto.

• El sondeo corto se factura igual que el sondeo largo.

Pasar de una cola Estándar de Amazon SQS a unacola de FIFOSi no establece el parámetro DelaySeconds en cada mensaje, puede pasar a una cola FIFO siproporciona un ID de grupo de mensajes para cada mensaje enviado.

Para obtener más información, consulte Pasar de una cola de Estándar a una cola de FIFO (p. 86).

Recomendaciones adicionales para las colas FIFOde Amazon SQS

Las siguientes prácticas recomendadas pueden ayudarle a utilizar el ID de desduplicación de mensajesy el ID de grupo de mensajes de forma óptima. Para obtener más información, consulte las accionesSendMessage y SendMessageBatch en Amazon Simple Queue Service API Reference.

Temas• Uso del ID de desduplicación de mensajes Amazon SQS (p. 140)

139

Page 145: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso del ID de desduplicación de mensajes

• Uso del ID de grupo de mensajes de Amazon SQS (p. 141)• Uso del ID de intento de solicitud de recepción de Amazon SQS (p. 142)

Uso del ID de desduplicación de mensajes AmazonSQSEl ID de desduplicación de mensajes es token utilizado para la desduplicación de los mensajes enviados.Si un mensaje con un ID de desduplicación concreto se envía satisfactoriamente, cualquier otro mensajecon el mismo ID de desduplicación de mensajes se acepta pero no se entregan durante el intervalo dedesduplicación de cinco minutos.

Note

La desduplicación de mensajes se aplica a una cola completa, no a grupos de mensajesindividuales.Amazon SQS continua haciendo un seguimiento del ID de la deduplicación del mensaje inclusodespués de que el mensaje se reciba y elimine.

Entrega del ID de desduplicación de mensajesEl productor debe proporcionar los valores de ID de desduplicación de mensajes para cada mensaje quese envíe en los siguientes escenarios:

• Mensajes enviados con cuerpos idénticos que Amazon SQS debe tratar como únicos.• Mensajes enviados con contenido idéntico pero atributos diferentes que Amazon SQS debe tratar como

únicos.• Mensajes enviados con contenido diferente (por ejemplo, los recuentos de reintentos están incluidos en

el cuerpo del mensaje) que Amazon SQS debe tratar como duplicados.

Habilitación de la desduplicación para un sistema de un soloproductor y un solo consumidorSi tiene un único productor y un único consumidor y los mensajes son exclusivos porque se incluye un IDde mensaje específico de la aplicación en el cuerpo del mensaje, siga estas prácticas recomendadas:

• Habilite la desduplicación basada en el contenido para la cola (cada uno de sus mensajes tiene uncuerpo único). El productor puede omitir el ID de desduplicación de mensajes.

• Aunque no es necesario que el consumidor proporcione un ID de intento de solicitud de recepción paracada solicitud, es recomendable hacerlo porque permite que las secuencias de reintento tras un error seejecuten con mayor rapidez.

• Puede reintentar las solicitudes de envío o recepción, ya que no interfieren con la ordenación de losmensajes en las colas FIFO.

Diseño para escenarios de recuperación de interrupcionesEl proceso de desduplicación en las colas FIFO está sujeto a limitación temporal. Al diseñar una aplicación,asegúrese de que tanto el productor como el consumidor puedan recuperarse en caso de que se produzcauna interrupción del cliente o de la red.

• El productor debe ser consciente del intervalo de desduplicación de la cola. Amazon SQS tiene unintervalo de desduplicación mínimo de 5 minutos. El reintento de solicitudes SendMessage después deque finalice el intervalo de desduplicación puede introducir mensajes duplicados en la cola. Por ejemplo,

140

Page 146: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso del ID de grupo de mensajes

un dispositivo móvil en un automóvil envía mensajes cuyo orden es importante. Si el automóvil pierde laconectividad móvil durante un periodo de tiempo antes de recibir un reconocimiento, el reintento de lasolicitud después de recuperar la conectividad móvil puede crear un duplicado.

• El consumidor debe tener un tiempo de espera de visibilidad que minimice el riesgo de nopoder procesar los mensajes antes de que finalice el tiempo de espera de visibilidad. Paraampliar el tiempo de espera de visibilidad mientras se procesan los mensajes, llame a la acciónChangeMessageVisibility. Sin embargo, si el tiempo de espera de visibilidad finaliza, otroconsumidor puede comenzar inmediatamente a procesar los mensajes, lo que hará que un mensaje seprocese varias veces. Para evitar esta situación, configure una cola de mensajes fallidos (p. 98).

Uso de tiempos de espera de visibilidadPara disfrutar de un rendimiento óptimo, establezca un tiempo de espera de visibilidad (p. 101) quesea mayor que el tiempo de espera de lectura del SDK de AWS. Hágalo cuando utilice la acciónReceiveMessage de la API tanto con sondeos cortos (p. 96) como con sondeos largos (p. 96).

Uso del ID de grupo de mensajes de Amazon SQSEl ID de grupo de mensajes es etiqueta que especifica que un mensaje pertenece a un grupo de mensajesespecífico. Los mensajes que pertenecen al mismo grupo de mensajes siempre se procesan de uno enuno, en orden estricto relativo al grupo de mensajes (sin embargo, un mensaje que pertenezca a diferentesgrupos de mensajes pueden procesarse sin guardar el orden).

Intercalación de varios grupos de mensajes ordenadosPara intercalar varios grupos de mensajes ordenados dentro de una única cola FIFO, debe utilizar valoresde ID de grupo de mensajes (por ejemplo, datos de sesiones para varios usuarios). En esta situación,varios consumidores pueden procesar la cola, pero los datos de sesión de cada usuario se procesansegún el modelo FIFO.

Note

Cuando los mensajes que pertenecen a un determinado ID de grupo de mensajes son invisibles,ningún otro consumidor puede procesar los mensajes que tienen el mismo ID de grupo demensajes.

Cómo evitar procesar los duplicados en un sistema de variosproductores y consumidoresPara evitar el procesamiento de mensajes duplicados en un sistema que cuenta con varios productoresy consumidores y donde el desempeño y la latencia son más importantes que la ordenación, el productordebería generar un ID de grupo de mensajes único para cada mensaje.

Note

En esta situación, se eliminan los duplicados. Sin embargo, la ordenación de los mensaje no sepuede garantizar.Cualquier escenario que tenga varios productores y consumidores aumenta el riesgo de entregaraccidentalmente un mensaje duplicado si un proceso de trabajo no procesa el mensaje durante eltiempo de espera de visibilidad y el mensaje está disponible para otro proceso de trabajo.

Evite tener una gran cantidad de tareas pendientes de mensajescon el mismo ID de grupo de mensajesPara las colas FIFO, el máximo de mensajes en tránsito es de 20 000 mensajes (recibido de una cola porun consumidor, pero todavía no eliminado de la cola). Si alcanza esta cuota, Amazon SQS no devuelve

141

Page 147: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso del ID de intento de solicitud de recepción

ningún mensaje de error. Si la cola tiene una gran cantidad de tareas pendientes de 20 000 o másmensajes con el mismo ID de grupo de mensajes, es posible que las colas FIFO no puedan devolverlos mensajes que tienen un ID de grupo de mensajes diferente, pero que se enviaron a la cola en otromomento hasta que consuman correctamente los mensajes de las tareas pendientes.

Note

Es posible que se acumulen tareas pendientes de mensajes que tengan el mismo ID de grupode mensajes debido a que un consumidor no puede procesar correctamente un mensaje. Losproblemas de procesamiento de mensajes pueden producirse debido a un problema con elcontenido de un mensaje o debido a un problema técnico con el consumidor.Para alejar los mensajes que no se pueden procesar repetidamente y desbloquear elprocesamiento de otros mensajes que tienen el mismo ID de grupo de mensajes, considere laposibilidad de configurar una política de cola de mensajes fallidos (p. 98).

Evite reutilizar el mismo ID de grupo de mensajes con colasvirtualesPara evitar que los mensajes con el mismo ID de grupo de mensajes enviados a diferentes colasvirtuales (p. 105) con la misma cola de host se bloqueen entre sí, intente reutilizar el mismo ID de grupo demensajes con colas virtuales.

Uso del ID de intento de solicitud de recepción deAmazon SQSEl ID de intento de solicitud de recepción es token utilizado para la desduplicación de las llamadasReceiveMessage.

Durante una interrupción de la red prolongada que ocasiona problemas de conectividad entre su SDK yAmazon SQS, se recomienda proporcionar el ID de intento de solicitud de recepción y volver a intentarlocon ese mismo ID de intento de solicitud de recepción si la operación del SDK produce un error.

142

Page 148: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCuotas relacionadas con las colas

Cuotas de Amazon SQSEn este tema se muestran las cuotas de Amazon Simple Queue Service (Amazon SQS).

Temas• Cuotas relacionadas con las colas (p. 143)• Cuotas relacionadas con los mensajes (p. 144)• Cuotas relacionadas con las políticas (p. 145)

Cuotas relacionadas con las colasEn la siguiente tabla se muestran las cuotas relacionadas con las colas.

Quota Descripción

Cola con retraso El tiempo de retraso (mínimo) predeterminado de una cola esde 0 segundos. El tiempo máximo es de 15 minutos.

Colas mostradas 1000 colas por cada solicitud de ListQueues.

Tiempo de espera de sondeo largo El tiempo máximo de espera de sondeo largo es de 20segundos.

Grupos de mensajes No existe ninguna cuota para el número de grupos demensaje dentro de una cola FIFO.

Mensajes por cola (pendientes) El número de mensajes que puede almacenar una cola deAmazon SQS es ilimitado.

En la mayoría de colas estándar (en función del tráfico dela cola y las tareas pendientes del mensaje) puede haberun máximo de 120 000 mensajes en tránsito (recibido deuna cola por un consumidor, pero todavía no eliminadode la cola). Si alcanza esta cuota, Amazon SQS devuelveel mensaje de error OverLimit. Para evitar llegar a lacuota, conviene eliminar los mensajes de la cola una vezprocesados. También puede aumentar el número de lascolas que usa para procesar los mensajes. Para solicitar unaumento de la cuota, envíe una solicitud de soporte técnico.

Mensajes por cola (en tránsito)

Para las colas FIFO, el máximo de mensajes en tránsito esde 20 000 mensajes (recibido de una cola por un consumidor,pero todavía no eliminado de la cola). Si alcanza esta cuota,Amazon SQS no devuelve ningún mensaje de error.

Nombre de la cola Un nombre de cola puede tener un máximo de 80caracteres. Se aceptan los siguientes caracteres: caracteresalfanuméricos, guiones (-) y guiones bajos (_).

Note

Los nombres de cola distinguen entre mayúsculasy minúsculas (por ejemplo, Test-queue y test-queue son colas diferentes).

143

Page 149: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCuotas relacionadas con los mensajes

Quota Descripción

El nombre de una cola FIFO deber terminar por el sufijo.fifo. El sufijo se tiene en cuenta en la cuota del nombrede la cola de 80 caracteres. Para determinar si una cola esFIFO (p. 83), puede comprobar si el nombre termina por elsufijo.

No es conveniente agregar más de 50 etiquetas a una cola.

Se requiere la etiqueta Key, pero la etiqueta Value esopcional.

La etiqueta Key y la etiqueta Value distinguen entremayúsculas y minúsculas.

La pestaña Key y la pestaña Value pueden incluir caracteresalfanuméricos en UTF-8 y espacios en blanco. Se permitenlos siguientes caracteres especiales: _ . : / = + - @

La etiqueta Key o Value no debe incluir el prefijo reservadoaws: (con este prefijo, no puede eliminar las claves o losvalores de una etiqueta).

La longitud máxima de la etiqueta Key es de 128 caracteresUnicode en UTF-8. La etiqueta Key no debe estar vacía o sernula.

La longitud máxima de la etiqueta Value es de 256caracteres Unicode en UTF-8. La etiqueta Value puede estarvacía o ser nula.

Etiqueta de la cola

Las acciones de etiquetado están limitadas a 5 TPS porcada cuenta de AWS. Si la aplicación requiere un nivel derendimiento mayor, envíe una solicitud.

Cuotas relacionadas con los mensajesEn la siguiente tabla se muestran las cuotas relacionadas con los mensajes.

Quota Descripción

ID de mensaje por lotes Un puede tener un máximo de 80 caracteres. Se aceptan lossiguientes caracteres: caracteres alfanuméricos, guiones (-) yguiones bajos (_). de ID de mensaje por lotes

Atributos de mensajes Un mensaje puede contener hasta 10 atributos de metadatos.

Lote de mensajes Una única solicitud por lotes de mensajes puedeincluir un máximo de 10 mensajes. Para obtenermás información, consulte Configuración deAmazonSQSBufferedAsyncClient (p. 213) en la secciónAmazon SQS Acciones de procesamiento por lotes (p. 211).

Contenido de los mensajes Un mensaje solo puede incluir XML, JSON y texto sinformato. Se permiten los siguientes caracteres Unicode: #x9 |

144

Page 150: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCuotas relacionadas con las políticas

Quota Descripción#xA | #xD | #x20 a #xD7FF | #xE000 a #xFFFD | #x10000 a#x10FFFF

Cualquier carácter que no esté incluido en esta lista serechazará. Para obtener más información, consulte laespecificación W3C respecto a los caracteres.

ID de grupo de mensajes Consuma los mensajes de las tareas pendientes para evitarcrear una gran cantidad de mensajes pendientes con elmismo ID de grupo de mensajes (p. 141).

Retención de mensajes De forma predeterminada, un mensaje se conserva durante4 días. El mínimo es 60 segundos (1 minuto). El máximo es1 209 600 segundos (14 días).

Las colas Estándar admiten un número casi ilimitado detransacciones por segundo (TPS) para cada acción de la API(SendMessage, ReceiveMessage o DeleteMessage).

Capacidad de procesamiento demensajes

• De forma predeterminada, con el procesamiento porlotes (p. 211), las colas FIFO admiten hasta 3000mensajes por segundo (TPS), por acción de API(SendMessage, ReceiveMessage o DeleteMessage).Para solicitar un aumento de la cuota, envíe una solicitudde soporte técnico.

• Sin procesamiento por lotes, las colas FIFO admitenhasta 300 mensajes por segundo, por acción de API(SendMessage, ReceiveMessage o DeleteMessage).

Temporizador de mensajes El tiempo de retraso (mínimo) predeterminado de un mensajees de 0 segundos. El tiempo máximo es de 15 minutos.

Tamaño del mensaje El tamaño mínimo de los mensajes es de 1 byte (1 carácter).El máximo es de 262 144 bytes (256 KB).

Para enviar mensajes con un tamaño superior a 256 KB,puede utilizar Biblioteca de cliente ampliada para Java deAmazon SQS. Esta biblioteca le permite enviar un mensajede Amazon SQS que contiene una referencia a una carga demensajes de Amazon S3. El tamaño de carga máximo es 2GB.

Tiempo de espera de visibilidad de losmensajes

El tiempo de espera de visibilidad predeterminado de unmensaje es de 30 segundos. La duración mínima es de 0segundos. El valor máximo es 12 horas.

Información de políticas La cuota máxima es 8192 bytes, 20 instrucciones, 50entidades principales o 10 condiciones. Para obtenermás información, consulte Cuotas relacionadas con laspolíticas (p. 145).

Cuotas relacionadas con las políticasEn la siguiente tabla se muestran las cuotas relacionadas con las políticas.

145

Page 151: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCuotas relacionadas con las políticas

Nombre Máximo

Bytes 8192

Condiciones 10

Entidades principales 50

Instrucciones 20

146

Page 152: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAutomatización de notificaciones

mediante Eventos de CloudWatch

Automatización y solución deproblemas de colas de Amazon SQS

En esta sección se proporciona información sobre la automatización y la solución de problemas de colasde Amazon SQS.

Temas• Automatización de las notificaciones de los servicios de AWS para Amazon SQS mediante Eventos de

CloudWatch (p. 147)• Solución de problemas de colas de Amazon Simple Queue Service con AWS X-Ray (p. 147)

Automatización de las notificaciones de losservicios de AWS para Amazon SQS medianteEventos de CloudWatch

Amazon CloudWatch Events le permite automatizar los servicios de AWS y responder a eventos delsistema, como problemas de disponibilidad de aplicaciones o cambios de recursos. Los eventos de losservicios de AWS se envían a Eventos de CloudWatch prácticamente en tiempo real. Puede crear reglassencillas para indicar qué eventos le resultan de interés, así como qué acciones automatizadas se van arealizar cuando un evento cumple una de las reglas.

Eventos de CloudWatch le permite configurar varios destinos, como colas estándar y FIFO de AmazonSQS, que reciben eventos en formato JSON. Para obtener más información, consulte la Guía del usuariode Amazon CloudWatch Events.

Solución de problemas de colas de Amazon SimpleQueue Service con AWS X-Ray

AWS X-Ray recopila datos sobre las solicitudes que atiende su aplicación y le permite ver y filtrar datospara identificar posibles problemas y oportunidades de optimización. En cada solicitud rastreada enviadaa su aplicación, puede ver información detallada sobre la solicitud, la respuesta y las llamadas que suaplicación realiza a recursos de AWS, microservicios, bases de datos y API web de HTTP posteriores.

Para enviar encabezados de rastreo de AWS X-Ray a través de Amazon SQS, puede realizar una de lassiguientes operaciones:

• Utilice el encabezado de rastreo de X-Amzn-Trace-Id.• Utilice el atributo del sistema de mensajes (p. 94) de AWSTraceHeader.

Para recopilar datos sobre errores y latencia, debe instrumentar el cliente de AmazonSQS mediante el SDKde AWS X-Ray.

Puede usar la consola de AWS X-Ray para ver el mapa de conexiones entre Amazon SQS y los demásservicios que utiliza su aplicación. También puede utilizar la consola para ver métricas como la latencia

147

Page 153: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresSolución de problemas de colas con X-Ray

media y las tasas de errores. Para obtener más información, consulte Amazon SQS y AWS X-Ray en laGuía para desarrolladores de AWS X-Ray.

148

Page 154: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresProtección de los datos

Seguridad en Amazon SQSEsta sección contiene información sobre la seguridad, la autenticación y el control de acceso en AmazonSQS, así como el Access Policy Language de Amazon SQS.

Temas• Protección de datos en Amazon SQS (p. 149)• Identity and Access Management en Amazon SQS (p. 158)• Registro y monitorización en Amazon SQS (p. 188)• Validación de la conformidad para Amazon SQS (p. 201)• Resiliencia en Amazon SQS (p. 201)• Seguridad de la infraestructura en Amazon SQS (p. 202)• Prácticas recomendadas de seguridad de Amazon SQS (p. 202)

Protección de datos en Amazon SQSEn las siguientes secciones se proporciona información sobre la protección de datos en Amazon SQS.

Temas• Cifrado de datos (p. 149)• Privacidad del tráfico entre redes (p. 156)

Cifrado de datosLa protección de datos se refiere a salvaguardarlos en tránsito (al desplazarse desde y hacia AmazonSQS) y en reposo (almacenado en discos en centros de datos Amazon SQS). Puede proteger los datosen tránsito con una Capa de sockets seguros (SSL, Secure Sockets Layer) o con el cifrado del lado delcliente. Puede proteger los datos en reposo si solicita a Amazon SQS que cifre los mensajes antes deguardarlos en el disco en sus centros de datos y, a continuación, que los descifre cuando se reciban losmensajes.

Temas• Cifrado en reposo (p. 149)• Administración de claves (p. 152)

Cifrado en reposoEl cifrado en el servidor (SSE) permite transmitir información confidencial en colas cifradas. SSE protegeel contenido de los mensajes de las colas utilizando claves administradas en AWS Key ManagementService (AWS KMS). Para obtener más información acerca de cómo administrar SSE utilizando laConsola de administración de AWS o AWS SDK for Java (así como las acciones CreateQueue,SetQueueAttributes y GetQueueAttributes), consulte los tutoriales siguientes:

• Creación de una cola de Amazon SQS con SSE (p. 19)

149

Page 155: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCifrado de datos

• Configuración de SSE para una cola de Amazon SQS existente (p. 59)• Habilitar la compatibilidad entre servicios de AWS y colas cifradas (p. 155)

SSE cifra los mensajes en cuanto Amazon SQS los recibe. Los mensajes se almacenan cifrados y AmazonSQS los descifra únicamente cuando se envían a un consumidor autorizado.

Important

Todas las solicitudes hechas a las colas con SSE habilitado deben usar HTTPS y SignatureVersion 4.No se puede asociar una cola cifrada (p. 149) que utiliza una clave maestra del clienteadministrada por AWS para Amazon SQS con una función Lambda de otra cuenta de AWS.Algunas características de los servicios de AWS que pueden enviar notificaciones a Amazon SQSmediante la acción AssumeRole de AWS Security Token Service son compatibles con SSE, perofuncionan solo con colas estándar:

• Enlaces de ciclo de vida de Auto Scaling• Colas de mensajes fallidos de AWS Lambda

Para obtener información acerca de la compatibilidad de otros servicios con las colas cifradas;consulte Habilitar la compatibilidad entre servicios de AWS y colas cifradas (p. 155) y ladocumentación del servicio correspondiente.

AWS KMS combina hardware y software seguros de alta disponibilidad para ofrecer un sistema deadministración de claves adaptado a la nube. Cuando utiliza Amazon SQS con AWS KMS, las claves dedatos (p. 151) que cifran los datos de los mensajes también se cifran y almacenan con los datos queprotegen.

A continuación, se describen los beneficios de usar AWS KMS:

• Puede crear y administrar usted mismo claves maestras de clientes (CMK) (p. 151).• También puede usar la CMK administrada por AWS en Amazon SQS, que es única para cada cuenta y

región.• Los estándares de seguridad de AWS KMS pueden ayudarle a cumplir los requisitos de conformidad

relacionados con el cifrado.

Para obtener más información, consulte ¿Qué es AWS Key Management Service? en la AWS KeyManagement Service Developer Guide y el documento técnico Detalles criptográficos de AWS KeyManagement Service.

Temas• Ámbito de cifrado (p. 150)• Términos clave (p. 151)

Ámbito de cifrado

SSE cifra el cuerpo de un mensaje en una cola de Amazon SQS.

SSE no cifra lo siguiente:

• Metadatos de la cola (atributos y nombre de la cola)• Metadatos del mensaje (ID de mensaje, marca temporal y atributos)

150

Page 156: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCifrado de datos

• Métricas por cola

El cifrado de un mensaje evita que usuarios no autorizados o anónimos obtengan acceso a su contenido.Esto no afecta al funcionamiento normal de Amazon SQS:

• Un mensaje se cifra únicamente si se envía después de que se haya habilitado el cifrado de la cola.Amazon SQS no cifra los mensajes atrasados.

• Cualquier mensaje cifrado permanece en dicho estado aunque el cifrado de su cola esté deshabilitado.

Mover un mensaje a una cola de mensajes fallidos (p. 98) no afecta a su cifrado:

• Cuando Amazon SQS mueve un mensaje de una cola de origen cifrada a una cola de mensajes fallidossin cifrar, el mensaje permanece cifrado.

• Cuando Amazon SQS mueve un mensaje de una cola de origen sin cifrar a una cola de mensajesfallidos cifrada, el mensaje permanece sin cifrar.

Términos clave

Los siguientes términos clave pueden ayudarle a comprender mejor la funcionalidad de SSE. Para verdescripciones detalladas, consulte la Amazon Simple Queue Service API Reference.

Clave de datos

Clave de cifrado de datos (DEK) responsable de cifrar el contenido de los mensajes de Amazon SQS.

Para obtener más información, consulte Claves de datos en la AWS Key Management ServiceDeveloper Guide y Cifrado de sobre en la Guía para desarrolladores de SDK de cifrado de AWS.

Periodo de reutilización de la clave de datos

Período de tiempo, en segundos, durante el cual Amazon SQS puede reutilizar una clave de datospara cifrar o descifrar mensajes antes de llamar de nuevo a AWS KMS. Un entero que representasegundos, entre 60 segundos (1 minuto) y 86 400 segundos (24 horas). El valor predeterminado es300 (5 minutos). Para obtener más información, consulte Descripción del período de reutilización de laclave de datos (p. 152).

Note

En el caso poco probable de que no se pueda establecer conexión con AWS KMS, AmazonSQS seguirá utilizando la clave de datos almacenada en caché hasta que se restablezca laconexión.

ID de clave maestra del cliente

Alias, ARN de alias, ID de clave o ARN de clave de una clave maestra del cliente (CMK) administradapor AWS o una CMK personalizada —ya sea de su cuenta o de otra cuenta. Aunque el alias de laCMK administrada por AWS para Amazon SQS siempre es alias/aws/sqs, el alias de una CMKpersonalizada puede ser, por ejemplo, alias/MyAlias. Puede utilizar estas CMK para proteger losmensajes que se encuentran en las colas de Amazon SQS.

Note

Tenga en cuenta lo siguiente:• Si no se especifica una CMK personalizada, Amazon SQS utiliza la CMK administrada

por AWS en Amazon SQS. Para obtener instrucciones acerca de la creación de CMKpersonalizadas, consulte Creating Keys en la AWS Key Management Service DeveloperGuide.

151

Page 157: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCifrado de datos

• La primera vez que usa la Consola de administración de AWS para especificar la CMKadministrada por AWS para Amazon SQS para una cola, AWS KMS crea la CMKadministrada por AWS para Amazon SQS.

• Asimismo, la primera vez que utilice la acción SendMessage o SendMessageBatch enun tema que tenga SSE habilitado, AWS KMS creará la CMK que administra AWS paraAmazon SQS.

Puede crear varias CMK, definir las políticas que controlan cómo se pueden utilizar y auditar su usoen la sección Customer managed keys (Claves administradas por el cliente) de la consola de AWSKMS o la acción CreateKey AWS KMS. Para obtener más información, consulte Claves maestrasde cliente (CMK) y Creación de claves en la AWS Key Management Service Developer Guide. Paraobtener más ejemplos de identificadores de CMK, consulte KeyId en la AWS Key ManagementService API Reference. Para obtener información acerca de cómo buscar identificadores de CMK,consulte Encontrar el ID y el ARN de la clave en la AWS Key Management Service Developer Guide.

Important

La utilización de AWS KMS conlleva cargos adicionales. Para obtener más información,consulte Estimación de los costos de AWS KMS (p. 153) y Precios de AWS KeyManagement Service.

Administración de clavesEn las siguientes secciones se proporciona información sobre cómo trabajar con claves administradas enAWS Key Management Service (AWS KMS).

Temas• Descripción del período de reutilización de la clave de datos (p. 152)• Estimación de los costos de AWS KMS (p. 153)• Configuración de los permisos de AWS KMS (p. 154)• Errores de AWS KMS (p. 156)

Descripción del período de reutilización de la clave de datos

Amazon SQS utiliza una única clave maestra de cliente (la CMK administrada por AWS para Amazon SQSo una CMK personalizada) para proporcionar el cifrado de sobre y el descifrado de varios mensajes deAmazon SQS durante el periodo de reutilización de la clave de datos. Para sacar el máximo partido delperiodo de reutilización de la clave de datos (p. 151), tenga en cuenta lo siguiente:

• Un período de reutilización más corto proporciona una mayor seguridad, pero genera más llamadasAWS KMS, lo que podría generar más cargos de los que cubre la capa gratuita.

• Aunque la clave de datos se almacena en caché de forma independiente para el cifrado y el descifrado,el periodo de reutilización se aplica a ambas copias de la clave de datos.

• Las entidades principales (cuentas de AWS o usuarios de IAM) no comparten claves de datos (losmensajes enviados por entidades principales únicas siempre obtienen claves de datos únicas). Portanto, el volumen de llamadas a AWS KMS es un múltiplo del número de entidades principales únicas enuso durante el período de reutilización de la clave de datos:• Cuando se envían mensajes utilizando la acción SendMessage o SendMessageBatch, normalmente

Amazon SQS llama a las acciones GenerateDataKey y Decrypt de AWS KMS una vez por cadaperiodo de reutilización de la clave de datos.

Note

Por cada clave de datos que genera AWS KMS, SSE llama a la acción Decrypt paraverificar la integridad de la clave de datos antes de utilizarla.

152

Page 158: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCifrado de datos

• Cuando recibe mensajes mediante la acción ReceiveMessage, normalmente Amazon SQS llama a laacción Decrypt de AWS KMS una vez por cada periodo de reutilización de la clave de datos.

Estimación de los costos de AWS KMS

Para predecir los costos y comprender mejor la factura de AWS, es posible que necesite saber con quéfrecuencia Amazon SQS utiliza su clave maestra de cliente (CMK).

Note

Si bien la siguiente fórmula puede brindarle una muy buena idea de los costos esperados, loscostos reales podrían ser más elevados debido a la naturaleza distribuida de Amazon SQS.

Para calcular el número de solicitudes de la API (R) por cola, utilice la siguiente fórmula:

R = B / D * (2 * P + C)

B es el período de facturación (en segundos).

D es el período de reutilización de claves de datos (p. 151) (en segundos).

P es el número de entidades principales de producción que realizan envíos a la cola de Amazon SQS.

C es el número de entidades principales de consumo que reciben información desde la cola de AmazonSQS.

Important

En general, las entidades principales de producción generan el doble del costo que las deconsumo. Para obtener más información, consulte Descripción del período de reutilización de laclave de datos (p. 152)Si el productor y el consumidor tienen diferentes usuarios de IAM, el costo aumenta.

A continuación se muestran algunos cálculos de ejemplo. Para obtener información exacta sobre precios,consulte Precios de AWS Key Management Service.

Ejemplo 1: cálculo del número de llamadas a la API de AWS KMS con 2 entidades principales y 1cola

Este ejemplo presupone lo siguiente:

• El período de facturación va del 1 al 31 de enero (2 678 400 segundos).• El periodo de reutilización de la clave de datos está establecido en 5 minutos (300 segundos).• Hay una cola.• Hay una entidad principal de producción y una entidad principal de consumo.

2,678,400 / 300 * (2 * 1 + 1) = 26,784

Ejemplo 2: cálculo del número de llamadas a la API de AWS KMS con varios productores yconsumidores y 2 colas

Este ejemplo presupone lo siguiente:

• El período de facturación va del 1 al 28 de febrero (2 419 200 segundos).

153

Page 159: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCifrado de datos

• El periodo de reutilización de la clave de datos está establecido en 24 horas (86 400 segundos).• Hay 2 colas.• La primera cola tiene 3 entidades principales productoras y una entidad principal consumidora.• La segunda cola tiene 5 entidades principales productoras y 2 entidades principales consumidoras.

(2,419,200 / 86,400 * (2 * 3 + 1)) + (2,419,200 / 86,400 * (2 * 5 + 2)) = 532

Configuración de los permisos de AWS KMS

Para poder usar SSE, debe configurar las políticas de claves de AWS KMS para permitir el cifrado de lascolas y el cifrado y descifrado de mensajes. Para obtener ejemplos y más información sobre los permisosde AWS KMS, consulte Permisos API de AWS KMS: Referencia de recursos y acciones en la AWS KeyManagement Service Developer Guide.

Note

También puede administrar los permisos de las claves de KMS mediante políticas de IAM. Paraobtener más información, consulte Uso de políticas de IAM con AWS KMS.Aunque puede configurar permisos globales para realizar envíos a Amazon SQS y recibirinformación de este, AWS KMS requiere que se indique explícitamente el ARN completo de lasCMK en regiones específicas de la sección Resource de una política de IAM.Por cada clave de datos que genera AWS KMS, SSE llama a la acción Decrypt para verificar laintegridad de la clave de datos antes de utilizarla.

También debe asegurar que las políticas de claves de la CMK (clave maestra de cliente) conceden lospermisos necesarios. Para ello, asigne un nombre a las entidades principales que producen y consumenmensajes cifrados en Amazon SQS como usuarios de la política de claves de CMK.

Si lo desea, también puede especificar las acciones de AWS KMS necesarias y el ARN de CMK en unapolítica de IAM asignada a las entidades principales que producen y consumen mensajes cifrados enAmazon SQS. Para obtener más información, consulte Administración del acceso a las CMK de AWS KMSen la AWS Key Management Service Developer Guide.

Permitir que un usuario envíe mensajes únicos o por lotes a una cola con SSE

El productor debe tener los permisos kms:GenerateDataKey y kms:Decrypt para la clave maestrade cliente (CMK). Por cada clave de datos que genera AWS KMS, SSE llama a la acción Decrypt paraverificar la integridad de la clave de datos antes de utilizarla.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sqs:SendMessage", "sqs:SendMessageBatch" ], "Resource": "arn:aws:sqs:*:123456789012:MyQueue" }]

154

Page 160: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresCifrado de datos

}

Permitir que un usuario reciba mensajes de una cola con SSE

El consumidor debe tener el permiso kms:Decrypt para todas las claves maestras de cliente (CMK) quese utilicen para cifrar los mensajes en la cola especificada. Por cada clave de datos que genera AWS KMS,SSE llama a la acción Decrypt para verificar la integridad de la clave de datos antes de utilizarla. Si lacola funciona como una cola de mensajes fallidos (p. 98), el consumidor también debe tener el permisokms:Decrypt para todas las CMK que se utilicen para cifrar los mensajes en la cola de origen.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:*:123456789012:MyQueue" }]}

Habilitar la compatibilidad entre los orígenes de eventos de los servicios de AWS y las colascifradas

Varios servicios de AWS envían eventos a colas de Amazon SQS. Para que estos orígenes de eventosfuncionen con las colas cifradas, es preciso llevar a cabo los pasos que se describen a continuación:

1. Utilice una CMK administrada por el cliente. Para obtener más información, consulte Creating Keys enla AWS Key Management Service Developer Guide.

2. Para permitir que el servicio de AWS disponga de los permisos kms:GenerateDataKey* ykms:Decrypt, añada la siguiente instrucción a la política de la CMK.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" }]}

Origen del evento Principal

Amazon CloudWatch Events events.amazonaws.com

Notificaciones de eventos de Amazon S3 s3.amazonaws.com

155

Page 161: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPrivacidad del tráfico entre redes

Origen del evento Principal

Suscripciones a temas de Amazon SNS sns.amazonaws.com

3. Cree una nueva cola de SSE (p. 19) o configure una cola de SSE existente (p. 59) utilizando el ARNde la CMK.

4. Proporcione el ARN de la cola cifrada al origen de eventos.

Errores de AWS KMS

Al trabajar con Amazon SQS y AWS KMS, es posible que se produzcan errores. En la siguiente lista sedescriben los errores y sus posibles soluciones.

KMSAccessDeniedException

El texto cifrado hace referencia a una clave que no existe o a la que no tiene acceso.

Código de estado HTTP: 400KMSDisabledException

La solicitud se rechazó porque la CMK especificada no está habilitada.

Código de estado HTTP: 400KMSInvalidStateException

La solicitud se rechazó porque el estado del recurso especificado no es válido para esta solicitud. Paraobtener más información, consulte Cómo afecta al estado de la clave el uso de una clave maestra delcliente en la AWS Key Management Service Developer Guide.

Código de estado HTTP: 400KMSNotFoundException

La solicitud se rechazó porque la entidad o el recurso especificado no se encontraron.

Código de estado HTTP: 400KMSOptInRequired

El ID de clave de acceso de AWS necesita una suscripción al servicio.

Código de estado HTTP: 403KMSThrottlingException

La solicitud se denegó debido a una limitación controlada. Para obtener más información sobre lalimitación controlada, consulte Límites en la AWS Key Management Service Developer Guide.

Código de estado HTTP: 400

Privacidad del tráfico entre redesUn punto de enlace de Amazon Virtual Private Cloud (Amazon VPC) para Amazon SQS es una entidadlógica dentro de una VPC que únicamente permite la conectividad a Amazon SQS. La VPC direcciona lassolicitudes a Amazon SQS y vuelve a direccionar las respuestas a la VPC. En las siguientes secciones seproporciona información sobre cómo trabajar con puntos de enlace de la VPC y crear políticas de puntosde enlace de la VPC.

156

Page 162: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPrivacidad del tráfico entre redes

Temas• Puntos de enlace de Amazon Virtual Private Cloud para Amazon SQS (p. 157)• Creación de una política de puntos de enlace de la Amazon VPC para Amazon SQS (p. 157)

Puntos de enlace de Amazon Virtual Private Cloud para AmazonSQSSi utiliza Amazon VPC para alojar sus recursos de AWS, puede establecer una conexión privada entre suVPC y Amazon SQS. Puede utilizar esta conexión para enviar mensajes a sus colas de Amazon SQS sinatravesar la Internet pública.

Amazon VPC le permite lanzar recursos de AWS en una red virtual personalizada. Puede utilizar una VPCpara controlar la configuración de red, como el intervalo de direcciones IP, las subredes, las tablas deruteo y las gateways de red. Para obtener más información sobre las VPC, consulte la Guía del usuario deAmazon VPC.

Para conectar la VPC a Amazon SQS, primero debe definir un punto de enlace de la VPC de interfaz,lo que le permitirá conectar la VPC a otros servicios de AWS. El punto de enlace proporciona unaconectividad con Amazon SQS escalable y de confianza sin necesidad de utilizar una gateway de Internet,una instancia de conversión de direcciones de red (NAT) ni una conexión de VPN. Para obtener másinformación, consulte Envío de mensajes a una cola de Amazon SQS desde Amazon Virtual PrivateCloud (p. 41) y Denegar el acceso si no es desde un punto de enlace de la VPC (p. 184) en esta guía yPuntos de conexión de la VPC de interfaz (AWS PrivateLink) en la Guía del usuario de Amazon VPC.

Important

• Puede utilizar Amazon Virtual Private Cloud solo con los puntos de enlace HTTPS de AmazonSQS.

• Cuando configure Amazon SQS para enviar mensajes desde Amazon VPC, debehabilitar un DNS privado y especificar los puntos de enlace con el formato sqs.us-east-2.amazonaws.com.

• Los DNS privados no admiten los puntos de enlace heredados, como queue.amazonaws.como us-east-2.queue.amazonaws.com.

Creación de una política de puntos de enlace de la Amazon VPCpara Amazon SQSPuede crear una política sobre los puntos de enlace de la Amazon VPC para Amazon SQS en la queespecifique lo siguiente:

• La entidad principal que puede realizar acciones.• Las acciones que se pueden realizar.• Los recursos en los que se pueden llevar a cabo las acciones.

Para obtener más información, consulte Control del acceso a los servicios con puntos de enlace de la VPCen la Guía del usuario de Amazon VPC.

En la política de puntos de enlace de la VPC del ejemplo siguiente, se especifica que el usuario de IAMMyUser puede enviar mensajes a la cola MyQueue de Amazon SQS.

{

157

Page 163: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresIdentity and Access Management

"Statement": [{ "Action": ["sqs:SendMessage"], "Effect": "Allow", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue", "Principal": { "AWS": "arn:aws:iam:123456789012:user/MyUser" } }]}

Se deniega lo siguiente:

• Otras acciones de la API de Amazon SQS, como sqs:CreateQueue y sqs:DeleteQueue.• Otros usuarios y reglas de IAM que intentan utilizar este punto de enlace de la VPC.• El envío de mensajes por parte de MyUser a otra cola de Amazon SQS.

Note

El usuario de IAM puede seguir utilizando otras acciones de la API de Amazon SQS desde fuerade la VPC. Para obtener más información, consulte Denegar el acceso si no es desde un punto deenlace de la VPC (p. 184).

Identity and Access Management en Amazon SQSEl acceso a Amazon SQS requiere credenciales que AWS puede utilizar para autenticar las solicitudes.Estas credenciales deben tener permisos de acceso a los recursos de AWS, como las colas y losmensajes de Amazon SQS. Las secciones contienen información detallada acerca de cómo puede utilizarAWS Identity and Access Management (IAM) y Amazon SQS para proteger sus recursos controlando quiénpuede obtener acceso a ellos.

Temas• Autenticación (p. 158)• Control de acceso (p. 160)• Información general sobre la administración de acceso en Amazon SQS (p. 160)• Uso de políticas basadas en identidad con Amazon SQS (p. 166)• Uso de políticas personalizadas con el Access Policy Language de Amazon SQS (p. 174)• Uso de credenciales de seguridad temporales con Amazon SQS (p. 185)• Permisos de la API de Amazon SQS: Referencia de recursos y acciones (p. 186)

AutenticaciónPuede tener acceso a AWS como cualquiera de los siguientes tipos de identidades:

• Usuario de la cuenta raíz de AWS: Cuando se crea por primera vez una cuenta de AWS, se comienzacon una única identidad de inicio de sesión que tiene acceso completo a todos los servicios y recursosde AWS de la cuenta. Esta identidad recibe el nombre de AWS de la cuenta de usuario raíz y se obtieneacceso a ella iniciando sesión con la dirección de correo electrónico y la contraseña que utilizó paracrear la cuenta. Le recomendamos que no utilice usuario raíz en sus tareas cotidianas, ni siquieraen las tareas administrativas. En lugar de ello, es mejor ceñirse a la práctica recomendada de utilizarexclusivamente usuario raíz para crear el primer usuario de IAM. A continuación, guarde las credenciales

158

Page 164: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAutenticación

de usuario raíz en un lugar seguro y utilícelas únicamente para algunas tareas de administración decuentas y servicios.

• Usuario de IAM: –un usuario de IAM es una identidad dentro de una cuenta de AWS que tiene permisospersonalizados específicos (por ejemplo, permisos para crear un a queue en Amazon SQS). Puedeutilizar un nombre de usuario de IAM y una contraseña para iniciar sesión en páginas web segurasde AWS, como la Consola de administración de AWS, los foros de debate de AWS o el AWS SupportCenter.

 

Además de un nombre de usuario y una contraseña, también puede generar claves de acceso paracada usuario. Puede utilizar estas claves al acceder a los servicios de AWS mediante programación, yasea a través de uno de los varios SDK o mediante la AWS Command Line Interface (CLI). El SDK y lasherramientas de CLI usan claves de acceso para firmar criptográficamente su solicitud. Si no utiliza lasherramientas de AWS, debe firmar usted mismo la solicitud. Amazon SQS supports Signature Version4, un protocolo para autenticar solicitudes de la API de entrada. Para obtener más información acercade la autenticación de solicitudes, consulte Proceso de firma Signature Version 4 en la AWS GeneralReference.

 • Rol de IAM–: Los roles de IAM de Un rol de IAM es una identidad de IAM con permisos específicos

que puede crear en su cuenta. Un rol de IAM es similar a un usuario de IAM, ya que se trata de unaidentidad de AWS con políticas de permisos que determinan lo que la identidad puede hacer o no enAWS. Sin embargo, en lugar de asociarse exclusivamente a una persona, la intención es que cualquierusuario pueda asumir un rol que necesite. Además, un rol no tiene asociadas credenciales a largoplazo estándar, como una contraseña o claves de acceso. En su lugar, cuando se asume un rol, esteproporciona credenciales de seguridad temporales para la sesión de rol. con credenciales temporalesson útiles en las siguientes situaciones:

 • Acceso de usuarios federados: – En lugar de crear un usuario de IAM, puede utilizar identidades

existentes de AWS Directory Service, del directorio de usuarios de la empresa o de un proveedor deidentidades web. A estas identidades se les llama usuarios federados. AWS asigna una función aun usuario federado cuando se solicita acceso a través de un proveedor de identidad. Para obtenermás información acerca de los usuarios federados, consulte Usuarios federados y roles en la Guía delusuario de IAM.

 • Acceso a servicios de AWS: Un rol de servicio es un rol de IAM que un servicio asume para realizar

acciones en su cuenta en su nombre. Al configurar algunos de los entornos de los servicios de AWS,debe definir un rol que el servicio asumirá. Este rol de servicio debe incluir todos los permisos queson necesarios para que el servicio pueda acceder a los recursos de AWS que necesita. Los roles deservicio varían de servicio a servicio, pero muchos le permiten elegir sus permisos, siempre y cuandose cumplan los requisitos documentados para dicho servicio. Los roles de servicio ofrecen acceso solodentro de su cuenta y no se pueden utilizar para otorgar acceso a servicios en otras cuentas. Puedecrear, modificar y eliminar un rol de servicio desde IAM. Por ejemplo, puede crear un rol que permitaa Amazon Redshift tener acceso a un bucket de Amazon S3 en su nombre y, a continuación, cargarlos datos de ese bucket en un clúster de Amazon Redshift. Para obtener más información, consulteCreación de un rol para delegar permisos a un servicio de AWS en la Guía del usuario de IAM.

 • Aplicaciones que se ejecutan en Amazon EC2: Puede utilizar un rol de IAM para administrar

credenciales temporales para las aplicaciones que se ejecutan en una instancia EC2 y realizansolicitudes de la AWS CLI o la API de AWS. Es preferible hacerlo de este modo a almacenar claves deacceso en la instancia EC2. Para asignar un rol de AWS a una instancia EC2 y ponerla a disposiciónde todas las aplicaciones, cree un perfil de instancia asociado a la misma. Un perfil de instanciacontiene el rol y permite a los programas que se ejecutan en la instancia EC2 obtener credenciales

159

Page 165: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresControl de acceso

temporales. Para obtener más información, consulte Uso de un rol de IAM para conceder permisos aaplicaciones que se ejecutan en instancias Amazon EC2 en la Guía del usuario de IAM.

Control de accesoAmazon SQS dispone de su propio sistema de permisos basado en recursos que utiliza políticas escritasen el mismo lenguaje que se emplea para las políticas de AWS Identity and Access Management (IAM).Esto significa que puede obtener resultados similares con las políticas de Amazon SQS que con laspolíticas de IAM.

Note

Es importante entender que todas las cuentas de AWS pueden delegar sus permisos a losusuarios de sus cuentas. El acceso entre cuentas permite compartir el acceso a los recursos deAWS sin necesidad de administrar usuarios adicionales. Para obtener información acerca decómo utilizar el acceso entre cuentas, consulte el artículo acerca de cómo habilitar el acceso entrecuentas en la Guía del usuario de IAM.Los permisos entre cuentas no se aplican a las acciones siguientes:

• AddPermission

• CreateQueue

• DeleteQueue

• ListQueues

• ListQueueTags

• RemovePermission

• SetQueueAttributes

• TagQueue

• UntagQueue

En la actualidad, Amazon SQS únicamente admite un subconjunto limitado de las claves decondición disponibles en IAM. Para obtener más información, consulte Referencia de acciones yrecursos (p. 186).

Información general sobre la administración de accesoen Amazon SQSCada recurso de AWS es propiedad de una cuenta de AWS, y los permisos para crear o tener acceso aun recurso se rigen por las políticas de permisos. Un administrador de la cuenta puede asociar políticasde permisos a identidades de IAM (usuarios, grupos y funciones) y algunos servicios (como Amazon SQS)también permiten asociar políticas de permisos a recursos.

Note

Un administrador de la cuenta (o usuario administrador) es un usuario con privilegiosadministrativos. Para obtener más información, consulte Prácticas recomendadas de IAM en laGuía del usuario de IAM.

Cuando concede permisos, especifica qué usuarios obtienen los permisos, para qué recurso obtienen lospermisos y qué acciones específicas desea permitir en el recurso.

Temas• Recursos y operaciones de Amazon Simple Queue Service (p. 161)

160

Page 166: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresInformación general

• Titularidad de los recursos (p. 161)• Administración del acceso a los recursos (p. 162)• Especificación de elementos de política: acciones, efectos, recursos y entidades principales (p. 165)• Especificación de las condiciones de una política (p. 165)

Recursos y operaciones de Amazon Simple Queue ServiceEn Amazon SQS, el único recurso es la cola. En las políticas se emplean nombres de recurso de Amazon(ARN) para identificar los recursos a los que se aplican las políticas. Los siguientes recursos tieneasociado un ARN único:

Tipo de recurso Formato de ARN

Cola arn:aws:sqs:region:account_id:queue_name

A continuación, se muestran ejemplos del formato de ARN para las colas:

• ARN de una cola llamada my_queue situada en la región EE.UU. Este (Ohio), que pertenece a la cuenta123456789012 de AWS:

arn:aws:sqs:us-east-2:123456789012:my_queue

• ARN de una cola llamada my_queue situada en cada una de las diferentes regiones que Amazon SQSadmite:

arn:aws:sqs:*:123456789012:my_queue

• Un ARN que utiliza * o ? como carácter comodín para el nombre de la cola. En los siguientes ejemplos,el ARN coincide con todas las colas que tienen el prefijo my_prefix_:

arn:aws:sqs:*:123456789012:my_prefix_*

Puede obtener el valor de ARN para una cola existente si llama a la acción GetQueueAttributes. Elvalor del atributo QueueArn es el ARN de la cola. Para obtener más información sobre los ARN, consulteARN de IAM en la Guía del usuario de IAM.

Amazon SQS proporciona un conjunto de acciones que pueden usarse con el recurso de cola. Paraobtener más información, consulte Referencia de acciones y recursos (p. 186).

Titularidad de los recursosLa cuenta de AWS es la propietaria de los recursos que se crean en ella, independientemente de quiénlos haya creado. En concreto, el propietario de los recursos es la cuenta de AWS de la entidad principal(es decir, la cuenta raíz, un usuario de IAM o una función de IAM) que autentica la solicitud de creación derecursos. Los siguientes ejemplos ilustran cómo funciona:

• Si utiliza las credenciales de la cuenta raíz de su cuenta de AWS para crear una cola de Amazon SQS,la cuenta de AWS será la propietaria del recurso (en Amazon SQS, el recurso es la cola de AmazonSQS).

• Si crea un usuario de IAM en la cuenta de AWS y le concede permisos para crear una cola, el usuariopodrá crear la cola. Sin embargo, la propietaria del recurso de cola será su cuenta de AWS (a la quepertenece el usuario).

161

Page 167: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresInformación general

• Si crea una función de IAM en su cuenta de AWS con permisos para crear una cola de Amazon SQS,cualquier persona que pueda asumir la función podrá crear una cola. Sin embargo, la propietaria delrecurso de cola será su cuenta de AWS (a la que pertenece la función).

Administración del acceso a los recursosUna política de permisos describe los permisos concedidos a las cuentas. En la siguiente sección seexplican las opciones disponibles para crear políticas de permisos.

Note

En esta sección, se explica cómo se utiliza IAM en el contexto de Amazon SQS. No seproporciona información detallada sobre el servicio de IAM. Para ver la documentación completade IAM, consulte ¿Qué es IAM? en la Guía del usuario de IAM. Para obtener más informaciónsobre la sintaxis y descripciones de la política de IAM, consulte Referencia de políticas de AWSIAM en la Guía del usuario de IAM.

Las políticas asociadas a una identidad de IAM se denominan políticas basadas en identidades (políticasde IAM), mientras que las políticas asociadas a un recurso se denominan políticas basadas en recursos.

Políticas basadas en identidades (políticas de IAM y políticas de Amazon SQS)

Hay dos formas de proporcionar a los usuarios permisos para las colas de Amazon SQS: mediante elsistema de políticas de Amazon SQS y mediante el sistema de políticas de IAM. Puede utilizar cualquierade estos sistemas, o ambos, para asociar políticas a usuarios o roles. En la mayoría de los casos, puedeconseguir el mismo resultado mediante cualquiera de estos dos sistemas. Por ejemplo, puede hacer losiguiente:

• Asociar una política de permisos a un usuario o un grupo de la cuenta: para conceder a un usuariopermisos para crear una cola de Amazon SQS, asocie una política de permisos a un usuario o a ungrupo al que este pertenezca.

• Asociar una política de permisos a un usuario de otra cuenta de AWS: si desea conceder a un usuariopermisos para crear una cola de Amazon SQS, asocie una política de permisos de Amazon SQS a unusuario de otra cuenta de AWS.

Los permisos entre cuentas no se aplican a las acciones siguientes:• AddPermission

• CreateQueue

• DeleteQueue

• ListQueues

• ListQueueTags

• RemovePermission

• SetQueueAttributes

• TagQueue

• UntagQueue

• Asociar una política de permisos a una función (conceder permisos entre cuentas): para concederpermisos entre cuentas, asocie una política de permisos basada en identidades a una función de IAM.Por ejemplo, el administrador de la cuenta A de AWS puede crear una función para conceder permisosentre cuentas a una cuenta B de AWS (o un servicio de AWS), tal y como se indica a continuación:• El administrador de la Cuenta A crea una función de IAM y asocia una política de permisos, que

concede permisos sobre los recursos de la cuenta A a dicha función.• El administrador de la cuenta A asocia una política de confianza al rol que identifica la cuenta B como

la entidad principal que puede asumir el rol.

162

Page 168: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresInformación general

• El administrador de la cuenta B delega el permiso para asumir el rol a todos los usuarios de la cuentaB. Esto permite a los usuarios de la cuenta B crear u obtener acceso a colas de la cuenta A.

Note

Si desea conceder permisos a un servicio de AWS para que asuma la función, la entidadprincipal de la política de confianza también puede ser una entidad principal de un servicio deAWS.

Si desea obtener más información sobre el uso de IAM para delegar permisos, consulte Administración deacceso en la Guía del usuario de IAM.

Aunque Amazon SQS funciona con las políticas de IAM, tiene su propia infraestructura de políticas. Puedeutilizar una política de Amazon SQS con una cola para especificar qué cuentas de AWS tienen acceso ala cola. Puede especificar el tipo de acceso y las condiciones (por ejemplo, una condición que concedepermisos para utilizar SendMessage, ReceiveMessage si la solicitud se realiza antes del 31 de diciembrede 2010). Las acciones específicas para las que puede conceder permisos son un subconjunto de la listageneral de acciones de Amazon SQS. Cuando se escribe una política de Amazon SQS y se especifica* para "permitir todas las acciones de Amazon SQS", significa que un usuario puede realizar todas lasacciones de este subconjunto.

En el siguiente diagrama, se ilustra el concepto de una de estas políticas básicas de Amazon SQS, queabarca el subconjunto de acciones. La política está dirigida a la cola queue_xyz y concede a la cuenta 1de AWS y a la cuenta 2 de AWS permisos para utilizar cualquiera de las acciones permitidas con la colaespecificada.

Note

El recurso de la política se especifica como 123456789012/queue_xyz, donde 123456789012es el ID de cuenta de AWS asignado a la cuenta propietaria de la cola.

Con la introducción de IAM y los conceptos de usuarios y nombres de recursos de Amazon (ARN), hancambiado algunas cosas respecto a las políticas de SQS. En el diagrama y la tabla siguientes se describenestos cambios.

163

Page 169: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresInformación general

Para obtener información acerca de cómo conceder permisos a usuarios de distiantas cuentas, consulteTutorial: Delegación del acceso entre cuentas de AWS mediante roles deIAM en la Guía del usuario deIAM.

El subconjunto de acciones incluidas en * se ha ampliado. Para obtener una lista de las accionespermitidas, consulte Referencia de acciones y recursos (p. 186).

Puede especificar el recurso utilizando el nombre de recurso de Amazon (ARN), que es la formaestándar de especificar recursos en las políticas de IAM. Para obtener información acerca del formatode los ARN en las colas de Amazon SQS, consulte Recursos y operaciones de Amazon Simple QueueService (p. 161).

Por ejemplo, de acuerdo con la política de Amazon SQS que se muestra en el diagrama anterior,cualquiera que posea las credenciales de seguridad de la cuenta 1 de AWS o de la cuenta 2 de AWSpuede obtener acceso a queue_xyz. Además, los usuarios Bob y Susan de su propia cuenta de AWS(con el ID 123456789012) pueden obtener acceso a la cola.

Antes de la introducción de IAM, Amazon SQS concedía automáticamente al creador de una cola controltotal sobre esa cola (es decir, acceso a todas las posibles acciones de Amazon SQS en dicha cola). Estoha cambiado, a menos que el creador utilice credenciales de seguridad de AWS. Cualquier usuario quetenga permisos para crear una cola debe contar también con permisos para utilizar otras acciones deAmazon SQS para poder realizar alguna acción con las colas creadas.

A continuación, se muestra una política de ejemplo que permite a un usuario utilizar todas las acciones deAmazon SQS, pero solo con las colas cuyos nombres tengan como prefijo la cadena literal bob_queue_.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:123456789012:bob_queue_*" }]

164

Page 170: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresInformación general

}

Para obtener más información, consulte Uso de políticas basadas en identidad con Amazon SQS (p. 166)e Identidades (usuarios, grupos y funciones) en la Guía del usuario de IAM.

Especificación de elementos de política: acciones, efectos,recursos y entidades principalesPara cada recurso de Amazon Simple Queue Service (p. 161), el servicio define un conjunto de acciones.Para conceder permisos a estas acciones, Amazon SQS define un conjunto de acciones que se puedenespecificar en una política.

Note

Para realizar una acción de la , pueden ser necesarios permisos para más de una acción. Cuandose conceden permisos para acciones específicas, también debe identificar el recurso para el quelas acciones se autorizan o deniegan.

A continuación se indican los elementos más básicos de la política:

• Recurso: en una política, se utiliza un Nombre de recurso de Amazon (ARN) para identificar el recurso alque se aplica la política.

• Acción: utilice palabras de clave de acción para identificar las acciones de recursos que desea permitir odenegar. Por ejemplo, cuando se concede el permiso sqs:CreateQueue, el usuario puede realizar laacción CreateQueue de Amazon Simple Queue Service.

• Efecto: especifique el efecto que se producirá cuando el usuario solicite la acción específica, que puedeser permitir o denegar. Si no concede acceso de forma explícita a un recurso, el acceso se deniegaimplícitamente. También puede denegar explícitamente el acceso a un recurso para asegurarse de queun usuario no pueda obtener acceso a él, aunque otra política le conceda acceso.

• Entidad principal: en las políticas basadas en identidades (políticas de IAM), el usuario al que se asociaesta política es la entidad principal implícita. Para las políticas basadas en recursos, debe especificar elusuario, la cuenta, el servicio u otra entidad que desee que reciba permisos (se aplica solo a las políticasbasadas en recursos).

Para obtener más información sobre la sintaxis y descripciones de las políticas de Amazon SQS consulteReferencia de políticas de AWS IAM de la Guía del usuario de IAM.

Para ver una tabla con todas las acciones de Amazon Simple Queue Service y los recursos a los que seaplican, consulte Referencia de acciones y recursos (p. 186).

Especificación de las condiciones de una políticaAl conceder permisos, puede usar el Access Policy Language de Amazon SQS para especificar lascondiciones en la que se debe aplicar una política. Por ejemplo, es posible que desee que solo se apliqueuna política después de una fecha específica. Para obtener más información acerca de cómo especificarcondiciones en un lenguaje de política, consulte Condición en la Guía del usuario de IAM.

Para expresar condiciones, se usan claves de condición predefinidas. No hay claves de condiciónespecíficas para Amazon SQS. No obstante, existen claves de condición que se aplican a todo AWS y quepueden utilizarse con Amazon SQS. En la actualidad, Amazon SQS únicamente admite un subconjuntolimitado de claves de condiciones disponibles en IAM:

• aws:CurrentTime

• aws:EpochTime

• aws:SecureTransport

165

Page 171: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

• aws:SourceArn

Note

This condition ensures that AWS services grant access only on behalf of resources that yourAWS account owns. You can't specify the ARN of an IAM role as source ARN, because an IAMrole is neither a source nor a service.

• aws:SourceIP

• aws:UserAgent

• aws:MultiFactorAuthAge

• aws:MultiFactorAuthPresent

• aws:PrincipalOrgID

• aws:RequestTag

• aws:sourceVpce

• aws:TagKeys

• aws:TokenAge

Uso de políticas basadas en identidad con AmazonSQSEste tema contiene ejemplos de políticas basadas en identidades, donde un administrador de la cuentapuede asociar políticas de permisos a identidades de IAM (usuarios, grupos y funciones).

Important

Le recomendamos que consulte primero los temas de introducción en los que se explican losconceptos básicos y las opciones disponibles para administrar el acceso a los recursos deAmazon Simple Queue Service. Para obtener más información, consulte Información generalsobre la administración de acceso (p. 160).A excepción de ListQueues, todas las acciones de Amazon SQS admiten los permisos de nivelde recurso. Para obtener más información, consulte Referencia de acciones y recursos (p. 186).

Temas• Uso de políticas de Amazon SQS e IAM (p. 166)• Permisos necesarios para usar la consola de Amazon SQS (p. 168)• Políticas administradas (predefinidas) por AWS para Amazon SQS (p. 168)• Ejemplos básicos de políticas de IAM para Amazon SQS (p. 169)• Ejemplos básicos de políticas de Amazon SQS (p. 170)

Uso de políticas de Amazon SQS e IAMHay dos formas de proporcionar a los usuarios permisos para los recursos de Amazon SQS: mediante elsistema de políticas de Amazon SQS y mediante el sistema de políticas de IAM. Puede aplicar uno, el otroo ambos. La mayoría de las veces, puede conseguir el mismo resultado con cualquiera de ellos.

Por ejemplo, en el siguiente diagrama, se muestra una política de IAM y una política de Amazon SQSequivalentes. La política de IAM concede derechos a las acciones ReceiveMessage y SendMessagede Amazon SQS para la cola llamada queue_xyz de la cuenta de AWS. Esta política está asociada alos usuarios Bob y Susan (Bob y Susan tienen los permisos que se indican en la política). Esta políticade Amazon SQS también concede a Bob y Susan derechos para las acciones ReceiveMessage ySendMessage de la misma cola.

166

Page 172: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

Note

Este ejemplo muestra políticas sencillas sin condiciones. Puede especificar una condicióndeterminada en cualquiera de las dos políticas y obtendrá el mismo resultado.

Existe una diferencia fundamental entre las políticas de IAM y Amazon SQS: el sistema de política deAmazon SQS le permite conceder permisos para otras cuentas de AWS, mientras que IAM no lo permite.

Usted decide el uso que quiere hacer de ambos sistemas para administrar los permisos. Los siguientesejemplos muestran cómo funcionan conjuntamente los dos sistemas de política.

• En el primer ejemplo, Bob tiene una política de IAM y una política de Amazon SQS que se aplican asu cuenta. La política de IAM concede a su cuenta permiso para realizar la acción ReceiveMessageen queue_xyz, mientras que la política de Amazon SQS concede a su cuenta permiso para realizar laacción SendMessage en la misma cola. El siguiente diagrama ilustra este concepto.

Si Bob envía una solicitud ReceiveMessage a queue_xyz, la política de IAM permite la acción. Si Bobenvía una solicitud SendMessage a queue_xyz, la política de Amazon SQS permite la acción.

• En el segundo ejemplo, Bob abusa de su acceso a queue_xyz, por lo que es necesario quitar todosu acceso a la cola. Para ello, lo más fácil es añadir una política que le deniegue acceso a todas lasacciones de la cola. Esta política anula las otras dos porque un permiso deny explícito siempre anula

167

Page 173: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

un permiso allow. Para obtener más información acerca de la lógica de evaluación de las políticas,consulte Uso de políticas personalizadas con el Access Policy Language de Amazon SQS (p. 174). Elsiguiente diagrama ilustra este concepto.

También puede añadir a la política de Amazon SQS una instrucción adicional que deniegue a Bobcualquier tipo de acceso a la cola. Esto tiene el mismo efecto que añadir una política de IAM quedeniegue a Bob el acceso a la cola. Para ver ejemplos de políticas que incluyan acciones y recursos deAmazon SQS, consulte Ejemplos básicos de políticas de Amazon SQS (p. 170). Para obtener másinformación sobre la escritura de políticas de Amazon SQS, consulte Uso de políticas personalizadascon el Access Policy Language de Amazon SQS (p. 174).

Permisos necesarios para usar la consola de Amazon SQSUn usuario que quiera trabajar con la consola de Amazon SQS debe tener el conjunto mínimo de permisosque les permita trabajar con las colas de Amazon SQS en la cuenta de AWS. Por ejemplo, el usuariodebe tener el permiso para llamar a la acción ListQueues para poder enumerar colas, o el permiso parallamar a la acción CreateQueue para poder crear colas. Además de los permisos de Amazon SQS, parasuscribir una cola de Amazon SQS a un tema de Amazon SNS, la consola también requiere permisos paralas acciones de Amazon SNS.

Si crea una política de IAM que sea más restrictiva que los permisos mínimos necesarios, es posible que laconsola no funcione del modo esperado para los usuarios que tienen esa política de IAM.

No es necesario que conceda permisos mínimos para la consola a los usuarios que solo realizan llamadasa la AWS CLI o a acciones de Amazon SQS.

Políticas administradas (predefinidas) por AWS para AmazonSQSAWS aborda muchos casos de uso comunes proporcionando políticas de IAM independientesadministradas por AWS. Estas políticas administradas por AWS simplifican el trabajo con permisosal conceder los permisos necesarios para los casos de uso comunes. Para obtener más información,consulte Políticas administradas de AWS en la Guía del usuario de IAM.

Las siguientes políticas administradas por AWS (que puede asociar a usuarios de su cuenta) sonespecíficas de Amazon SQS:

168

Page 174: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

• AmazonSQSReadOnlyAccess: concede acceso de solo lectura a las colas de Amazon SQS a través dela Consola de administración de AWS.

• AmazonSQSFullAccess: concede acceso total a las colas de Amazon SQS a través de la Consola deadministración de AWS.

Puede buscar y examinar las políticas disponibles en la consola de IAM. También puede crear sus propiaspolíticas de IAM personalizadas para conceder permisos para acciones y colas de Amazon SQS. Puedeasociar estas políticas personalizadas a los usuarios o grupos de IAM que requieran permisos.

Ejemplos básicos de políticas de IAM para Amazon SQSLos siguientes ejemplos proporcionan una introducción a las políticas de permisos de Amazon SQS.

Note

Cuando configure los enlaces de ciclo de vida de Amazon EC2 Auto Scaling, no es necesarioque escriba una política que envíe mensajes a una cola de Amazon SQS. Para obtener másinformación, consulte Enlaces de ciclo de vida de Amazon EC2 Auto Scaling en la Guía delusuario de Amazon EC2 para instancias de Linux.

Ejemplo 1: permitir a un usuario crear colasEn el siguiente ejemplo, creamos una política para Bob que le permite obtener acceso a todas lasacciones de Amazon SQS, pero solo con las colas cuyos nombres tengan como prefijo la cadena literalalice_queue_.

Amazon SQS no concede automáticamente al creador de una cola permisos para utilizar dicha cola. Portanto, en la política IAM, debemos conceder de forma explícita a Bob los permisos para utilizar todas lasacciones de Amazon SQS, además de la acción CreateQueue.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:123456789012:alice_queue_*" }]}

Ejemplo 2: permitir que los desarrolladores escriban mensajes en una colacompartidaEn el siguiente ejemplo, vamos a crear un grupo para los desarrolladores y a asociar una política quepermita al grupo utilizar la acción SendMessage de Amazon SQS, pero solo con la cola que pertenece a lacuenta de AWS especificada, que se denomina MyCompanyQueue.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:*:123456789012:MyCompanyQueue" }]}

Puede utilizar * en lugar de SendMessage para conceder las acciones siguientes de una cola compartidaa una entidad principal: ChangeMessageVisibility, DeleteMessage, GetQueueAttributes,GetQueueUrl, ReceiveMessage y SendMessage.

169

Page 175: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

Note

Aunque * incluye el acceso proporcionado por otros tipos de permisos, Amazon SQS tieneen cuenta los permisos por separado. Por ejemplo, es posible conceder los permisos * ySendMessage a un usuario, aunque * incluye el acceso que ofrece SendMessage.Este concepto también se aplica al quitar un permiso. Si una entidad principal solo tiene elpermiso * y se solicita la eliminación del permiso SendMessage, la entidad principal no sequeda con los permisos restantes, sino que la solicitud no tiene ningún efecto, porque la entidadprincipal no tenía explícitamente el permiso SendMessage. Si desea dejar a la entidad principalúnicamente con el permiso ReceiveMessage, añada primero el permiso ReceiveMessage y, acontinuación, elimine el permiso *.

Ejemplo 3: permitir que los administradores obtengan el tamaño de las colas

En el siguiente ejemplo, vamos a crear un grupo para los administradores y a asociar una política quepermita al grupo utilizar la acción GetQueueAttributes de Amazon SQS con todas las colas quepertenecen a la cuenta de AWS especificada.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:GetQueueAttributes", "Resource": "*" }]}

Ejemplo 4: permitir que un socio envíe mensajes a una cola específica

Puede realizar esta tarea mediante una política de Amazon SQS o una política de IAM. Si el socio tieneuna cuenta de AWS, puede que sea más fácil utilizar una política de Amazon SQS. Sin embargo, cualquierusuario de la empresa del socio que posea las credenciales de seguridad de AWS puede enviar mensajesa la cola. Si desea limitar el acceso a una aplicación o a un usuario determinado, debe tratar al socio comoa un usuario de su propia empresa y utilizar una política de IAM en lugar de una política de Amazon SQS.

En este ejemplo se realizan las siguientes acciones:

1. Crear un grupo denominado WidgetCo para representar la compañía del socio.2. Crear un usuario para la aplicación o el usuario específico de la compañía del socio que necesita

acceso.3. Añadir el usuario al grupo.4. Adjuntar una política que conceda al grupo acceso únicamente a la acción SendMessage solo para la

cola denominada WidgetPartnerQueue.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:*:123456789012:WidgetPartnerQueue" }]}

Ejemplos básicos de políticas de Amazon SQSEn esta sección, se muestran políticas de ejemplo para casos de uso comunes de Amazon SQS.

170

Page 176: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

Puede utilizar la consola para comprobar los efectos de cada política a medida que asocia la políticaal usuario. En un primer momento, como el usuario no tiene permisos, no podrá hacer nada más en laconsola. Al asignar políticas al usuario, podrá verificar que este pueda realizar diversas acciones en laconsola.

Note

Le recomendamos que utilice dos ventanas del navegador: una para conceder permisos a unusuario y otra para iniciar sesión en la Consola de administración de AWS con las credencialesdel usuario y comprobar los permisos a medida que los va concediendo.

Ejemplo 1: Conceder un permiso a una cuenta de AWSLa siguiente política de ejemplo concede al número de cuenta 111122223333 de AWS el permisoSendMessage para la cola 444455556666/queue1 en la región EE.UU. Este (Ohio).

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_SendMessage", "Effect": "Allow", "Principal": { "AWS": [ "111122223333" ] }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-2:444455556666:queue1" }] }

Ejemplo 2: Conceder dos permisos a una cuenta de AWSLa siguiente política de ejemplo concede al número de cuenta 111122223333 de AWS los permisosSendMessage y ReceiveMessage para la cola 444455556666/queue1.

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_Send_Receive", "Effect": "Allow", "Principal": { "AWS": [ "111122223333" ] }, "Action": [ "sqs:SendMessage", "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:*:444455556666:queue1" }]}

Ejemplo 3: Conceder todos los permisos a dos cuentas de AWSLa siguiente política de ejemplo concede a dos números de cuenta de AWS diferentes (111122223333y 444455556666) permiso para utilizar todas las acciones en las que Amazon SQS permite el accesocompartido en la cola 123456789012/queue1 de la región EE.UU. Este (Ohio).

171

Page 177: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "111122223333", "444455556666" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-2:123456789012:queue1" }]}

Ejemplo 4: conceder permisos entre cuentas a un rol y un nombre de usuario

La siguiente política de ejemplo concede a role1 y username1 bajo el número de cuenta111122223333 de AWS permiso entre cuentas para utilizar todas las acciones en las que Amazon SQSpermite el acceso compartido en la cola 123456789012/queue1 de la región EE.UU. Este (Ohio).

Los permisos entre cuentas no se aplican a las acciones siguientes:

• AddPermission

• CreateQueue

• DeleteQueue

• ListQueues

• ListQueueTags

• RemovePermission

• SetQueueAttributes

• TagQueue

• UntagQueue

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/role1", "arn:aws:iam::111122223333:user/username1" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-2:123456789012:queue1" }]}

Ejemplo 5: conceder un permiso a todos los usuarios

La siguiente política de ejemplo concede a todos los usuarios (usuarios anónimos) el permisoReceiveMessage para la cola denominada 111122223333/queue1.

172

Page 178: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas basadas en identidad

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AnonymousAccess_ReceiveMessage", "Effect": "Allow", "Principal": "*", "Action": "sqs:ReceiveMessage", "Resource": "arn:aws:sqs:*:111122223333:queue1" }]}

Ejemplo 6: conceder un permiso con restricción temporal a todos los usuarios

La siguiente política de ejemplo concede a todos los usuarios (usuarios anónimos) el permisoReceiveMessage para la cola denominada 111122223333/queue1, pero solo desde las 12:00 h(mediodía) hasta las 15:00 h el 31 de enero de 2009.

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AnonymousAccess_ReceiveMessage_TimeLimit", "Effect": "Allow", "Principal": "*", "Action": "sqs:ReceiveMessage", "Resource": "arn:aws:sqs:*:111122223333:queue1", "Condition" : { "DateGreaterThan" : { "aws:CurrentTime":"2009-01-31T12:00Z" }, "DateLessThan" : { "aws:CurrentTime":"2009-01-31T15:00Z" } } }]}

Ejemplo 7: conceder todos los permisos a todos los usuarios de un rango deCIDR

La siguiente política de ejemplo concede a todos los usuarios (usuarios anónimos) permiso para utilizartodas las acciones posibles de Amazon SQS que se pueden compartir en la cola 111122223333/queue1, pero solo si la solicitud procede del rango 192.168.143.0/24 de CIDR.

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AnonymousAccess_AllActions_WhitelistIP", "Effect": "Allow", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:queue1", "Condition" : { "IpAddress" : { "aws:SourceIp":"192.168.143.0/24" } } }]

173

Page 179: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

}

Ejemplo 8: permisos de listas blancas y listas negras para los usuarios dediferentes rangos de CIDR

La siguiente política de ejemplo contiene dos instrucciones:

• La primera instrucción concede a todos los usuarios (usuarios anónimos) del rango de CIDR192.168.143.0/24 (excepto 192.168.143.188) permiso para utilizar la acción SendMessage parala cola denominada 111122223333/queue1.

• La segunda instrucción pone en la lista negra a todos los usuarios (usuarios anónimos) del rango deCIDR 10.1.2.0/24 y les impide utilizar la cola.

{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AnonymousAccess_SendMessage_IPLimit", "Effect": "Allow", "Principal": "*", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:*:111122223333:queue1", "Condition" : { "IpAddress" : { "aws:SourceIp":"192.168.143.0/24" }, "NotIpAddress" : { "aws:SourceIp":"192.168.143.188/32" } } }, { "Sid":"Queue1_AnonymousAccess_AllActions_IPLimit_Deny", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:queue1", "Condition" : { "IpAddress" : { "aws:SourceIp":"10.1.2.0/24" } } }]}

Uso de políticas personalizadas con el Access PolicyLanguage de Amazon SQSSi desea permitir el acceso a Amazon SQS en función únicamente del ID de cuenta de AWS y lospermisos básicos (por ejemplo, para SendMessage o ReceiveMessage), no es necesario que escribasus propias políticas. Basta con que utilice la acción AddPermission de Amazon SQS.

Si desea denegar o permitir explícitamente el acceso en función de otras condiciones más específicas(como la hora de llegada de la solicitud o la dirección IP del solicitante), debe escribir sus propias políticasde Amazon SQS y cargarlas en el sistema de AWS mediante la acción SetQueueAttributes deAmazon SQS.

Temas

174

Page 180: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

• Arquitectura de control de acceso de Amazon SQS (p. 175)• Flujo de trabajo del proceso de control de acceso de Amazon SQS (p. 175)• Amazon SQS Conceptos clave de Access Policy Language (p. 176)• Lógica de evaluación del Access Policy Language de Amazon SQS (p. 178)• Relaciones entre las denegaciones explícitas y predeterminadas del Access Policy Language de

Amazon SQS (p. 180)• Ejemplos personalizados del Access Policy Language de Amazon SQS (p. 181)

Arquitectura de control de acceso de Amazon SQSEn el diagrama siguiente, se describe el control de acceso para los recursos de Amazon SQS.

Usted, el propietario del recurso.

Los recursos incluidos en el servicio de AWS (por ejemplo, colas de Amazon SQS).

Sus políticas. Es recomendable tener una política por recurso. El servicio de AWS proporciona una APIque utiliza para cargar y administrar sus políticas.

Los solicitantes y las solicitudes de entrada dirigidas al servicio de AWS.

El código de evaluación de access policy language. Es el conjunto de código del servicio de AWSque evalúa las solicitudes entrantes en relación con las políticas aplicables y determina si se permite alsolicitante obtener acceso al recurso.

Flujo de trabajo del proceso de control de acceso de AmazonSQSEn el diagrama siguiente, se describe el flujo de trabajo general del control de acceso con el access policylanguage de Amazon SQS.

175

Page 181: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

Escribe una política de Amazon SQS para la cola.

Carga su política en AWS. El servicio de AWS proporciona una API que se utiliza para cargar laspolíticas. Por ejemplo, puede utilizar la acción SetQueueAttributes de Amazon SQS para cargar unapolítica en una cola de Amazon SQS específica.

Alguien envía una solicitud para utilizar la cola de Amazon SQS.

Amazon SQS examina todas las políticas de Amazon SQS disponibles y determina cuáles sonaplicables.

Amazon SQS evalúa las políticas y determina si el solicitante tiene permiso para utilizar la cola.

En función del resultado de la evaluación de las políticas, Amazon SQS devuelve un error Accessdenied al solicitante o continúa procesando la solicitud.

Amazon SQS Conceptos clave de Access Policy LanguagePara escribir sus propias políticas, debe estar familiarizado con JSON y varios conceptos clave.

permitir

El resultado de una statement (p. 177) cuyo effect (p. 176) se ha establecido en allow.action

La actividad que la principal (p. 177) tiene permiso para realizar, por lo general una solicitud paraAWS.

default-deny

Resultado de una statement (p. 177) que no tiene la opción permitir (p. 176) o explicit-deny (p. 177).

condición

Cualquier restricción o detalle sobre un permiso (p. 177). Las condiciones típicas están relacionadoscon la fecha y la hora y con las direcciones IP.

effect

El resultado que desea que la statement (p. 177) de una política (p. 177) devuelva cuando seevalúe. Al escribir la instrucción de la política, debe especificar el valor deny o allow. Puede haber

176

Page 182: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

tres resultados posibles cuando se evalúe la política: default-deny (p. 176), permitir (p. 176) yexplicit-deny (p. 177).

explicit-deny

El resultado de una statement (p. 177) cuyo effect (p. 176) se ha establecido en deny.evaluación

Proceso que Amazon SQS utiliza para determinar si una solicitud de entrada debe denegarse opermitirse en función de una política (p. 177).

emisor

El usuario que escribe una política (p. 177) para conceder permisos para un recurso. El emisor, pordefinición, siempre es el propietario de los recursos. AWS no permite a los usuarios de Amazon SQScrear políticas para recursos que no sean propios.

clave

La característica específica que es la base para la restricción del acceso.permiso

El concepto de permitir o impedir el acceso a un recurso mediante una condición (p. 176) y unaclave (p. 177).

política

El documento que actúa como contenedor de una o varias instrucciones (p. 177).

Amazon SQS utiliza la política para determinar si se va a conceder acceso para un recurso a unusuario.

principal

El usuario que recibe el permiso (p. 177) en la política (p. 177).recurso

El objeto para el que la principal (p. 177) solicita acceso.statement

Descripción formal de un único permiso, escrita en el access policy language como parte de undocumento más amplio de la política (p. 177).

solicitante

El usuario que envía una solicitud de acceso a un recurso (p. 177).

177

Page 183: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

Lógica de evaluación del Access Policy Language de AmazonSQSEn el momento de la evaluación, Amazon SQS determina si las solicitudes procedentes de una personaque no es la propietaria del recurso deben permitirse o denegarse. La lógica de evaluación sigue variasreglas básicas:

• De forma predeterminada, todas las solicitudes para utilizar su recurso procedentes de cualquierpersona que no sea usted se deniegan.

• Un valor permitir (p. 176) anula cualquier valor default-deny (p. 176).• Una instrucción explicit-deny (p. 177) anula cualquier instrucción allow.• El orden en que se evalúan las políticas no es importante.

En el diagrama siguiente, se describe con detalle cómo Amazon SQS evalúa las decisiones sobre lospermisos de acceso.

178

Page 184: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

La decisión comienza con una instrucción default-deny.

El código de aplicación evalúa todas las políticas aplicables a la solicitud (en función del recurso, laentidad principal, la acción y las condiciones). El orden en que el código de aplicación evalúa las políticasno es importante.

El código de aplicación busca una instrucción explicit-deny que se puede aplicar a la solicitud. Siencuentra alguna, devuelve una decisión de denegar y el proceso termina.

179

Page 185: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

Si no se encuentra ninguna instrucción explicit-deny, el código de cumplimiento buscará una instrucciónallow que se pueda aplicar a la solicitud. Si encuentra alguna, el código de aplicación devuelve unadecisión de permitir y el proceso continúa (el servicio sigue procesando la solicitud).

Si no se encuentra ninguna instrucción allow, la decisión final será deny (como no hay ningunainstrucción explicit-deny o allow, se considera una instrucción default-deny).

Relaciones entre las denegaciones explícitas y predeterminadasdel Access Policy Language de Amazon SQSSi una política de Amazon SQS no se aplica directamente a un solicitud, esta da como resultado default-deny (p. 176). Por ejemplo, si un usuario solicita permiso para utilizar Amazon SQS pero la única políticaque se aplica al usuario puede utilizar DynamoDB, las solicitudes dan como resultado default-deny.

Si no se cumple una condición de una instrucción, la solicitud da como resultado default-deny. Si secumplen todas las condiciones de una instrucción, la solicitud da como resultado permitir (p. 176) oexplicit-deny (p. 177), en función del valor del elemento effect (p. 176) de la política. Las políticasno especifican qué es lo que se debe hacer si no se cumple una condición, por lo que el resultadopredeterminado en este caso es default-deny. Por ejemplo, suponga que desea evitar las solicitudes queproceden de la Antártida. Puede escribir una política denominada A1 que permite una solicitud solo si noprocede de la Antártida. En el siguiente diagrama, se ilustra la política de Amazon SQS.

Si un usuario envía una solicitud desde Estados Unidos, la condición se cumple (la solicitud no procede dela Antártida) y la solicitud da como resultado allow. Sin embargo, si un usuario envía una solicitud desdela Antártida, la condición no se cumple y la solicitud da como resultado de forma predeterminada default-deny. Puede cambiar el resultado a explicit-deny si escribe una política A2 que deniegue explícitamenteuna solicitud si procede de la Antártida. El siguiente diagrama ilustra esta política.

Si un usuario envía una solicitud desde la Antártida, la condición se cumple y la solicitud da como resultadoexplicit-deny.

180

Page 186: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

La diferencia entre default-deny y explicit-deny es importante, ya que allow puede sobrescribir la primera,pero no la segunda. Por ejemplo, la política B permite solicitudes si llegan el 1 de junio de 2010. En elsiguiente diagrama se compara la combinación de esta política con las políticas A1 y A2.

En el escenario 1, la política A1 da lugar a default-deny y la política B da lugar a allow, ya que la políticapermite las solicitudes que entran el 1 de junio de 2010. La instrucción allow de la política B anula lainstrucción default-deny de la política A1 y la solicitud se permite.

En el escenario 2, la política B2 da lugar a explicit-deny y la política B da lugar a allow. La instrucciónexplicit-deny de la política A2 anula la instrucción allow de la política B y la solicitud se deniega.

Ejemplos personalizados del Access Policy Language deAmazon SQSA continuación, se muestran algunos ejemplos de políticas de acceso de Amazon SQS comunes.

181

Page 187: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

Ejemplo 1: conceder permiso a una cuenta

En el ejemplo siguiente, la política de Amazon SQS proporciona a la cuenta 111122223333 de AWSpermiso para enviar y recibir información de la cola queue2, que es propiedad de la cuenta AWS de444455556666.

{ "Version": "2012-10-17", "Id": "UseCase1", "Statement" : [{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": [ "111122223333" ] }, "Action": [ "sqs:SendMessage", "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2" }]}

Ejemplo 2: conceder permiso a una o varias cuentas

La siguiente política de ejemplo de Amazon SQS concede a una o varias cuentas de AWS acceso acolas que son propiedad de su cuenta durante un período de tiempo específico. Es necesario escribiresta política y cargarla en Amazon SQS mediante la acción SetQueueAttributes, ya que la acciónAddPermission no permite especificar una restricción de tiempo al conceder acceso a una cola.

{ "Version": "2012-10-17", "Id": "UseCase2", "Statement" : [{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": [ "111122223333", "444455556666" ] }, "Action": [ "sqs:SendMessage", "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2", "Condition": { "DateLessThan": { "AWS:CurrentTime": "2009-06-30T12:00Z" } } }]}

182

Page 188: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

Ejemplo 3: conceder permiso a solicitudes procedentes de instancias AmazonEC2

La siguiente política de ejemplo de Amazon SQS concede acceso a las solicitudes que procedende instancias Amazon EC2. Este ejemplo se basa en el ejemplo "Conceder permiso a una o variascuentas (p. 182)": restringe el acceso antes del 30 de junio de 2009 a las 12:00 h (UTC) y al rangode direcciones IP 203.0.113.0/24. Es necesario escribir esta política y cargarla en Amazon SQSmediante la acción SetQueueAttributes, ya que la acción AddPermission no permite especificar unarestricción de direcciones IP al conceder acceso a una cola.

{ "Version": "2012-10-17", "Id": "UseCase3", "Statement" : [{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": [ "111122223333" ] }, "Action": [ "sqs:SendMessage", "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2", "Condition": { "DateLessThan": { "AWS:CurrentTime": "2009-06-30T12:00Z" }, "IpAddress": { "AWS:SourceIp": "203.0.113.0/24" } } }]}

Ejemplo 4: denegar acceso a una cuenta específica

La siguiente política de ejemplo de Amazon SQS deniega a una cuenta específica de AWS el acceso a sucola. Este ejemplo se basa en el ejemplo "Conceder permiso a una cuenta (p. 182)": deniega el accesoa la cuenta de AWS especificada. Es necesario escribir esta política y cargarla en Amazon SQS mediantela acción SetQueueAttributes, ya que la acción AddPermission no permite denegar el acceso a unacola (solo permite conceder acceso a una cola).

{ "Version": "2012-10-17", "Id": "UseCase4", "Statement" : [{ "Sid": "1", "Effect": "Deny", "Principal": { "AWS": [ "111122223333" ] }, "Action": [ "sqs:SendMessage", "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2"

183

Page 189: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUso de políticas personalizadascon el Access Policy Language

}]}

Ejemplo 5: denegar el acceso si no es desde un punto de enlace de la VPC

La siguiente política de ejemplo de Amazon SQS restringe el acceso a queue1: 111122223333 puederealizar las acciones SendMessage y ReceiveMessage solo desde el ID vpce-1a2b3c4d del punto deenlace de la VPC (especificado mediante la condición aws:sourceVpce). Para obtener más información,consulte Puntos de enlace de Amazon Virtual Private Cloud para Amazon SQS (p. 157).

Note

• La condición aws:sourceVpce no requiere un ARN para el recurso de punto de enlace de laVPC, solo el ID de la VPC.

• Puede modificar el siguiente ejemplo para restringir todas las acciones para un punto de enlacede la VPC concreto denegando todas las acciones de Amazon SQS (sqs:*) en la segundainstrucción. Sin embargo, una declaración de política de este tipo estipularía que todas lasacciones (incluidas las acciones administrativas necesarias para modificar los permisos de cola)deben realizarse a través del punto de enlace de la VPC específico definido en la política, loque podría impedir al usuario de la cola modificar los permisos en el futuro.

{ "Version": "2012-10-17", "Id": "UseCase5", "Statement": [{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": [ "111122223333" ] }, "Action": [ "sqs:SendMessage", "sqs:ReceiveMessage" ], "Resource": "arn:aws::sqs:us-east-2:111122223333:queue1" }, { "Sid": "2", "Effect": "Deny", "Principal": "*", "Action": [ "sqs:SendMessage", "sqs:ReceiveMessage" ], "Resource": "arn:aws::sqs:us-east-2:111122223333:queue1", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ]}

184

Page 190: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresUsar credenciales de seguridad temporales

Uso de credenciales de seguridad temporales conAmazon SQSAdemás de crear usuarios de IAM con sus propias credenciales de seguridad, IAM también le permiteotorgar credenciales de seguridad temporales a cualquier usuario para que tenga acceso a los servicios yrecursos de AWS. Puede administrar los usuarios que tienen cuentas de AWS (usuarios de IAM). Tambiénpuede administrar los usuarios del sistema que no tienen cuentas de AWS (usuarios federados). Asimismo,las aplicaciones que usted crea para obtener acceso a los recursos de AWS también pueden considerarse"usuarios".

Puede utilizar estas credenciales de seguridad temporales para realizar solicitudes a Amazon SQS. Lasbibliotecas de la API computan el valor de firma necesario con esas credenciales para autenticar susolicitud. Si envía solicitudes con las credenciales vencidas, Amazon SQS deniega la solicitud.

Note

No se puede establecer una política basada en credenciales temporales.

Requisitos previos1. Utilice IAM para crear credenciales de seguridad temporales:

• Token de seguridad• ID de clave de acceso• Clave de acceso secreta

2. Prepare la cadena para firmar con el ID de clave de acceso temporal y el token de seguridad.3. Utilice la clave de acceso secreta temporal en lugar de su propia clave de acceso secreta para firmar

la solicitud de la API de consultas.

Note

Al enviar la solicitud de la API de consultas firmada, utilice el ID de clave de acceso temporalen lugar de su propio ID de clave de acceso e incluya el token de seguridad. Para obtener másinformación sobre la compatibilidad de IAM con las credenciales de seguridad temporales,consulte este artículo acerca de cómo conceder acceso temporal a los recursos de AWS en laGuía del usuario de IAM.

Para llamar a una acción de la API de consulta de Amazon SQSutilizando credenciales de seguridad temporales1. Solicite un token de seguridad temporal a través de AWS Identity and Access Management. Para

obtener información, consulte el artículo acerca de cómo crear credenciales de seguridad temporalespara habilitar el acceso de usuarios de IAM en la Guía del usuario de IAM.

IAM devuelve un token de seguridad, un ID de clave de acceso y una clave de acceso secreta.2. Prepare la consulta con el ID de clave de acceso temporal en lugar de su propio ID de clave de acceso

e incluya el token de seguridad. Firme la solicitud con la clave de acceso secreta temporal en lugar deutilizar su propia clave.

3. Envíe la cadena de consulta firmada con el ID de clave de acceso temporal y el token de seguridad.

En el siguiente ejemplo, se muestra cómo se utilizan las credenciales de seguridad temporales paraautenticar una solicitud de Amazon SQS. La estructura de AUTHPARAMS depende de la firma dela solicitud de la API. Para más información, consulte Firma de solicitudes de la API de AWS en laReferencia general de servicios web de Amazon.

185

Page 191: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresReferencia de permisos de la API

https://sqs.us-east-2.amazonaws.com/?Action=CreateQueue&DefaultVisibilityTimeout=40&QueueName=MyQueue&Attribute.1.Name=VisibilityTimeout&Attribute.1.Value=40&Expires=2020-12-18T22%3A52%3A43PST&SecurityToken=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Version=2012-11-05&AUTHPARAMS

El siguiente ejemplo utiliza credenciales de seguridad temporales para enviar dos mensajes con laacción SendMessageBatch.

https://sqs.us-east-2.amazonaws.com/?Action=SendMessageBatch&SendMessageBatchRequestEntry.1.Id=test_msg_001&SendMessageBatchRequestEntry.1.MessageBody=test%20message%20body%201&SendMessageBatchRequestEntry.2.Id=test_msg_002&SendMessageBatchRequestEntry.2.MessageBody=test%20message%20body%202&SendMessageBatchRequestEntry.2.DelaySeconds=60&Expires=2020-12-18T22%3A52%3A43PST&SecurityToken=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY&AWSAccessKeyId=AKIAI44QH8DHBEXAMPLE&Version=2012-11-05&AUTHPARAMS

Permisos de la API de Amazon SQS: Referencia derecursos y accionesCuando configure Control de acceso (p. 160) y escriba políticas de permisos que se pueden asociar auna identidad de IAM, puede utilizar la siguiente tabla como referencia. La lista incluye cada acción deAmazon Simple Queue Service, las acciones correspondientes a las que puede conceder permisos pararealizar la acción y el recurso de AWS para el que puede conceder los permisos.

Especifique las acciones en el campo Action de la política y el valor del recurso en el campo Resourcede la política. Para especificar una acción, use el prefijo sqs: seguido del nombre de acción (por ejemplo,sqs:CreateQueue).

En la actualidad, Amazon SQS únicamente admite un subconjunto limitado de claves de condicionesdisponibles en IAM:

• aws:CurrentTime

• aws:EpochTime

• aws:SecureTransport

• aws:SourceArn

Note

This condition ensures that AWS services grant access only on behalf of resources that yourAWS account owns. You can't specify the ARN of an IAM role as source ARN, because an IAMrole is neither a source nor a service.

• aws:SourceIP

• aws:UserAgent

186

Page 192: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresReferencia de permisos de la API

• aws:MultiFactorAuthAge

• aws:MultiFactorAuthPresent

• aws:PrincipalOrgID

• aws:RequestTag

• aws:sourceVpce

• aws:TagKeys

• aws:TokenAge

API de Amazon Simple Queue Service y permisos necesarios para las acciones

AddPermission

Acciones: sqs:AddPermission

Recurso: arn:aws:sqs:region:account_id:queue_nameChangeMessageVisibility

Acciones: sqs:ChangeMessageVisibility

Recurso: arn:aws:sqs:region:account_id:queue_nameChangeMessageVisibilityBatch

Acciones: sqs:ChangeMessageVisibilityBatch

Recurso: arn:aws:sqs:region:account_id:queue_nameCreateQueue

Acciones: sqs:CreateQueue

Recurso: arn:aws:sqs:region:account_id:queue_nameDeleteMessage

Acciones: sqs:DeleteMessage

Recurso: arn:aws:sqs:region:account_id:queue_nameDeleteMessageBatch

Acciones: sqs:DeleteMessageBatch

Recurso: arn:aws:sqs:region:account_id:queue_nameDeleteQueue

Acciones: sqs:DeleteQueue

Recurso: arn:aws:sqs:region:account_id:queue_nameGetQueueAttributes

Acciones: sqs:GetQueueAttributes

Recurso: arn:aws:sqs:region:account_id:queue_nameGetQueueUrl

Acciones: sqs:GetQueueUrl

Recurso: arn:aws:sqs:region:account_id:queue_name

187

Page 193: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRegistro y monitorización

ListDeadLetterSourceQueues

Acciones: sqs:ListDeadLetterSourceQueues

Recurso: arn:aws:sqs:region:account_id:queue_nameListQueues

Acciones: sqs:ListQueues

Recurso: arn:aws:sqs:region:account_id:queue_nameListQueueTags

Acciones: sqs:ListQueueTags

Recurso: arn:aws:sqs:region:account_id:queue_namePurgeQueue

Acciones: sqs:PurgeQueue

Recurso: arn:aws:sqs:region:account_id:queue_nameReceiveMessage

Acciones: sqs:ReceiveMessage

Recurso: arn:aws:sqs:region:account_id:queue_nameRemovePermission

Acciones: sqs:RemovePermission

Recurso: arn:aws:sqs:region:account_id:queue_nameSendMessage y SendMessageBatch

Acciones: sqs:SendMessage

Recurso: arn:aws:sqs:region:account_id:queue_nameSetQueueAttributes

Acciones: sqs:SetQueueAttributes

Recurso: arn:aws:sqs:region:account_id:queue_nameTagQueue

Acciones: sqs:TagQueue

Recurso: arn:aws:sqs:region:account_id:queue_nameUntagQueue

Acciones: sqs:UntagQueue

Recurso: arn:aws:sqs:region:account_id:queue_name

Registro y monitorización en Amazon SQSEn esta sección se proporciona información sobre el registro y la monitorización de las colas de AmazonSQS.

188

Page 194: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRegistro de llamadas a la API mediante CloudTrail

Temas• Registro de llamadas a la API de Amazon SQS mediante AWS CloudTrail (p. 189)• Monitoreo de colas de Amazon SQS con CloudWatch (p. 193)

Registro de llamadas a la API de Amazon SQSmediante AWS CloudTrailAmazon SQS está integrado con AWS CloudTrail, un servicio que proporciona un registro de las llamadasa Amazon SQS realizadas por un usuario, una función o un servicio de AWS. CloudTrail captura comoeventos todas las llamadas a la API que están relacionadas con las colas de Amazon SQS, incluidas lasllamadas de la consola de Amazon SQS y las llamadas de las API de Amazon SQS. Para obtener másinformación sobre CloudTrail, consulte la AWS CloudTrail User Guide.

Note

El registro de CloudTrail se admite con colas estándar y FIFO.

Con la información que recopila CloudTrail, puede identificar una solicitud específica dirigida a una API deAmazon SQS, la dirección IP del solicitante, la identidad del solicitante, la fecha y la hora de la solicitud,etc. Si configura un registro de seguimiento, puede habilitar la entrega continua de eventos de CloudTrail aun bucket de Amazon S3. Si no configura un registro de seguimiento, puede ver los eventos más recientesen el historial de eventos de la consola de CloudTrail. Para obtener más información, consulte la secciónIntroducción a la creación de registros de seguimiento en la AWS CloudTrail User Guide.

Información de Amazon SQS en CloudTrailCuando crea una cuenta de AWS, se habilita CloudTrail. Cuando se produce una actividad de eventoscompatible con Amazon SQS, dicha actividad se registra en un evento de CloudTrail junto con otroseventos de servicios de AWS en el historial de eventos. Puede ver, buscar y descargar los últimos eventosde su cuenta de AWS. Para obtener más información, consulte Visualización de eventos con el historial deeventos de CloudTrail en la AWS CloudTrail User Guide.

Un registro de seguimiento permite a CloudTrail enviar archivos de registro a un bucket de AmazonS3. Puede crear un registro de seguimiento para mantener un registro continuo de los eventos de sucuenta de AWS. De forma predeterminada, cuando se crea un registro de seguimiento en la Consola deadministración de AWS, este se aplica a todas las regiones de AWS. El registro de seguimiento registralos eventos de todas las regiones de AWS y envía los archivos de registro al bucket de Amazon S3especificado. También puede configurar otros servicios de AWS para analizar y actuar según los datos deeventos recopilados en los registros de CloudTrail. Para obtener más información, consulte los siguientestemas en la AWS CloudTrail User Guide.

• Servicios e integraciones compatibles con CloudTrail• Configuración de notificaciones de Amazon SNS para CloudTrail• Recibir archivos de registro de CloudTrail de varias regiones• Recepción de archivos de registro de CloudTrail de varias cuentas

Amazon SQS permite registrar las acciones siguientes:

• AddPermission

• CreateQueue

• DeleteQueue

• PurgeQueue

189

Page 195: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRegistro de llamadas a la API mediante CloudTrail

• RemovePermission

• SetQueueAttributes

• TagQueue

• UntagQueue

Cada entrada de evento o registro contiene información acerca del solicitante. Esta información le ayuda adeterminar lo siguiente:

• ¿La solicitud se realizó con las credenciales del nodo raíz o del usuario de IAM?• ¿La solicitud se realizó con credenciales de seguridad temporales de una función o un usuario

federado?• ¿La solicitud la realizó otro servicio de AWS?

Para obtener más información, consulte el elemento userIdentity de CloudTrail en la AWS CloudTrail UserGuide.

Ejemplo de entradas de archivos de registro de Amazon SQSLos archivos de registro de CloudTrail contienen una o varias entradas de registro, cada una de las cualesse compone de varios eventos en formato JSON. Una entrada de log representa una única solicitud decualquier origen e incluye información sobre la acción solicitada, los parámetros, la fecha y la hora de laacción, etcétera. Las entradas de log no se muestran en ningún orden concreto. Es decir, no representanun rastro de la pila ordenada de las llamadas a API públicas.

AddPermission

En el ejemplo siguiente, se muestra una entrada de registro de CloudTrail para una llamada a la API deAddPermission.

{ "Records": [ { "eventVersion": "1.06", "userIdentity": { "type": "IAMUser", "principalId": "AKIAI44QH8DHBEXAMPLE", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "Alice" }, "eventTime": "2018-06-28T22:23:46Z", "eventSource": "sqs.amazonaws.com", "eventName": "AddPermission", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.0", "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", "requestParameters": { "actions": [ "SendMessage" ], "AWSAccountIds": [ "123456789012" ], "label": "MyLabel", "queueUrl": "https://sqs.us-east-2.amazon.com/123456789012/MyQueue" }, "responseElements": null,

190

Page 196: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRegistro de llamadas a la API mediante CloudTrail

"requestID": "123abcde-f4gh-50ij-klmn-60o789012p30", "eventID": "0987g654-32f1-09e8-d765-c4f3fb2109fa" } ] }

CreateQueue

En el ejemplo siguiente, se muestra una entrada de registro de CloudTrail para una llamada a la API deCreateQueue.

{ "Records": [ { "eventVersion": "1.06", "userIdentity": { "type": "IAMUser", "principalId": "AKIAI44QH8DHBEXAMPLE", "arn": "arn:aws:iam::123456789012:user/Alejandro", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "Alejandro" }, "eventTime": "2018-06-28T22:23:46Z", "eventSource": "sqs.amazonaws.com", "eventName": "CreateQueue", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.1", "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", "requestParameters": { "queueName": "MyQueue" }, "responseElements": { "queueUrl": "https://sqs.us-east-2.amazon.com/123456789012/MyQueue" }, "requestID": "123abcde-f4gh-50ij-klmn-60o789012p30", "eventID": "0987g654-32f1-09e8-d765-c4f3fb2109fa" } ] }

DeleteQueue

En el ejemplo siguiente, se muestra una entrada de registro de CloudTrail para una llamada a la API deDeleteQueue.

{ "Records": [ { "eventVersion": "1.06", "userIdentity": { "type": "IAMUser", "principalId": "AKIAI44QH8DHBEXAMPLE", "arn": "arn:aws:iam::123456789012:user/Carlos", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "Carlos" }, "eventTime": "2018-06-28T22:23:46Z", "eventSource": "sqs.amazonaws.com", "eventName": "DeleteQueue", "awsRegion": "us-east-2",

191

Page 197: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRegistro de llamadas a la API mediante CloudTrail

"sourceIPAddress": "203.0.113.2", "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", "requestParameters": { "queueUrl": "https://sqs.us-east-2.amazon.com/123456789012/MyQueue" }, "responseElements": null, "requestID": "123abcde-f4gh-50ij-klmn-60o789012p30", "eventID": "0987g654-32f1-09e8-d765-c4f3fb2109fa" } ] }

RemovePermission

En el ejemplo siguiente, se muestra una entrada de registro de CloudTrail para una llamada a la API deRemovePermission.

{ "Records": [ { "eventVersion": "1.06", "userIdentity": { "type": "IAMUser", "principalId": "AKIAI44QH8DHBEXAMPLE", "arn": "arn:aws:iam::123456789012:user/Jane", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "Jane" }, "eventTime": "2018-06-28T22:23:46Z", "eventSource": "sqs.amazonaws.com", "eventName": "RemovePermission", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.3", "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", "requestParameters": { "label": "label", "queueUrl": "https://sqs.us-east-2.amazon.com/123456789012/MyQueue" }, "responseElements": null, "requestID": "123abcde-f4gh-50ij-klmn-60o789012p30", "eventID": "0987g654-32f1-09e8-d765-c4f3fb2109fa" } ] }

SetQueueAttributes

El ejemplo siguiente muestra una entrada de registro de CloudTrail para SetQueueAttributes:

{ "Records": [ { "eventVersion": "1.06", "userIdentity": { "type": "IAMUser", "principalId": "AKIAI44QH8DHBEXAMPLE", "arn": "arn:aws:iam::123456789012:user/Maria", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "Maria" },

192

Page 198: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

"eventTime": "2018-06-28T22:23:46Z", "eventSource": "sqs.amazonaws.com", "eventName": "SetQueueAttributes", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.4", "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", "requestParameters": { "attributes": { "VisibilityTimeout": "100" }, "queueUrl": "https://sqs.us-east-2.amazon.com/123456789012/MyQueue" }, "responseElements": null, "requestID": "123abcde-f4gh-50ij-klmn-60o789012p30", "eventID": "0987g654-32f1-09e8-d765-c4f3fb2109fa" } ] }

Monitoreo de colas de Amazon SQS con CloudWatchAmazon SQS y Amazon CloudWatch están integrados, por lo que puede utilizar CloudWatch para ver yanalizar métricas correspondientes a sus colas de Amazon SQS. Puede ver y analizar las métricas delas colas desde la consola deAmazon SQS (p. 193), la consola de CloudWatch (p. 194), mediante laAWS CLI (p. 195) o mediante la API de CloudWatch (p. 195). También puede establecer alarmas deCloudWatch (p. 195) para las métricas de Amazon SQS.

Las métricas de CloudWatch para sus colas de Amazon SQS se recopilan automáticamente y se envíana CloudWatch en intervalos de un minuto. Estas métricas se obtienen de todas las colas que cumplen lasdirectrices de CloudWatch para estar activas. CloudWatch considera que una cola está activa durante unmáximo de seis horas si contiene mensajes o alguna acción obtiene acceso a ella.

Note

• No se aplican cargos por las métricas de Amazon SQS notificadas en CloudWatch. Se ofrecencomo parte del servicio de Amazon SQS.

• Las métricas de CloudWatch se admiten con ambas colas estándar y FIFO.

Temas• Acceso a las métricas de CloudWatch para Amazon SQS (p. 193)• Creación de alarmas de CloudWatch para métricas de Amazon SQS (p. 195)• Métricas de CloudWatch disponibles para Amazon SQS (p. 196)

Acceso a las métricas de CloudWatch para Amazon SQSAmazon SQS y Amazon CloudWatch están integrados, por lo que puede utilizar CloudWatch para ver yanalizar métricas correspondientes a sus colas de Amazon SQS. Puede ver y analizar las métricas delas colas desde la consola deAmazon SQS (p. 193), la consola de CloudWatch (p. 194), mediante laAWS CLI (p. 195) o mediante la API de CloudWatch (p. 195). También puede establecer alarmas deCloudWatch (p. 195) para las métricas de Amazon SQS.

Consola de Amazon SQS

1. Inicie sesión en la consola de Amazon SQS.2. En la lista de colas, elija (marque) las casillas correspondientes a las colas a cuyas métricas desea

obtener acceso. Puede mostrar métricas para un máximo de 10 colas.

193

Page 199: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

3. Elija la pestaña Monitoring.

En la sección SQS metrics se muestran varios gráficos.4. Para comprender lo que un determinado gráfico representa, pase el ratón por encima del icono

situado junto al gráfico correspondiente o consulte Métricas de CloudWatch disponibles para AmazonSQS (p. 196).

5. Para cambiar el intervalo de tiempo para todos los gráficos al mismo tiempo, en Time Range, elija elintervalo de tiempo deseado (por ejemplo, Last Hour).

6. Para ver estadísticas adicionales para un gráfico individual, elija el gráfico.7. En el cuadro de diálogo CloudWatchMonitoring Details (Detalles de monitoreo de ), seleccione una

estadística en la lista Statistic (Estadística), (por ejemplo, Sum). Para ver una lista de las estadísticasadmitidas, consulte Métricas de CloudWatch disponibles para Amazon SQS (p. 196).

8. Para cambiar el intervalo de tiempo durante el cual se muestra un gráfico individual (por ejemplo, paramostrar un intervalo de tiempo de las últimas 24 horas en lugar de los últimos cinco minutos, o paramostrar un periodo de tiempo de cada hora en lugar de cada 5 minutos), con el cuadro de diálogodel gráfico todavía abierto, en Time Range, elija el intervalo de tiempo deseado (por ejemplo, Last 24Hours). En Period, elija el periodo de tiempo deseado dentro del intervalo de tiempo especificado (porejemplo, 1 Hour). Cuando termine de examinar el gráfico, elija Close.

9. (Opcional) Para trabajar con otras características de CloudWatch, en la pestaña Monitoring(Monitoreo), elija View all CloudWatch metrics (Ver todas las métricas de ) y siga las instrucciones delprocedimiento de Consola de Amazon CloudWatch (p. 194).

Consola de Amazon CloudWatch

1. Inicie sesión en la consola de CloudWatch.2. En el panel de navegación, elija Metrics.3. Seleccione el espacio de nombres de métricas SQS.

4. Seleccione la dimensión de métricas Queue Metrics.

194

Page 200: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

5. Ahora puede examinar las métricas de Amazon SQS:

• Para ordenar las métricas, utilice el encabezado de columna.• Para representar gráficamente una métrica, active la casilla de verificación situada junto a ella.• Para filtrar por métrica, elija el nombre de la métrica y, a continuación, seleccione Add to search.

Para obtener más información y ver otras opciones, consulte Representación gráfica de métricas y Uso delos paneles de Amazon CloudWatch en la Guía del usuario de Amazon CloudWatch.

AWS Command Line Interface

Para acceder a las métricas de Amazon SQS utilizando la AWS CLI, ejecute el comando get-metric-statistics.

Para obtener más información, consulte Obtener estadísticas de una métrica en la Guía del usuario deAmazon CloudWatch.

API de CloudWatch

Para obtener acceso a las métricas de Amazon SQS a través de la API de CloudWatch, utilice la acciónGetMetricStatistics.

Para obtener más información, consulte Obtener estadísticas de una métrica en la Guía del usuario deAmazon CloudWatch.

Creación de alarmas de CloudWatch para métricas de AmazonSQSCloudWatch le permite activar alarmas en función del umbral de una métrica. Por ejemplo, puedecrear una alarma para la métrica NumberOfMessagesSent. Por ejemplo, si se envían más de 100mensajes a la cola MyQueue en una hora, se envía una notificación por correo electrónico. Para obtenermás información, consulte Crear alarmas de Amazon CloudWatch en la Guía del usuario de AmazonCloudWatch.

195

Page 201: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

2. Elija Alarms y, a continuación, seleccione Create Alarm.3. En la sección Select Metric (Seleccionar métrica) del cuadro de diálogo Create Alarm (Crear alarma),

elija Browse Metrics (Examinar métricas), SQS.4. En SQS > Queue Metrics (SQS > Métricas de la cola), elija el nombre de la cola en QueueName

(NombreCola) y el nombre de la métrica en Metric Name (Nombre de métrica) para las que deseaestablecer una alarma. Después, haga clic en Next (Siguiente). Para ver una lista de las métricasdisponibles, consulte Métricas de CloudWatch disponibles para Amazon SQS (p. 196).

En el siguiente ejemplo, la selección que se realiza corresponde a una alarma de la métricaNumberOfMessagesSent para la cola MyQueue. La alarma se activa cuando el número de mensajesenviados supera los 100.

5. En la sección Define Alarm (Definir alarma) del cuadro de diálogo Create Alarm (Crear alarma), hagalo siguiente:

a. En Alarm Threshold (Umbral de alarma), escriba el nombre de la alarma en Name (Nombre) y ladescripción en Description (Descripción).

b. Establezca is en > 100.c. Establezca for (para) en 1 out of 1 datapoints (1 de 1 punto de datos).d. En Alarm preview (Vista previa de alarma), establezca el valor de Period (Período) en 1 Hour (1

hora).e. Establezca Statistic (Estadística) en Standard (Estándar), Sum (Suma).f. En Actions (Acciones), establezca Whenever this alarm (Siempre que esta alarma) en State is

ALARM (El estado es ALARM).

Si desea que CloudWatch envíe una notificación cuando se active la alarma, seleccione un temade Amazon SNS existente o haga clic en New list (Nueva lista) y escriba las direcciones de correoelectrónico separadas por comas.

Note

Si crea un nuevo tema de Amazon SNS, debe verificar las direcciones de correoelectrónico antes de que puedan recibir notificaciones. Si el estado de la alarma cambiaantes de que se verifiquen las direcciones de correo electrónico, las notificaciones no seenvían.

6. Elija Create Alarm.

Se crea la alarma.

Métricas de CloudWatch disponibles para Amazon SQSAmazon SQS envía las siguientes métricas a CloudWatch.

Note

Para las colas estándar, el resultado es aproximado debido a la arquitectura distribuida deAmazon SQS. En la mayoría de los casos, el recuento debería aproximarse al número real demensajes de la cola.Con las colas FIFO, el resultado es exacto.

Métricas de Amazon SQS

El espacio de nombres de AWS/SQS incluye las siguientes métricas.

196

Page 202: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

Métrica Descripción

ApproximateAgeOfOldestMessage La antigüedad aproximada del mensaje noeliminado más antiguo de la cola.

Note

• Cuando la cola tiene una políticade redireccionamiento, elmensaje se mueve a una colade mensajes fallidos (p. 98)después del número máximo derecepciones establecido. Cuandoel mensaje se mueve a la colade mensajes fallidos, la métricaApproximateAgeOfOldestMessagede la cola de mensajes fallidosrepresenta la hora a la que elmensaje se trasladó a la colade mensajes fallidos (no la horaoriginal en la que se envió elmensaje).

• Cuando una cola no tiene unapolítica de redireccionamiento,si el mensaje se recibetres veces (o más) y no seprocesa, se mueve a la parteposterior de la cola y la métricaApproximateAgeOfOldestMessageapunta al segundo mensaje másantiguo que no se ha recibido másde tres veces.

• Dado que un solo mensaje depíldora venenosa (que se harecibido varias veces, pero no seha eliminado) puede distorsionaresta métrica, no se incluye laantigüedad de los mensajes depíldora venenosa en la métricahasta que el mensaje se procesacorrectamente.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: segundos

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

ApproximateNumberOfMessagesDelayed El número de mensajes de la cola que vancon retraso y no están disponibles para sulectura inmediata. Esto puede ocurrir cuando

197

Page 203: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

Métrica Descripciónla cola está configurada como una cola deretraso o cuando se ha enviado un mensajecon un parámetro de retraso.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: recuento

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

ApproximateNumberOfMessagesNotVisible El número de mensajes que se encuentranen tránsito. Se considera que los mensajesestán en tránsito si se han enviado a uncliente pero aún no se han eliminado ono han llegado al final de su periodo devisibilidad.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: recuento

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

ApproximateNumberOfMessagesVisible Número de mensajes que se puedenrecuperar de la cola.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: recuento

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

198

Page 204: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

Métrica Descripción

NumberOfEmptyReceives Número de llamadas a la API deReceiveMessage que no devolvieron unmensaje.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: recuento

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

NumberOfMessagesDeleted Número de mensajes eliminados de la cola.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: recuento

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)Amazon SQS emite la métricaNumberOfMessagesDeleted en cadaoperación de eliminación correcta queutiliza un identificador de recepción válido,incluidas las eliminaciones duplicadas.Las siguientes situaciones puedenprovocar que el valor de la métricaNumberOfMessagesDeleted sea superioral esperado:

• Llamar a la acción DeleteMessage enidentificadores de recepción diferentesque pertenecen al mismo mensaje: si elmensaje no se procesa antes de que seagote el tiempo de espera de visibilidad,queda a disposición de otros consumidoresque pueden procesarlo y volver aeliminarlo, lo que incrementa el valor de lamétrica NumberOfMessagesDeleted.

• Llamar a la acción DeleteMessageen el mismo identificador derecepción: si el mensaje se procesay elimina pero se llama de nuevo ala acción DeleteMessage usandoel mismo indicador de recepción,se devuelve un estado de éxito, loque incrementa el valor de la métricaNumberOfMessagesDeleted.

199

Page 205: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresMonitoreo de colas con CloudWatch

Métrica Descripción

NumberOfMessagesReceived Número de mensajes devueltos mediantellamadas a la acción ReceiveMessage.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: recuento

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

NumberOfMessagesSent Número de mensajes añadidos a una cola.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: recuento

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

SentMessageSize Tamaño de los mensajes añadidos a unacola.

Criterios de informe: si la cola estáactiva (p. 193), se indica un valor nonegativo.

Unidades: bytes

Estadísticas válidas: Average, Minimum,Maximum, Sum, Data Samples (se muestracomo Sample Count en la consola deAmazon SQS)

Note

SentMessageSize no aparececomo una métrica disponible en laconsola de CloudWatch hasta quese envía al menos un mensaje a lacola correspondiente.

Dimensiones de métricas de Amazon SQS

La única dimensión que Amazon SQS envía a CloudWatch es QueueName. Esto significa que todas lasestadísticas disponibles se filtran por QueueName.

200

Page 206: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresValidación de la conformidad

Validación de la conformidad para Amazon SQSLos auditores externos evalúan la seguridad y la conformidad de Amazon SQS como parte de múltiplesprogramas de conformidad de AWS, incluidos los siguientes:

• Estándar de Seguridad de Datos del Sector de las Tarjetas de Pago (PCI DSS, Payment Card IndustryData Security Standard) versión 3.2

• Ley de Portabilidad y Responsabilidad de Seguros Médicos de EE. UU (Health Insurance Portability andAccountability Act, HIPAA).

Para obtener una lista de servicios de AWS en el ámbito de programas de conformidad específicos,consulte Servicios de AWS en el ámbito del programa de conformidad. Para obtener información general,consulte Programas de conformidad de AWS.

Puede descargar los informes de auditoría de terceros utilizando AWS Artifact. Para obtener másinformación, consulte Descarga de informes en AWS Artifact.

La responsabilidad de conformidad que recae en usted al utilizar Amazon SQS viene determinada por laconfidencialidad de los datos, los objetivos de conformidad de su empresa y la legislación y normativasaplicables. AWS proporciona los siguientes recursos para ayudarle con los requisitos de conformidad:

• Guías de inicio rápido de seguridad y conformidad– estas guías de implementación tratanconsideraciones sobre arquitectura y ofrecen pasos para implementar los entornos de referenciacentrados en la seguridad y la conformidad en AWS.

• Documento técnico sobre arquitectura para seguridad y conformidad de HIPAA– este documento técnicodescribe cómo las empresas pueden utilizar AWS para crear aplicaciones conformes con HIPAA.

• Recursos de conformidad de AWS – este conjunto de manuales y guías podría aplicarse a su sector yubicación.

• Evaluación de recursos con reglas en la Guía para desarrolladores de AWS Config – el servicio AWSConfig evalúa en qué medida las configuraciones de los recursos cumplen con las prácticas internas, lasdirectrices del sector y las normativas.

• AWS Security Hub – este servicio de AWS ofrece una vista integral de su estado de seguridad enAWS que le ayuda a comprobar la conformidad con las normas del sector de seguridad y las prácticasrecomendadas.

Resiliencia en Amazon SQSLa infraestructura global de AWS está conformada por regiones y zonas de disponibilidad de AWS. Lasregiones de AWS proporcionan varias zonas de disponibilidad físicamente independientes y aisladasque se encuentran conectadas mediante redes con un alto nivel de rendimiento y redundancia, ademásde baja latencia. Con las zonas de disponibilidad, puede diseñar y utilizar aplicaciones y bases de datosque realizan una conmutación por error automática entre las zonas sin interrupciones. Las zonas dedisponibilidad tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las infraestructurastradicionales de centros de datos únicos o múltiples. Para obtener más información sobre zonas dedisponibilidad y las regiones de AWS, consulte Infraestructura global de AWS.

Además de la infraestructura global de AWS, Amazon SQS ofrece colas distribuidas.

Colas distribuidasUn sistema de mensajería distribuido consta de tres partes principales: los componentes del sistemadistribuido, la cola (distribuida en los servidores de Amazon SQS) y los mensajes de la cola.

201

Page 207: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresSeguridad de la infraestructura

En la siguiente situación, el sistema dispone de varios productores (componentes que envían mensajesa la cola) y consumidores (componentes que reciben mensajes desde la cola). La cola (que contiene losmensajes A a E) almacena de forma redundante los mensajes en varios servidores de Amazon SQS.

Seguridad de la infraestructura en Amazon SQSAl tratarse de un servicio administrado, Amazon SQS está protegido por los procedimientos de seguridadde red globales de AWS que se describen en el documento técnico Amazon Web Services: Informacióngeneral sobre procesos de seguridad.

Puede utilizar las acciones de la API publicadas en AWS para obtener acceso a Amazon SQS a través dela red. Los clientes deben ser compatibles con Transport Layer Security (TLS) 1.0 o una versión posterior.Le recomendamos TLS 1.2 o una versión posterior. Los clientes también deben ser compatibles conconjuntos de cifrado con confidencialidad directa total (PFS) tales como Ephemeral Diffie-Hellman (DHE) oElliptic Curve Ephemeral Diffie-Hellman (ECDHE).

Debe firmar las solicitudes mediante un ID de clave de acceso y una clave de acceso secreta asociadaa una entidad principal de IAM. También puede utilizar AWS Security Token Service (AWS STS) paragenerar credenciales de seguridad temporales para firmar solicitudes.

Puede llamar a estas acciones de la API desde cualquier ubicación de red, pero Amazon SQS admitepolíticas de acceso basadas en recursos, que pueden incluir restricciones en función de la dirección IPde origen. Además, puede utilizar las políticas de Amazon SQS para controlar el acceso desde puntosde enlace de Amazon VPC o desde VPC específicas. Esto aísla con eficacia el acceso de red a una colade Amazon SQS determinada únicamente desde la VPC específica de la red de AWS. Para obtener másinformación, consulte Denegar el acceso si no es desde un punto de enlace de la VPC (p. 184).

Prácticas recomendadas de seguridad de AmazonSQS

AWS proporciona muchas características de seguridad para Amazon SQS, que debe revisar en el contextode su política de seguridad.

202

Page 208: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPrácticas recomendadas preventivas

Note

La orientación de implementación específica que se proporciona corresponde a casos de uso eimplementaciones habituales. Le sugerimos que consulte estas prácticas recomendadas en elcontexto de su caso de uso, arquitectura y modelo de amenaza concretos.

Prácticas recomendadas preventivasA continuación se indican las prácticas recomendadas de seguridad preventiva para Amazon SQS.

Temas• Asegurarse de que las colas no sean accesibles de forma pública (p. 203)• Implementación del acceso a los privilegios mínimos (p. 203)• Uso de roles de IAM para aplicaciones y servicios de AWS que requieren acceso a Amazon

SQS (p. 204)• Implementación del cifrado en el servidor (p. 204)• Aplicación del cifrado de los datos en tránsito (p. 204)• Considere el uso de puntos de enlace de la VPC para obtener acceso a Amazon SQS (p. 204)

Asegurarse de que las colas no sean accesibles de forma públicaA menos que requiera explícitamente que alguien en Internet pueda leer o escribir en su cola de AmazonSQS, debe asegurarse de que no sea accesible públicamente (accesible para todos o para cualquierusuario de AWS autenticado).

• Evite la creación de políticas con Principal establecido en "".• Evite usar un carácter comodín (*). En su lugar, designe a un usuario o usuarios específicos.

Implementación del acceso a los privilegios mínimosCuando concede permisos, decide quién los recibe, para qué colas son los permisos y las accionesespecíficas de la API que desea permitir en estas colas. La implementación de los privilegios mínimos esimportante para reducir los riesgos de seguridad y disminuir el efecto de errores o intenciones maliciosas.

Siga el consejo de seguridad estándar de concesión del privilegio mínimo. Es decir, conceda sololos permisos necesarios para realizar una tarea específica. Puede efectuar esta impresora con unacombinación de políticas de seguridad.

Amazon SQS utiliza el modelo productor-consumidor, que requiere tres tipos de acceso a la cuenta deusuario:

• Administradores: acceso a la creación, modificación y eliminación de colas. Los administradores tambiéncontrolan las políticas de cola.

• Productores: acceso al envío de mensajes a colas.• Consumidores: acceso a la recepción y eliminación de mensajes de las colas.

Para obtener más información, consulte las siguientes secciones:

• Identity and Access Management en Amazon SQS (p. 158)• Referencia de acciones y recursos (p. 186)• Uso de políticas personalizadas con el Access Policy Language de Amazon SQS (p. 174)

203

Page 209: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresPrácticas recomendadas preventivas

Uso de roles de IAM para aplicaciones y servicios de AWS querequieren acceso a Amazon SQSPara que aplicaciones o servicios de AWS como Amazon EC2 obtengan acceso a colas de Amazon SQS,deben utilizar credenciales de AWS válidas en sus solicitudes a la API de AWS. Como estas credencialesno rotan automáticamente, no debe almacenar credenciales de AWS directamente en la aplicación ni en lainstancia EC2.

Debe utilizar un rol de IAM para administrar las credenciales temporales de las aplicaciones o serviciosque necesitan acceder a Amazon SQS. Al utilizar un rol, no tiene que distribuir credenciales a largo plazo(como un nombre de usuario, una contraseña y claves de acceso) a una instancia EC2 o un servicio deAWS como AWS Lambda. En vez de ello, el rol proporciona permisos temporales que las aplicacionespueden utilizar al realizar llamadas a otros recursos de AWS.

Para obtener más información, consulte Roles de IAM y Escenarios comunes para roles: usuarios,aplicaciones y servicios en la Guía del usuario de IAM.

Implementación del cifrado en el servidorPara mitigar los problemas de fuga de datos, utilice el cifrado en reposo para cifrar sus mensajes medianteuna clave almacenada en una ubicación distinta de la ubicación en la que se almacenan los mensajes.El cifrado en el servidor (SSE) proporciona cifrado de datos en reposo. Amazon SQS cifra los datos en elnivel de mensaje cuando los almacena y descifra los mensajes cuando se obtiene acceso a ellos. SSEutiliza claves administradas en AWS Key Management Service. Siempre que autentique su solicitud ytenga permiso de acceso, no existe diferencia alguna entre obtener acceso a las colas cifradas y sin cifrar.

Para obtener más información, consulte Cifrado en reposo (p. 149) y Administración de claves (p. 152).

Aplicación del cifrado de los datos en tránsitoSin HTTPS (TLS), un atacante basado en red puede espiar el tráfico de la red o manipularlo, utilizando unataque como MTM (man-in-the-middle). Permitir solo las conexiones cifradas a través de HTTPS (TLS)mediante la condición aws:SecureTransport en la política de colas para forzar que las solicitudesutilicen SSL.

Considere el uso de puntos de enlace de la VPC para obteneracceso a Amazon SQSSi tiene colas con las que debe poder interactuar pero que no deben estar expuestas a Internet, utilice lospuntos de enlace de la VPC para poner en la cola el acceso solo a los hosts dentro de una VPC concreta.Puede utilizar las políticas de colas para controlar el acceso a las colas desde determinados puntos deenlace de Amazon VPC o desde determinadas VPC.

Los puntos de enlace de la VPC de Amazon SQS brindan dos maneras de controlar el acceso a losmensajes:

• Puede controlar qué solicitudes, usuarios o grupos obtienen acceso a través de un punto de enlace de laVPC específico.

• Puede controlar qué VPC o puntos de enlace de la VPC tienen acceso a su cola con una política decolas.

Para obtener más información, consulte Puntos de enlace de Amazon Virtual Private Cloud para AmazonSQS (p. 157) y Creación de una política de puntos de enlace de la Amazon VPC para AmazonSQS (p. 157).

204

Page 210: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRealizar solicitudes de la API de consulta

Uso de las API de Amazon SQSEsta sección contiene información acerca de cómo crear puntos de enlace de Amazon SQS, cómo crearsolicitudes de API de consulta utilizando los métodos GET y POST y cómo utilizar acciones de la APIde procesamiento por lotes. Para obtener información detallada sobre las acciones de Amazon SQS,incluidos los parámetros, errores, ejemplos y tipos de datos, consulte la Amazon Simple Queue ServiceAPI Reference.

Si desea obtener acceso a Amazon SQS mediante diferentes lenguajes de programación, también puedeutilizar los SDK de AWS, que contienen la siguiente funcionalidad automática:

• Firmar criptográficamente sus solicitudes de servicio• Reintentar solicitudes• Tratar las respuestas a errores

Para obtener información sobre las herramientas de línea de comandos, consulte las secciones sobreAmazon SQS en la Referencia de comandos de AWS CLI y la Herramientas de AWS para PowerShellCmdlet Reference.

Temas• Realizar solicitudes de la API de consulta (p. 205)• Amazon SQS Acciones de procesamiento por lotes (p. 211)

Realizar solicitudes de la API de consultaEn esta sección, aprenderá a crear un punto de enlace de Amazon SQS, a crear solicitudes GET y POST, ya interpretar las respuestas.

Temas• Construcción de un punto de enlace (p. 205)• Realizar una solicitud GET (p. 206)• Realizar una solicitud POST (p. 206)• Autenticación de solicitudes (p. 207)• Interpretación de las respuestas (p. 210)

Construcción de un punto de enlacePara trabajar con colas de Amazon SQS, debe crear un punto de enlace. Para obtener información sobrelos puntos de enlace de Amazon SQS específicos de región, consulte la Referencia general de AmazonWeb Services.

Cada punto de enlace de Amazon SQS es independiente. Por ejemplo, si dos colas se denominanMyQueue y una tiene el punto de enlace sqs.us-east-2.amazonaws.com mientras que la otra tiene elpunto de enlace sqs.eu-west-2.amazonaws.com, no comparten ningún dato entre ellas.

205

Page 211: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresRealizar una solicitud GET

A continuación se muestra un ejemplo de un punto de enlace que realiza una solicitud para crear una cola.

https://sqs.eu-west-2.amazonaws.com/ ?Action=CreateQueue&DefaultVisibilityTimeout=40&QueueName=MyQueue&Version=2012-11-05&AUTHPARAMS

Note

Los nombres y las URL de las colas distinguen entre mayúsculas y minúsculas.La estructura de AUTHPARAMS depende de la firma de la solicitud de la API. Para másinformación, consulte Firma de solicitudes de la API de AWS en la Referencia general de serviciosweb de Amazon.

Realizar una solicitud GETLas solicitudes GET de Amazon SQS están estructuradas como una URL que se compone de lo siguiente:

• Punto de enlace: recurso sobre el que actúa la solicitud (el nombre y la URL de la cola (p. 90)); porejemplo, https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue.

• Acción: acción que se desea realizar en el punto de enlace. Se utiliza un signo de interrogación (?) paraseparar el punto de enlace de la acción; por ejemplo, ?Action=SendMessage&MessageBody=Your%20Message%20Text

• Parámetros – los parámetros de la solicitud—cada parámetro se separa con un signo ampersand (&); porejemplo: &Version=2012-11-05&AUTHPARAMS

A continuación se muestra un ejemplo de una solicitud GET que envía un mensaje a una cola de AmazonSQS.

https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue?Action=SendMessage&MessageBody=Your%20message%20text&Version=2012-11-05&AUTHPARAMS

Note

Los nombres y las URL de las colas distinguen entre mayúsculas y minúsculas.Como las solicitudes GET son direcciones URL, debe codificar como URL los valores de todos losparámetros. Debido a que en las URL no se permiten los espacios en blanco, que cada espaciose codifica en la URL como %20. (El resto del ejemplo no se ha codificado como URL para facilitarsu lectura).

Realizar una solicitud POSTLas solicitudes POST de Amazon SQS envían parámetros de consulta como un formulario en el cuerpo deuna solicitud HTTP.

A continuación, se muestra un ejemplo de encabezado HTTP con Content-Type establecido enapplication/x-www-form-urlencoded.

POST /123456789012/MyQueue HTTP/1.1Host: sqs.us-east-2.amazonaws.com

206

Page 212: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAutenticación de solicitudes

Content-Type: application/x-www-form-urlencoded

Al encabezado le sigue una solicitud POST de form-urlencoded que envía un mensaje a una cola deAmazon SQS. Cada parámetro está separado del siguiente por un signo ampersand (&).

Action=SendMessage&MessageBody=Your+Message+Text&Expires=2020-10-15T12%3A00%3A00Z&Version=2012-11-05&AUTHPARAMS

Note

Solo es obligatorio el encabezado de HTTP Content-Type. El parámetro AUTHPARAMS es elmismo que para la solicitud GET.El cliente HTTP puede añadir otros elementos a la solicitud HTTP, según la versión de HTTP delcliente.

Autenticación de solicitudesLa autenticación es un proceso para identificar y verificar a la parte que envía una solicitud. Durante laprimera fase de la autenticación, AWS verifica la identidad del productor y si está registrado para utilizarAWS (para obtener más información, consulte Creación de una cuenta de AWS (p. 4) y Creación de unusuario de IAM (p. 4)). A continuación, AWS realiza el procedimiento siguiente:

1. El productor (remitente) obtiene la credencial necesaria.2. El productor envía una solicitud y la credencial al consumidor (receptor).3. El consumidor utiliza la credencial para verificar si el productor envió la solicitud.4. Se produce una de las circunstancias siguientes:

• Si la autenticación se realiza correctamente, el consumidor procesa la solicitud.• Si se produce un error de autenticación, el consumidor rechaza la solicitud y devuelve un error.

Temas• Proceso básico de autenticación con HMAC-SHA (p. 207)• Parte 1: La solicitud del usuario (p. 208)• Parte 2: La respuesta de AWS (p. 209)

Proceso básico de autenticación con HMAC-SHACuando se obtiene acceso a Amazon SQS con la API de consultas, se deben proporcionar los siguienteselementos para autenticar la solicitud:

• El ID de clave de acceso de AWS que identifica la cuenta de AWS, que AWS utiliza para buscar la clavede acceso secreta.

• La firma de la solicitud HMAC-SHA, que se calcula utilizando la clave de acceso secreta (un secretocompartido conocido únicamente por usted y por AWS—para obtener más información, consulteRFC2104). El SDK de AWS se encarga del proceso de firma; sin embargo, si se realiza una solicitud deconsulta a través de HTTP o HTTPS, se deberá incluir una firma en cada solicitud de consulta.

1. Genere una clave firma Signature Version 4. Para obtener más información, consulte Generación dela clave de firma con Java.

207

Page 213: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAutenticación de solicitudes

Note

Amazon SQS admite Signature Version 4, que proporciona mayor desempeño y seguridadbasada en SHA256 que las versiones anteriores. Cuando cree aplicaciones nuevas queusen Amazon SQS, utilice Signature Version 4.

2. codifique en formato base64 la firma de la solicitud. El siguiente ejemplo se de código Java lo hace:

package amazon.webservices.common;

// Define common routines for encoding data in AWS requests.public class Encoding {

/* Perform base64 encoding of input bytes. * rawData is the array of bytes to be encoded. * return is the base64-encoded string representation of rawData. */ public static String EncodeBase64(byte[] rawData) { return Base64.encodeBytes(rawData); }}

• La marca temporal (o vencimiento) de la solicitud. La marca temporal que utilice en la solicitud debeser un objeto dateTime, con la fecha completa, incluidas las horas, los minutos y los segundos. Porejemplo: 2007-01-31T23:59:59Z Aunque no es necesario, le recomendamos que proporcione elobjeto utilizando la zona horaria de la hora universal coordinada (hora del meridiano de Greenwich).

Note

Asegúrese de que la hora del servidor esté ajustada correctamente. Si especifica una marcatemporal (en lugar de un vencimiento), la solicitud caduca automáticamente 15 minutosdespués de la hora especificada (AWS no procesa las solicitudes cuya marca temporal seaanterior en más de 15 minutos a la hora actual de los servidores de AWS).Si utiliza .NET, no debe enviar marcas temporales demasiado específicas (debido a lasdiferentes interpretaciones con respecto a cómo se debe descartar la precisión adicional deltiempo). En este caso, debe crear manualmente objetos dateTime con una precisión de nomás de un milisegundo.

Parte 1: La solicitud del usuarioA continuación se muestra el proceso que debe seguir para autenticar solicitudes en AWS mediante unafirma de solicitud HMAC-SHA.

208

Page 214: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAutenticación de solicitudes

1. Cree una solicitud para AWS.2. Calcule la firma de código de autenticación de mensajes mediante algoritmos hash con clave (HMAC-

SHA) utilizando su clave de acceso secreta.3. Incluya la firma y su ID de clave de acceso en la solicitud y, a continuación, envíe la solicitud a AWS.

Parte 2: La respuesta de AWSAWS comienza el siguiente proceso como respuesta.

209

Page 215: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresInterpretación de las respuestas

1. AWS utiliza el ID de clave de acceso para buscar su clave de acceso secreta.2. AWS genera una firma a partir de los datos de la solicitud y la clave de acceso secreta con el mismo

algoritmo que usted utilizó para calcular la firma que envió en la solicitud.3. Se produce una de las circunstancias siguientes:

• Si la firma generada por AWS coincide con la que se envía con la solicitud, AWS considera que lasolicitud es auténtica.

• Si no coincide, se descarta la solicitud y AWS devuelve un error.

Interpretación de las respuestasEn respuesta a una solicitud de acción, Amazon SQS devuelve una estructura de datos XML que contienelos resultados de la solicitud. Para obtener más información, consulte las correspondientes acciones de laen la Amazon Simple Queue Service API Reference.

Temas• Estructura de una respuesta correcta (p. 210)• Estructura de una respuesta de error (p. 211)

Estructura de una respuesta correctaSi la solicitud se realiza correctamente, el elemento principal de la respuesta tiene el mismo nombre que laacción, pero se le añade Response (ActionNameResponse).

Este elemento contiene los siguientes elementos secundarios:

210

Page 216: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAcciones de procesamiento por lotes

• ActionNameResult – Contiene un elemento específico de la acción. Por ejemplo, el elementoCreateQueueResult contiene el elemento QueueUrl que, a su vez, contiene la URL de la cola que seha creado.

• ResponseMetadata – Contiene el RequestId que, a su vez, contiene el UUID de la solicitud.

A continuación se muestra un ejemplo de una respuesta correcta en formato XML:

<CreateQueueResponse xmlns=https://sqs.us-east-2.amazonaws.com/doc/2012-11-05/ xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:type=CreateQueueResponse> <CreateQueueResult> <QueueUrl>https://sqs.us-east-2.amazonaws.com/770098461991/queue2</QueueUrl> </CreateQueueResult> <ResponseMetadata> <RequestId>cb919c0a-9bce-4afe-9b48-9bdf2412bb67</RequestId> </ResponseMetadata></CreateQueueResponse>

Estructura de una respuesta de errorSi una solicitud no se realiza correctamente, Amazon SQS siempre devuelve el elemento principal de larespuesta ErrorResponse. Este elemento contiene un elemento Error y un elemento RequestId.

El elemento Error contiene los siguientes elementos secundarios:

• Type – Especifica si se trata de un error del productor o del consumidor.• Code – Especifica el tipo de error.• Message – Especifica la condición de error en formato legible.• Detail – (Opcional) especifica información adicional sobre el error.

El elemento RequestId contiene el UUID de la solicitud.

A continuación se muestra un ejemplo de una respuesta de error en formato XML:

<ErrorResponse> <Error> <Type>Sender</Type> <Code>InvalidParameterValue</Code> <Message> Value (quename_nonalpha) for parameter QueueName is invalid. Must be an alphanumeric String of 1 to 80 in length. </Message> </Error> <RequestId>42d59b56-7407-4c4a-be0f-4c88daeea257</RequestId></ErrorResponse>

Amazon SQS Acciones de procesamiento por lotesPara reducir los costos o manipular hasta 10 mensajes con una única acción, puede utilizar las siguientesacciones:

• SendMessageBatch

• DeleteMessageBatch

• ChangeMessageVisibilityBatch

211

Page 217: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHabilitación del almacenamiento en búfer del lado

del cliente y del agrupamiento en lotes de solicitudes

Puede aprovechar la funcionalidad de procesamiento por lotes utilizando la API de consultas o un SDK deAWS que sea compatible con las acciones de procesamiento por lotes de Amazon SQS.

Note

El tamaño total de todos los mensajes que envíe en una única llamada a SendMessageBatch nopuede superar los 262 144 bytes (256 KB).No se pueden establecer permisos para SendMessageBatch, DeleteMessageBatchni ChangeMessageVisibilityBatch de forma explícita. Al establecer permisos paraSendMessage, DeleteMessage o ChangeMessageVisibility, también se establecenpermisos para las versiones por lotes correspondientes de esas acciones.La consola de Amazon SQS no es compatible con las acciones de la de procesamiento por lotes.

Temas• Habilitación del almacenamiento en búfer del lado del cliente y del agrupamiento en lotes de

solicitudes (p. 212)• Aumento del desempeño mediante el escalado horizontal y agrupación en lotes de acciones de

la (p. 216)

Habilitación del almacenamiento en búfer del lado delcliente y del agrupamiento en lotes de solicitudesEl AWS SDK for Java incluye AmazonSQSBufferedAsyncClient que tiene acceso a Amazon SQS. Estecliente permite agrupar fácilmente en lotes las solicitudes mediante el almacenamiento en búfer—del ladodel cliente, en el que las llamadas realizadas desde el cliente primero se almacenan en búfer y después seenvían como una solicitud por lotes a Amazon SQS.

El almacenamiento en búfer del lado del cliente permite almacenar en búfer hasta 10 solicitudes y enviarlascomo una solicitud por lotes, lo que disminuye el costo de uso de Amazon SQS y el número de solicitudesenviadas. AmazonSQSBufferedAsyncClient almacena en búfer tanto las llamadas síncronas como lasasíncronas. Las solicitudes por lotes y la compatibilidad con los sondeos largos (p. 96) también puedencontribuir a mejorar el rendimiento. Para obtener más información, consulte Aumento del desempeñomediante el escalado horizontal y agrupación en lotes de acciones de la (p. 216).

Dado que AmazonSQSBufferedAsyncClient implementa la misma interfazque AmazonSQSAsyncClient, la migración de AmazonSQSAsyncClient aAmazonSQSBufferedAsyncClient solo suele requerir cambios mínimos en el código.

Note

Cliente asincrónico en búfer de Amazon SQSno admite actualmente colas FIFO.

Temas• Uso de AmazonSQSBufferedAsyncClient (p. 212)• Configuración de AmazonSQSBufferedAsyncClient (p. 213)

Uso de AmazonSQSBufferedAsyncClientAntes de comenzar, complete los pasos de Configuración de Amazon SQS (p. 4).

Important

AWS SDK para Java 2.x no es compatible actualmente con AmazonSQSBufferedAsyncClient.

Puede crear un nuevo cliente AmazonSQSBufferedAsyncClient basado en AmazonSQSAsyncClient;por ejemplo:

212

Page 218: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHabilitación del almacenamiento en búfer del lado

del cliente y del agrupamiento en lotes de solicitudes

// Create the basic Amazon SQS async clientfinal AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); // Create the buffered clientfinal AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync);

Después de crear el nuevo AmazonSQSBufferedAsyncClient, puede utilizarlo para enviar variassolicitudes a Amazon SQS (del mismo modo que con AmazonSQSAsyncClient), por ejemplo:

final CreateQueueRequest createRequest = new CreateQueueRequest().withQueueName("MyQueue"); final CreateQueueResult res = bufferedSqs.createQueue(createRequest); final SendMessageRequest request = new SendMessageRequest();final String body = "Your message text" + System.currentTimeMillis();request.setMessageBody( body );request.setQueueUrl(res.getQueueUrl()); final SendMessageResult sendResult = bufferedSqs.sendMessageAsync(request); final ReceiveMessageRequest receiveRq = new ReceiveMessageRequest() .withMaxNumberOfMessages(1) .withQueueUrl(queueUrl);final ReceiveMessageResult rx = bufferedSqs.receiveMessage(receiveRq);

Configuración de AmazonSQSBufferedAsyncClientAmazonSQSBufferedAsyncClient está preconfigurado con ajustes válidos para la mayoría de loscasos de uso. Se pueden configurar ajustes adicionales de AmazonSQSBufferedAsyncClient; porejemplo:

1. Crear una instancia de la clase QueueBufferConfig con los parámetros de configuraciónnecesarios.

2. Proporcionar la instancia al constructor AmazonSQSBufferedAsyncClient.

// Create the basic Amazon SQS async clientfinal AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); final QueueBufferConfig config = new QueueBufferConfig() .withMaxInflightReceiveBatches(5) .withMaxDoneReceiveBatches(15); // Create the buffered clientfinal AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync, config);

Parámetros de configuración de QueueBufferConfig

Parámetro Valor predeterminado Descripción

longPoll true Cuando longPoll seestablece en true,AmazonSQSBufferedAsyncClientintenta utilizar el sondeo largo ala hora de consumir mensajes.

longPollWaitTimeoutSeconds 20 s El tiempo máximo, ensegundos, que una llamada aReceiveMessage se bloquea

213

Page 219: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHabilitación del almacenamiento en búfer del lado

del cliente y del agrupamiento en lotes de solicitudes

Parámetro Valor predeterminado Descripciónen el servidor a la espera de queaparezcan mensajes en la colaantes de devolver un resultadode recepción vacío.

Note

Este parámetro no tieneningún efecto cuandoel sondeo largo estádeshabilitado.

maxBatchOpenMs 200ms El tiempo máximo, enmilisegundos, que una llamadasaliente espera otras llamadaspara procesar por lotes mensajesdel mismo tipo.

Cuanto mayor sea el valor,menos lotes son necesarios pararealizar la misma cantidad detrabajo (no obstante, la primerallamada de un lote tiene queesperar más tiempo).

Cuando se establece esteparámetro en 0, las solicitudesenviadas no esperan a otrassolicitudes, lo que en la prácticadeshabilita el procesamiento porlotes.

maxBatchSize 10 solicitudes por lote El número máximo de mensajesque se procesan juntos por lotesen una sola solicitud. Cuantomayor sea la configuración,menos lotes serán necesariospara llevar a cabo el mismonúmero de solicitudes.

Note

El valor máximopermitido paraAmazon SQS es de 10solicitudes por lote.

maxBatchSizeBytes 256 KB El tamaño máximo de un lotede mensajes, en bytes, que elcliente intenta enviar a AmazonSQS.

Note

El valor máximopermitido para AmazonSQS es de 256 KB.

214

Page 220: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHabilitación del almacenamiento en búfer del lado

del cliente y del agrupamiento en lotes de solicitudes

Parámetro Valor predeterminado Descripción

maxDoneReceiveBatches 10 lotes El número máximo delotes de recepción queAmazonSQSBufferedAsyncClientcaptura previamente y almacenaen el lado del cliente.

Cuanto mayor sea el valor, mássolicitudes de recepción podránsatisfacerse sin tener que realizaruna llamada a Amazon SQS (sinembargo, cuantos más mensajesse capturen previamente, mástiempo permanecerán en elbúfer, lo que hará que caduquesu propio tiempo de espera devisibilidad).

Note

0 indica que se hadeshabilitado la capturaprevia de mensajesy que estos solose consumen bajodemanda.

maxInflightOutboundBatches 5 lotes El número máximo de lotessalientes activos que se puedenprocesar al mismo tiempo.

Cuanto mayor sea el valor,más rápido se podrán enviarlos lotes salientes (sujetoa cuotas como la CPU oel ancho de banda) y mássubprocesos podrá consumirAmazonSQSBufferedAsyncClient.

215

Page 221: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

Parámetro Valor predeterminado Descripción

maxInflightReceiveBatches 10 lotes El número máximo de lotes derecepción activos que se puedenprocesar al mismo tiempo.

Cuanto mayor sea el valor, másmensajes de podrán recibir(sujeto a cuotas como la CPUo el ancho de banda) y mássubprocesos podrá consumirAmazonSQSBufferedAsyncClient.

Note

0 indica que se hadeshabilitado la capturaprevia de mensajesy que estos solose consumen bajodemanda.

visibilityTimeoutSeconds -1 Cuando este parámetro seestablece en un valor positivodistinto de cero, el tiempo deespera de visibilidad que seestablece aquí anula el tiempode espera de visibilidad definidoen la cola desde la que seconsumen los mensajes.

Note

-1 indica queestá seleccionadala configuraciónpredeterminada de lacola.No se puede establecerel tiempo de espera devisibilidad en 0.

Aumento del desempeño mediante el escaladohorizontal y agrupación en lotes de acciones de laLas colas de Amazon SQS pueden proporcionar un rendimiento muy alto. Las colas Estándaradmiten un número casi ilimitado de transacciones por segundo (TPS) para cada acción de la API(SendMessage, ReceiveMessage o DeleteMessage). De forma predeterminada, con el procesamientopor lotes (p. 211), las colas FIFO admiten hasta 3000 mensajes por segundo (TPS), por acción de API(SendMessage, ReceiveMessage o DeleteMessage). Para solicitar un aumento de la cuota, envíe unasolicitud de soporte técnico. Sin procesamiento por lotes, las colas FIFO admiten hasta 300 mensajes porsegundo, por acción de API (SendMessage, ReceiveMessage o DeleteMessage).

Para conseguir un desempeño elevado, debe escalar horizontalmente los productores y los consumidoresde mensajes (añadir más productores y consumidores).

216

Page 222: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

Temas• Escalado horizontal (p. 217)• Agrupación por lotes de acciones (p. 217)• Ejemplo funcional en Java de solicitudes de una sola operación y por lotes (p. 218)

Escalado horizontalDado que se accede a Amazon SQS a través de un protocolo HTTP de solicitud-respuesta, la latenciade solicitudes (el intervalo de tiempo que transcurre entre que se inicia una solicitud y se recibe unarespuesta) limita el desempeño que se puede alcanzar con un solo subproceso a través de una únicaconexión. Por ejemplo, si la latencia desde un cliente basado en Amazon EC2 hasta Amazon SQS en lamisma región es de una media de 20 ms, el desempeño máximo desde un único subproceso a través deuna única conexión será de una media de 50 transacciones por segundo.

El escalado horizontal supone aumentar el número de productores de mensajes (que realizansolicitudes SendMessage) y consumidores de mensajes (que realizan solicitudes ReceiveMessage yDeleteMessage) para aumentar el desempeño general de la cola. Existen tres métodos para realizar elescalado horizontal:

• Aumentar el número de subprocesos por cliente• Añadir más clientes• Aumentar el número de subprocesos por cliente y añadir más clientes

Cuando se añaden más clientes, se consiguen ganancias prácticamente lineales en el desempeño de lacola. Por ejemplo, si se duplica el número de clientes, también se obtiene el doble de desempeño.

Note

A medida que realice el escalado horizontal, debe asegurarse de que la cola de Amazon SQS queutilice tenga suficientes conexiones o subprocesos para el número de productores y consumidoresde mensajes simultáneos que envían solicitudes y reciben respuestas. Por ejemplo, de formapredeterminada, las instancias de la clase AWS SDK for Java AmazonSQSClient mantienencomo máximo 50 conexiones a Amazon SQS. Para crear productores y consumidores adicionalessimultáneos, debe ajustar el número máximo de subprocesos de productores y consumidoresadmisibles en un objeto AmazonSQSClientBuilder; por ejemplo:

final AmazonSQS sqsClient = AmazonSQSClientBuilder.standard() .withClientConfiguration(new ClientConfiguration() .withMaxConnections(producerCount + consumerCount)) .build();

Para AmazonSQSAsyncClient, también debe asegurarse de que haya suficientes subprocesosdisponibles.

Agrupación por lotes de accionesLa agrupación por lotes realiza más trabajo durante cada ciclo de ida y vuelta al servicio (por ejemplo,al enviar varios mensajes en una única solicitud SendMessageBatch). Las acciones de la deprocesamiento por lotes de Amazon SQS son SendMessageBatch, DeleteMessageBatch yChangeMessageVisibilityBatch. Para aprovechar la agrupación en lotes sin modificar losproductores ni los consumidores, puede utilizar el Cliente asincrónico en búfer de Amazon SQS (p. 212).

Note

Debido a que ReceiveMessage puede procesar 10 mensajes a la vez, no hay ninguna acciónReceiveMessageBatch.

217

Page 223: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

La agrupación en lotes distribuye la latencia de la acción por lotes entre varios mensajes en unasolicitud por lotes, en lugar de aceptar toda la latencia para un único mensaje (por ejemplo, una solicitudSendMessage). Como en cada ciclo de ida y vuelta se realiza más trabajo, las solicitudes por lotes hacenun uso más eficaz de los subprocesos y las conexiones, por lo que se mejora el desempeño.

Puede combinar la agrupación en lotes con el escalado horizontal para proporcionar un desempeñocon menos subprocesos, conexiones y solicitudes de los que serían necesarios en el caso de utilizarsolicitudes de mensajes individuales. Puede utilizar acciones de Amazon SQS agrupadas en lotes paraenviar, recibir o eliminar hasta 10 mensajes a la vez. Dado que el uso de Amazon SQS se factura porsolicitudes, la agrupación en lotes puede reducir significativamente los costos.

La agrupación en lotes puede introducir cierta complejidad en una aplicación (por ejemplo, la aplicacióndebe acumular los mensajes antes de enviarlos, o a veces debe esperar más para recibir una respuesta).Sin embargo, la agrupación en lotes puede resultar eficaz en los casos siguientes:

• Cuando la aplicación genera muchos mensajes en poco tiempo, por lo que el retraso nunca es muylargo.

• Cuando un consumidor de mensajes busca mensajes en una cola a discreción, a diferencia de losproductores de mensajes típicos que tienen que enviar mensajes como respuesta a eventos que nocontrolan.

Important

Una solicitud por lotes puede realizarse correctamente aunque se hayan producido errores enmensajes individuales del lote. Después de una solicitud por lotes, compruebe siempre si hayerrores en mensajes individuales y vuelva a intentar la acción si es necesario.

Ejemplo funcional en Java de solicitudes de una sola operación ypor lotesRequisitos previosAñada los paquetes aws-java-sdk-sqs.jar, aws-java-sdk-ec2.jar y commons-logging.jar ala ruta de clases de compilación Java. Los siguientes ejemplos muestran estas dependencias en el archivopom.xml de un proyecto Maven.

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version>LATEST</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-ec2</artifactId> <version>LATEST</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>LATEST</version> </dependency></dependencies>

SimpleProducerConsumer.javaEn el siguiente ejemplo de código Java se implementa un patrón productor-consumidor sencillo. Elsubproceso principal genera una serie de subprocesos productores y consumidores que procesan

218

Page 224: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

mensajes de 1 KB durante el tiempo especificado. Este ejemplo incluye productores y consumidores querealizan solicitudes de una única operación y otros que realizan solicitudes por lotes.

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

import com.amazonaws.AmazonClientException;import com.amazonaws.ClientConfiguration;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.*;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;

import java.math.BigInteger;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.Scanner;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicBoolean;import java.util.concurrent.atomic.AtomicInteger;

/** * Start a specified number of producer and consumer threads, and produce-consume * for the least of the specified duration and 1 hour. Some messages can be left * in the queue because producers and consumers might not be in exact balance. */public class SimpleProducerConsumer {

// The maximum runtime of the program. private final static int MAX_RUNTIME_MINUTES = 60; private final static Log log = LogFactory.getLog(SimpleProducerConsumer.class);

public static void main(String[] args) throws InterruptedException {

final Scanner input = new Scanner(System.in);

System.out.print("Enter the queue name: "); final String queueName = input.nextLine();

System.out.print("Enter the number of producers: "); final int producerCount = input.nextInt();

System.out.print("Enter the number of consumers: "); final int consumerCount = input.nextInt();

System.out.print("Enter the number of messages per batch: "); final int batchSize = input.nextInt();

System.out.print("Enter the message size in bytes: "); final int messageSizeByte = input.nextInt();

219

Page 225: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

System.out.print("Enter the run time in minutes: "); final int runTimeMinutes = input.nextInt();

/* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see Creating * Service Clients in the AWS SDK for Java Developer Guide. */ final ClientConfiguration clientConfiguration = new ClientConfiguration() .withMaxConnections(producerCount + consumerCount);

final AmazonSQS sqsClient = AmazonSQSClientBuilder.standard() .withClientConfiguration(clientConfiguration) .build();

final String queueUrl = sqsClient .getQueueUrl(new GetQueueUrlRequest(queueName)).getQueueUrl();

// The flag used to stop producer, consumer, and monitor threads. final AtomicBoolean stop = new AtomicBoolean(false);

// Start the producers. final AtomicInteger producedCount = new AtomicInteger(); final Thread[] producers = new Thread[producerCount]; for (int i = 0; i < producerCount; i++) { if (batchSize == 1) { producers[i] = new Producer(sqsClient, queueUrl, messageSizeByte, producedCount, stop); } else { producers[i] = new BatchProducer(sqsClient, queueUrl, batchSize, messageSizeByte, producedCount, stop); } producers[i].start(); }

// Start the consumers. final AtomicInteger consumedCount = new AtomicInteger(); final Thread[] consumers = new Thread[consumerCount]; for (int i = 0; i < consumerCount; i++) { if (batchSize == 1) { consumers[i] = new Consumer(sqsClient, queueUrl, consumedCount, stop); } else { consumers[i] = new BatchConsumer(sqsClient, queueUrl, batchSize, consumedCount, stop); } consumers[i].start(); }

// Start the monitor thread. final Thread monitor = new Monitor(producedCount, consumedCount, stop); monitor.start();

// Wait for the specified amount of time then stop. Thread.sleep(TimeUnit.MINUTES.toMillis(Math.min(runTimeMinutes, MAX_RUNTIME_MINUTES))); stop.set(true);

// Join all threads. for (int i = 0; i < producerCount; i++) { producers[i].join(); }

for (int i = 0; i < consumerCount; i++) {

220

Page 226: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

consumers[i].join(); }

monitor.interrupt(); monitor.join(); }

private static String makeRandomString(int sizeByte) { final byte[] bs = new byte[(int) Math.ceil(sizeByte * 5 / 8)]; new Random().nextBytes(bs); bs[0] = (byte) ((bs[0] | 64) & 127); return new BigInteger(bs).toString(32); }

/** * The producer thread uses {@code SendMessage} * to send messages until it is stopped. */ private static class Producer extends Thread { final AmazonSQS sqsClient; final String queueUrl; final AtomicInteger producedCount; final AtomicBoolean stop; final String theMessage;

Producer(AmazonSQS sqsQueueBuffer, String queueUrl, int messageSizeByte, AtomicInteger producedCount, AtomicBoolean stop) { this.sqsClient = sqsQueueBuffer; this.queueUrl = queueUrl; this.producedCount = producedCount; this.stop = stop; this.theMessage = makeRandomString(messageSizeByte); }

/* * The producedCount object tracks the number of messages produced by * all producer threads. If there is an error, the program exits the * run() method. */ public void run() { try { while (!stop.get()) { sqsClient.sendMessage(new SendMessageRequest(queueUrl, theMessage)); producedCount.incrementAndGet(); } } catch (AmazonClientException e) { /* * By default, AmazonSQSClient retries calls 3 times before * failing. If this unlikely condition occurs, stop. */ log.error("Producer: " + e.getMessage()); System.exit(1); } } }

/** * The producer thread uses {@code SendMessageBatch} * to send messages until it is stopped. */ private static class BatchProducer extends Thread { final AmazonSQS sqsClient; final String queueUrl; final int batchSize; final AtomicInteger producedCount;

221

Page 227: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

final AtomicBoolean stop; final String theMessage;

BatchProducer(AmazonSQS sqsQueueBuffer, String queueUrl, int batchSize, int messageSizeByte, AtomicInteger producedCount, AtomicBoolean stop) { this.sqsClient = sqsQueueBuffer; this.queueUrl = queueUrl; this.batchSize = batchSize; this.producedCount = producedCount; this.stop = stop; this.theMessage = makeRandomString(messageSizeByte); }

public void run() { try { while (!stop.get()) { final SendMessageBatchRequest batchRequest = new SendMessageBatchRequest().withQueueUrl(queueUrl);

final List<SendMessageBatchRequestEntry> entries = new ArrayList<SendMessageBatchRequestEntry>(); for (int i = 0; i < batchSize; i++) entries.add(new SendMessageBatchRequestEntry() .withId(Integer.toString(i)) .withMessageBody(theMessage)); batchRequest.setEntries(entries);

final SendMessageBatchResult batchResult = sqsClient.sendMessageBatch(batchRequest); producedCount.addAndGet(batchResult.getSuccessful().size());

/* * Because SendMessageBatch can return successfully, but * individual batch items fail, retry the failed batch items. */ if (!batchResult.getFailed().isEmpty()) { log.warn("Producer: retrying sending " + batchResult.getFailed().size() + " messages"); for (int i = 0, n = batchResult.getFailed().size(); i < n; i++) { sqsClient.sendMessage(new SendMessageRequest(queueUrl, theMessage)); producedCount.incrementAndGet(); } } } } catch (AmazonClientException e) { /* * By default, AmazonSQSClient retries calls 3 times before * failing. If this unlikely condition occurs, stop. */ log.error("BatchProducer: " + e.getMessage()); System.exit(1); } } }

/** * The consumer thread uses {@code ReceiveMessage} and {@code DeleteMessage} * to consume messages until it is stopped. */ private static class Consumer extends Thread { final AmazonSQS sqsClient; final String queueUrl; final AtomicInteger consumedCount;

222

Page 228: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

final AtomicBoolean stop;

Consumer(AmazonSQS sqsClient, String queueUrl, AtomicInteger consumedCount, AtomicBoolean stop) { this.sqsClient = sqsClient; this.queueUrl = queueUrl; this.consumedCount = consumedCount; this.stop = stop; }

/* * Each consumer thread receives and deletes messages until the main * thread stops the consumer thread. The consumedCount object tracks the * number of messages that are consumed by all consumer threads, and the * count is logged periodically. */ public void run() { try { while (!stop.get()) { try { final ReceiveMessageResult result = sqsClient .receiveMessage(new ReceiveMessageRequest(queueUrl));

if (!result.getMessages().isEmpty()) { final Message m = result.getMessages().get(0); sqsClient.deleteMessage(new DeleteMessageRequest(queueUrl, m.getReceiptHandle())); consumedCount.incrementAndGet(); } } catch (AmazonClientException e) { log.error(e.getMessage()); } } } catch (AmazonClientException e) { /* * By default, AmazonSQSClient retries calls 3 times before * failing. If this unlikely condition occurs, stop. */ log.error("Consumer: " + e.getMessage()); System.exit(1); } } }

/** * The consumer thread uses {@code ReceiveMessage} and {@code * DeleteMessageBatch} to consume messages until it is stopped. */ private static class BatchConsumer extends Thread { final AmazonSQS sqsClient; final String queueUrl; final int batchSize; final AtomicInteger consumedCount; final AtomicBoolean stop;

BatchConsumer(AmazonSQS sqsClient, String queueUrl, int batchSize, AtomicInteger consumedCount, AtomicBoolean stop) { this.sqsClient = sqsClient; this.queueUrl = queueUrl; this.batchSize = batchSize; this.consumedCount = consumedCount; this.stop = stop; }

223

Page 229: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

public void run() { try { while (!stop.get()) { final ReceiveMessageResult result = sqsClient .receiveMessage(new ReceiveMessageRequest(queueUrl) .withMaxNumberOfMessages(batchSize));

if (!result.getMessages().isEmpty()) { final List<Message> messages = result.getMessages(); final DeleteMessageBatchRequest batchRequest = new DeleteMessageBatchRequest() .withQueueUrl(queueUrl);

final List<DeleteMessageBatchRequestEntry> entries = new ArrayList<DeleteMessageBatchRequestEntry>(); for (int i = 0, n = messages.size(); i < n; i++) entries.add(new DeleteMessageBatchRequestEntry() .withId(Integer.toString(i)) .withReceiptHandle(messages.get(i) .getReceiptHandle())); batchRequest.setEntries(entries);

final DeleteMessageBatchResult batchResult = sqsClient .deleteMessageBatch(batchRequest); consumedCount.addAndGet(batchResult.getSuccessful().size());

/* * Because DeleteMessageBatch can return successfully, * but individual batch items fail, retry the failed * batch items. */ if (!batchResult.getFailed().isEmpty()) { final int n = batchResult.getFailed().size(); log.warn("Producer: retrying deleting " + n + " messages"); for (BatchResultErrorEntry e : batchResult .getFailed()) {

sqsClient.deleteMessage( new DeleteMessageRequest(queueUrl, messages.get(Integer .parseInt(e.getId())) .getReceiptHandle()));

consumedCount.incrementAndGet(); } } } } } catch (AmazonClientException e) { /* * By default, AmazonSQSClient retries calls 3 times before * failing. If this unlikely condition occurs, stop. */ log.error("BatchConsumer: " + e.getMessage()); System.exit(1); } } }

/** * This thread prints every second the number of messages produced and * consumed so far. */ private static class Monitor extends Thread { private final AtomicInteger producedCount;

224

Page 230: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresAumento del desempeño mediante el escalado

horizontal y agrupación en lotes de acciones de la

private final AtomicInteger consumedCount; private final AtomicBoolean stop;

Monitor(AtomicInteger producedCount, AtomicInteger consumedCount, AtomicBoolean stop) { this.producedCount = producedCount; this.consumedCount = consumedCount; this.stop = stop; }

public void run() { try { while (!stop.get()) { Thread.sleep(1000); log.info("produced messages = " + producedCount.get() + ", consumed messages = " + consumedCount.get()); } } catch (InterruptedException e) { // Allow the thread to exit. } } }}

Monitorización de las métricas de volumen de la ejecución del ejemplo

Amazon SQS genera automáticamente métricas de volumen para los mensajes enviados, recibidos yeliminados. Puede tener acceso a estas y otras métricas a través de la pestaña Monitoring (Monitoreo) dela cola o en la CloudWatch consola.

Note

Las métricas pueden tardar en estar disponibles hasta 15 minutos después del inicio de la cola.

225

Page 231: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Recursos de Amazon SQSrelacionados

En la tabla siguiente se enumeran todos los recursos relacionados que podrían resultarle útiles cuandotrabaje con este servicio.

Recurso Descripción

Amazon Simple Queue Service APIReference

Descripciones de las acciones, parámetros y tipos de datosde la , así como una lista de errores que el servicio devuelve.

Amazon SQS en la AWS CLI CommandReference

Descripciones de los comandos de la AWS CLI que puedeusar para trabajar con colas.

Regiones y puntos de enlace Información acerca de las regiones y los puntos de enlace deAmazon SQS

Página del producto Página web principal con información acerca de AmazonSQS.

Foro de debate Foro de la comunidad para desarrolladores donde se tratanaspectos técnicos relacionados con Amazon SQS.

Información sobre AWS PremiumSupport

Página web principal para obtener información sobre AWSPremium Support, un canal de soporte individualizadoy de respuesta rápida que le ayudará a crear y ejecutaraplicaciones en servicios de infraestructura de AWS.

226

Page 232: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Amazon SQS Notas de la versiónEn la siguiente tabla se muestran las versiones y mejoras de las características de Amazon SQS. Paracambios en Guía para desarrolladores de Amazon Simple Queue Service, consulte Amazon SQS Historialde revisión (p. 234).

Fecha Publicación de la característica

9 de enero de2020

La métrica de un minuto de CloudWatch para Amazon SQS está disponible entodas las regiones comerciales. Para obtener más información, consulte Métricasde CloudWatch disponibles para Amazon SQS (p. 196).

25 de noviembrede 2019

• La métrica de CloudWatch en un minuto para Amazon SQS actualmente soloestá disponible en las siguientes regiones:• EE.UU. Este (Ohio)• Europa (Irlanda)• Europa (Estocolmo)• Asia Pacífico (Tokio)

Para obtener más información, consulte Métricas de CloudWatch disponiblespara Amazon SQS (p. 196).

• Puede configurar mensajes entrantes en una cola de FIFO para activar unafunción Lambda. Para obtener más información, consulte Configuración demensajes que llegan a una cola de Amazon SQS para activar una función deLambda (p. 53).

13 de noviembrede 2019

Cifrado en el servidor (SSE) para Amazon SQS está disponible en Regiones deChina. Para obtener más información sobre el cifrado del lado del servidor y cómocomenzar a utilizarlo, consulte Cifrado en reposo (p. 149).

10 de octubre de2019

Las colas FIFO (First-In-First-Out) están disponibles en en la región Medio Oriente(Baréin). Para obtener más información sobre el funcionamiento de las colas FIFOy cómo empezar a utilizarlas, consulte Amazon SQS Colas FIFO (First-In-First-Out) (p. 83).

5 de septiembre de2019

Puede enviar mensajes a las colas de Amazon SQS desde Amazon Virtual PrivateCloud en las regiones AWS GovCloud (US-West) y AWS GovCloud (EE.UU. Este).Para obtener más información, consulte Puntos de enlace de Amazon VirtualPrivate Cloud para Amazon SQS (p. 157).

28 de agosto de2019

• Puede solucionar los problemas de los mensajes que pasan a través de las colasde Amazon SQS utilizando AWS X-Ray. Para obtener más información, consulteSolución de problemas de colas de Amazon Simple Queue Service con AWS X-Ray (p. 147).

• Puede utilizar atributos del sistema de mensajes para enviar encabezadosde rastreo de AWS X-Ray a través de Amazon SQS. Para obtener másinformación, consulte Atributos del sistema de mensajes de Amazon SQS (p. 94).Esta versión añade el parámetro de solicitud MessageSystemAttributea las acciones de la API SendMessagey SendMessageBatch, el atributoAWSTraceHeader a la acción de la API ReceiveMessage y el tipo de datosMessageSystemAttributeValue.

22 de agosto de2019

• Puede utilizar una única llamada a la API de Amazon SQS, una función de SDKde AWS o un comando de la AWS CLI para crear simultáneamente una cola y

227

Page 233: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Fecha Publicación de la característicaespecificar sus etiquetas. Para obtener más información, consulte Amazon SQSEtiquetas de asignación de costos (p. 95) y el parámetro de solicitud Tag de laacción de la API CreateQueue.

• Amazon SQS admite las claves de AWS aws:TagKeysy aws:RequestTag.Para obtener más información, consulte Referencia de acciones yrecursos (p. 186).

25 de julio de 2019 Las colas temporales lo ayudan a ahorrar tiempo de desarrollo y costos deimplementación al utilizar patrones de mensajes comunes como solicitud-respuesta. Puede utilizar el cliente de colas temporales para crear colas temporalesde alto rendimiento, rentables y administradas por aplicaciones. Para obtener másinformación, consulte Colas temporales de Amazon SQS (p. 104).

20 de junio de2019

Cifrado en el servidor (SSE) para Amazon SQS está disponible en la región AWSGovCloud (EE.UU. Este). Para obtener más información sobre el cifrado del ladodel servidor y cómo comenzar a utilizarlo, consulte Cifrado en reposo (p. 149).

15 de mayo de2019

Las colas FIFO (First-In-First-Out) están disponibles en la en las regiones AsiaPacífico (Hong Kong), China (Pekín), AWS GovCloud (EE.UU. Este) y AWSGovCloud (US-West).. Para obtener más información sobre el funcionamiento delas colas FIFO y cómo empezar a utilizarlas, consulte Amazon SQS Colas FIFO(First-In-First-Out) (p. 83).

4 de abril de 2019 Puede crear políticas de puntos de enlace de Amazon VPC para Amazon SQS.Para obtener más información, consulte Creación de una política de puntos deenlace de la Amazon VPC para Amazon SQS (p. 157).

Important

• Puede utilizar Amazon Virtual Private Cloud solo con los puntos deenlace HTTPS de Amazon SQS.

• Cuando configure Amazon SQS para enviar mensajes desde AmazonVPC, debe habilitar un DNS privado y especificar los puntos de enlacecon el formato sqs.us-east-2.amazonaws.com.

• Los DNS privados no admiten los puntos de enlace heredados, comoqueue.amazonaws.com o us-east-2.queue.amazonaws.com.

14 de marzo de2019

Las colas de FIFO (First-In-First-Out) están disponibles en las regionesEuropa (Estocolmo) y China (Ningxia). Para obtener más información sobre elfuncionamiento de las colas FIFO y cómo empezar a utilizarlas, consulte AmazonSQS Colas FIFO (First-In-First-Out) (p. 83).

7 de febrero de2019

Las colas de FIFO (First-In-First-Out) están disponibles en las regiones EE.UU.Este (Ohio), US East (N. Virginia), EE.UU. Oeste (Norte de California), EE.UU.Oeste (Oregón), Asia Pacífico (Mumbai), Asia Pacífico (Seúl), Asia Pacífico(Singapur), Asia Pacífico (Sídney), Asia Pacífico (Tokio), Canadá (Central), Europa(Fráncfort), Europa (Irlanda), Europa (Londres), Europa (París) y América del Sur(São Paulo). Para obtener más información sobre cómo funcionan las colas deFIFO y cómo empezar a utilizarlas, consulte Amazon SQS Colas FIFO (First-In-First-Out) (p. 83).

13 de diciembre de2018

Puede enviar mensajes a las colas de Amazon SQS desde Amazon Virtual PrivateCloud. Para obtener más información, consulte Puntos de enlace de AmazonVirtual Private Cloud para Amazon SQS (p. 157) y Envío de mensajes a una colade Amazon SQS desde Amazon Virtual Private Cloud (p. 41).

228

Page 234: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Fecha Publicación de la característica

8 de noviembre de2018

Las colas de FIFO (First-In-First-Out) están disponibles en las regiones AsiaPacífico (Sídney) y Asia Pacífico (Tokio). Para obtener más información sobre elfuncionamiento de las colas FIFO y cómo empezar a utilizarlas, consulte AmazonSQS Colas FIFO (First-In-First-Out) (p. 83).

28 de agosto de2018

Cifrado en el servidor (SSE) para Amazon SQS está disponible en la región AWSGovCloud (EE.UU. Oeste). Para obtener más información sobre el cifrado del ladodel servidor y cómo comenzar a utilizarlo, consulte Cifrado en reposo (p. 149).

27 de septiembrede 2018

Las colas de FIFO (First-In-First-Out) están disponibles en las regiones AsiaPacífico (Sídney) y Asia Pacífico (Tokio). Para obtener más información sobre elfuncionamiento de las colas FIFO y cómo empezar a utilizarlas, consulte AmazonSQS Colas FIFO (First-In-First-Out) (p. 83).

28 de junio de2018

Puede configurar mensajes entrantes para activar una función de Lambda. Paraobtener más información, consulte Configuración de mensajes que llegan a unacola de Amazon SQS para activar una función de Lambda (p. 53).

Note

• La cola y la función Lambda deben estar en la misma región de AWS.• Solo se puede asociar una cola a una o varias funciones de Lambda.• No se puede asociar una cola cifrada (p. 149) que utiliza una clave

maestra del cliente administrada por AWS para Amazon SQS con unafunción Lambda de otra cuenta de AWS.

24 de mayo de2018

Cifrado en el servidor (SSE) para Amazon SQS está disponible en todas lasregiones comerciales en las que puede utilizarse Amazon SQS, excepto enRegiones de China. Para obtener más información sobre el cifrado del lado delservidor y cómo comenzar a utilizarlo, consulte Cifrado en reposo (p. 149).

20 de marzo de2018

Amazon CloudWatch Events puede usar colas FIFO de Amazon SQS comodestinos Para obtener más información, consulte Automatización de lasnotificaciones de los servicios de AWS para Amazon SQS mediante Eventos deCloudWatch (p. 147).

23 de enero de2018

Las notificaciones de eventos de Amazon S3 son compatibles con la Amazon SQSde SSE. Para obtener más información, consulte la información actualizada de lasección Habilitar la compatibilidad entre servicios de AWS y colas cifradas (p. 155).

2 de enero de2018

Las características siguientes de los servicios de AWS son compatibles con laAmazon SQS de SSE:

• Notificaciones de eventos de Amazon CloudWatch• Suscripciones a temas de Amazon SNS

19 de octubre de2017

Puede realizar un seguimiento de la asignación de costos al añadir, actualizar,quitar y listar etiquetas de metadatos para las colas de Amazon SQS mediantelas acciones TagQueue, UntagQueue y ListQueueTags y la Consola deadministración de AWS. Para obtener más información, consulte Amazon SQSEtiquetas de asignación de costos (p. 95) y el tutorial de Añadir, actualizar y quitaretiquetas de una cola de Amazon SQS (p. 27).

229

Page 235: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Fecha Publicación de la característica

1 de septiembre de2017

Todo el conjunto de acciones de Amazon SQS se muestra en la lista Actions(Acciones) en el cuadro de diálogo Add a Permission to MyQueue (Añadir permisoa MyQueue). Para obtener más información, consulte el tutorial Adición depermisos a una cola de Amazon SQS (p. 24).

14 de junio de2017

Las colas de FIFO (First-In-First-Out) están disponibles en la región US East (N.Virginia). Para obtener más información sobre el funcionamiento de las colas FIFOy cómo empezar a utilizarlas, consulte Amazon SQS Colas FIFO (First-In-First-Out) (p. 83).

8 de junio de 2017 Las colas de FIFO (First-In-First-Out) están disponibles en la región Europa(Irlanda). Para obtener más información sobre el funcionamiento de las colas FIFOy cómo empezar a utilizarlas, consulte Amazon SQS Colas FIFO (First-In-First-Out) (p. 83).

23 de mayo de2017

Cifrado en el servidor (SSE) para Amazon SQS está disponible en la región USEast (N. Virginia). Para obtener más información sobre el cifrado del lado delservidor y cómo comenzar a utilizarlo, consulte Cifrado en reposo (p. 149).

19 de mayo de2017

• Puede utilizar Biblioteca de cliente ampliada para Java de Amazon SQS juntocon Cliente de Amazon SQS Java Message Service (JMS).

• La Biblioteca de mensajería Amazon SQS para Java se ha actualizado a 1.0.3.Para obtener más información, consulte Uso de JMS y Amazon SQS (p. 112).

• Se ha actualizado la sección Uso de JMS y Amazon SQS (p. 112).

1 de mayo de 2017 AWS ha ampliado el programa de cumplimiento de HIPAA para incluir AmazonSQS como un servicio en conformidad con HIPAA

230

Page 236: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Fecha Publicación de la característica

28 de abril de 2017 Cifrado en el servidor (SSE) para Amazon SQS está disponible en las regionesEE.UU. Este (Ohio) y EE.UU. Oeste (Oregón). SSE permite proteger el contenidode los mensajes de las colas Amazon SQS mediante claves administradas en elAWS Key Management Service (AWS KMS). Para obtener más información sobreel cifrado del lado del servidor y cómo comenzar a utilizarlo, consulte Cifrado enreposo (p. 149). Para ver tutoriales, consulte lo siguiente:

• Creación de una cola de Amazon SQS con SSE (p. 19)• Configuración de SSE para una cola de Amazon SQS existente (p. 59)

SSE añade los atributos KmsMasterKeyId yKmsDataKeyReusePeriodSeconds a las acciones CreateQueue,GetQueueAttributes y SetQueueAttributes.

Important

Algunas características de los servicios de AWS que pueden enviarnotificaciones a Amazon SQS mediante la acción AssumeRole de AWSSecurity Token Service son compatibles con SSE, pero funcionan solo concolas estándar:

• Enlaces de ciclo de vida de Auto Scaling• Colas de mensajes fallidos de AWS Lambda

Para obtener información acerca de la compatibilidad de otros servicioscon las colas cifradas; consulte Habilitar la compatibilidad entre serviciosde AWS y colas cifradas (p. 155) y la documentación del serviciocorrespondiente.

24 de abril de 2017 • Las Biblioteca de cliente ampliada para Java de Amazon SQS y Cliente deAmazon SQS Java Message Service (JMS) son compatibles con las colas deFIFO.

• La Biblioteca de mensajería Amazon SQS para Java se ha actualizado a 1.0.2.• Se ha actualizado la sección Uso de JMS y Amazon SQS (p. 112).

28 de marzo de2017

AWS CloudFormation permite crear colas FIFO Se ha añadido el tutorial AWSCloudFormation (p. 18).

231

Page 237: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Fecha Publicación de la característica

17 de noviembrede 2016

Las colas FIFO (First-In-First-Out) o las colas estándar (otro nombre para las colasexistentes) están disponibles en las en las regiones EE.UU. Oeste (Oregón) yEE.UU. Este (Ohio). Para obtener más información sobre el funcionamiento de lascolas FIFO y cómo empezar a utilizarlas, consulte lo siguiente:

• Amazon SQS Colas FIFO (First-In-First-Out) (p. 83)• Pasar de una cola de Estándar a una cola de FIFO (p. 86)• Recomendaciones adicionales para las colas FIFO de Amazon SQS (p. 139)

Para ver tutoriales de Amazon SQS revisados, consulte lo siguiente:

• Creación de una cola de Amazon SQS (p. 15)• Envío de un mensaje a una cola de Amazon SQS (p. 29)• Recepción y eliminación de mensajes de una cola de Amazon SQS (p. 45)

Las colas FIFO añaden la siguiente funcionalidad de la API:

• Los atributos FifoQueue y ContentBasedDeduplication para las accionesCreateQueue, GetQueueAttributes y SetQueueAttributes.

• Los parámetros de solicitud MessageDeduplicationId y MessageGroupIdpara las acciones SendMessage y SendMessageBatch y atributos para laacción ReceiveMessage.

• El parámetro de solicitud ReceiveRequestAttemptId para la acciónReceiveMessage.

• El parámetro de respuesta SequenceNumber para las acciones SendMessagey SendMessageBatch y el atributo SequenceNumber para la acciónReceiveMessage.

Important

A partir del 17 de noviembre de 2016, Amazon SQS ya no publica unWSDL.En la actualidad, Cliente asincrónico en búfer de Amazon SQS no admitecolas FIFO.Puede que algunos servicios externos o de AWS que envían notificacionesa Amazon SQS no sean compatibles con las colas FIFO, a pesar de quepermiten establecer una cola FIFO como destino.Las características siguientes de los servicios AWS no son compatiblescon colas FIFO:

• Notificaciones de eventos de Amazon S3• Enlaces de ciclo de vida de Auto Scaling• Acciones de reglas de AWS IoT• Colas de mensajes fallidos de AWS Lambda

Para obtener información acerca de la compatibilidad de otros servicioscon colas FIFO, consulta la documentación del servicio correspondiente.Las colas FIFO no admiten temporizadores en mensajes individuales.

232

Page 238: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

Fecha Publicación de la característica

31 de agosto de2016

La métrica CloudWatch de ApproximateAgeOfOldestMessage le permiteencontrar la antigüedad aproximada del mensaje no eliminado más antiguo de lacola. Para obtener más información, consulte Métricas de CloudWatch disponiblespara Amazon SQS (p. 196).

12 de febrero de2016

Puede ver métricas de CloudWatch desde la consola de Amazon SQS para unmáximo de diez colas a la vez. Para obtener más información, consulte Monitoreode colas de Amazon SQS con CloudWatch (p. 193).

27 de octubre de2015

Biblioteca de cliente ampliada para Java de Amazon SQS permite administrarlos mensajes de Amazon SQS con Amazon S3. Para obtener más información,consulte Administración de mensajes grandes de Amazon SQS mediante AmazonS3 (p. 109) en la Guía para desarrolladores de Amazon Simple Queue Service.

29 de diciembre de2014

Amazon SQS le permite utilizar JMS (Java Message Service) con colas de AmazonSQS. Para obtener más información, consulte Uso de JMS y Amazon SQS (p. 112)en la Guía para desarrolladores de Amazon Simple Queue Service.

8 de diciembre de2014

Amazon SQS le permite eliminar los mensajes de una cola mediante la acción dela API de PurgeQueue. Para obtener más información, consulte PurgeQueue en laAmazon Simple Queue Service API Reference.

16 de julio de 2014 Amazon SQS le permite registrar acciones de la mediante AWS CloudTrail. Paraobtener más información, consulte Registro de llamadas a la API de Amazon SQSmediante AWS CloudTrail (p. 189).

6 de mayo de 2014 Amazon SQS admite atributos de mensajes. Para obtener más información,consulte Atributos de mensajes de Amazon SQS (p. 92).

29 de enero de2014

Amazon SQS añade compatibilidad para las colas de mensajes fallidos. Paraobtener más información, consulte Colas de mensajes fallidos de AmazonSQS (p. 98).

21 de noviembrede 2012

Puede suscribir una cola de Amazon SQS a un tema de Amazon SNS utilizando laconsola de Amazon SQS. Para obtener más información, consulte Suscripción deuna cola de Amazon SQS a un tema de Amazon SNS (p. 50).

5 de noviembre de2012

La versión de la API 2012-11-05 de Amazon SQS añade compatibilidad conSignature Version 4, que proporciona mayor seguridad y desempeño. Para obtenermás información acerca de Signature Version 4, consulte Proceso básico deautenticación con HMAC-SHA (p. 207).

5 de noviembre de2012

El AWS SDK for Java incluye un cliente asíncrono en búfer,AmazonSQSBufferedAsyncClient, para el acceso a Amazon SQS. Este clientefacilita el agrupamiento en lotes de solicitudes al permitir el almacenamientoen búfer del lado del cliente, donde las llamadas realizadas desde el cliente sealmacenan en búfer primero y después se envían como una solicitud por lotes aAmazon SQS. Para obtener más información sobre el almacenamiento en búferdel lado del cliente y el agrupamiento en lotes de solicitudes, consulte Habilitacióndel almacenamiento en búfer del lado del cliente y del agrupamiento en lotes desolicitudes (p. 212).

233

Page 239: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Publicación de la característica

5 de noviembre de2012

La versión de la API Amazon SQS de 2012-11-05 añade compatibilidad con elsondeo largo. El sondeo largo permite que Amazon SQS espere durante unacantidad de tiempo especificada hasta que haya un mensaje disponible en lugarde enviar una respuesta si no hay ningún mensaje disponible. Para obtener másinformación acerca del sondeo largo, consulte Sondeos cortos y largos de AmazonSQS (p. 96).

Amazon SQS Historial de revisiónEn la siguiente tabla se muestran los cambios realizados en la Guía para desarrolladores de AmazonSimple Queue Service. Para conocer las versiones y mejoras de las características de Amazon SQS,consulte Amazon SQS Notas de la versión (p. 227).

Fecha Actualización de documentación

11 de febrero de2020

• Se ha reescrito la sección Cómo evitar el procesamiento incoherente de losmensajes (p. 138).

• Se revisó el siguiente fragmento en distintos lugares de esta guía: En la mayoríade colas estándar (en función del tráfico de la cola y las tareas pendientes delmensaje) puede haber un máximo de 120 000 mensajes en tránsito (recibido deuna cola por un consumidor, pero todavía no eliminado de la cola). Si alcanzaesta cuota, Amazon SQS devuelve el mensaje de error OverLimit. Para evitarllegar a la cuota, conviene eliminar los mensajes de la cola una vez procesados.También puede aumentar el número de las colas que usa para procesar losmensajes. Para solicitar un aumento de la cuota, envíe una solicitud de soportetécnico.

31 de enero de2020

Se ha revisado la información de la sección Funcionamiento de las colas demensajes fallidos (p. 98).

27 de enero de2020

Se ha revisado la siguiente instrucción en distintos lugares de esta guía: En laactualidad, Amazon SQS únicamente admite un subconjunto limitado de claves decondiciones disponibles en IAM:

• aws:CurrentTime

• aws:EpochTime

• aws:SecureTransport

• aws:SourceArn

Note

This condition ensures that AWS services grant access only on behalf ofresources that your AWS account owns. You can't specify the ARN of anIAM role as source ARN, because an IAM role is neither a source nor aservice.

• aws:SourceIP

• aws:UserAgent

• aws:MultiFactorAuthAge

• aws:MultiFactorAuthPresent

• aws:PrincipalOrgID

• aws:RequestTag

234

Page 240: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación• aws:sourceVpce

• aws:TagKeys

• aws:TokenAge

20 de enero de2020

• Se ha aclarado la siguiente afirmación en distintos lugares de esta guía: Lascolas con retraso le permiten posponer la entrega de nuevos mensajes auna cola durante una serie de segundos, por ejemplo, cuando la aplicaciónconsumidora necesita tiempo adicional para procesar mensajes. Si crea una colacon retraso, cualquier mensaje que envíe a dicha cola permanecerá invisiblepara los consumidores mientras dure el período de retraso. El tiempo de retraso(mínimo) predeterminado de una cola es de 0 segundos. El tiempo máximo es de15 minutos.

• Se ha aclarado la información de las siguientes secciones:• Colas distribuidas (p. 77)• Evite tener una gran cantidad de tareas pendientes de mensajes con el mismo

ID de grupo de mensajes (p. 141)

14 de enero de2020

• Se ha aclarado la información de las secciones Uso deAmazonSQSBufferedAsyncClient (p. 212) y Colas virtuales (p. 105).

• Se ha añadido la sección Evite reutilizar el mismo ID de grupo de mensajes concolas virtuales (p. 142).

6 de enero de2020

Se ha aclarado la información de la sección Sondeos cortos y largos de AmazonSQS (p. 96).

3 de enero de2020

Se ha añadido la siguiente instrucción a varias secciones de esta guía: El tiempomáximo de espera de sondeo largo es de 20 segundos.

18 de diciembre de2019

• Se han añadido las siguientes secciones:• Protección de datos en Amazon SQS (p. 149)• Cifrado de datos (p. 149)• Registro y monitorización en Amazon SQS (p. 188)• Validación de la conformidad para Amazon SQS (p. 201)• Resiliencia en Amazon SQS (p. 201)• Seguridad de la infraestructura en Amazon SQS (p. 202)• Prácticas recomendadas de seguridad de Amazon SQS (p. 202)

• Se han actualizado las siguientes secciones:• Cifrado en reposo (p. 149)• Administración de claves (p. 152)• Privacidad del tráfico entre redes (p. 156)• Identity and Access Management en Amazon SQS (p. 158)• Información general sobre la administración de acceso (p. 160)• Uso de políticas basadas en identidad con Amazon SQS (p. 166)• Automatización y solución de problemas de Amazon SQS (p. 147)

9 de diciembre de2019

Se ha cambiado el nombre de la sección Cuotas de Amazon SQS (p. 143).

27 de noviembrede 2019

Se han corregido los requisitos previos detallados en la sección Configuraciónde mensajes que llegan a una cola de Amazon SQS para activar una función deLambda (p. 53).

235

Page 241: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

25 de noviembrede 2019

Se ha revisado la información de las siguientes secciones:

• Nombre y URL de cola (p. 90)• Métricas de CloudWatch disponibles para Amazon SQS (p. 196)

8 de noviembre de2019

Se ha revisado la información de las siguientes secciones:

• Habilitar la compatibilidad entre servicios de AWS y colas cifradas (p. 155)• Métricas de Amazon SQS (p. 196) (ApproximateAgeOfOldestMessage)

7 de noviembre de2019

Se añadió el siguiente fragmento en distintos lugares de esta guía:

Important

• Puede utilizar Amazon Virtual Private Cloud solo con los puntos deenlace HTTPS de Amazon SQS.

• Cuando configure Amazon SQS para enviar mensajes desde AmazonVPC, debe habilitar un DNS privado y especificar los puntos de enlacecon el formato sqs.us-east-2.amazonaws.com.

• Los DNS privados no admiten los puntos de enlace heredados, comoqueue.amazonaws.com o us-east-2.queue.amazonaws.com.

29 de octubre de2019

• Se ha revisado la información de la sección Información de Amazon SQS enCloudTrail (p. 189).

• Se ha revisado la siguiente instrucción en distintos lugares de esta guía:Las colas Estándar admiten un número casi ilimitado de transacciones porsegundo (TPS) para cada acción de la API (SendMessage, ReceiveMessage oDeleteMessage).

24 de octubre de2019

Se ha revisado la información de las siguientes secciones:

• Permitir que un usuario envíe mensajes únicos o por lotes a una cola conSSE (p. 154)

• Permitir que un usuario reciba mensajes de una cola con SSE (p. 155)

16 de octubre de2019

Se ha reescrito la sección Habilitar la compatibilidad entre servicios de AWS y colascifradas (p. 155).

10 de octubre de2019

• Se ha añadido la siguiente instrucción a la sección Amazon SQS Colas FIFO(First-In-First-Out) (p. 83): Amazon SNS no es compatible actualmente con colasFIFO.

• Se ha añadido la siguiente instrucción a varias secciones de esta guía: No existeninguna cuota para el número de grupos de mensaje dentro de una cola FIFO.

7 de octubre de2019

• Se ha revisado la información de la sección Cuotas relacionadas con losmensajes (p. 144).

• Se ha corregido el ejemplo JSON de la sección Creación de una política depuntos de enlace de la Amazon VPC para Amazon SQS (p. 157).

236

Page 242: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

3 de octubre de2019

• Se ha revisado la información de la sección Ejemplos básicos de políticas de IAMpara Amazon SQS (p. 169).

• Criterios de informes documentados en la sección Métricas de AmazonSQS (p. 196).

• Se ha reescrito la descripción de la métricaApproximateAgeOfOldestMessage de la sección Métricas de AmazonSQS (p. 196).

1 de octubre de2019

Se ha revisado la información de la sección Políticas basadas en identidades(políticas de IAM y políticas de Amazon SQS) (p. 162).

24 de septiembrede 2019

Se ha añadido la siguiente instrucción Configuración de los permisos de AWSKMS (p. 154) a la sección: Por cada clave de datos que genera AWS KMS, SSEllama a la acción Decrypt para verificar la integridad de la clave de datos antes deutilizarla.

18 de septiembrede 2019

• Se ha creado la sección Evite tener una gran cantidad de tareas pendientes demensajes con el mismo ID de grupo de mensajes (p. 141).

• Se ha añadido una cuota de ID de grupo de mensajes a la sección Cuotasrelacionadas con los mensajes (p. 144).

16 de septiembrede 2019

Se ha revisado la información de las siguientes secciones:

• Uso de las API de Amazon SQS (p. 205)• Consumo de mensajes mediante sondeo corto (p. 96)• Solución de problemas: NumberOfMessagesSent y

NumberOfMessagesReceived para una cola de mensajes fallidos nocoinciden (p. 101)

• Cree un punto de enlace de Amazon VPC para Amazon SQS. (p. 44)• Ejemplo funcional de Java sobre el uso de JMS con colas Estándar de Amazon

SQS (p. 120)

10 de septiembrede 2019

Se ha revisado la siguiente instrucción en distintos lugares de esta guía: El tiempode retraso (mínimo) predeterminado de un mensaje es de 0 segundos. El tiempomáximo es de 15 minutos.

29 de agosto de2019

Se ha revisado la información de la sección Compatibilidad (p. 87).

28 de agosto de2019

• Se ha cambiado el nombre de la sección Automatización y solución deproblemas de Amazon SQS (p. 147).

• Se han añadido las siguientes secciones:• Solución de problemas de colas de Amazon Simple Queue Service con AWS

X-Ray (p. 147)• Metadatos de mensajes (p. 91)• Atributos del sistema de mensajes de Amazon SQS (p. 94)

20 de agosto de2019

Se ha revisado la información de las siguientes secciones:

• Métricas de Amazon SQS (p. 196)• Políticas basadas en identidades (políticas de IAM y políticas de Amazon

SQS) (p. 162)

237

Page 243: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

9 de agosto de2019

Se ha revisado la información de las siguientes secciones:

• Funcionamiento de las colas de mensajes fallidos (p. 98)• Nombre y URL de cola (p. 90)

7 de agosto de2019

Se ha añadido la siguiente instrucción a la sección Cuotas relacionadas con lascolas (p. 143): El número de mensajes que puede almacenar una cola de AmazonSQS es ilimitado.

6 de agosto de2019

Se ha revisado la información de las siguientes secciones:

• Tipos de datos de atributos de mensajes (p. 93)• Sondeos cortos y largos de Amazon SQS (p. 96)• Diferencias entre el sondeo corto y el sondeo largo (p. 98)

31 de julio de 2019 Se ha revisado la información de las siguientes secciones:

• Uso de políticas basadas en identidad con Amazon SQS (p. 166)• Ejemplos básicos de políticas de IAM para Amazon SQS (p. 169)• Ejemplos básicos de políticas de Amazon SQS (p. 170)• Especificación de las condiciones de una política (p. 165)

30 de julio de 2019 Se ha revisado la información de las siguientes secciones:

• Adición de permisos a una cola de Amazon SQS (p. 24)• Amazon SQS Conceptos clave de Access Policy Language (p. 176)• Para codificar un único atributo de mensaje de Amazon SQS (p. 94)• Introducción a Amazon SQS (p. 7)

29 de julio de 2019 • Se ha revisado la información de las siguientes secciones:• Implementación de sistemas de solicitud-respuesta (p. 138)• Patrón de mensajes de respuesta a solicitudes (colas virtuales) (p. 106)

• Se ha añadido la sección Uso de tiempos de espera de visibilidad (p. 141).

26 de julio de 2019 Se ha corregido lo siguiente en distintos lugares de esta guía: De formapredeterminada, con el procesamiento por lotes (p. 211), las colas FIFO admitenhasta 3000 mensajes por segundo (TPS), por acción de API (SendMessage,ReceiveMessage o DeleteMessage). Para solicitar un aumento de la cuota,envíe una solicitud de soporte técnico.

15 de julio de 2019 Se ha añadido la sección Colas temporales de Amazon SQS (p. 104).

11 de julio de 2019 Se ha revisado la información de las siguientes secciones:

• Amazon SQS Colas Estándar (p. 80)• Amazon SQS Colas FIFO (First-In-First-Out) (p. 83)

22 de junio de2019

Se ha solucionado un enlace que no funciona en la sección ¿Cómo puedocomenzar a utilizar Amazon SQS? (p. 3).

238

Page 244: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

30 de mayo de2019

Se ha revisado la información de las siguientes secciones:

• Relaciones entre las denegaciones explícitas y predeterminadas del AccessPolicy Language de Amazon SQS (p. 180)

• Cifrado en reposo (p. 149)

15 de mayo de2019

Se ha revisado la información de las siguientes secciones:

• Configuración de SSE para una cola de Amazon SQS existente (p. 59)• Para configurar una cola con retraso y enviar, recibir y eliminar mensajes (p. 75)• Métricas de Amazon SQS (p. 196)

14 de mayo de2019

Se ha revisado la información de las siguientes secciones:

• Configuración de mensajes que llegan a una cola de Amazon SQS para activaruna función de Lambda (p. 53)

• Arquitectura de control de acceso de Amazon SQS (p. 175)

4 de abril de 2019 Se ha añadido la sección Creación de una política de puntos de enlace de laAmazon VPC para Amazon SQS (p. 157).

26 de marzo de2019

Se ha revisado la información de las siguientes secciones:

• Cuotas relacionadas con las colas (p. 143)• Cuotas relacionadas con las políticas (p. 145)

15 de marzo de2019

Se ha revisado la información de la sección Términos clave (p. 151).

14 de marzo de2019

• Se ha añadido la sección Denegar el acceso si no es desde un punto de enlacede la VPC (p. 184).

• Se ha actualizado el contenido de las siguientes secciones:• Introducción a Amazon SQS (p. 7)• Envío de mensajes a una cola de Amazon SQS desde Amazon Virtual Private

Cloud (p. 41)

22 de enero de2019

• Se ha añadido la siguiente instrucción Configuración de mensajes que llegana una cola de Amazon SQS para activar una función de Lambda (p. 53) a lasección: Si asocia una cola cifrada a una función de Lambda, pero Lambda nosondea los mensajes, añada el permiso kms:Decrypt al rol de Lambda.

• Se ha aclarado la información de la sección Requisitos previos (p. 53).

21 de enero de2019

Se han corregido los ejemplos de código Java de la sección Creación de una colade Amazon SQS con SSE (p. 19).

18 de enero de2019

• Se ha clarificado la siguiente frase en distintos lugares de esta guía: Sinprocesamiento por lotes, las colas FIFO admiten hasta 300 mensajespor segundo, por acción de API (SendMessage, ReceiveMessage oDeleteMessage).

• Se ha corregido la información de las siguientes secciones:• Creación de alarmas de CloudWatch para métricas de Amazon SQS (p. 195)• Configuración de mensajes que llegan a una cola de Amazon SQS para activar

una función de Lambda (p. 53)

239

Page 245: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

13 de diciembre de2018

Se han añadido las siguientes secciones:

• Puntos de enlace de Amazon Virtual Private Cloud para Amazon SQS (p. 157)• Envío de mensajes a una cola de Amazon SQS desde Amazon Virtual Private

Cloud (p. 41)

3 de diciembre de2018

Se ha corregido la solicitud POST de ejemplo en la sección Realizar una solicitudPOST (p. 206).

3 de octubre de2018

Se ha corregido la dirección IP de ejemplo de la sección Conceder permiso asolicitudes procedentes de instancias Amazon EC2 (p. 183).

25 de septiembrede 2018

Se ha corregido la información de las siguientes secciones:

• SetQueueAttributes (p. 192)• Recepción y eliminación de mensajes de una cola de Amazon SQS (p. 45)

4 de septiembre de2018

• Se ha corregido la información de las siguientes secciones:• Habilitar la compatibilidad entre servicios de AWS y colas cifradas (p. 155)• Funcionamiento de las colas de mensajes fallidos (p. 98)

• Se ha aclarado el preámbulo de la sección Suscripción de una cola de AmazonSQS a un tema de Amazon SNS (p. 50).

• Además se ha revisado la siguiente instrucción en relación con el tiempo deespera de visibilidad (p. 101) en distintos lugares de esta guía: El tiempo deespera de visibilidad predeterminado de un mensaje es de 30 segundos. Laduración mínima es de 0 segundos. El valor máximo es 12 horas.

• Se ha reescrito la sección Mensajes en tránsito (p. 102).

28 de agosto de2018

Se ha actualizado la sección Cifrado en reposo (p. 149).

27 de agosto de2018

Se ha corregido la información de la sección Referencia de acciones yrecursos (p. 186).

22 de agosto de2018

Se ha reescrito la sección Registro de llamadas a la API de Amazon SQS medianteAWS CloudTrail (p. 189).

21 de agosto de2018

Se ha revisado la tabla de atributos de la sección Recursos necesarios paraprocesar mensajes de Amazon SQS (p. 95).

20 de agosto de2018

Se ha añadido la siguiente nota a la sección Colas de mensajes fallidos deAmazon SQS (p. 98) y Configuración de una cola de mensajes fallidos de AmazonSQS (p. 65): Al designar una cola como cola de origen, no se crea ninguna cola demensajes fallidos de forma automática. Primero deberá crear una cola estándar oFIFO antes de designarla como cola de mensajes fallidos.

15 de agosto de2018

Se ha añadido la nota siguiente en la sección Sondeos cortos y largos deAmazon SQS (p. 96): Puede confirmar que una cola está vacía al realizar unsondeo largo y las métricas ApproximateNumberOfMessagesDelayed,ApproximateNumberOfMessagesNotVisible yApproximateNumberOfMessagesVisible son igual a 0 al menos 1 minutodespués de que los productores dejen de enviar mensajes (cuando los metadatosde la cola alcanzan la consistencia final). Para obtener más información, consulteMétricas de CloudWatch disponibles para Amazon SQS (p. 196).

240

Page 246: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

7 de agosto de2018

Se ha aclarado la información de la sección Mensajes en tránsito (p. 102).

25 de julio de 2018 • Se ha reescrito la sección Creación de alarmas de CloudWatch para métricas deAmazon SQS (p. 195) y se han eliminado las capturas de pantalla obsoletas.

• Se ha cambiado el nombre de la sección Acceso a las métricas de CloudWatchpara Amazon SQS (p. 193).

6 de julio de 2018 Se han revisado las siguientes instrucciones en distintos lugares de esta guía:

• Tiempo de espera de visibilidad (p. 101): El tiempo de espera de visibilidadpredeterminado de un mensaje es de 30 segundos. La duración mínima es de 0segundos. El valor máximo es 12 horas.

• Temporizadores de mensajes (p. 108): El tiempo de retraso (mínimo)predeterminado de un mensaje es de 0 segundos. El tiempo máximo es de 15minutos.

• Colas con retraso (p. 104): El tiempo de retraso (mínimo) predeterminado de unacola es de 0 segundos. El tiempo máximo es de 15 minutos.

5 de julio de 2018 Se ha añadido la nota siguiente en relación con la métricaApproximateAgeOfOldestMessage a la sección Métricas de CloudWatchdisponibles para Amazon SQS (p. 196): para colas de mensajes fallidos (p. 98),el valor de ApproximateAgeOfOldestMessage es el tiempo más largo que unmensaje ha estado en la cola.

3 de julio de 2018 • Se han corregido los enlaces para enviar solicitudes de soporte a lo largo de estaguía.

• Se han corregido algunos errores menores en la sección Tutoriales de AmazonSQS (p. 15).

28 de junio de2018

Se ha creado el tutorial Configuración de mensajes que llegan a una cola deAmazon SQS para activar una función de Lambda (p. 53).

26 de junio de2018

Se ha corregido la información de la sección Funcionamiento de las colas demensajes fallidos (p. 98).

11 de junio de2018

• Se ha añadido la siguiente información a la sección Cuotas relacionadas con losmensajes (p. 144): una puede tener un máximo de 80 caracteres. Se aceptan lossiguientes caracteres: caracteres alfanuméricos, guiones (-) y guiones bajos (_).de ID de mensaje por lotes

• Se ha aclarado y corregido la información de la sección Uso deAmazonSQSBufferedAsyncClient (p. 212).

5 de junio de 2018 Además de GitHub, HTML, PDF y Kindle, las notas de la versión de la Guía paradesarrolladores de Amazon Simple Queue Service están disponibles como unafuente RSS.

241

Page 247: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

29 de mayo de2018

• Se ha mejorado el ejemplo de Java en las siguientes secciones:• SQSExtendedClientExample.java (p. 110)• SimpleProducerConsumer.java (p. 218)

24 de mayo de2018

Se ha actualizado la sección Cifrado en reposo (p. 149).

22 de mayo de2018

• Se ha corregido la información en todas las secciones de dependencia de Java.• Se ha revisado la siguiente instrucción: En la mayoría de colas estándar (en

función del tráfico de la cola y las tareas pendientes del mensaje) puedehaber un máximo de 120 000 mensajes en tránsito (recibido de una cola porun consumidor, pero todavía no eliminado de la cola). Si alcanza esta cuota,Amazon SQS devuelve el mensaje de error OverLimit. Para evitar llegar a lacuota, conviene eliminar los mensajes de la cola una vez procesados. Tambiénpuede aumentar el número de las colas que usa para procesar los mensajes.Para solicitar un aumento de la cuota, envíe una solicitud de soporte técnico.

15 de mayo de2018

Se ha aclarado la información de la sección Procesamiento de los mensajes atiempo (p. 136).

10 de mayo de2018

• Se ha creado el tutorial Envío de un mensaje con un temporizador a una cola deAmazon SQS (p. 38).

• Se ha creado la sección Para enviar un mensaje con un temporizador a unacola (p. 41) con código Java de ejemplo.

• Tutoriales relacionados agrupados en secciones:• Creación de colas de Amazon SQS (p. 15)• Envío de mensajes a colas de Amazon SQS (p. 28)• Configuración de colas de Amazon SQS (p. 59)

9 de mayo de 2018 Se ha reescrito la sección Temporizadores de mensajes de Amazon SQS (p. 108).

8 de mayo de 2018 • Se ha reescrito la sección Amazon SQS Colas con retraso (p. 104).• Se ha creado el tutorial Configuración de una cola con retraso de Amazon

SQS (p. 73).• Se han creado las siguientes secciones con código Java de ejemplo:

• Para configurar una cola con retraso (p. 74)• Para configurar una cola con retraso y enviar, recibir y eliminar

mensajes (p. 75)

3 de mayo de 2018 • Se han creado las siguientes secciones con código Java de ejemplo:• Para configurar el tiempo de espera de visibilidad de una cola (p. 70)• Para configurar el tiempo de espera de visibilidad de un único mensaje o

varios mensajes y enviar, recibir y eliminar mensajes (p. 72)• Se ha mejorado el código Java de ejemplo en las siguientes secciones:

• SQSSimpleJavaClientExample.java (p. 81)• SQSFIFOJavaClientExample.java (p. 87)• SQSLongPollingExample.java (p. 64)• SQSDeadLetterQueueExample.java (p. 67)

242

Page 248: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

2 de mayo de 2018 • Se ha corregido y aclarado la información de la sección Amazon SQS Tiempo deespera de visibilidad (p. 101).

• Se ha creado el tutorial Configuración del tiempo de espera de visibilidad de unacola de Amazon SQS (p. 69).

1 de mayo de 2018 Se ha corregido y aclarado la información de la sección Cuotas relacionadas conlas colas (p. 143).

25 de abril de 2018 • Se ha corregido y aclarado la información de las siguientes secciones:• Configuración de sondeos largos para una cola de Amazon SQS (p. 62)• Identificadores de colas Estándar y FIFO de Amazon SQS (p. 90)• Introducción a Amazon SQS (p. 7)

• Se ha añadido la nota siguiente en distintos lugares de esta guía:

Los permisos entre cuentas no se aplican a las acciones siguientes:• AddPermission

• CreateQueue

• DeleteQueue

• ListQueues

• ListQueueTags

• RemovePermission

• SetQueueAttributes

• TagQueue

• UntagQueue

• Se ha corregido un pequeño error en el ejemplo de Java en la secciónSQSLongPollingExample.java (p. 64).

24 de abril de 2018 • Se ha reescrito la sección Sondeos cortos y largos de Amazon SQS (p. 96).• Se ha creado el tutorial Configuración de sondeos largos para una cola de

Amazon SQS (p. 62).• Se ha creado la sección Configuración del sondeo largo (p. 137).

23 de abril de 2018 Se ha reescrito la sección Procesamiento de los mensajes a tiempo (p. 136).

11 de abril de 2018 • Se ha eliminado la información obsoleta de las siguientes secciones y se hanañadido referencias cruzadas a los tutoriales relacionados:• Amazon SQS Colas Estándar (p. 80)• Amazon SQS Colas FIFO (First-In-First-Out) (p. 83)• Colas de mensajes fallidos de Amazon SQS (p. 98)• Amazon SQS Etiquetas de asignación de costos (p. 95)• Cifrado en reposo (p. 149)

• Se han reestructurado las siguientes secciones:• Administración de mensajes grandes de Amazon SQS mediante Amazon

S3 (p. 109)• Realizar solicitudes de la API de consulta (p. 205)• Amazon SQS Acciones de procesamiento por lotes (p. 211)

243

Page 249: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

10 de abril de 2018 • Se ha creado la sección Para configurar una cola de mensajes fallidos (p. 67)con código Java de ejemplo.

• Se han reestructurado las siguientes secciones:• Amazon SQS Colas FIFO (First-In-First-Out) (p. 83)• Uso de los mensajes de Amazon SQS (p. 136)• Reducción de costos de Amazon SQS (p. 138)• Recomendaciones adicionales para las colas FIFO de Amazon SQS (p. 139)

• Se han reescrito las secciones siguientes:• Ordenación de los mensajes (p. 84)• Para configurar una cola de mensajes fallidos y enviar, recibir y eliminar un

mensaje (p. 69)

9 de abril de 2018 • Se han reescrito las secciones siguientes:• Diferencias entre el sondeo corto y el sondeo largo (p. 98)• Amazon SQS Colas con retraso (p. 104)

• Se han trasladado los ejemplos de la API de consulta de los siguientesconceptos a la Amazon Simple Queue Service API Reference• Colas de mensajes fallidos de Amazon SQS (p. 98)• Sondeos cortos y largos de Amazon SQS (p. 96)• Amazon SQS Colas con retraso (p. 104)• Temporizadores de mensajes de Amazon SQS (p. 108)

6 de abril de 2018 • Se han reescrito las secciones siguientes:• Lógica de evaluación del Access Policy Language de Amazon SQS (p. 178)• Relaciones entre las denegaciones explícitas y predeterminadas del Access

Policy Language de Amazon SQS (p. 180)• Uso de credenciales de seguridad temporales con Amazon SQS (p. 185)

• Se han reestructurado las siguientes secciones:• Uso de políticas basadas en identidad con Amazon SQS (p. 166)• Uso de políticas personalizadas con el Access Policy Language de Amazon

SQS (p. 174)

5 de abril de 2018 • Se ha añadido ejemplos de Java (p. 36) al tutorial Envío de un mensaje conatributos a una cola de Amazon SQS (p. 32).

• Se ha reescrito la sección Cálculo del resumen del mensaje MD5 para atributosde mensajes (p. 93).

• Se han corregido las instrucciones del ejemplo de Java (p. 28) en el tutorialAñadir, actualizar y quitar etiquetas de una cola de Amazon SQS (p. 27).

4 de abril de 2018 • Se ha creado el tutorial Envío de un mensaje con atributos a una cola de AmazonSQS (p. 32).

• Se han reescrito las secciones siguientes:• Componentes de atributos de mensajes (p. 92)• Tipos de datos de atributos de mensajes (p. 93)• Pasos siguientes (p. 13) (Introducción)

29 de marzo de2018

Se ha añadido la siguiente nota a la sección Cálculo del resumen del mensaje MD5para atributos de mensajes (p. 93): Incluya siempre los sufijos de los tipos de datospersonalizados en el cálculo del resumen del mensaje MD5.

244

Page 250: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

27 de marzo de2018

• Se ha creado la sección ¿Cómo puedo comenzar a utilizar Amazon SQS? (p. 3).• Se ha reescrito y trasladado la sección Ciclo de vida del mensaje (p. 78).• Se han reestructurado las siguientes secciones para mejorar la legibilidad:

• Prácticas recomendadas para Amazon SQS (p. 136)• Funcionamiento de Amazon SQS (p. 77)

26 de marzo de2018

• Se añadió Implementación de sistemas de solicitud-respuesta (p. 138) a lasección Prácticas recomendadas para Amazon SQS (p. 136).

• Se ha reescrito la sección ¿Cuáles son los principales beneficios deAmazon SQS? (p. 1) para incluir información sobre características lanzadasrecientemente.

• Se ha distribuido el contenido de la sección Requisitos previos de Amazon SQSen secciones existentes y se ha quitado la sección.• Se han añadido notas explicativas a la sección Eliminación de una cola de

Amazon SQS (p. 57).• Se ha aclarado la instrucción a la sección Administración de mensajes grandes

de Amazon SQS mediante Amazon S3 (p. 109).

23 de marzo de2018

• Se ha reestructurado y reescrito la sección ¿Qué es Amazon Simple QueueService? (p. 1).

• Se ha añadido la sección ¿En qué se diferencia Amazon SQS de Amazon MQ oAmazon SNS? (p. 2).

• Se ha trasladado la sección Arquitectura básica de Amazon SQS (p. 77).

22 de marzo de2018

• Se ha cambiado el nombre de la sección Automatización y solución deproblemas de Amazon SQS (p. 147).

• Se ha creado la sección Automatización de las notificaciones de los servicios deAWS para Amazon SQS mediante Eventos de CloudWatch (p. 147).

• Se han aclarado los títulos de los ejemplos en la sección Configuración de lospermisos de AWS KMS (p. 154).

245

Page 251: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

20 de marzo de2018

• Se han aclarado la siguiente instrucción en distintos lugares de esta guía: Unmensaje de Amazon SQS tiene tres estados básicos:1. Enviado a una cola por un productor.2. Recibido de la cola por un consumidor.3. Eliminado de la cola.

Un mensaje se considera almacenado después de ser enviado a una cola porun productor, pero todavía no recibido de la cola por un consumidor (es decir,entre los estados 1 y 2). No existe ninguna cuota para el número de mensajesalmacenados. Un mensaje se considera en tránsito después de ser recibidode una cola por un consumidor, pero todavía no eliminado de la cola (es decir,entre los estados 2 y 3). No existe ninguna cuota para el número de mensajes entránsito.

• Se han quitado las capturas de pantalla innecesarias y se ha mejorado laexplicación de diagramas en las secciones Tutoriales de Amazon SQS (p. 15),Funcionamiento de Amazon SQS (p. 77) y Seguridad en Amazon SQS (p. 149).

• Se ha añadido un preámbulo a la sección Amazon SQS Identificadores de colasy mensajes (p. 90) y se ha aclarado a qué tipos de colas corresponden losdiferentes identificadores de Amazon SQS.

• Se ha modificado y aclarado la información y se ha corregido el resaltadode sintaxis de las secciones Registro de llamadas a la API de Amazon SQSmediante AWS CloudTrail (p. 189) y Seguridad en Amazon SQS (p. 149).

19 de marzo de2018

Se ha aclarado en las secciones Cuotas relacionadas con las políticas (p. 145)y Adición de permisos a una cola de Amazon SQS (p. 24) que una política deAmazon SQS puede tener un máximo de siete acciones.

14 de marzo de2018

• Se han actualizado y optimizado las capturas de pantalla en distintos lugares deesta guía para facilitar su uso.

• Se ha mejorado la navegación en todos los tutoriales.

13 de marzo de2018

Se ha aclarado el desempeño por lotes y sin lotes de las colas FIFO en distintoslugares de esta guía.

2 de marzo de2018

• Se añadieron los permisos sqs:ListQueueTags, sqs:TagQueue ysqs:UntagQueue a la sección Referencia de acciones y recursos (p. 186).

• Se han aclarado los permisos para las siguientes acciones de la API:• ChangeMessageVisibilityBatch (sqs:ChangeMessageVisibility)• DeleteMessageBatch (sqs:DeleteMessage)• SendMessageBatch (sqs:SendMessage)

28 de febrero de2018

Se ha corregido la visualización de imagen en GitHub.

27 de febrero de2018

Además de HTML, PDF y Kindle, la Guía para desarrolladores de Amazon SimpleQueue Service está disponible en GitHub. Para dejar comentarios, haga clic en elicono GitHub en la esquina superior derecha.

246

Page 252: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

26 de febrero de2018

• Las regiones son coherentes en todos los ejemplos.• Se han optimizado los enlaces a la consola de AWS y a las páginas web de

producto.

23 de febrero de2018

• Se ha reescrito la sección Realizar solicitudes de la API de consulta (p. 205).• Se han corregido las muestras de código Java de la sección Habilitación del

almacenamiento en búfer del lado del cliente y del agrupamiento en lotes desolicitudes (p. 212).

• Se ha reemplazado http:// por https:// en todos los ejemplos de puntos deenlace de Amazon SQS.

21 de febrero de2018

• Se ha corregido la muestra de código Java de la sección Uso deAmazonSQSBufferedAsyncClient (p. 212).

• Se ha aclarado la información de la sección Depuración de mensajes de una colade Amazon SQS (p. 55).

20 de febrero de2018

• Se ha aclarado la información de la sección Pasar de una cola de Estándar a unacola de FIFO (p. 86).

• Se ha optimizado la muestra de código Java de las siguientes secciones:• AWS SDK for Java (p. 17)• Creación de una cola de Amazon SQS con SSE mediante el AWS SDK for

Java (p. 21)• Configuración de SSE para una cola de Amazon SQS mediante la AWS SDK

for Java (p. 61)• AWS SDK for Java (p. 23)• AWS SDK for Java (p. 31)• AWS SDK for Java (p. 48)• AWS SDK for Java (p. 67)• AWS SDK for Java (p. 28)

19 de febrero de2018

Se ha optimizado el ejemplo de código Java y se han corregido los requisitosprevios de pom.xml en las siguientes secciones:

• Ejemplo funcional de Java sobre el uso de Amazon S3 con mensajes grandes deAmazon SQS (p. 109)

• Ejemplo funcional en Java de colas Estándar (p. 81)• Ejemplo funcional en Java de colas FIFO (p. 87)

16 de febrero de2018

Se ha simplificado el ejemplo de código Java y se han añadido los requisitosprevios de pom.xml a las siguientes secciones:

• Ejemplo funcional en Java de colas Estándar (p. 81)• Ejemplo funcional en Java de colas FIFO (p. 87)

15 de febrero de2018

Se ha actualizado la sección Recursos de Amazon SQS relacionados (p. 226).

14 de febrero de2018

• Se ha aclarado la información de la sección Consumo de mensajes mediantesondeo corto (p. 96).

• Se ha reestructurado la sección Cuotas de Amazon SQS (p. 143).

247

Page 253: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

13 de febrero de2018

• Se ha aclarado la instrucción siguiente: No puede añadir etiquetas a una nuevacola cuando la crea utilizando Consola de administración de AWS (puede añadiretiquetas después de crear la cola). Sin embargo, puede agregar, actualizaro eliminar etiquetas de cola en cualquier momento utilizando las acciones deAmazon SQS.

• Se ha clarificado y corregido la información de las secciones Configuración deltiempo de espera de visibilidad (p. 103) y Procesamiento de los mensajes atiempo (p. 136).

• Se ha actualizado la sección Recursos de Amazon SQS relacionados (p. 226).• Se ha añadido la sección Esperamos tener noticias suyas (p. 3).

9 de febrero de2018

• El ejemplo de Java de la sección Ejemplo funcional en Java de solicitudes deuna sola operación y por lotes (p. 218) ahora es independiente y se han añadidolos requisitos previos de pom.xml.

• Se ha añadido una explicación para monitorizar la ejecución del ejemplo (p. 225).

8 de febrero de2018

Se ha reescrito el ejemplo de Java en la sección Ejemplo funcional en Java desolicitudes de una sola operación y por lotes (p. 218).

7 de febrero de2018

Se han reescrito las secciones siguientes:

• Aumento del desempeño mediante el escalado horizontal y agrupación en lotesde acciones de la (p. 216)

6 de febrero de2018

Se han reescrito las secciones siguientes:

• Amazon SQS Acciones de procesamiento por lotes (p. 211)• Habilitación del almacenamiento en búfer del lado del cliente y del agrupamiento

en lotes de solicitudes (p. 212)

5 de febrero de2018

Se ha aclarado la información de la sección Configuración de una cola demensajes fallidos de Amazon SQS (p. 65).

1 de febrero de2018

• Se ha aclarado la información de la sección FIFO Lógica de entrega (p. 85).• Se han corregido los ejemplos de código—y se han cambiado los títulos—de las

secciones siguientes:• Ejemplo funcional en Java de colas Estándar (p. 81)• Ejemplo funcional en Java de colas FIFO (p. 87)• Ejemplo funcional de Java sobre el uso de Amazon S3 con mensajes grandes

de Amazon SQS (p. 109)• Ejemplo funcional de Java sobre el uso de JMS con colas Estándar de Amazon

SQS (p. 120)

31 de enero de2018

Se ha aclarado la información de las siguientes secciones:

• Permitir que los desarrolladores escriban mensajes en una colacompartida (p. 169)

• Amazon SQS Acciones de procesamiento por lotes (p. 211)• Funcionamiento de las colas de mensajes fallidos (p. 98)

30 de enero de2018

Se han reescrito las secciones siguientes:

• Proceso básico de autenticación con HMAC-SHA (p. 207)• Interpretación de las respuestas (p. 210)

248

Page 254: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

29 de enero de2018

Se han reescrito las secciones siguientes:

• Realizar solicitudes de la API de consulta (p. 205)• Construcción de un punto de enlace (p. 205)• Realizar una solicitud GET (p. 206)• Autenticación de solicitudes (p. 207)

25 de enero de2018

• Se han añadido enlaces en distintos lugares de esta guía para explicar por quélos constructores de clientes han quedado obsoletos en el AWSSDK para Java.Para obtener más información, consulte Crear clientes de servicio en la AWSSDK for Java Developer Guide.

• Se ha aclarado la frase siguiente en la sección Monitoreo de colas de AmazonSQS con CloudWatch (p. 193):

La métrica de CloudWatch en un minuto para Amazon SQS actualmente soloestá disponible en las siguientes regiones:• EE.UU. Este (Ohio)• Europa (Irlanda)• Europa (Estocolmo)• Asia Pacífico (Tokio)

24 de enero de2018

Se ha aclarado el texto relacionado con las acciones de Amazon SQS en distintoslugares de esta guía.

22 de enero de2018

Se ha añadido la sección Habilitar la compatibilidad entre servicios de AWS y colascifradas (p. 155).

19 de enero de2018

Se ha aclarado la información de la sección Funcionamiento de las colas demensajes fallidos (p. 98).

18 de enero de2018

• Se ha reescrito el código de la sección the section called “Creación de unaconexión JMS” (p. 114), sustituyendo el constructor AmazonSQSClient que haquedado obsoleto por AmazonSQSClientBuilder. Utilice la sintaxis siguientepara crear una fábrica de conexiones con todos los valores predeterminados(como, por ejemplo, credenciales y región) establecidos:

final SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.defaultClient());

• Se ha reescrito el código de la sección Escalado horizontal (p. 217). Utilice lasintaxis siguiente para ajustar el número máximo de subprocesos admisiblespara productores y consumidores en un objeto AmazonSQSClientBuilder:

final AmazonSQS sqsClient = AmazonSQSClientBuilder.standard() .withClientConfiguration(new ClientConfiguration() .withMaxConnections(producerCount + consumerCount)) .build();

249

Page 255: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

17 de enero de2018

• Se ha reescrito y simplificado el código de las secciones Ejemplo funcional enJava de colas Estándar (p. 81) y Ejemplo funcional en Java de colas FIFO (p. 87)para sustituir el constructor AmazonSQSClient, que ha quedado obsoleto,por AmazonSQSClientBuilder. Utilice la sintaxis siguiente para crear unainstancia del constructor con todos los valores predeterminados (como, porejemplo, credenciales y región) establecidos:

final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

• Se ha reescrito y simplificado el código de la sección Ejemplo funcional de Javasobre el uso de Amazon S3 con mensajes grandes de Amazon SQS (p. 109),sustituyendo el constructor AmazonS3Client que ha quedado obsoleto porAmazonS3ClientBuilder.

final AmazonSQS s3 = AmazonS3ClientBuilder.defaultClient();

16 de enero de2018

• Se han añadido más referencias cruzadas a ID de mensaje (p. 90) y Identificadorde recepción (p. 91) en distintos lugares de esta guía.

• Se ha reescrito la sección Administración de mensajes grandes de Amazon SQSmediante Amazon S3 (p. 109).

15 de enero de2018

• En las secciones Administración de mensajes grandes de Amazon SQSmediante Amazon S3 (p. 109) y Uso de JMS y Amazon SQS (p. 112), se haaclarado la siguiente explicación: El SDK para Java y la Biblioteca de clienteampliada para Java de Amazon SQS requieren J2SE Development Kit 8.0 o unaversión posterior.

• Se han añadido subsecciones a la sección Prácticas recomendadas paraAmazon SQS (p. 136) y se ha aclarado y reorganizado su contenido.

• Se ha añadido la siguiente explicación a la sección Configuración de la retenciónde la cola de mensajes fallidos (p. 138):

El vencimiento de un mensaje siempre irá en función de su marca temporal depuesta en cola original. Cuando se mueve un mensaje a unacola de mensajesfallidos (p. 98), la marca temporal de puesta en cola no cambia. Por ejemplo, siun mensaje permanece 1 día en la cola original antes de su traslado a una colade mensajes fallidos, y el periodo de retención de dicha cola se ha establecidoen 4 días, el mensaje se borrará de la cola de mensajes fallidos al cabo de 3días. Por tanto, se recomienda siempre que el periodo de retención de una colade mensajes fallidos sea más extenso que el periodo de retención de la colaoriginal.

• Se ha aclarado la información de la sección Funcionamiento de las colas demensajes fallidos (p. 98).

• Se ha añadido la siguiente explicación a la sección Amazon SQS Tiempo deespera de visibilidad (p. 101): El tiempo de espera de visibilidad predeterminadode un mensaje es de 30 segundos. La duración mínima es de 0 segundos. Elvalor máximo es 12 horas.

3 de enero de2018

Se ha aclarado el desempeño de las colas FIFO en distintos lugares de esta guía.

250

Page 256: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

7 de diciembre de2017

• Se ha añadido la siguiente nota a la sección Uso de políticas basadas enidentidad con Amazon SQS (p. 166): A excepción de ListQueues, todas lasacciones de Amazon SQS admiten los permisos de nivel de recurso. Paraobtener más información, consulte Referencia de acciones y recursos (p. 186).

• Se añadió el vídeo “Introducing Amazon Simple Queue Service (SQS) FIFOQueues” a la sección Amazon SQS Colas FIFO (First-In-First-Out) (p. 83).

• Se ha añadido el vídeo “Introducing Amazon Simple Queue Service (SQS)Server-Side Encryption” a la sección Cifrado en reposo (p. 149).

• Se ha añadido el vídeo “Introducing Cost Allocation Tags for Amazon SimpleQueue Service (SQS)” a la sección Amazon SQS Etiquetas de asignación decostos (p. 95).

6 de diciembre de2017

• Se sugiere utilizar Step Functions en lugar de Amazon SWF para tiemposde espera de visibilidad superiores a 12 horas en la sección Prácticasrecomendadas para Amazon SQS (p. 136).

• Se ha aclarado la siguiente explicación en la sección Cuotas relacionadas conlos mensajes (p. 144): El tiempo de espera de visibilidad predeterminado de unmensaje es de 30 segundos. La duración mínima es de 0 segundos. El valormáximo es 12 horas.

• Se ha añadido la siguiente nota a la sección Suscripción de una cola de AmazonSQS a un tema de Amazon SNS (p. 50): Si la cola de Amazon SQS y el temade Amazon SNS están en distintas cuentas de AWS, el dueño del tema debeconfirmar la suscripción en primer lugar. Para obtener más información, consulteConfirmar la suscripción en la Guía para desarrolladores de Amazon SimpleNotification Service.

• Se ha añadido la siguiente nota a la sección Términos clave (p. 84): AmazonSQS continua haciendo un seguimiento del ID de la deduplicación del mensajeincluso después de que el mensaje se reciba y elimine.

• Se ha aclarado y reorganizado la información de las secciones Realizarsolicitudes de la API de consulta (p. 205) y Monitoreo de colas de Amazon SQScon CloudWatch (p. 193).

1 de diciembre de2017

Se ha aclarado y reorganizado la información de la sección Monitoreo de colas deAmazon SQS con CloudWatch (p. 193).

30 de octubre de2017

• Índice corregido y reorganizado.• Se ha reescrito la sección Amazon SQS Tiempo de espera de visibilidad (p. 101).

27 de octubre de2017

Se aclaró la explicación del aprovisionamiento por colas de FIFO en la secciónAmazon SQS Colas FIFO (First-In-First-Out) (p. 83).

29 de septiembrede 2017

Se ha añadido una nota sobre la Cliente asincrónico en búfer de Amazon SQS enla sección Aumento del desempeño mediante el escalado horizontal y agrupaciónen lotes de acciones de la (p. 216).

19 de septiembrede 2017

Se han corregido los diagramas de la sección Uso de políticas de Amazon SQS eIAM (p. 166).

29 de agosto de2017

Se ha aclarado la información de la sección Cambio del tiempo de espera devisibilidad de un mensaje (p. 103).

17 de agosto de2017

Se han aclarado los permisos para las acciones SendMessage ySendMessageBatch de la en Referencia de acciones y recursos (p. 186).

251

Page 257: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

15 de agosto de2017

Se ha actualizado información sobre las colas de mensajes fallidos en la secciónRecomendaciones para las colas Amazon SQS Estándar y FIFO (First-In-First-Out) (p. 136).

9 de agosto de2017

• La Biblioteca de mensajería Amazon SQS para Java se ha actualizado a 1.0.4.Para obtener más información, consulte Uso de JMS y Amazon SQS (p. 112).

• Se ha actualizado la sección Uso de JMS y Amazon SQS (p. 112).

27 de julio de 2017 Se ha cambiado el constructor AmazonSQSClient que ha quedado obsoletoa AmazonSQSClientBuilder y se ha revisado la especificación de la regióncorrespondiente en la sección Ejemplo funcional en Java de colas Estándar (p. 81).

25 de julio de 2017 Se ha aclarado el desempeño de las colas estándar y FIFO en distintos lugares deesta guía.

20 de julio de 2017 Se ha aclarado la compatibilidad entre las colas de la SSE de Amazon SQS y AWSy las características de servicios de terceros en distintos lugares de esta guía:

Algunas características de los servicios de AWS que pueden enviar notificacionesa Amazon SQS mediante la acción AssumeRole de AWS Security Token Serviceson compatibles con SSE, pero funcionan solo con colas estándar:

• Enlaces de ciclo de vida de Auto Scaling• Colas de mensajes fallidos de AWS Lambda

Para obtener información acerca de la compatibilidad de otros servicios con lascolas cifradas; consulte Habilitar la compatibilidad entre servicios de AWS y colascifradas (p. 155) y la documentación del servicio correspondiente.

23 de junio de2017

Se ha corregido la información de la sección Cuotas relacionadas con losmensajes (p. 144).

20 de junio de2017

Se ha aclarado la información de la sección Colas de mensajes fallidos de AmazonSQS (p. 98).

2 de junio de 2017 • Se ha reestructurado y actualizado la sección Colas de mensajes fallidos deAmazon SQS (p. 98).

• Se ha creado la sección Configuración de una cola de mensajes fallidos deAmazon SQS (p. 65).

1 de junio de 2017 Se ha actualizado la sección ¿Qué es Amazon Simple Queue Service? (p. 1).

24 de mayo de2017

• Se ha reestructurado la sección Uso de JMS y Amazon SQS (p. 112).• Se ha creado la sección Uso de Cliente de JMS con otros clientes de Amazon

SQS (p. 119).

23 de mayo de2017

Cifrado en el servidor (SSE) para Amazon SQS está disponible en la región USEast (N. Virginia). Para obtener más información sobre el cifrado del lado delservidor y cómo comenzar a utilizarlo, consulte Cifrado en reposo (p. 149).

19 de mayo de2017

• Puede utilizar Biblioteca de cliente ampliada para Java de Amazon SQS juntocon Cliente de Amazon SQS Java Message Service (JMS).

• La Biblioteca de mensajería Amazon SQS para Java se ha actualizado a 1.0.3.Para obtener más información, consulte Uso de JMS y Amazon SQS (p. 112).

• Se ha actualizado la sección Uso de JMS y Amazon SQS (p. 112).

252

Page 258: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladoresHistorial de revisión

Fecha Actualización de documentación

25 de abril de 2017 Se ha reestructurado y actualizado la sección Sondeos cortos y largos de AmazonSQS (p. 96).

6 de febrero de2017

Se ha actualizado la sección Autenticación y control de acceso (p. 158).

16 de diciembre de2016

Se ha retirado la Guía de introducción de Amazon Simple Queue Service y parte desu contenido se ha incorporado a las siguientes secciones de esta guía:

• Configuración de Amazon SQS (p. 4)• Introducción a Amazon SQS (p. 7)• Tutoriales de Amazon SQS (p. 15)

2 de diciembre de2016

Se ha reestructurado y actualizado la sección Autenticación y control deacceso (p. 158).

2 de noviembre de2016

Se ha cambiado el nombre de la sección Tutoriales de Amazon SQS (p. 15).

27 de mayo de2016

Se ha añadido la sección Prácticas recomendadas para Amazon SQS (p. 136).

12 de mayo de2016

Se ha añadido la sección Cuotas de Amazon SQS (p. 143).

7 de diciembre de2015

Se han actualizado las capturas de pantalla de la consola de Amazon SQS.

4 de agosto de2014

Se ha actualizado información sobre las claves de acceso. Para obtener másinformación, consulte Autenticación de solicitudes (p. 207).

253

Page 259: Amazon Simple Queue Service · 2020-03-11 · servidores. Las colas Estándar admiten la entrega de mensajes al menos una vez (p. 80), mientras que las colas FIFO admiten el procesamiento

Amazon Simple Queue Service Guía para desarrolladores

AWS GlossaryFor the latest AWS terminology, see the AWS Glossary in the AWS General Reference.

254