0% encontró este documento útil (0 votos)
250 vistas465 páginas

Amazon Simple PDF

Cargado por

Max Rokatansky
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
250 vistas465 páginas

Amazon Simple PDF

Cargado por

Max Rokatansky
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Amazon Simple

Notification Service
Guía para desarrolladores
Amazon Simple Notification
Service Guía para desarrolladores

Amazon Simple Notification Service: Guía para desarrolladores


Copyright © Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Las marcas comerciales y la imagen comercial de Amazon no se pueden utilizar en relación con ningún producto o
servicio que no sea de Amazon de ninguna manera que pueda causar confusión entre los clientes y que menosprecie
o desacredite a Amazon. Todas las demás marcas comerciales que no son propiedad de Amazon son propiedad de
sus respectivos propietarios, que pueden o no estar afiliados, conectados o patrocinados por Amazon.
Amazon Simple Notification
Service Guía para desarrolladores

Table of Contents
¿Qué es Amazon SNS? ...................................................................................................................... 1
Características y funciones básicas ............................................................................................... 3
Servicios relacionados de ............................................................................................................ 4
Acceso a Amazon SNS ............................................................................................................... 4
Precios de Amazon SNS ............................................................................................................. 5
Situaciones comunes de Amazon SNS .......................................................................................... 5
Integración de aplicaciones .................................................................................................. 5
Alertas de aplicación ........................................................................................................... 6
Notificaciones de usuario ..................................................................................................... 6
Notificaciones de inserción en móviles ................................................................................... 6
Uso de los AWS  SDK ................................................................................................................. 6
Fuentes y destinos de eventos de Amazon SNS ..................................................................................... 8
Orígenes de eventos ................................................................................................................... 8
Análisis ............................................................................................................................. 8
Integración de aplicaciones .................................................................................................. 8
Administración de costos y facturación .................................................................................. 9
Aplicaciones empresariales .................................................................................................. 9
Cálculo .............................................................................................................................. 9
Contenedores ................................................................................................................... 10
Interacción con clientes ..................................................................................................... 11
Base de datos .................................................................................................................. 11
Herramientas para desarrolladores ...................................................................................... 12
Web y móvil front-end ....................................................................................................... 13
Desarrollo de videojuegos .................................................................................................. 13
Internet de las cosas ......................................................................................................... 13
Machine Learning ............................................................................................................. 14
Administración y gobernanza .............................................................................................. 14
Medios ............................................................................................................................ 16
Migración y transferencia ................................................................................................... 16
Redes y entrega de contenido ............................................................................................ 16
Seguridad, identidad y conformidad ..................................................................................... 17
Sin servidor ...................................................................................................................... 18
Almacenamiento ............................................................................................................... 18
Orígenes de fuentes adicionales ......................................................................................... 19
Destinos de eventos .................................................................................................................. 19
Destinos de A2A ............................................................................................................... 20
Destinos A2P ................................................................................................................... 20
Configuración ................................................................................................................................... 22
Cree de una cuenta y un usuario administrador de IAM .................................................................. 22
Cree de un usuario de IAM y obtenga las credenciales .................................................................. 22
Pasos siguientes ....................................................................................................................... 23
Introducción ..................................................................................................................................... 24
Requisitos previos ..................................................................................................................... 24
Paso 1: Crear un tema .............................................................................................................. 24
Paso 2: Crear una suscripción Crear una suscripción al tema .......................................................... 24
Paso 3: Publicar un mensaje en el tema ...................................................................................... 25
Paso 4: Eliminar la suscripción y el tema ..................................................................................... 25
Pasos siguientes ....................................................................................................................... 25
Configuración de Amazon SNS ........................................................................................................... 27
Creación de un tema ................................................................................................................. 27
AWS Management Console ................................................................................................ 27
AWS SDK ........................................................................................................................ 29
Suscripción de a un tema .......................................................................................................... 34
Para suscribir un punto de enlace a un tema de Amazon SNS, siga estos pasos: ........................ 35

iii
Amazon Simple Notification
Service Guía para desarrolladores

Eliminación de una suscripción y un tema .................................................................................... 35


AWS Management Console ................................................................................................ 36
AWS SDK ........................................................................................................................ 36
Etiquetado ............................................................................................................................... 40
Etiquetado para asignación de costos .................................................................................. 40
Etiquetado para el control de acceso ................................................................................... 41
Etiquetado para búsqueda y filtrado de recursos .................................................................... 42
Configuraciones de etiquetas .............................................................................................. 42
Ordenación y desduplicación de mensajes (temas FIFO) ........................................................................ 46
Caso de uso de temas FIFO ...................................................................................................... 46
Detalles de los pedidos de mensajes ........................................................................................... 48
Agrupación de mensajes ............................................................................................................ 53
Entrega de mensajes ................................................................................................................ 54
Filtrado de mensajes ................................................................................................................. 55
Id. de desduplicación de mensajes .............................................................................................. 57
Seguridad de mensajes ............................................................................................................. 59
Duración del almacenamiento de los mensajes ............................................................................. 59
Ejemplos de código ................................................................................................................... 62
Ejemplo FIFO (AWS SDK) ................................................................................................. 62
Ejemplo FIFO (AWS CloudFormation) .................................................................................. 64
Publicación de mensajes .................................................................................................................... 67
AWS Management Console ........................................................................................................ 67
AWS SDK ................................................................................................................................ 68
Cargas de mensajes grandes ..................................................................................................... 75
Prerequisites .................................................................................................................... 75
Ejemplo: Publicación de mensajes en Amazon SNS con carga almacenada en Amazon S3 ........... 76
Otros protocolos de puntos de enlace .................................................................................. 77
Atributos de mensajes ............................................................................................................... 78
Elementos y validación de los atributos de los mensajes ......................................................... 78
Tipos de datos ................................................................................................................. 79
Atributos de mensaje reservados para notificaciones de inserción en móviles ............................. 79
Agrupación en lotes de mensajes ................................................................................................ 81
¿Qué es la agrupación en lotes de mensajes? ...................................................................... 81
¿Cómo funciona la agrupación en lotes de mensajes? ........................................................... 81
Examples ......................................................................................................................... 81
Filtrado de mensajes ......................................................................................................................... 84
Políticas de filtro de suscripciones ............................................................................................... 84
Ejemplos de políticas de filtro ............................................................................................. 85
Restricciones de política de filtro ......................................................................................... 86
Coincidencia de valores de cadena de atributo ...................................................................... 87
Coincidencia de valor numérico de atributo ........................................................................... 89
Coincidencia de clave de atributo ........................................................................................ 91
Lógica AND/OR ................................................................................................................ 91
Aplicación de una política de filtro de suscripciones ....................................................................... 92
AWS Management Console ................................................................................................ 92
AWS CLI ......................................................................................................................... 93
AWS SDK ........................................................................................................................ 93
API de Amazon SNS ......................................................................................................... 95
AWS CloudFormation ........................................................................................................ 95
Eliminación de una política de filtro de suscripciones ...................................................................... 95
AWS Management Console ................................................................................................ 95
AWS CLI ......................................................................................................................... 96
API de Amazon SNS ......................................................................................................... 96
Entrega de mensajes ........................................................................................................................ 97
Entrega de mensajes sin procesar .............................................................................................. 97
Habilitación de la entrega de mensajes sin procesar mediante la AWS Management Console ........ 97
Ejemplos de formato de mensajes ....................................................................................... 98

iv
Amazon Simple Notification
Service Guía para desarrolladores

Entrega entre cuentas ............................................................................................................... 98


El propietario de la cola crea la suscripción .......................................................................... 98
Un usuario que no es el propietario de la cola crea una suscripción ........................................ 100
Entrega entre regiones ............................................................................................................. 101
Regiones registradas ....................................................................................................... 101
Estado de entrega de mensajes ................................................................................................ 102
Configuración del registro del estado de entrega mediante la AWS Management Console ........... 103
Configuración de los atributos del estado de entrega de los mensajes para los temas suscritos a
puntos de enlace de Amazon SNS mediante los SDK de AWS ............................................... 103
Reintentos de entrega de mensajes ........................................................................................... 108
Protocolos y políticas de entrega ....................................................................................... 108
Fases de la política de entrega ......................................................................................... 109
Creación de una política de entrega HTTP/S ....................................................................... 110
Colas de mensajes fallidos (DLQ) .............................................................................................. 112
¿Por qué no se pueden entregar los mensajes? .................................................................. 113
¿Cómo funcionan las colas de mensajes fallidos? ................................................................ 113
¿Cómo se transfieren los mensajes a una cola de mensajes fallidos? ...................................... 114
¿Cómo puedo sacar los mensajes de una cola de mensajes fallidos? ...................................... 114
¿Cómo puedo monitorizar y registrar las colas de mensajes fallidos? ...................................... 114
Configuración de una cola de mensajes fallidos ................................................................... 115
Análisis y archivado de mensajes ...................................................................................................... 119
Mensajería de aplicación a aplicación (A2A) ....................................................................................... 120
Distribución ramificada a los flujos de entrega de Kinesis Data Firehose .......................................... 120
Requisitos previos ........................................................................................................... 121
Suscripción de un flujo de entrega a un tema ...................................................................... 122
Destinos de flujos de entrega ........................................................................................... 122
Ejemplo de caso de uso .................................................................................................. 132
Distribución ramificada a las funciones Lambda ........................................................................... 141
Prerequisites .................................................................................................................. 141
Suscripción de una función a un tema ................................................................................ 142
Colas de distribución ramificada a Amazon SQS .......................................................................... 142
Suscripción de una cola a un tema .................................................................................... 143
Ejemplo (AWS CloudFormation) ........................................................................................ 148
Distribución ramificada a puntos de enlace HTTP/S ...................................................................... 153
Suscripción de un punto de enlace a un tema ..................................................................... 154
Verificación de las firmas de los mensajes .......................................................................... 160
Análisis de formatos de mensajes ..................................................................................... 162
Distribución ramificada a las canalizaciones de bifurcación de eventos de AWS ................................ 168
Cómo funcionan las canalizaciones de bifurcación de eventos de AWS ................................... 169
Implementación de canalizaciones de bifurcación de eventos de AWS ..................................... 172
Implementación de las canalizaciones de bifurcación de eventos de AWS ................................ 173
Suscripción de una canalización de eventos a un tema ......................................................... 180
Mensajería de aplicación a persona (A2P) .......................................................................................... 187
Mensajería de texto móvil (SMS) ............................................................................................... 187
Entorno de pruebas de SMS ............................................................................................. 188
Identidades de origen ...................................................................................................... 190
Solicitud de soporte de SMS ............................................................................................. 209
Configuración de las preferencias de SMS .......................................................................... 218
Envío de mensajes SMS .................................................................................................. 221
Monitorización de la actividad de SMS ............................................................................... 232
Administración de suscripciones de SMS ............................................................................ 238
Regiones y países admitidos ............................................................................................ 251
Prácticas recomendadas de SMS ...................................................................................... 260
Requisitos de SMS para Singapur ..................................................................................... 263
Requisitos de SMS para destinos de Estados Unidos ........................................................... 264
Requisitos de SMS para la India ....................................................................................... 264
Notificaciones de inserción en móviles ....................................................................................... 268

v
Amazon Simple Notification
Service Guía para desarrolladores

Cómo funcionan las notificaciones de usuario ...................................................................... 269


Información general del proceso de notificación de usuario .................................................... 269
Configuración de una aplicación móvil ................................................................................ 269
Envío de notificaciones de inserción en móviles ................................................................... 280
Atributos de aplicaciones móviles ...................................................................................... 283
Eventos de aplicaciones móviles ....................................................................................... 286
Acciones de la API de inserción móvil ................................................................................ 288
Errores de la API de inserción móvil .................................................................................. 289
TTL para las inserciones móviles ...................................................................................... 296
Regiones admitidas ......................................................................................................... 298
Prácticas recomendadas de notificaciones push en móviles ................................................... 298
Notificaciones por correo electrónico .......................................................................................... 299
AWS Management Console .............................................................................................. 299
AWS SDK ...................................................................................................................... 300
Ejemplos de código ......................................................................................................................... 307
Acciones ................................................................................................................................ 308
Agregar etiquetas a un tema ............................................................................................. 309
Comprobación de la desactivación de un número de teléfono ................................................. 311
Confirmación de que el propietario de un punto de enlace desea recibir mensajes ..................... 314
Crear un tema ................................................................................................................ 316
Eliminación de una suscripción ......................................................................................... 321
Eliminación de un tema .................................................................................................... 325
Cómo obtener las propiedades de un tema ......................................................................... 329
Cómo obtener la configuración para enviar mensajes SMS .................................................... 333
Lista de números de teléfono desactivados ......................................................................... 336
Lista de suscriptores de un tema ....................................................................................... 337
Enumeración de temas .................................................................................................... 343
Publicación de un mensaje SMS ....................................................................................... 348
Publicación de un tema .................................................................................................... 352
Configuración de una cola de mensajes fallidos para una suscripción ...................................... 358
Configuración de una política de filtrado ............................................................................. 359
Cómo establecer la configuración predeterminada para el envío de mensajes SMS .................... 361
Cómo establecer los atributos de los temas ........................................................................ 363
Suscripción de una función Lambda a un tema .................................................................... 367
Suscripción de una aplicación móvil a un tema .................................................................... 370
Suscripción de un punto de enlace HTTP a un tema ............................................................ 372
Suscripción de una dirección de correo electrónico a un tema ................................................ 373
Situaciones ............................................................................................................................. 379
Creación de un punto de enlace de la plataforma para notificaciones push ............................... 380
Creación y publicación en un tema FIFO ............................................................................ 382
Publicación de mensajes SMS en un tema ......................................................................... 384
Publicación de un mensaje de gran tamaño ........................................................................ 385
Ejemplos de servicios combinados ............................................................................................. 387
Creación de una aplicación para enviar datos a una tabla de DynamoDB ................................. 388
Creación de una aplicación de Amazon SNS ....................................................................... 389
Creación de una aplicación de exploración de Amazon Textract ............................................. 390
Detecte personas y objetos en un vídeo ............................................................................. 391
Uso de API Gateway para invocar una función Lambda ........................................................ 392
Uso de eventos programados para invocar una función Lambda ............................................. 393
Seguridad ...................................................................................................................................... 394
Protección de los datos ............................................................................................................ 394
Cifrado de datos ............................................................................................................. 395
Privacidad del tráfico entre redes ...................................................................................... 404
Identity and Access Management .............................................................................................. 416
Autenticación .................................................................................................................. 416
Control de acceso ........................................................................................................... 417
Información general ......................................................................................................... 418

vi
Amazon Simple Notification
Service Guía para desarrolladores

Uso de políticas basadas en identidades ............................................................................ 433


Uso de credenciales temporales ........................................................................................ 439
Referencia de permisos de la API ..................................................................................... 439
Registro y monitoreo ............................................................................................................... 441
Registro de llamadas a la API mediante CloudTrail .............................................................. 441
Monitoreo de los temas mediante Amazon CloudWatch ........................................................ 444
Validación de la conformidad .................................................................................................... 449
Resiliencia .............................................................................................................................. 450
Seguridad de la infraestructura .................................................................................................. 450
Prácticas recomendadas .......................................................................................................... 451
Prácticas recomendadas preventivas .................................................................................. 451
Solución de problemas ..................................................................................................................... 454
Solución de problemas de temas mediante X-Ray ........................................................................ 454
Historial de revisión ......................................................................................................................... 455
AWSGlosario .................................................................................................................................. 458

vii
Amazon Simple Notification
Service Guía para desarrolladores

¿Qué es Amazon SNS?


Amazon Simple Notification Service (Amazon SNS) es un servicio administrado con el que se ofrece
la entrega de mensajes de los publicadores a los suscriptores (también conocido como productores y
consumidores). Los publicadores se comunican de forma asíncrona con los suscriptores mediante el
envío mensajes a un tema, que es un punto de acceso lógico y un canal de comunicación. Los clientes
pueden suscribirse al tema de SNS y recibir mensajes publicados mediante un tipo de punto de enlace
compatible, como Amazon Kinesis Data Firehose, Amazon SQS, AWS Lambda, HTTP, correo electrónico,
notificaciones push móviles y mensajes de texto móviles (SMS).

1
Amazon Simple Notification
Service Guía para desarrolladores

2
Amazon Simple Notification
Service Guía para desarrolladores
Características y funciones básicas

Temas
• Características y funciones básicas (p. 3)
• Servicios relacionados de (p. 4)
• Acceso a Amazon SNS (p. 4)
• Precios de Amazon SNS (p. 5)
• Situaciones comunes de Amazon SNS (p. 5)
• Uso de Amazon SNS con un AWS SDK (p. 6)

Características y funciones básicas


En Amazon SNS, se beneficia de las siguientes características y funciones básicas:

• Mensajería de aplicación a aplicación

La mensajería de aplicación a aplicación admite suscriptores como flujos de entrega de Amazon Kinesis
Data Firehose, funciones de Lambda, colas de Amazon SQS, puntos de enlace HTTP/S y canalizaciones
de bifurcación de eventos de AWS. Para obtener más información, consulte Mensajería de aplicación a
aplicación (A2A) (p. 120) .
• Notificaciones de aplicación a persona

Con las notificaciones de aplicación a persona, se ofrecen notificaciones de usuario a los suscriptores,
como aplicaciones móviles, números de teléfono móvil y direcciones de correo electrónico. Para obtener
más información, consulte Mensajería de aplicación a persona (A2P) (p. 187) .
• Temas estándar y FIFO

Utilice un tema FIFO para garantizar un pedido estricto de mensajes, definir grupos de mensajes y
evitar la duplicación de mensajes. Solo las colas FIFO de Amazon SQS pueden suscribirse a un tema
FIFO. Para obtener más información, consulte Ordenación y desduplicación de mensajes (temas
FIFO) (p. 46) .

Utilice un tema estándar cuando el pedido de entrega de mensajes y la posible duplicación de mensajes
no sean críticos. Todos los protocolos de entrega admitidos pueden suscribirse a un tema estándar.
• Durabilidad de los mensajes

En Amazon SNS, se utiliza una serie de estrategias que funcionan en conjunto para proporcionar
durabilidad a los mensajes:
• Los mensajes publicados se almacenan en varios servidores y centros de datos separados por zona
geográfica.
• Si no se dispone de un punto de enlace suscrito, Amazon SNS ejecuta una política de reintentos de
entrega (p. 108).
• Para conservar los mensajes que no se entreguen antes de que finalice la política de reintento de
entrega, puede crear una cola de mensajes fallidos (p. 112).
• Análisis y archivado de mensajes

Puede suscribir flujos de entrega de Kinesis Data Firehose a temas de SNS (p. 120), lo que le permite
enviar notificaciones otros puntos de enlace de archivado y análisis, como buckets de Amazon Simple
Storage Service (Amazon S3), tablas de Amazon Redshift y otros.
• Atributos de mensajes

Con los atributos de mensaje, se puede proporcionar cualquier metadato arbitrario sobre el mensaje. the
section called “Atributos de mensajes” (p. 78).
• Filtrado de mensajes

3
Amazon Simple Notification
Service Guía para desarrolladores
Servicios relacionados de

De forma predeterminada, cada suscriptor recibe todos los mensajes publicados en el tema. Para recibir
un subconjunto de los mensajes, un suscriptor debe asignar una política de filtro a la suscripción del
tema. Cuando los atributos del mensaje entrante coinciden con los atributos de la política de filtro, el
mensaje se entrega al punto de enlace suscrito. De lo contrario, el mensaje se filtra. Para obtener más
información, consulte Filtrado de mensajes (p. 84) .
• Seguridad de mensajes

Con el cifrado del lado del servidor, se protege el contenido de los mensajes almacenados en temas de
Amazon SNS mediante claves de cifrado proporcionadas por AWS KMS. Para obtener más información,
consulte the section called “Cifrado en reposo” (p. 395) .

También puede establecer una conexión privada entre Amazon SNS y Virtual Private Cloud (VPC). Para
obtener más información, consulte the section called “Privacidad del tráfico entre redes” (p. 404).

Servicios relacionados de
Puede utilizar los siguientes servicios con Amazon SNS:

• Con Amazon SQS , se ofrece una cola alojada segura, duradera y disponible que le permite integrar
y desacoplar sistemas y componentes de software distribuidos. Amazon SQS está relacionado con
Amazon SNS de las siguientes maneras:
• Con Amazon SNS, se ofrecen colas de mensajes fallidos (p. 112) impulsadas por Amazon SQS para
mensajes que no se pueden entregar.
• Puede suscribir una cola de Amazon SQS a un tema de SNS (p. 142).
• Puede suscribir una cola FIFO de Amazon SQS a un tema de Amazon SNS (p. 46) para recibir
mensajes en orden y sin duplicados.
• AWS Lambda le permite crear aplicaciones que responden rápidamente a nueva información.
Ejecute el código de su aplicación en funciones de Lambda en una infraestructura informática de alta
disponibilidad. Para obtener más información, consulte AWS Lambda Developer Guide. Puede suscribir
una función Lambda a un tema de SNS (p. 141).
• AWS Identity and Access Management (IAM)) le ayuda a controlar de forma segura el acceso a los
recursos de AWS para sus usuarios. Utilice IAM para controlar quién puede usar sus temas de Amazon
SNS (autenticación), los recursos que pueden usar y cómo pueden usarlos (autorización). Para obtener
más información, consulte Uso de políticas basadas en identidades con Amazon SNS (p. 433) .
• AWS CloudFormation le permite modelar y configurar sus recursos de AWS. Cree una plantilla en la que
se describan los recursos de AWS que desea, incluidos los temas de Amazon SNS y las suscripciones.
AWS CloudFormation se encargará del aprovisionamiento y la configuración de dichos recursos. Para
obtener más información, consulte la Guía del usuario de AWS CloudFormation.

Acceso a Amazon SNS


Puede configurar y administrar temas y suscripciones de SNS mediante la consola de Amazon SNS, las
herramientas de línea de comandos o AWS SDK.

• En la consola de Amazon SNS, se ofrece una interfaz de usuario conveniente para crear temas y
suscripciones, enviar y recibir mensajes, y monitorear eventos y registros.
• Con la AWS Command Line Interface (AWS CLI), se ofrece acceso directo a la API de Amazon SNS
para la configuración avanzada y casos de uso de automatización. Para obtener más información,
consulte Uso de Amazon SNS con la AWS CLI.
• AWS proporciona SDK en varios idiomas. Para obtener más información, consulte SDK y conjuntos de
herramientas.

4
Amazon Simple Notification
Service Guía para desarrolladores
Precios de Amazon SNS

Precios de Amazon SNS


Amazon SNS no tiene costos iniciales. El pago se basa en la cantidad de mensajes que publique, la
cantidad de notificaciones que envíe y cualquier llamada de API adicional para administrar temas y
suscripciones. Los precios de entrega varían según el tipo de punto de enlace. Puede comenzar sin costo
con el nivel gratuito de Amazon SNS.

Para obtener más información, consulte Precios de Amazon SNS.

Situaciones comunes de Amazon SNS


Integración de aplicaciones
La situación de distribución ramificada se produce cuando un mensaje publicado en un tema de SNS
se replica y se envía a varios puntos de enlace, como flujos de entrega de Kinesis Data Firehose, colas
de Amazon SQS, puntos de enlace HTTP(S) y funciones de Lambda. De este modo se permite un
procesamiento asíncrono paralelo.

Por ejemplo, puede desarrollar una aplicación que publique un mensaje en un tema del SNS cada vez que
se realice un pedido de un producto. Después, las colas de SQS que están suscritas a este tema de SNS
reciben notificaciones idénticas del nuevo pedido. Una instancia de servidor de Amazon Elastic Compute
Cloud (Amazon EC2) asociada a una de las colas de SQS puede controlar el procesamiento o la ejecución
del pedido. Además, puede adjuntar otra instancia de servidor de Amazon EC2 a un almacenamiento de
datos para analizar todos los pedidos recibidos.

También puede utilizar la distribución ramificada para replicar los datos enviados a su entorno de
producción con su entorno de prueba. Si profundizamos en el ejemplo anterior, puede suscribir otra cola de
SQS al mismo tema de SNS para los nuevos pedidos que entren. A continuación, si asocia esta nueva cola
de SQS a su entorno de prueba, puede seguir mejorando y probando su aplicación utilizando los datos
recibidos desde su entorno de producción.
Important

Tenga en cuenta la privacidad y la seguridad de los datos de producción antes de enviarlos a su


entorno de prueba.

Para obtener más información, consulte los recursos de siguientes:

• Distribución ramificada a los flujos de entrega de Kinesis Data Firehose (p. 120)
• Distribución ramificada a las funciones Lambda (p. 141)
• Colas de distribución ramificada a Amazon SQS (p. 142)
• Distribución ramificada a puntos de enlace HTTP/S (p. 153)

5
Amazon Simple Notification
Service Guía para desarrolladores
Alertas de aplicación

• Informática basada en eventos con Amazon SNS y servicios de informática, almacenamiento, bases de
datos y redes de AWS

Alertas de aplicación
Las alertas de la aplicación y del sistema son notificaciones que se desencadenan mediante umbrales
predeterminados. Amazon SNS puede enviar estas notificaciones a usuarios especificados a través de
SMS y correo electrónico. Por ejemplo, puede recibir una notificación inmediata cuando se produce un
evento, como un cambio específico en su grupo de Amazon EC2 Auto Scaling, un archivo nuevo cargado
en un bucket de Amazon S3 o un umbral de métrica superado en Amazon CloudWatch. Para obtener más
información, consulte Configuración de notificaciones de Amazon SNS en la Guía del usuario de Amazon
CloudWatch.

Notificaciones de usuario
Amazon SNS puede enviar mensajes de correo electrónico push y mensajes de texto (mensajes SMS)
a personas o grupos. Por ejemplo, puede enviar confirmaciones de pedidos de comercio electrónico
como notificaciones de usuario. Para obtener más información sobre el uso de Amazon SNS para enviar
mensajes SMS, consulte Mensajería de texto móvil (SMS) (p. 187).

Notificaciones de inserción en móviles


Las notificaciones de inserción en móviles le permiten enviar mensajes directamente a aplicaciones
móviles. Por ejemplo, puede usar Amazon SNS para enviar notificaciones de actualización a una
aplicación. El mensaje de notificación puede incluir un enlace para descargar e instalar la actualización.
Para obtener más información sobre el uso de Amazon SNS para enviar mensajes de notificaciones push,
consulte Notificaciones de inserción en móviles (p. 268).

Uso de Amazon SNS con un AWS SDK


Los kits de desarrollo de software (SDK) de AWS están disponibles en muchos lenguajes de programación
populares. Cada SDK proporciona una API, ejemplos de código y documentación que facilitan a los
desarrolladores la creación de aplicaciones en su lenguaje preferido.

Documentación de SDK Ejemplos de código

AWS SDK for C++ Ejemplos de código de AWS SDK for C++

AWS SDK for Go Ejemplos de código de AWS SDK for Go

AWS SDK for Java Ejemplos de código de AWS SDK for Java

AWS SDK for JavaScript Ejemplos de código de AWS SDK for JavaScript

AWS SDK for .NET Ejemplos de código de AWS SDK for .NET

AWS SDK for PHP Ejemplos de código de AWS SDK for PHP

AWS SDK for Python (Boto3) Ejemplos de código de AWS SDK for Python
(Boto3)

AWS SDK for Ruby Ejemplos de código de AWS SDK for Ruby

6
Amazon Simple Notification
Service Guía para desarrolladores
Uso de los AWS SDK

Para obtener ejemplos específicos de Amazon SNS, consulte Ejemplos de código de Amazon SNS con
SDK de AWS (p. 307).
Ejemplo de disponibilidad

¿No puede encontrar lo que necesita? Solicite un ejemplo de código mediante el enlace de
Provide feedback (Proporcionar comentarios) que se encuentra en la parte inferior de esta página.

7
Amazon Simple Notification
Service Guía para desarrolladores
Orígenes de eventos

Fuentes y destinos de eventos de


Amazon SNS
Amazon SNS puede recibir notificaciones basadas en eventos de muchas fuentes de AWS y enviar
notificaciones a destinos de aplicación a aplicación (A2A) y aplicación a persona (A2P). En esta sección,
se enumeran las fuentes y los destinos de eventos admitidos, y se proporcionan vínculos para obtener más
información.

Temas
• Fuentes de eventos de Amazon SNS (p. 8)
• Destinos de eventos de Amazon SNS (p. 19)

Fuentes de eventos de Amazon SNS


En esta página, se enumeran los servicios de AWS que pueden publicar eventos en temas de Amazon
SNS, agrupados por sus categorías de productos de AWS.
Note
Amazon SNS presentó temas FIFO (p. 46) en octubre de 2020. En la actualidad, la mayoría de
los servicios de AWS admite el envío de eventos solo a temas estándar.

Servicios de análisis
Servicio de AWS Beneficio del uso de Amazon SNS

Amazon Athena: con este, puede analizar los datos Reciba notificaciones cuando se superen los
en Amazon S3 con SQL estándar. límites de control. Para obtener más información,
consulte Establecimiento de los límites de control
de uso de datos en la Guía del usuario de Amazon
Athena.

AWS Data Pipeline: describe cómo automatizar el Reciba notificaciones sobre el estado de los
movimiento y la transformación de los datos. componentes de canalización. Para obtener más
información, consulte SnsAlarm en la Guía para
desarrolladores de AWS Data Pipeline.

Amazon Redshift: administra todo el trabajo Reciba notificaciones de eventos de Amazon


de configuración, operación y escalado del Redshift. Para obtener más información, consulte
almacenamiento de datos. Notificaciones de eventos de Amazon Redshift en
la Guía de administración de clústeres de Amazon
Redshift.

Servicios de integración de la aplicación


Servicio de AWS Beneficio del uso de Amazon SNS

Amazon EventBridge: proporciona un flujo de datos Reciba notificaciones de eventos de EventBridge.


en tiempo real desde sus propias aplicaciones, Para obtener más información, consulte Objetivos

8
Amazon Simple Notification
Service Guía para desarrolladores
Administración de costos y facturación

Servicio de AWS Beneficio del uso de Amazon SNS


aplicaciones de software como servicio (SaaS) de Amazon EventBridge en la Guía del usuario de
y servicios de AWS, y luego, dirige esos datos Amazon EventBridge.
a los objetivos, incluido Amazon SNS. Antes,
EventBridge se llamaba CloudWatch Events.

AWS Step Functions: con este, puede combinar Reciba notificaciones de eventos de Step
funciones de AWS Lambda y otros servicios de Functions. Para obtener más información, consulte
AWS con el fin de crear aplicaciones críticas para Llamar a Amazon SNS con Step Functions en la
el negocio. Guía para desarrolladores de AWS Step Functions.

Servicios de administración de costos y facturación


Servicio de AWS Beneficio del uso de Amazon SNS

AWS Billing and Cost Management: proporciona Reciba notificaciones de presupuesto,


funciones con las que puede monitorear sus costos notificaciones de cambio de precio y alertas de
y pagar su factura. anomalías. Para obtener más información, consulte
las páginas siguientes en la Guía del usuario de
AWS Billing:

• Creación de un tema de Amazon SNS para las


notificaciones del presupuesto
• Configuración de notificaciones
• Detección de gastos inusuales con detección de
anomalías de costo de AWS

Servicios de aplicaciones empresariales


Servicio de AWS Beneficio del uso de Amazon SNS

Amazon Chime: con este, puede conocer, Reciba notificaciones importantes de eventos de
conversar y realizar llamadas de empresa dentro y reuniones. Para obtener más información, consulte
fuera de la organización. Notificaciones de eventos del SDK de Amazon
Chime en la Guía para desarrolladores de Amazon
Chime.

Servicios de computación
Servicio de AWS Beneficio del uso de Amazon SNS

Con Amazon EC2 Auto Scaling, puede disponer Reciba notificaciones del momento en el que Auto
de la cantidad correcta de instancias de Amazon Scaling inicia o finaliza instancias de Amazon EC2
Elastic Compute Cloud (Amazon EC2) para en su grupo de Auto Scaling. Para obtener más
administrar la carga de la aplicación. información, consulte Obtener notificaciones de
Amazon SNS cuando su grupo de Auto Scaling
escala en la Guía del usuario de Amazon EC2 Auto
Scaling.

9
Amazon Simple Notification
Service Guía para desarrolladores
Contenedores

Servicio de AWS Beneficio del uso de Amazon SNS

EC2 Image Builder: se utiliza para automatizar Reciba notificaciones cuando se completen
la creación, administración e implementación las creaciones. Para obtener más información,
de imágenes de servidor personalizadas, consulte Seguimiento de las últimas imágenes
seguras y actualizadas que estén preinstaladas y de servidor en las canalizaciones de EC2 Image
preconfiguradas con configuraciones de software Builder en el blog informático de AWS.
para que se ajusten a los estándares de TI
específicas.

AWS Elastic Beanstalk: se utiliza para administrar Reciba notificaciones de eventos importantes
los detalles del aprovisionamiento de capacidad, el que afecten su aplicación. Para obtener más
equilibrio de carga y el escalado de su aplicación, información, consulte Notificaciones de entorno
y para proporcionar el monitoreo del estado de la de Elastic Beanstalk con Amazon SNS en la Guía
aplicación. para desarrolladores de AWS Elastic Beanstalk.

AWS Lambda: con este, puede ejecutar código sin Reciba los datos de salida de la función mediante
aprovisionar ni administrar servidores. el establecimiento de un tema de SNS como
una cola de mensajes fallidos de Lambda o un
destino Lambda. Para obtener más información,
consulte Invocación asincrónica en la Guía para
desarrolladores de AWS Lambda.

Amazon Lightsail: se utiliza para que los Reciba notificaciones cuando una métrica de una
desarrolladores comiencen a usar AWS para crear de las instancias, bases de datos o balanceadores
sitios web o aplicaciones web. de carga cruza un umbral especificado. Para
obtener más información, consulte Agregar
contactos de notificación en Amazon Lightsail en la
Guía para desarrolladores de Amazon Lightsail.

Servicios de contenedores

Servicio de AWS Beneficio del uso de Amazon SNS

Amazon EKS Distro: con este, puede crear Realice el seguimiento de actualizaciones y
clústeres de confianza y seguros dondequiera que parches de seguridad para clústeres creados con
se implementen sus aplicaciones. la distribución de Amazon EKS. Para obtener más
información, consulte Presentación de Amazon
EKS Distro: una distribución de código abierto de
Kubernetes utilizada por Amazon EKS.

Amazon Elastic Container Service (Amazon ECS): Reciba notificaciones cuando esté disponible una
con este, puede ejecutar, detener y administrar nueva AMI optimizada para Amazon ECS. Para
contenedores en un clúster. obtener más información, consulte Suscripción
a las notificaciones de actualización de AMI
optimizadas para Amazon ECS en la Guía para
desarrolladores de Amazon Elastic Container
Service.

10
Amazon Simple Notification
Service Guía para desarrolladores
Interacción con clientes

Servicios de interacción con los clientes


Servicio de AWS Beneficio del uso de Amazon SNS

Amazon Connect: con este, puede configurar un Reciba alertas y validaciones. Para obtener
centro de contacto en la nube omnicanal para más información, consulte El poder de AWS con
captar clientes. Amazon Connect en la Guía para administradores
de Amazon Connect.

Amazon Pinpoint: con este, puede atraer a sus Configure los SMS bidireccionales, que le permiten
clientes enviándoles correo electrónico, SMS y recibir mensajes de sus clientes. Para obtener más
mensajes de voz, y notificaciones push. información, consulte Uso de la mensajería de
SMS bidireccional en Amazon Pinpoint en la Guía
del usuario de Amazon Pinpoint.

Amazon Simple Email Service (Amazon SES): Reciba notificaciones de rebotes, reclamos
se utiliza para proporcionar una forma rentable y entregas. Para obtener más información,
de enviar y recibir correos electrónicos a través consulte Configuración de las notificaciones de
de sus propios dominios y direcciones de correo Amazon SNS para Amazon SES en la Guía para
electrónico. desarrolladores de Amazon Simple Notification
Service.

Servicios de bases de datos


Servicio de AWS Beneficio del uso de Amazon SNS

AWS Database Migration Service: migra datos de Reciba notificaciones cuando se produzcan
bases de datos locales a la nube de AWS. eventos de AWS DMS, por ejemplo, cuando
se crea o elimina una instancia de replicación.
Para obtener más información, consulte Trabajo
con eventos y notificaciones en AWS Database
Migration Service en la Guía del usuario de AWS
Database Migration Service.

Amazon DynamoDB: se utiliza para ofrecer Reciba notificaciones cuando se produzcan


un rendimiento rápido y predecible con una eventos de mantenimiento. Para obtener más
escalabilidad perfecta en este servicio de bases de información, consulte Personalización de la
datos NoSQL completamente administrado. configuración del clúster DAX en laGuía para
desarrolladores de Amazon DynamoDB.

Amazon ElastiCache: se utiliza para proporcionar Reciba notificaciones cuando se produzcan


una capacidad de caché en memoria de eventos significativos. Para obtener más
alto rendimiento, variable en tamaño y información, consulte Notificaciones de eventos y
económicamente rentable, al tiempo que acaba Amazon SNS en la Guía del usuario de Amazon
con la complejidad propia de la implementación y ElastiCache for Memcached.
la gestión de un entorno de caché distribuida.

Amazon Neptune: con este, se puede crear y Reciba notificaciones cuando se produce un
ejecutar aplicaciones que funcionan con conjuntos evento Neptune. Para obtener más información,
de datos altamente conectados. consulte Uso de notificación de eventos de
Neptune en la Guía del usuario de Neptune.

Amazon Redshift: administra todo el trabajo Reciba notificaciones de eventos de Amazon


de configuración, operación y escalado del Redshift. Para obtener más información, consulte
almacenamiento de datos. Notificaciones de eventos de Amazon Redshift en

11
Amazon Simple Notification
Service Guía para desarrolladores
Herramientas para desarrolladores

Servicio de AWS Beneficio del uso de Amazon SNS


la Guía de administración de clústeres de Amazon
Redshift.

Amazon Relational Database Service: facilita la Reciba notificaciones de eventos de Amazon RDS.
configuración, la operación y la escala de una base Para obtener más información, consulte Uso de las
de datos relacional en la nube de AWS. notificaciones de eventos de Amazon RDS en la
Guía del usuario de Amazon RDS.

Servicios de herramientas para desarrolladores

Servicio de AWS Beneficio del uso de Amazon SNS

AWS CodeBuild: se utiliza para compilar el código Reciba notificaciones cuando las creaciones
fuente, ejecuta pruebas unitarias y produce tienen éxito, fallan o se mueven de una fase de
artefactos listos para implementarse. compilación a otra. Para obtener más información,
consulte Muestra de notificaciones de creación
para CodeBuild en la Guía del usuario de AWS
CodeBuild.

AWS CodeCommit: se utiliza para proporcionar Reciba notificaciones sobre eventos de repositorio
control de versiones para almacenar y administrar de CodeCommit. Para obtener más información,
activos de forma privada en la nube. consulte Ejemplo: cree un desencadenador de
AWS CodeCommit de un tema de Amazon SNS en
la Guía del usuario de AWS CodeCommit.

AWS CodeDeploy: se utiliza para automatizar Reciba notificaciones para implementaciones


la implementación de las aplicaciones en de CodeDeploy o eventos de instancia. Para
instancias de Amazon EC2, en instancias en las obtener más información, consulte Crear un
instalaciones, en funciones de Lambda sin servidor desencadenador para un evento CodeDeploy en la
o en servicios ECS de Amazon Guía del usuario de AWS CodeDeploy.

Amazon CodeGuru: se utiliza para recopilar Reciba notificaciones cuando se produzcan


datos de rendimiento en tiempo de ejecución anomalías. Para obtener más información,
de las aplicaciones activas y para proporcionar consulte Trabajo con anomalías e informes de
recomendaciones con las que puede ajustar el recomendaciones en la Guía del usuario de
rendimiento de la aplicación. Amazon CodeGuru.

AWS CodePipeline: se utiliza para automatizar los Reciba notificaciones sobre las acciones de
pasos necesarios y liberar de manera continua los aprobación. Para obtener más información,
cambios de software. consulte Administración de acciones de aprobación
en CodePipeline en la Guía del usuario de AWS
CodePipeline.

AWS CodeStar: cree, administre y trabaje con Reciba notificaciones acerca de los eventos que
proyectos de desarrollo de software en AWS. se producen en los recursos que utiliza. Para
obtener más información, consulte Configure
temas de Amazon SNS para notificaciones en la
Guía del usuario de la consola de herramientas
para desarrolladores.

12
Amazon Simple Notification
Service Guía para desarrolladores
Web y móvil front-end

Servicios web y móviles front-end


Servicio de AWS Beneficio del uso de Amazon SNS

Amazon Pinpoint: con este, puede atraer a sus Configure los SMS bidireccionales, que le permiten
clientes enviándoles correo electrónico, SMS y recibir mensajes de sus clientes. Para obtener más
mensajes de voz, y notificaciones push. información, consulte Uso de la mensajería de
SMS bidireccional en Amazon Pinpoint en la Guía
del usuario de Amazon Pinpoint.

Servicios de desarrollo de juegos


Servicio de AWS Beneficio del uso de Amazon SNS

Amazon GameLift: se utiliza para ofrecer Reciba notificaciones de eventos de


soluciones con el fin de alojar servidores de emparejamiento y cola. Para obtener más
videojuegos multijugador basados en sesiones información, consulte las páginas siguientes:
en la nube, incluido un servicio completamente
administrado para implementar, utilizar y escalar • Para obtener notificaciones de emparejamiento,
servidores de videojuegos. consulte Configure la notificación de eventos
FlexMatch en la Guía para desarrolladores de
Amazon GameLift FlexMatch.
• Para obtener información sobre colas, consulte
Configure la notificación de eventos para la
colocación de sesiones de juego en la Guía para
desarrolladores de Amazon GameLift.

Servicios del Internet de las cosas


Servicio de AWS Beneficio del uso de Amazon SNS

AWS IoT Core: se utiliza para proporcionar los Recibir notificaciones de eventos de AWS IoT
servicios en la nube que conectan sus dispositivos Core. Para obtener más información, consulte
IoT a otros dispositivos y servicios en la nube de Creación de una regla de Amazon SNS en la Guía
AWS. para desarrolladores de AWS IoT.

AWS IoT Device Defender: con este, puede auditar Recibe alarmas cuando un dispositivo infringe un
la configuración de los dispositivos, monitorear comportamiento. Para obtener más información,
los dispositivos conectados para detectar un consulte Uso de la detección de AWS IoT Device
comportamiento anormal y mitigar los riesgos de Defender en la Guía para desarrolladoras de AWS
seguridad. IoT.

AWS IoT Events: con este, puede monitorear sus Recibir notificaciones de eventos de AWS IoT
flotas de equipos y dispositivos para saber si se Events. Para obtener más información, consulte
producen errores o cambios en su operación, y Amazon Simple Notification Service en la Guía
para activar acciones cuando se produzcan estos para desarrolladores de AWS IoT Events.
eventos.

AWS IoT Greengrass: se utiliza para ampliar AWS Recibir notificaciones de eventos de AWS IoT
a dispositivos físicos de borde de manera sencilla, Greengrass. Para obtener información, consulte
de modo que puedan actuar a nivel local en

13
Amazon Simple Notification
Service Guía para desarrolladores
Machine Learning

Servicio de AWS Beneficio del uso de Amazon SNS


función de los datos que generan, al mismo tiempo Conector de SNS en la Guía para desarrolladores
que utilizan la nube para tareas de administración, de AWS IoT Greengrass Version 1.
análisis y almacenamiento duradero.

Servicios de Machine Learning

Servicio de AWS Beneficio del uso de Amazon SNS

Amazon CodeGuru: se utiliza para recopilar Reciba notificaciones cuando se produzcan


datos de rendimiento en tiempo de ejecución anomalías. Para obtener más información,
de las aplicaciones activas y para proporcionar consulte Trabajo con anomalías e informes de
recomendaciones con las que puede ajustar el recomendaciones en la Guía del usuario de
rendimiento de la aplicación. Amazon CodeGuru.

Amazon DevOps Guru: se utiliza para generar Reenvíe información y confirmaciones. Para
información operativa mediante el machine obtener más información, consulte Ofrezca
learning para que pueda mejorar el rendimiento de información operativa impulsada por ML a sus
sus aplicaciones operativas. equipos de guardia a través de PagerDuty
con Amazon DevOps Guru en el Blog de
administración y gobernanza de AWS.

Amazon Lookout for Metrics: se utiliza para buscar Reciba notificaciones de anomalías. Para obtener
anomalías en los datos, determina sus causas raíz más información, consulte Uso de Amazon
y tomar medidas con rapidez. SNS con Lookout for Metrics en la Guía para
desarrolladores de Amazon Lookout for Metrics.

Amazon Rekognition: con este, puede agregar Reciba notificaciones de los resultados de la
con facilidad el análisis de imagen y video a sus solicitud. Para obtener más información, consulte
aplicaciones Referencia: notificación de resultados de análisis
de video en la Guía para desarrolladores de
Amazon Rekognition.

Amazon SageMaker: con este, los desarrolladores Reciba notificaciones cuando un objeto de datos
y los científicos de datos crean y perfeccionan está etiquetado. Para obtener más información,
modelos de machine learning de forma rápida consulte Creación de un trabajo de etiquetado
y sencilla y, a continuación, los implementan de streaming en la Guía para desarrolladores de
directamente un entorno alojado listo para su uso. Amazon SageMaker.

Servicios de administración y gobernanza

Servicio de AWS Beneficio del uso de Amazon SNS

AWS Chatbot: con este, los equipos de Entregue notificaciones a salas de conversaciones.
DevOps y de desarrollo de software utilizar las Para obtener más información, consulte
conversaciones de Amazon Chime y Slack para Configuración de AWS Chatbot en la Guía para
monitorear y responder a los eventos operativos en administradores de AWS Chatbot.
la nube de AWS.

AWS CloudFormation: con este, puede crear y Reciba notificaciones cuando se crean y actualizan
aprovisionar implementaciones de infraestructura las pilas. Para obtener más información, consulte
de AWS de forma predecible y uniforme. Configuración de las opciones de pila de AWS

14
Amazon Simple Notification
Service Guía para desarrolladores
Administración y gobernanza

Servicio de AWS Beneficio del uso de Amazon SNS


CloudFormation en la Guía del usuario de AWS
CloudFormation.

AWS CloudTrail: se utiliza para ofrecer el historial Reciba notificaciones cada vez que CloudTrail
de eventos de su actividad de Cuenta de AWS. publique nuevos archivos de registros en su bucket
de Amazon S3. Para obtener más información,
consulte Configuración de las notificaciones de
Amazon SNS para CloudTrail en la Guía del
usuario de AWS CloudTrail.

Amazon CloudWatch: se utiliza para monitorear los Reciba notificaciones cuando las alarmas cambian
recursos de AWS y las aplicaciones que ejecuta en de estado. Para obtener más información, consulte
AWS en tiempo real. Uso de las alarmas de Amazon CloudWatch en la
Guía del usuario de Amazon CloudWatch.

AWS Config: se utiliza para ofrecer una vista Reciba notificaciones cuando se actualicen los
detallada de la configuración de los recursos de recursos o cuando AWS Config evalúe las reglas
AWS de su Cuenta de AWS. personalizadas o administradas con respecto a sus
recursos. Para obtener más información, consulte
Notificaciones que AWS Config envía a un tema
de SNS y Ejemplo de notificaciones de cambio
de elementos de configuración en la Guía para
desarrolladores de AWS Config.

AWS Control Tower: con este, puede configurar Utilice alertas para evitar la desviación dentro
y controlar un entorno de AWS seguro con varias de su zona de destino y reciba notificaciones
cuentas y conforme. de conformidad. Para obtener más información,
consulte Amazon Simple Notification Service en la
Guía del usuario de AWS Control Tower.

AWS License Manager: con este, puede Reciba notificaciones y alertas de License
administrar sus licencias de software de Manager. Para obtener más información, consulte
proveedores de software de forma centralizada en Configuración de License Manager en la Guía
AWS y sus entornos en las instalaciones. del usuario de License Manager y Creación de
incidentes de ServiceNow para notificaciones de
AWS License ManagerNotificaciones en el Blog de
administración y gobernanza de AWS.

AWS Service Catalog: con este, los Reciba notificaciones sobre eventos de pila. Para
administradores de TI pueden crear, administrar obtener más información, consulte Restricciones
y distribuir carteras de productos aprobados para de notificación de AWS Service Catalog en la Guía
que los usuarios finales puedan obtener acceso a para administradores de AWS Service Catalog.
ellos a través de un portal personalizado.

AWS Systems Manager: con este, puede ver y Reciba notificaciones sobre el estado de los
controlar su infraestructura en AWS. comandos. Para obtener más información, consulte
Monitoreo de los cambios de estado de Systems
Manager mediante notificaciones de Amazon SNS
en la Guía del usuario de AWS Systems Manager.

15
Amazon Simple Notification
Service Guía para desarrolladores
Medios

Servicios multimedia
Servicio de AWS Beneficio del uso de Amazon SNS

Amazon Elastic Transcoder: con este, puede Reciba notificaciones cuando los trabajos cambian
convertir archivos de medios que haya guardado de estado. Para obtener más información,
en Amazon S3 en archivos de medios en los consulte Notificaciones del estado de trabajo en
formatos compatibles con los reproductores de la Guía para desarrolladores de Amazon Elastic
consumo. Transcoder.

Servicios de migración y transferencia


Servicio de AWS Beneficio del uso de Amazon SNS

AWS Application Discovery Service: con este, Reciba notificaciones de eventos mediante AWS
puede planificar su migración a la nube de AWS CloudTrail. Para obtener más información, consulte
mediante la recopilación de datos de uso y de Registro de llamadas a la API de Application
configuración de sus servidores locales. Discovery Service con AWS CloudTrail en la Guía
del usuario Application Discovery Service.

AWS Database Migration Service: migra datos de Reciba notificaciones cuando se produzcan
bases de datos locales a la nube de AWS. eventos de AWS DMS, por ejemplo, cuando
se crea o elimina una instancia de replicación.
Para obtener más información, consulte Trabajo
con eventos y notificaciones en AWS Database
Migration Service en la Guía del usuario de AWS
Database Migration Service.

AWS Snowball: utiliza dispositivos de Recibe notificaciones de trabajos de Snowball.


almacenamiento físico para transferir grandes Para obtener más información, consulte los
cantidades de datos entre Amazon S3 y la siguientes:
ubicación de almacenamiento de datos en sus
instalaciones a velocidades superiores a las de • Notificaciones Snowball en la Guía del usuario
Internet. de AWS Snowball
• Paso 5: Elija sus preferencias de notificación en
la Guía para desarrolladores de Snowball Edge
de AWS
• Paso 5: Elija sus preferencias de notificación en
la Guía del usuario de Snowcone de AWS

Servicios de redes y entrega de contenido


Servicio de AWS Beneficio del uso de Amazon SNS

Amazon API Gateway: con este, crear e Reciba mensajes publicados en un punto de
implementar sus propias API de REST y de enlace de API Gateway. Para obtener más
WebSocket a cualquier escala. información, consulte Tutorial: crear una API de
REST de API Gateway con integración de AWS en
la Guía para desarrolladores de API Gateway.

Amazon CloudFront: se utiliza para acelerar la Reciba notificaciones cuando se produzcan


distribución de contenido web estático y dinámico, alarmas basadas en métricas de CloudFront

16
Amazon Simple Notification
Service Guía para desarrolladores
Seguridad, identidad y conformidad

Servicio de AWS Beneficio del uso de Amazon SNS


tales como archivos .html, .css, .php, imágenes y especificadas. Para obtener más información,
archivos multimedia. consulte Configuración de alarmas para recibir
notificaciones en la Guía para desarrolladores de
Amazon CloudFront.

AWS Direct Connect: se utiliza para vincular su red Reciba notificaciones cuando las alarmas
interna con una ubicación de AWS Direct Connect monitorean el estado de un estado de cambio de
a través de cable estándar Ethernet de fibra óptica. conexión de AWS Direct Connect. Para obtener
más información, consulte Crear alarmas de
CloudWatch para monitorear las conexiones de
AWS Direct Connect en la Guía del usuario de
AWS Direct Connect.

Elastic Load Balancing: se utiliza para distribuir de Reciba notificaciones de alarmas que haya creado
manera automática el tráfico entrante entre varios para eventos de balanceador de carga. Para
destinos, por ejemplo, instancias de Amazon EC2, obtener más información, consulte Crear alarmas
contenedores y direcciones IP en una o varias de CloudWatch para el balanceador de carga
zonas de disponibilidad. clásico en la Guía del usuario de balanceadores de
carga clásicos.

Amazon Route 53: se utiliza para proporcionar Reciba notificaciones cuando una comprobación
registro de dominio, enrutamiento de DNS y de estado es incorrecta. Para obtener más
comprobación de estado. información, consulte Recibir una notificación
de Amazon SNS cuando una comprobación de
estado es incorrecta (consola) en la Guía para
desarrolladores de Amazon Route 53.

Amazon Virtual Private Cloud (Amazon VPC): con Reciba notificaciones cuando se produzcan
este, puede lanzar recursos de AWS en una red eventos específicos en los puntos de enlace de
virtual que haya definido. interfaz. Para obtener más información, consulte
Cree y administre una notificación para un servicio
de punto de enlace en la Guía del usuario de
Amazon VPC.

Servicios de seguridad, identidad y conformidad

Servicio de AWS Beneficio del uso de Amazon SNS

AWS Directory Service: se utiliza para ofrecer Reciba correos electrónicos o mensajes de texto
varias formas de utilizar Microsoft Active Directory (SMS) cuando cambie el estado de su directorio.
(AD) con otros servicios de AWS. Para obtener más información, consulte Configure
notificaciones de estado de directorio en la Guía de
administración de AWS Directory Service.

Amazon GuardDuty: se utiliza para monitorear Reciba notificaciones sobre nuevos tipos de
la seguridad de forma continua con el fin resultados publicados, actualizaciones para los
de identificar actividades inesperadas y tipos de resultados existentes u otros cambios en
potencialmente no autorizadas o malintencionadas funcionalidades. Para obtener más información,
en su entorno de AWS. consulte Suscripción al tema de SNS de los
anuncios de GuardDuty en la Guía del usuario de
Amazon GuardDuty.

Amazon Inspector: se utiliza para comprobar la Reciba notificaciones de eventos de Amazon


accesibilidad de red de las instancias de Amazon Inspector. Para obtener más información, consulte

17
Amazon Simple Notification
Service Guía para desarrolladores
Sin servidor

Servicio de AWS Beneficio del uso de Amazon SNS


EC2 y el estado de seguridad de las aplicaciones Configuración de un tema de SNS para las
que se ejecutan en dichas instancias. notificaciones de Amazon Inspector en la Guía del
usuario de Amazon Inspector.

Servicios sin servidores


Servicio de AWS Beneficio del uso de Amazon SNS

Amazon DynamoDB: se utiliza para ofrecer Reciba notificaciones cuando se produzcan


un rendimiento rápido y predecible con una eventos de mantenimiento. Para obtener más
escalabilidad perfecta en este servicio de bases de información, consulte Personalización de la
datos NoSQL completamente administrado. configuración del clúster DAX en laGuía para
desarrolladores de Amazon DynamoDB.

Amazon EventBridge: proporciona un flujo de datos Reciba notificaciones de eventos de EventBridge.


en tiempo real desde sus propias aplicaciones, Para obtener más información, consulte Objetivos
aplicaciones de software como servicio (SaaS) de Amazon EventBridge en la Guía del usuario de
y servicios de AWS, y luego, dirige esos datos Amazon EventBridge.
a los objetivos, incluido Amazon SNS. Antes,
EventBridge se llamaba CloudWatch Events.

AWS Lambda: con este, puede ejecutar código sin Reciba los datos de salida de la función mediante
aprovisionar ni administrar servidores. el establecimiento de un tema de SNS como
una cola de mensajes fallidos de Lambda o un
destino Lambda. Para obtener más información,
consulte Invocación asincrónica en la Guía para
desarrolladores de AWS Lambda.

Servicios de almacenamiento
Servicio de AWS Beneficio del uso de Amazon SNS

AWS Backup: se utiliza para centralizar y Recibir notificaciones de eventos de AWS Backup.
automatizar las copias de seguridad de datos en Para obtener más información, consulte Uso de
servicios de AWS en la nube y en el entorno local. Amazon SNS para seguir los eventos de AWS
Backup en la Guía para desarrolladores de AWS
Backup.

Amazon Elastic File System: se utiliza con el fin Reciba notificaciones de alarmas que haya creado
de ofrecer almacenamiento de archivos para las para eventos de Amazon EFS. Para obtener más
instancias de Amazon EC2. información, consulte Herramientas de monitoreo
automatizado en la Guía del usuario de Amazon
Elastic File System.

Amazon S3 Glacier: se utiliza con el fin de ofrecer Configure las notificaciones de un almacén para
almacenamiento para los datos que se utilizan con que, cuando se complete un trabajo, se envíe
poca frecuencia. un mensaje a un tema de SNS. Para obtener
más información, consulte Configuración de
notificaciones de almacén en Amazon S3 Glacier
en la Guía para desarrolladores de Amazon S3
Glacier.

18
Amazon Simple Notification
Service Guía para desarrolladores
Orígenes de fuentes adicionales

Servicio de AWS Beneficio del uso de Amazon SNS

Amazon Simple Storage Service (Amazon S3): se Reciba notificaciones cuando se producen
utiliza para ofrecer almacenamiento de objetos. cambios en un bucket de Amazon S3 o en una rara
instancia cuando los objetos no se replican en su
región de destino. Para obtener más información,
consulte la Explicación: configuración de un bucket
para notificaciones (tema de SNS o cola de SQS) y
Monitoreo del progreso con métricas de replicación
y notificaciones de eventos de Amazon S3 en
la Guía del usuario de Amazon Simple Storage
Service.

AWS Snowball: utiliza dispositivos de Recibe notificaciones de trabajos de Snowball.


almacenamiento físico para transferir grandes Para obtener más información, consulte los
cantidades de datos entre Amazon S3 y la siguientes:
ubicación de almacenamiento de datos en sus
instalaciones a velocidades superiores a las de • Notificaciones Snowball en la Guía del usuario
Internet. de AWS Snowball
• Paso 5: Elija sus preferencias de notificación en
la Guía para desarrolladores de Snowball Edge
de AWS
• Paso 5: Elija sus preferencias de notificación en
la Guía del usuario de Snowcone de AWS

Orígenes de fuentes adicionales


Fuente Beneficio del uso de Amazon SNS

Rangos de direcciones IP de AWS Reciba notificaciones de cambios en rangos


de IP de AWS. Para obtener más información,
consulte Rangos de direcciones IP de AWS en la
Referencia general de Amazon Web Services.

Para obtener más información acerca de la informática basada en eventos, consulte las siguientes fuentes:

• ¿Qué es una arquitectura basada en eventos?


• Informática basada en eventos con Amazon SNS y servicios de informática, almacenamiento, bases de
datos y redes de AWS en el blog informático de AWS
• Enriquecimiento de las arquitecturas basadas en eventos con canalizaciones de bifurcación de eventos
de AWS en el blog informático de AWS

Destinos de eventos de Amazon SNS


En esta página, se enumeran todos los destinos que pueden recibir información sobre eventos, agrupados
por mensajería de aplicación a aplicación (A2A) (p. 120) y notificaciones de aplicación a persona
(A2P) (p. 187).
Note
Amazon SNS presentó temas FIFO (p. 46) en octubre de 2020. En la actualidad, la mayoría de
los servicios de AWS solo admiten la recepción de eventos de temas estándar de SNS. Amazon
SQS admite la recepción de eventos de temas estándar y FIFO de SNS.

19
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de A2A

Destinos de A2A

Destino de eventos Beneficio del uso de Amazon SNS

Amazon Kinesis Data Firehose Entregue eventos a flujos de entrega con


fines de archivado y análisis. A través
de los flujos de entrega, puede entregar
eventos a destinos de AWS, como
Amazon Simple Storage Service (Amazon S3),
Amazon Redshift y Amazon OpenSearch Service
(OpenSearch Service), o a destinos de terceros,
como Datadog, New Relic, MongoDB y Splunk.
Para obtener más información, consulte
Distribución ramificada a los flujos de entrega de
Kinesis Data Firehose (p. 120).

AWS Lambda Entregue eventos a funciones para desencadenar


la ejecución de la lógica empresarial
personalizada. Para obtener más información,
consulte Distribución ramificada a las funciones
Lambda (p. 141).

Amazon SQS Entregue eventos a colas con fines de integración


de aplicaciones. Para obtener más información,
consulte Colas de distribución ramificada a
Amazon SQS (p. 142).

AWSCanalizaciones de bifurcación de eventos de Entregue eventos a copias de seguridad y


almacenamiento de eventos, búsqueda y análisis
de eventos, o canalizaciones de repetición de
eventos. Para obtener más información, consulte
Distribución ramificada a las canalizaciones de
bifurcación de eventos de AWS (p. 168).

HTTP/S Entregue eventos a webhooks externos. Para


obtener más información, consulte Distribución
ramificada a puntos de enlace HTTP/S (p. 153).

Destinos A2P

Destino de eventos Beneficio del uso de Amazon SNS

SMS Entregue eventos a teléfonos móviles


como mensajes de texto. Para obtener más
información, consulte Mensajería de texto móvil
(SMS) (p. 187).

Email Entregue eventos a las bandejas de entrada como


mensajes de correo electrónico. Para obtener más
información, consulte Notificaciones por correo
electrónico (p. 299).

Punto de enlace de plataforma Entregue eventos a teléfonos móviles como


notificaciones push nativas. Para obtener más

20
Amazon Simple Notification
Service Guía para desarrolladores
Destinos A2P

Destino de eventos Beneficio del uso de Amazon SNS


información, consulte Notificaciones de inserción
en móviles (p. 268).

AWS Chatbot Entregue eventos a las salas de chat de Amazon


Chime o a los canales de Slack. Para obtener más
información, consulte las páginas siguientes en la
Guía del administrador de AWS Chatbot:

• Configuración de AWS Chatbot con Amazon


Chime
• Configuración de AWS Chatbot Slack
• Uso de AWS Chatbot con otros servicios de
AWS

PagerDuty Proporcione información operativa a los equipos


de guardia. Para obtener más información,
consulte Ofrezca información operativa impulsada
por ML a sus equipos de guardia a través de
PagerDuty con Amazon DevOps Guru en el Blog
de administración y gobernanza de AWS.

Note

Puede entregar eventos de AWS nativos y eventos personalizados a las aplicaciones de chat:

• Eventos de AWS nativos: puede usar AWS Chatbot para enviar eventos de AWS nativos, a
través de temas de Amazon SNS, a Amazon Chime y Slack. El conjunto admitido de eventos
de AWS nativos incluye eventos de AWS Billing and Cost Management, AWS Health, AWS
CloudFormation, Amazon CloudWatch y mucho más. Para obtener más información, consulte
Uso de AWS Chatbot con otros servicios en la Guía del administrador de AWS Chatbot.
• Eventos personalizados: también puede enviar sus eventos personalizados, a través de temas
de Amazon SNS, a Amazon Chime, Slack y Microsoft Teams. Para ello, publica eventos
personalizados en un tema de SNS, que entrega los eventos a una función Lambda suscrita. La
función Lambda utiliza el webhook de la aplicación de conversación para entregar los eventos
a los destinatarios. Para obtener más información, consulte ¿Cómo uso los webhooks para
publicar mensajes de Amazon SNS en Amazon Chime, Slack o Microsoft Teams?

21
Amazon Simple Notification
Service Guía para desarrolladores
Cree de una cuenta y un usuario administrador de IAM

Configuración del acceso para


Amazon SNS
Antes de poder utilizar Amazon SNS, debe llevar a cabo los siguientes pasos.

Temas
• Paso 1: Crear una Cuenta de AWS y un usuario administrador de IAM (p. 22)
• Paso 2: Crear un usuario de IAM y obtener las credenciales de AWS (p. 22)
• Pasos siguientes (p. 23)

Paso 1: Crear una Cuenta de AWS y un usuario


administrador de IAM
Para obtener acceso a cualquier servicio de AWS, primero debe crear una Cuenta de AWS. Puede utilizar
su Cuenta de AWS para ver los informes de actividad y uso, y para administrar la autenticación y el
acceso.

1. Vaya a la página de inicio de AWS y, a continuación, elija Crear una cuenta de AWS.
2. Siga las instrucciones.

Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e introducir un
número PIN con el teclado del teléfono.
3. Cuando termine de crear su Cuenta de AWS, siga las instrucciones que se indican en la Guía del
usuario de IAM para crear su primer usuario administrador y grupo de IAM.

Paso 2: Crear un usuario de IAM y obtener las


credenciales de AWS
Para evitar el uso del usuario administrador de IAM para realizar las operaciones de Amazon SNS, es una
práctica recomendada crear un usuario de IAM para cada persona que necesite acceso administrativo a
Amazon SNS.

Para trabajar con Amazon SNS, necesita la política AmazonSNSFullAccess y las credenciales de AWS
asociadas a su usuario de IAM. Estas credenciales se componen de un ID de clave de acceso y una clave
de acceso secreta. Para obtener más información, consulte ¿Qué es IAM? en la Guía del usuario de IAM y
AWSCredenciales de seguridad de en la Referencia general de AWS.

1. Inicie sesión en la consola de AWS Identity and Access Management.


2. Elija Users (Usuarios), Add user (Añadir usuario).
3. En User name (Nombre de usuario), escriba un nombre de usuario, como AmazonSNSAdmin.
4. Seleccione Programmatic access y AWS Management Console access.
5. En Console password (Contraseña de la consola), establezca la contraseña de la consola y, a
continuación, elija Next: Permissions (Siguiente: Permisos).

22
Amazon Simple Notification
Service Guía para desarrolladores
Pasos siguientes

6. En la página Set permissions (Establecer permisos), elija Attach existing policies directly (Adjuntar
políticas existentes directamente).
7. Escriba AmazonSNS en el filtro, seleccione AmazonSNSFullAccess y, después, elija Next: Tags
(Siguiente: Etiquetas).
8. En la página Add tags (optional) (Añadir etiquetas [opcional]), elija Next: Review (Siguiente: Revisar).
9. En la página Review, elija Create user.

Se crea el usuario de IAM y se muestra el ID de clave de acceso, por ejemplo:

AKIAIOSFODNN7EXAMPLE
10. Para mostrar su clave de acceso secreta, elija Show (Mostrar), por ejemplo:

wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Important

Puede ver o descargar su clave de acceso secreta solo cuando crea sus credenciales (sin
embargo, puede crear nuevas credenciales en cualquier momento).
11. Para descargar sus credenciales, elija Download .csv (Descargar .csv). Mantenga este archivo en un
lugar seguro.

Pasos siguientes
Ahora que ya puede trabajar con Amazon SNS, primero (p. 24) establezca un tema, cree una
suscripción para el tema, publique un mensaje en el tema y elimine la suscripción y el tema.

23
Amazon Simple Notification
Service Guía para desarrolladores
Requisitos previos

Introducción a Amazon SNS


Con esta sección, podrá familiarizarse con Amazon SNS, ya que se le mostrará cómo administrar temas,
suscripciones y mensajes mediante la consola de Amazon SNS.

Temas
• Requisitos previos (p. 24)
• Paso 1: Crear un tema (p. 24)
• Paso 2: Crear una suscripción Crear una suscripción al tema (p. 24)
• Paso 3: Publicar un mensaje en el tema (p. 25)
• Paso 4: Eliminar la suscripción y el tema (p. 25)
• Pasos siguientes (p. 25)

Requisitos previos
Antes de comenzar, complete los pasos de Configuración del acceso para Amazon SNS (p. 22).

Paso 1: Crear un tema


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación izquierdo, elija Topics (Temas).
3. En la página Temas, elija Crear tema.
4. De forma predeterminada, la consola crea un tema FIFO. Elija Standard (Estándar).
5. En la sección Detalles, ingrese un nombre para el tema, como MiTema.
6. Desplácese hasta el final del formulario y elija Crear tema.

En la consola se abre la página Detalles del nuevo tema.

Paso 2: Crear una suscripción Crear una


suscripción al tema
1. En el panel de navegación izquierdo, elija Subscriptions (Suscripciones).
2. En la página Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).
3. En la página Crear una suscripción, elija el campo ARN del tema para ver una lista de los temas de la
Cuenta de AWS.
4. Elija el tema que creó en el paso anterior.
5. En Protocol (Protocolo), elija Email (Correo electrónico).
6. En Punto de enlace, ingrese una dirección de correo electrónico que pueda utilizar para recibir
notificaciones.
7. Elija Create subscription (Crear suscripción).

En la consola se abre la página Detalles de la nueva suscripción.


8. Revise la bandeja de entrada de correo electrónico y elija Confirmar la suscripción en el correo
electrónico de Notificaciones de AWS. El ID de remitente suele ser "no-reply@[Link]".

24
Amazon Simple Notification
Service Guía para desarrolladores
Paso 3: Publicar un mensaje en el tema

9. En Amazon SNS, se abre su navegador web y se muestra una confirmación de suscripción con su ID
de suscripción.

Paso 3: Publicar un mensaje en el tema


1. En el panel de navegación izquierdo, elija Topics (Temas).
2. En la página Temas, elija el tema que creó antes y, a continuación, Publicar mensaje.

En la consola, se abre la página Publicar mensaje en un tema.


3. (Opcional) En la sección Detalles del mensaje, ingrese un Asunto, como, por ejemplo:

Hello from Amazon SNS!

4. En la sección Cuerpo del mensaje, elija Carga útil idéntica para todos los protocolos de entrega y, a
continuación, ingrese el cuerpo del mensaje, como, por ejemplo:

Publishing a message to an SNS topic.

5. Elija Publish message (Publicar mensaje).

El mensaje se publica en el tema. Además, en la consola, se abre la página Detalles.


6. Revise la bandeja de entrada de correo electrónico para ver si recibió un correo electrónico de
Amazon SNS con el mensaje publicado.

Paso 4: Eliminar la suscripción y el tema


1. En el panel de navegación, seleccione Subscriptions (Suscripciones).
2. En la página Suscripciones, elija una suscripción confirmada y, a continuación, Eliminar.
Note

No puede eliminar una confirmación pendiente. Después de 3 días, Amazon SNS lo elimina
de manera automática.
3. En el cuadro de diálogo Eliminar suscripción, elija Eliminar.

Se elimina la suscripción.
4. En el panel de navegación, elija Topics (Temas).
5. En la página Temas, elija un tema y, a continuación, Eliminar.
Important

Cuando se elimina un tema, también se eliminan todas las suscripciones al tema.


6. En el cuadro de diálogo Eliminar tema MiTema, ingrese delete me y, a continuación, elija Eliminar.

Se elimina el tema.

Pasos siguientes
Ahora que ha creado un tema con una suscripción y enviado mensajes a este, es posible que desee
probar lo siguiente:

25
Amazon Simple Notification
Service Guía para desarrolladores
Pasos siguientes

• Explore el Centro de desarrolladores de AWS.


• Obtenga información sobre la protección de los datos en la sección Seguridad (p. 394).
• Habilite el cifrado en el lado de servidor para un tema. (p. 401)
• Habilite el cifrado en el lado de servidor para un tema con una cola suscrita de Amazon Simple Queue
Service (Amazon SQS) cifrada (p. 402).
• Suscriba Canalizaciones de bifurcación de eventos de AWS (p. 180) a un tema.

26
Amazon Simple Notification
Service Guía para desarrolladores
Creación de un tema

Configuración de Amazon SNS


Utilice la consola de Amazon SNS para crear y configurar temas y suscripciones de Amazon SNS. Para
obtener más información acerca de Amazon SNS, consulte ¿Qué es Amazon SNS? (p. 1).

Temas
• Creación de un tema de Amazon SNS (p. 27)
• Suscripción a un tema de Amazon SNS (p. 34)
• Eliminación de una suscripción y un tema de Amazon SNS (p. 35)
• Etiquetado de temas de Amazon SNS (p. 40)

Creación de un tema de Amazon SNS


Un tema de Amazon SNS es un punto de acceso lógico que actúa como un canal de comunicación. Con
un tema, puede agrupar varios puntos de enlace (como AWS Lambda, Amazon SQS, HTTP/S o una
dirección de correo electrónico).

Para difundir los mensajes de un sistema productor de mensajes (por ejemplo, un sitio web de comercio
electrónico) que trabaja con otros servicios que requieren sus mensajes (por ejemplo, sistemas de pago y
tramitación), puede crear un tema para su sistema productor.

La primera tarea, y la más habitual, en Amazon SNS es la creación de un tema. En esta página, se
muestra cómo puede utilizar la AWS Management Console, el AWS SDK for Java y el AWS SDK for .NET
para crear un tema.

Durante la creación, elige un tipo de tema (estándar o FIFO) y asigna un nombre al tema. Después de un
tema, no podrá modificar el tipo o el nombre del tema. Todas las demás opciones de configuración son
opcionales durante la creación del tema y puede editarlas más adelante.
Important

No agregue información de identificación personal (PII) ni ninguna otra información confidencial


o sensible en los nombres de los temas. Los nombres de los temas están disponibles para otros
servicios de Amazon Web Services, incluido CloudWatch Logs. Los nombres de los temas no
están diseñados para contener información privada o confidencial.

Temas
• Para crear un tema mediante la AWS Management Console (p. 27)
• Para crear un tema mediante el SDK de AWS, siga estos pasos: (p. 29)

Para crear un tema mediante la AWS Management


Console
1. Inicie sesión en la consola de Amazon SNS.
2. Realice alguna de las siguientes acciones:

• Si no se han creado temas en su Cuenta de AWS, lea la descripción de Amazon SNS en la página
de inicio.

27
Amazon Simple Notification
Service Guía para desarrolladores
AWS Management Console

• Si se han creado temas en su Cuenta de AWS, en el panel de navegación, elija Temas.


3. En la página Temas, elija Crear tema.
4. En la página Crear tema, en la sección Detalles, haga lo siguiente:

a. Para Tipo, elija un tipo de tema (estándar o FIFO).


b. Ingrese un nombre para el nuevo tema. En el caso de un tema FIFO (p. 46), agregue .fifo al
final del nombre.
c. (Opcional) Ingrese un nombre para mostrar para el tema.
d. (Opcional) En el caso de un tema FIFO, puede elegir Desduplicación de mensajes basada en
el contenido para habilitar la desduplicación de mensajes predeterminada. Para obtener más
información, consulte Desduplicación de mensajes para temas FIFO (p. 57).
5. (Opcional) Expanda la sección Encryption (Cifrado) y haga lo siguiente. Para obtener más información,
consulte Cifrado en reposo (p. 395).

a. Elija Enable encryption (Habilitar cifrado).


b. Especifique la clave maestra del cliente (CMK). Para obtener más información, consulte Términos
clave (p. 396).

Se muestran los valores de Description (Descripción), Account (Cuenta) y CMK ARN (ARN de
CMK) de cada CMK.
Important

Si no es el propietario de la CMK o si ha iniciado sesión con una cuenta que no tiene los
permisos kms:ListAliases y kms:DescribeKey, no podrá ver la información sobre
la CMK en la consola de Amazon SNS.
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 Guía para desarrolladores de AWS Key Management Service.

• De forma predeterminada, se selecciona la CMK administrada por AWS en Amazon SNS alias/
aws/sns (predeterminado).
Note

Tenga en cuenta lo siguiente:


• La primera vez que use la AWS Management Console con el fin de especificar la
CMK administrada por AWS en Amazon SNS para un tema, AWS KMS crea la CMK
administrada por AWS en Amazon SNS.
• Como alternativa, la primera vez que utilice la acción Publish sobre un tema con
SSE habilitado, AWS KMS crea la CMK administrada por AWS en Amazon SNS.
• Para usar una CMK personalizada de su cuenta de AWS, elija el campo Clave maestra del
cliente (CMK) y, a continuación, la CMK personalizada de la lista.
Note

Para obtener instrucciones acerca de cómo crear CMK personalizadas, consulte


Creación de claves en la Guía para desarrolladores de AWS Key Management
Service.
• Para usar un ARN de CMK personalizado desde su cuenta de AWS o desde otra cuenta de
AWS, ingréselo en el campo Clave maestra del cliente (CMK).
6. (Opcional) De forma predeterminada, solo el propietario del tema puede publicar en el tema o
suscribirse a este. Para configurar permisos de acceso adicionales, expanda la sección Access policy
(Política de acceso). Para obtener más información, consulte Identity and Access Management en
Amazon SNS (p. 416) y Ejemplos de casos de control de acceso con Amazon SNS (p. 427).

28
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

Note

Cuando se crea un tema a través de la consola, la política predeterminada utiliza la clave de


condición aws:SourceOwner. Esta clave es similar a aws:SourceAccount.
7. (Opcional) Para configurar la forma en que Amazon SNS reintenta los intentos de entrega de
mensajes con error, expanda la sección Política de reintentos de entrega (HTTP/S). Para obtener más
información, consulte Reintento de entrega de mensajes de Amazon SNS (p. 108).
8. (Opcional) Para configurar la forma en que Amazon SNS registra la entrega de mensajes en
CloudWatch, expanda la sección Registro del estado de entrega. Para obtener más información,
consulte Estado de entrega de mensajes de Amazon SNS (p. 102).
9. (Opcional) Para añadir etiquetas de metadatos al tema, expanda la sección Tags (Etiquetas), escriba
un valor en Key (Clave) y en Value (Valor) (opcional) y elija Add tag (Añadir etiqueta). Para obtener
más información, consulte Etiquetado de temas de Amazon SNS (p. 40).
10. Elija Create new topic.

Se crea el tema y se muestra la página MiTema.

El nombre del tema, el ARN, (opcional) el nombre para mostrar y el ID de la cuenta AWS del
propietario del tema se muestran en la sección Detalles.
11. Copie el ARN del tema en el portapapeles, por ejemplo:

arn:aws:sns:us-east-2:123456789012:MyTopic

Para crear un tema mediante el SDK de AWS, siga


estos pasos:
Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

En los siguientes ejemplos de código, se muestra cómo crear un tema de Amazon SNS.

.NET

AWS SDK for .NET

/// <summary>
/// Creates a new SNS topic using the supplied topic name.
/// </summary>
/// <param name="client">The initialized SNS client object used to
/// create the new topic.</param>
/// <param name="topicName">A string representing the topic name.</param>
/// <returns>The Amazon Resource Name (ARN) of the created topic.</returns>
public static async Task<string>
CreateSNSTopicAsync(IAmazonSimpleNotificationService client, string topicName)
{
var request = new CreateTopicRequest
{
Name = topicName,
};

var response = await [Link](request);

29
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

return [Link];
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::String topic_name = argv[1];
Aws::SNS::SNSClient sns;

Aws::SNS::Model::CreateTopicRequest ct_req;
ct_req.SetName(topic_name);

auto ct_out = [Link](ct_req);

if (ct_out.IsSuccess())
{
std::cout << "Successfully created topic " << topic_name << std::endl;
}
else
{
std::cout << "Error creating topic " << topic_name << ":" <<
ct_out.GetError().GetMessage() << std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Go.

Java

SDK para Java 2.x

public static String createSNSTopic(SnsClient snsClient, String topicName ) {

CreateTopicResponse result = null;

30
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

try {
CreateTopicRequest request = [Link]()
.name(topicName)
.build();

result = [Link](request);
return [Link]();
} catch (SnsException e) {

[Link]([Link]().errorMessage());
[Link](1);
}
return "";
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {CreateTopicCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { Name: "TOPIC_NAME" }; //TOPIC_NAME

const run = async () => {


try {
const data = await [Link](new CreateTopicCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for JavaScript.

31
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun createSNSTopic(topicName: String): String {

val request = CreateTopicRequest {


name = topicName
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
return [Link]()
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Create a Simple Notification Service topics in your AWS account at the requested
region.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$topicname = 'myTopic';

try {
$result = $SnSclient->createTopic([
'Name' => $topicname,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());

32
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def create_topic(self, name):


"""
Creates a notification topic.

:param name: The name of the topic to create.


:return: The newly created topic.
"""
try:
topic = self.sns_resource.create_topic(Name=name)
[Link]("Created topic %s with ARN %s.", name, [Link])
except ClientError:
[Link]("Couldn't create topic %s.", name)
raise
else:
return topic

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def topic_created?(sns_client, topic_name)

sns_client.create_topic(name: topic_name)
rescue StandardError => e
puts "Error while creating the topic named '#{topic_name}': #{[Link]}"
end

# Full example call:


def run_me
topic_name = 'TOPIC_NAME'

33
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de a un tema

region = 'REGION'

sns_client = Aws::SNS::[Link](region: region)

puts "Creating the topic '#{topic_name}'..."

if topic_created?(sns_client, topic_name)
puts 'The topic was created.'
else
puts 'The topic was not created. Stopping program.'
exit 1
end
end

run_me if $PROGRAM_NAME == __FILE__

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Ruby.

Rust

SDK para Rust


Note

Esta documentación es para un SDK en versión preliminar. El SDK está sujeto a cambios
y no se debe utilizar en producción.

async fn make_topic(client: &Client, topic_name: &str) -> Result<(), Error> {


let resp = client.create_topic().name(topic_name).send().await?;

println!(
"Created topic with ARN: {}",
resp.topic_arn().unwrap_or_default()
);

Ok(())
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API del SDK para
Rust de AWS.

Suscripción a un tema de Amazon SNS


Para recibir los mensajes publicados en un tema (p. 27), tiene que suscribirse a un punto de
enlace (p. 35) en el tema. Cuando suscriba un punto de enlace a un tema, el punto de enlace
comenzará a recibir todos los mensajes publicados en el tema asociado.
Note

En los puntos de enlace HTTP(S), las direcciones de correo electrónico y los recursos de AWS de
otras Cuentas de AWS, se debe confirmar la suscripción antes de poder recibir mensajes.

34
Amazon Simple Notification
Service Guía para desarrolladores
Para suscribir un punto de enlace a un
tema de Amazon SNS, siga estos pasos:

Para suscribir un punto de enlace a un tema de


Amazon SNS, siga estos pasos:
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación izquierdo, elija Subscriptions (Suscripciones).
3. En la página Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).
4. En la página Create subscription (Crear suscripción), en la sección Details (Detalles), haga lo
siguiente:

a. En ARN de tema, elija el nombre de recurso de Amazon (ARN) de un tema.


b. En Protocolo, elija un tipo de punto de enlace. Los tipos de puntos de enlace disponibles son:

• HTTP/HTTPS (p. 153)


• Correo electrónico/Correo electrónico JSON (p. 299)
• Amazon Kinesis Data Firehose (p. 120)
• Amazon SQS (p. 142)
Note
Para suscribirse a un tema de SNS FIFO (p. 46), elija esta opción.
• AWS Lambda (p. 141)
• Punto de enlace de aplicación de plataforma (p. 268)
• SMS (p. 187)
c. En Punto de enlace, ingrese el valor del punto de enlace, como una dirección de correo
electrónico o el ARN de una cola de Amazon SQS.
d. Solo para los puntos de enlace de Kinesis Data Firehose: en ARN del rol de suscripción,
especifique el ARN rol de IAM que creó para escribir en flujos de entrega de Kinesis Data
Firehose. Para obtener más información, consulte Requisitos previos para suscribir flujos de
entrega de Kinesis Data Firehose a temas de Amazon SNS (p. 121).
e. (Opcional) En los puntos de enlace Kinesis Data Firehose, Amazon SQS, HTTP/S, también puede
habilitar la entrega de mensajes sin procesar. Para obtener más información, consulte Entrega de
mensajes sin procesar de Amazon SNS (p. 97).
f. (Opcional) Para configurar una política de filtro, expanda la sección Política de filtro de
suscripción. Para obtener más información, consulte Políticas de filtro de suscripciones de
Amazon SNS (p. 84).
g. (Opcional) Para configurar una cola de mensajes fallidos en la suscripción, expanda la sección
Política de reconducción (cola de mensajes fallidos). Para obtener más información, consulte
Colas de mensajes fallidos (DLQ) de Amazon SNS (p. 112).
h. Seleccione Create subscription.

En la consola se crea la suscripción y se abre la página Detalles de la suscripción.

Eliminación de una suscripción y un tema de


Amazon SNS
Puede eliminar una suscripción de un tema de Amazon SNS o puede eliminar todo el tema. Tenga en
cuenta que no puede eliminar una suscripción que esté pendiente de confirmación. Después de tres días,
Amazon SNS elimina de manera automática la suscripción no confirmada.

Temas

35
Amazon Simple Notification
Service Guía para desarrolladores
AWS Management Console

• Para eliminar una suscripción y un tema de Amazon SNS mediante la AWS Management Console,
siga estos pasos: (p. 36)
• Para eliminar una suscripción y un tema mediante la SDK de AWS, siga estos pasos: (p. 36)

Para eliminar una suscripción y un tema de Amazon


SNS mediante la AWS Management Console, siga
estos pasos:
Para eliminar una suscripción mediante la AWS Management Console, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación izquierdo, elija Subscriptions (Suscripciones).
3. En la página Suscripciones, seleccione una suscripción con el estado Confirmado y, a continuación,
elija Eliminar.
4. En el cuadro de diálogo Eliminar suscripción, elija Eliminar.

La consola elimina la suscripción.

Cuando se elimina un tema, Amazon SNS elimina las suscripciones asociadas a este.

Para eliminar un tema mediante la AWS Management Console, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación izquierdo, elija Topics (Temas).
3. En la página Temas, seleccione un tema y, a continuación, elija Eliminar.
4. En el cuadro de diálogo Eliminar tema, ingrese delete me y, a continuación, elija Eliminar.

La consola elimina el tema.

Para eliminar una suscripción y un tema mediante la


SDK de AWS, siga estos pasos:
Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

En los siguientes ejemplos de código, se muestra cómo eliminar un tema de Amazon SNS y todas las
suscripciones a ese tema.

.NET

AWS SDK for .NET

/// <summary>
/// This example deletes an existing Amazon Simple Notification Service
/// (Amazon SNS) topic. The example was created using the AWS SDK for .NET
/// version 3.7 and .NET Core 5.0.
/// </summary>
public class DeleteSNSTopic

36
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

{
public static async Task Main()
{
string topicArn = "arn:aws:sns:us-east-2:704825161248:ExampleSNSTopic";
IAmazonSimpleNotificationService client = new
AmazonSimpleNotificationServiceClient();

var response = await [Link](topicArn);


}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::String topic_arn = argv[1];
Aws::SNS::SNSClient sns;

Aws::SNS::Model::DeleteTopicRequest dt_req;
dt_req.SetTopicArn(topic_arn);

auto dt_out = [Link](dt_req);

if (dt_out.IsSuccess())
{
std::cout << "Successfully deleted topic " << topic_arn << std::endl;
}
else
{
std::cout << "Error deleting topic " << topic_arn << ":" <<
dt_out.GetError().GetMessage() << std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for C++.

Java

SDK para Java 2.x

public static void deleteSNSTopic(SnsClient snsClient, String topicArn ) {

try {
DeleteTopicRequest request = [Link]()

37
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

.topicArn(topicArn)
.build();

DeleteTopicResponse result = [Link](request);


[Link]("\n\nStatus was " +
[Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Load the AWS SDK for [Link]

// Import required AWS SDK clients and commands for [Link]


import {DeleteTopicCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { TopicArn: "TOPIC_ARN" }; //TOPIC_ARN

const run = async () => {


try {
const data = await [Link](new DeleteTopicCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for JavaScript.

38
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun deleteSNSTopic(topicArnVal: String) {

val request = DeleteTopicRequest {


topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("$topicArnVal was successfully deleted.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Deletes a SNS topic and all its subscriptions.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->deleteTopic([
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

39
Amazon Simple Notification
Service Guía para desarrolladores
Etiquetado

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def delete_topic(topic):
"""
Deletes a topic. All subscriptions to the topic are also deleted.
"""
try:
[Link]()
[Link]("Deleted topic %s.", [Link])
except ClientError:
[Link]("Couldn't delete topic %s.", [Link])
raise

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for Python (Boto3).

Etiquetado de temas de Amazon SNS


Amazon SNS admite el etiquetado de temas de Amazon SNS. Esto puede ayudarle a realizar un
seguimiento de los costos asociados a sus temas y administrarlos, además de proporcionar una mayor
seguridad en sus Políticas de AWS Identity and Access Management (IAM) y permitirle realizar búsquedas
o filtrar fácilmente en miles de temas. El etiquetado le permite administrar los temas de Amazon SNS
mediante AWSResource Groups. Para obtener más información sobre Resource Groups, consulte la Guía
del usuario de AWS Resource Groups.

Temas
• Etiquetado para asignación de costos (p. 40)
• Etiquetado para el control de acceso (p. 41)
• Etiquetado para búsqueda y filtrado de recursos (p. 42)
• Configuración de etiquetas para un tema de Amazon SNS (p. 42)

Etiquetado para asignación de costos


Para organizar e identificar los recursos de Amazon SNS para asignación de costos, puede agregar
etiquetas que identifiquen el propósito de un tema. Esto es útil especialmente cuando dispone de muchos
temas. Puede utilizar las etiquetas de asignación de costos para organizar la factura de AWS de modo que

40
Amazon Simple Notification
Service Guía para desarrolladores
Etiquetado para el control de acceso

refleje su propia estructura de costos. Para ello, regístrese para obtener una factura de su cuenta de AWS
que incluya los valores y claves de etiquetas. Para obtener más información, consulte Configuración de un
informe de asignación de costos mensual en la Guía del usuario de Administración y facturación y costos
de AWS.

Por ejemplo, podría agregar etiquetas que representen el centro de costos y el objetivo de sus temas de
Amazon SNS, como se indica a continuación:

Recurso Clave Valor

Tema 1 Centro de costos 43 289

Aplicación Procesamiento de pedidos

Tema 2 Centro de costos 43 289

Aplicación Procesamiento de pagos

Tema 3 Centro de costos 76 585

Aplicación Archivado

Este plan de etiquetado le permite agrupar dos temas relacionados con el rendimiento de las máquinas de
estado en el mismo centro de costos, mientras etiqueta una actividad no relacionada con una etiqueta de
asignación de costos distinta.

Etiquetado para el control de acceso


AWS Identity and Access Management permite controlar el acceso a los recursos en función de las
etiquetas. Después de etiquetar sus recursos, proporcione información sobre las etiquetas de recurso en
el elemento de condición de una política de IAM para administrar el acceso basado en etiquetas. Para
obtener información sobre cómo etiquetar los recursos mediante la consola de Amazon SNS (p. 43) o el
SDK de AWS (p. 43), consulte Configuración de etiquetas (p. 42).

Puede restringir el acceso a una identidad de IAM. Por ejemplo, puede restringir a Publish y
PublishBatch el acceso a todos los temas de Amazon SNS que incluyan una etiqueta con la clave
environment y el valor production, al mismo tiempo que permite el acceso a todos los demás temas
de Amazon SNS. En el ejemplo siguiente, la política restringe la capacidad de publicar mensajes en temas
etiquetados con production, al tiempo que permite que los mensajes se publiquen en temas etiquetados
con development. Para obtener más información, consulte Control del acceso mediante etiquetas en la
Guía del usuario de IAM.
Note

La configuración del permiso de IAM para Publish establece permisos para Publish y
PublishBatch.

{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:*:*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/environment": "production"
}

41
Amazon Simple Notification
Service Guía para desarrolladores
Etiquetado para búsqueda y filtrado de recursos

}
},
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:*:*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/environment": "development"
}
}
}]
}

Etiquetado para búsqueda y filtrado de recursos


Una cuenta de AWS puede tener decenas de miles de temas de Amazon SNS (consulte Cuotas de
Amazon SNS para obtener más información). Al etiquetar los temas, puede simplificar el proceso de
búsqueda o filtrado de temas.

Por ejemplo, puede tener cientos de temas asociados a su entorno de producción. En lugar de tener que
buscar manualmente estos temas, puede consultarlos todos con una etiqueta determinada:

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class Example {


public static void main(String[] args) {
// Query Amazon SNS Topics with tag "keyA" as "valueA"
final String QUERY = "{\"ResourceTypeFilters\":[\"AWS::SNS::Topic\"],\"TagFilters
\":[{\"Key\":\"keyA\", \"Values\":[\"valueA\"]}]}";

// Initialize ResourceGroup client


AWSResourceGroups awsResourceGroups = AWSResourceGroupsClientBuilder
.standard()
.build();

// Query all resources with certain tags from ResourceGroups


SearchResourcesResult result = [Link](
new SearchResourcesRequest().withResourceQuery(
new ResourceQuery()
.withType(QueryType.TAG_FILTERS_1_0)
.withQuery(QUERY)
));
[Link]("SNS Topics with certain tags are " +
[Link]());
}
}

Configuración de etiquetas para un tema de Amazon


SNS
Esta página muestra cómo puede utilizar la AWS Management Console, un SDK de AWS y la CLI de AWS
para configurar etiquetas para un tema de Amazon SNS (p. 40).

42
Amazon Simple Notification
Service Guía para desarrolladores
Configuraciones de etiquetas

Important

No agregue información de identificación personal (PII) ni otra información confidencial en las


etiquetas. Las etiquetas son accesibles para otros servicios de Amazon Web Services, incluida la
facturación. Las etiquetas no se han diseñado para usarse con información privada o confidencial.

Temas
• Enumerar, agregar y quitar etiquetas de metadatos de un tema de Amazon SNS mediante la AWS
Management Console (p. 43)
• Agregar etiquetas a un tema mediante un SDK de AWS (p. 43)
• Administración de las etiquetas con las acciones de la API de Amazon SNS (p. 45)
• Acciones de API compatibles con ABAC (p. 45)

Enumerar, agregar y quitar etiquetas de metadatos de un tema


de Amazon SNS mediante la AWS Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. En la página Topics (Temas) seleccione un tema y Delete (Eliminar).
4. Expanda la sección Tags (Etiquetas).

Se enumeran las etiquetas añadidas al tema.


5. Modifique las etiquetas del tema:

• Para agregar una etiqueta, elija Add tag (Agregar etiqueta) y, opcionalmente, ingrese las opciones
Key (Clave) y Value (Valor).
• Para eliminar una etiqueta, elija Remove tag (Quitar etiqueta) junto a un par clave-valor.
6. Elija Save changes.

Agregar etiquetas a un tema mediante un SDK de AWS


Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

En los siguientes ejemplos de código, se muestra cómo agregar etiquetas a un tema de Amazon SNS.

Java

SDK para Java 2.x

public static void addTopicTags(SnsClient snsClient, String topicArn) {

try {
Tag tag = [Link]()
.key("Team")
.value("Development")
.build();

Tag tag2 = [Link]()


.key("Environment")
.value("Gamma")

43
Amazon Simple Notification
Service Guía para desarrolladores
Configuraciones de etiquetas

.build();

List<Tag> tagList = new ArrayList<>();


[Link](tag);
[Link](tag2);

TagResourceRequest tagResourceRequest = [Link]()


.resourceArn(topicArn)
.tags(tagList)
.build();

[Link](tagResourceRequest);
[Link]("Tags have been added to "+topicArn);

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte TagResource en la Referencia de la API de AWS SDK
for Java 2.x.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun addTopicTags(topicArn: String) {

val tag = Tag {


key ="Team"
value = "Development"
}

val tag2 = Tag {


key = "Environment"
value = "Gamma"
}

val tagList = mutableListOf<Tag>()


[Link](tag)
[Link](tag2)

val request = TagResourceRequest {


resourceArn=topicArn
tags = tagList
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("Tags have been added to $topicArn")
}
}

44
Amazon Simple Notification
Service Guía para desarrolladores
Configuraciones de etiquetas

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte TagResource en la Referencia de la API de AWS SDK
para Kotlin.

Administración de las etiquetas con las acciones de la API de


Amazon SNS
Para administrar etiquetas mediante la API de Amazon SNS, utilice las siguientes acciones de la API:

• ListTagsForResource
• TagResource
• UntagResource

Acciones de API compatibles con ABAC


A continuación, se muestra una lista de acciones de API que compatibles con el control de acceso basado
en atributos (ABAC). Para obtener más información sobre ABAC, consulte ¿Qué es ABAC para AWS? en
la Guía del usuario de IAM.

• AddPermission
• ConfirmSubscription
• DeleteTopic
• GetSubscriptionAttributes
• GetTopicAttributes
• ListSubscriptionsByTopic
• ListTagsForResource
• Publish
• PublishBatch
• RemovePermission
• SetSubscriptionAttributes
• SetTopicAttributes
• Subscribe
• TagResource
• Unsubscribe
• UntagResource

45
Amazon Simple Notification
Service Guía para desarrolladores
Caso de uso de temas FIFO

Ordenación y desduplicación de
mensajes (temas FIFO)
Puede utilizar los temas FIFO de Amazon SNS (primero en entrar, primero en salir) y las colas de Amazon
Simple Queue Service (Amazon SQS) juntos para proporcionar un orden estricto y una desduplicación
de mensajes. Las capacidades FIFO de cada uno de estos servicios funcionan en conjunto para actuar
como un servicio completamente administrado con el fin de integrar aplicaciones distribuidas que requieren
coherencia de datos casi en tiempo real.

Temas
• Ejemplo de caso de uso de temas FIFO (p. 46)
• Detalles de pedido de mensajes para temas FIFO (p. 48)
• Agrupación de mensajes para temas FIFO (p. 53)
• Entrega de mensajes para temas FIFO (p. 54)
• Filtrado de mensajes para temas FIFO (p. 55)
• Desduplicación de mensajes para temas FIFO (p. 57)
• Seguridad de mensajes para temas FIFO (p. 59)
• Durabilidad de mensajes para temas FIFO (p. 59)
• Ejemplos de código para temas FIFO (p. 62)

Ejemplo de caso de uso de temas FIFO


En el siguiente ejemplo, se describe una plataforma de comercio electrónico creada por un fabricante de
partes de automóviles con temas FIFO de Amazon SNS y colas FIFO de Amazon SQS. La plataforma se
compone de tres aplicaciones sin servidor:

• Los administradores de inventarios utilizan una aplicación de administración de precios para establecer
el precio de cada elemento en stock. En esta empresa, los precios de los productos pueden cambiar en
función de la fluctuación del cambio de divisas, la demanda del mercado y los cambios en la estrategia
de ventas. La aplicación de administración de precios utiliza una función AWS Lambda que publica
actualizaciones de precios en un tema FIFO de SNS cada vez que cambian los precios.
• Con una aplicación mayorista, se proporciona el backend para un sitio web en el que los talleres de
carrocería de automóviles y fabricantes de automóviles pueden comprar partes de automóviles de la
compañía a granel. Para obtener notificaciones de cambio de precio, la aplicación mayorista suscribe su
cola de SQS FIFO al tema de SNS FIFO de la aplicación de administración de precios.
• Con una aplicación minorista, se proporciona el backend para otro sitio web en el que los propietarios de
automóviles y entusiastas de ajuste de automóviles pueden comprar partes de automóviles individuales
para sus vehículos. Para obtener notificaciones de cambio de precio, la aplicación minorista también
suscribe su cola FIFO de SQS al tema de SNS FIFO de la aplicación de administración de precios.

46
Amazon Simple Notification
Service Guía para desarrolladores
Caso de uso de temas FIFO

Para que las aplicaciones mayoristas y minoristas reciban actualizaciones de precios en el orden correcto,
en la aplicación de administración de precios se debe utilizar un sistema de distribución de mensajes
estrictamente ordenado. Si utiliza los temas FIFO de SNS y las colas FIFO SQS, podrá procesar los
mensajes en orden y sin duplicaciones. Para obtener más información, consulte Detalles de pedido de
mensajes para temas FIFO (p. 48). Para ver los fragmentos de código que implementan este caso de
uso, consulte Ejemplos de código para temas FIFO (p. 62).

47
Amazon Simple Notification
Service Guía para desarrolladores
Detalles de los pedidos de mensajes

Detalles de pedido de mensajes para temas FIFO


Con un tema FIFO de Amazon SNS, se entregan mensajes a las colas FIFO de Amazon SQS suscritas en
el orden exacto en que los mensajes se publican en el tema. Con una cola FIFO SQS, los consumidores
de las colas reciben los mensajes en el orden exacto en que se envían los mensajes a la cola. En esta
configuración, se conserva el orden de los mensajes de extremo a extremo, tal como se muestra en el
ejemplo siguiente basado en Ejemplo de caso de uso de temas FIFO (p. 46).

48
Amazon Simple Notification
Service Guía para desarrolladores
Detalles de los pedidos de mensajes

Tenga en cuenta que no hay pedidos implícitos de los suscriptores. En el ejemplo siguiente, se muestra
que el mensaje m1 se entrega primero al suscriptor mayorista y, luego, al suscriptor minorista. El mensaje
m2 se entrega primero al suscriptor minorista y, luego, al suscriptor mayorista. Si bien los dos mensajes se
entregan a los suscriptores en un orden diferente, el orden de mensajes se conserva para cada suscriptor.
Cada suscriptor se percibe de forma aislada de cualquier otro suscriptor.

Si un suscriptor de cola FIFO de SQS se vuelve inaccesible, puede desconectarse. Por ejemplo,
supongamos que el propietario de la cola de aplicaciones mayorista cambia por error la política de colas

49
Amazon Simple Notification
Service Guía para desarrolladores
Detalles de los pedidos de mensajes

de Amazon SQS de forma que se impida que la entidad principal de servicio de Amazon SNS entregue
mensajes a la cola. En este caso, las actualizaciones de precios mayoristas no se entregan, pero las
actualizaciones de precios minoristas sí, lo que provoca que los suscriptores no estén sincronizados.
Cuando el propietario de la cola de aplicaciones mayoristas corrige la política de colas, Amazon SNS
reanuda la entrega de mensajes a la cola suscrita. Todos los mensajes que se publicaron en el tema
mientras la cola estaba mal configurada se eliminan, a menos que la suscripción tenga una cola de
mensajes fallidos (p. 112) configurada.

50
Amazon Simple Notification
Service Guía para desarrolladores
Detalles de los pedidos de mensajes

Puede tener varias aplicaciones (o varios subprocesos dentro de la misma aplicación) que publiquen
mensajes en un tema FIFO SNS en paralelo. Al hacerlo, delega con eficacia la secuenciación de mensajes
en el servicio Amazon SNS. Para determinar la secuencia establecida de mensajes, puede verificar el
número de secuencia.

El número de secuencia es un número grande, no consecutivo y cada vez mayor que Amazon SNS asigna
a cada mensaje que publique. El número de secuencia se pasa a las colas FIFO SQS suscritas como
parte del cuerpo del mensaje. Sin embargo, si habilita la entrega de mensajes sin procesar (p. 97), el
mensaje que se entrega a la cola FIFO de SQS no incluye el número de secuencia ni ningún otro metadato
de mensajes SNS.

51
Amazon Simple Notification
Service Guía para desarrolladores
Detalles de los pedidos de mensajes

Los temas FIFO de Amazon SNS definen el pedido en el contexto de un grupo de mensajes. Para obtener
más información, consulte Agrupación de mensajes para temas FIFO (p. 53).

52
Amazon Simple Notification
Service Guía para desarrolladores
Agrupación de mensajes

Agrupación de mensajes para temas FIFO


Los mensajes que pertenecen al mismo grupo se procesan uno por uno, en un orden estricto relativo al
grupo.

Al publicar mensajes en un tema de FIFO de Amazon SNS, debe establecerse el ID del grupo de
mensajes. El ID de grupo es un token obligatorio con el que se especifica que un mensaje pertenece a
un grupo de mensajes específico. El tema de SNS FIFO pasa el ID de grupo a las colas FIFO de Amazon
SQS suscritas. No hay límite para la cantidad de ID de grupo en temas de SNS FIFO o colas FIFO de
SQS.

No hay afinidad entre un grupo de mensajes y una suscripción. Por lo tanto, los mensajes que se publican
en cualquier grupo de mensajes se entregan a todas las colas suscritas, sujeto a las políticas de filtro
adjuntas a las suscripciones. Para obtener más información, consulte Entrega de mensajes para temas
FIFO (p. 54) y Filtrado de mensajes para temas FIFO (p. 55).

En el caso de uso de ejemplo de administración de precios de partes de automóviles (p. 46), hay un
grupo de mensajes dedicado para cada producto vendido en la plataforma. El mismo tema FIFO de SNS
se utiliza para procesar todas las actualizaciones de precios. La secuencia de actualizaciones de precios
se conserva en el contexto de un solo producto de partes de automóviles, pero no en varios productos.
En el siguiente diagrama, se muestra cómo funciona. Observe que para el producto con el ID de grupo de
mensajes product-214, el mensaje m1 siempre se procesa antes que el mensaje m4. Esta secuencia se
conserva a lo largo del flujo de trabajo, desde Amazon SNS a Amazon SQS hasta AWS Lambda. De forma
similar, para el producto con el ID de grupo de mensajes product-799, el mensaje m2 siempre se procesa
antes que el mensaje m3. Los grupos de mensajes product-214 y product-799 son independientes entre sí,
por lo que no hay relación entre cómo se secuencian sus mensajes.

53
Amazon Simple Notification
Service Guía para desarrolladores
Entrega de mensajes

Entrega de mensajes para temas FIFO


Para mantener un orden estricto de mensajes, Amazon SNS restringe el conjunto de protocolos de entrega
admitidos para los temas FIFO de Amazon SNS. En este momento, el protocolo de punto de enlace debe

54
Amazon Simple Notification
Service Guía para desarrolladores
Filtrado de mensajes

ser Amazon SQS, con el nombre de recurso de Amazon (ARN) de una cola de Amazon SQS FIFO como
punto de enlace.
Note

Para ampliar los mensajes de los temas FIFO de Amazon SNS a AWS Lambda, se deben aplicar
otros pasos. En primer lugar, suscriba las colas FIFO de Amazon SQS al tema. A continuación,
configure las colas para desencadenar las funciones. Para obtener más información, consulte
SQS FIFO como fuente de eventos en el blog de informática de AWS.

Los temas de SNS FIFO no pueden entregar mensajes a los puntos de enlace administrados por el cliente,
como direcciones de correo electrónico, aplicaciones móviles, números de teléfono para mensajería de
texto (SMS) o puntos de enlace HTTP (S). No se garantiza que estos tipos de puntos de enlace conserven
un orden estricto de mensajes. Los intentos de suscribir puntos de enlace administrados por el cliente a
temas de SNS FIFO provocan errores.

Los temas FIFO de SNS admiten las mismas capacidades de filtrado de mensajes que los temas estándar.
Para obtener más información, consulte Filtrado de mensajes para temas FIFO (p. 55) y la publicación
Simplifique su mensajería de publicación o suscripción con el filtrado de mensajes de Amazon SNS en el
blog informático de AWS.

Filtrado de mensajes para temas FIFO


Los temas FIFO de Amazon SNS admiten el filtrado de mensajes. Si utiliza el filtrado de mensajes,
se simplifica la arquitectura al descargar la lógica de enrutamiento de mensajes de los sistemas de
publicadores y la lógica de filtrado de mensajes de los sistemas de suscriptores.

Cuando suscribe una cola FIFO de Amazon SQS a un tema FIFO de SNS, puede utilizar el filtrado
de mensajes para especificar que el suscriptor recibe un subconjunto de mensajes, en lugar de todos
ellos. Cada suscriptor puede establecer su propia política de filtro como un atributo de suscripción. Si la
política de filtro coincide con los atributos del mensaje entrante, el tema entrega una copia del mensaje al
suscriptor. Si no hay coincidencia, el tema no entrega una copia del mensaje.

En el caso de uso de ejemplo de administración de precios de partes de automóviles (p. 46), suponga
que se establecen las siguientes políticas de filtrado de Amazon SNS:

• Para la cola de venta mayorista, la política de filtro {"business":["wholesale"]} coincide con cada
mensaje con un atributo llamado "business" y con "wholesale" en el conjunto de valores. En el
siguiente diagrama, el atributo en el mensaje m1 es String con un valor de "wholesale". El atributo
en el mensaje m3 es [Link] con un valor de "wholesale,retail". Por lo tanto, m1 y m3
coinciden con los criterios de la política de filtro y ambos mensajes se entregan a la cola mayorista.
• Para la cola de venta minorista, la política de filtro {"business":["retail"]} coincide con cada
mensaje con un atributo llamado "business" y con "retail" en el conjunto de valores. En el
diagrama, el atributo en el mensaje m2 es String con un valor de "retail". El atributo en el mensaje
m3 es [Link] con un valor de "wholesale,retail". Por lo tanto, m2 y m3 coinciden con los
criterios de la política de filtro y ambos mensajes se entregan a la cola minorista.

En el siguiente diagrama, se muestra el efecto del filtrado de mensajería mediante estas políticas de filtro.

55
Amazon Simple Notification
Service Guía para desarrolladores
Filtrado de mensajes

Los temas FIFO de SNS admiten una variedad de operadores coincidentes, incluidos valores de cadena
de atributos, valores numéricos de atributo y claves de atributo. Para obtener más información, consulte
Filtrado de mensajes en Amazon SNS (p. 84).

Los temas FIFO de SNS no entregan mensajes duplicados a los puntos de enlace suscritos. Para obtener
más información, consulte Desduplicación de mensajes para temas FIFO (p. 57).

56
Amazon Simple Notification
Service Guía para desarrolladores
Id. de desduplicación de mensajes

Desduplicación de mensajes para temas FIFO


Los temas FIFO de Amazon SNS y las colas FIFO de Amazon SQS admiten la desduplicación de
mensajes, que proporciona una entrega y procesamiento de mensajes exactamente una vez, siempre que
se cumplan las siguientes condiciones:

• La cola FIFO SQS suscrita existe y tiene permisos para que la entidad principal de servicio de Amazon
SNS pueda entregar mensajes a la cola.
• El consumidor de cola FIFO de SQS procesa el mensaje y lo elimina de la cola antes de que venza el
tiempo de espera de visibilidad.
• El tema de suscripción a Amazon SNS no tiene filtrado de mensajes (p. 55) Al configurar el filtrado de
mensajes, los temas FIFO de SNS admiten la entrega más de una vez, ya que los mensajes se pueden
filtrar en función de las políticas de filtro de suscripción.
• No hay interrupciones en la red que impidan el reconocimiento de la entrega del mensaje.

Note

La desduplicación de mensajes se aplica a un tema de SNS FIFO completo, no a un grupo de


mensajes (p. 53).

Al publicar un mensaje en un tema de SNS FIFO, el mensaje debe incluir un ID de desduplicación. Este ID
se incluye en el mensaje que el tema de SNS FIFO entrega a las colas FIFO de SQS suscritas.

Si un mensaje con un ID de desduplicación determinado se publica de forma correcta en un tema


FIFO de SNS, cualquier mensaje publicado con el mismo ID de desduplicación, dentro del intervalo de
desduplicación de cinco minutos, se acepta, pero no se entrega. El tema de SNS FIFO continúa realizando
un seguimiento del ID de desduplicación de mensajes, incluso después de que el mensaje se entregue a
los puntos de enlace suscritos.

Si se garantiza que el cuerpo del mensaje es único para cada mensaje publicado, puede habilitar la
desduplicación basada en contenido para un tema FIFO de Amazon SNS y las colas FIFO de SQS
suscritas. Amazon SNS utiliza el cuerpo del mensaje para generar un valor hash único que se utilizará
como ID de desduplicación para cada mensaje, por lo que no es necesario establecer uno cuando envíe
cada mensaje.
Note

Los atributos de mensaje no se incluyen en el cálculo hash.

En el caso de uso de ejemplo de la administración de precios de partes de automóviles (p. 46), la


empresa debe establecer un ID de desduplicación universalmente único para cada actualización de
precios. Esto se debe a que el cuerpo del mensaje puede ser idéntico incluso cuando el atributo del
mensaje es diferente para mayoristas y minoristas. Sin embargo, si la empresa agregó el tipo de negocio
(mayorista y minorista) al cuerpo del mensaje junto con el ID del producto y el precio del producto, podrían
habilitar la duplicación basada en contenido en el tema FIFO SNS y en las colas FIFO de SQS suscritas.

57
Amazon Simple Notification
Service Guía para desarrolladores
Id. de desduplicación de mensajes

Además del orden y la desduplicación de mensajes, los temas de SNS FIFO admiten el cifrado del lado
del servidor de mensajes (SSE) con claves de AWS KMS y privacidad de mensajes a través de puntos de
enlace de la VPC con AWS PrivateLink. Para obtener más información, consulte Seguridad de mensajes
para temas FIFO (p. 59).

58
Amazon Simple Notification
Service Guía para desarrolladores
Seguridad de mensajes

Seguridad de mensajes para temas FIFO


Puede elegir que Amazon SNS y Amazon SQS cifren los mensajes enviados a temas y colas FIFO, con
las claves maestras de cliente (CMK) AWS Key Management Service (AWS KMS). Puede crear temas y
colas FIFO cifrados, o elegir cifrar los temas y colas FIFO existentes. Amazon SNS y Amazon SQS cifran
solo el cuerpo del mensaje. No cifran los atributos del mensaje, los metadatos de recursos ni las métricas
de recursos.
Note

Al agregar la encriptación a un tema o cola FIFO existente, no se encriptan los mensajes


atrasados, y al eliminar la encriptación de un tema o cola, se mantienen encriptados los mensajes
atrasados.

En los temas FIFO de SNS, se descifran los mensajes de inmediato antes de entregarlos a los puntos
de enlace suscritos. En las colas FIFO de SQS, se descifra el mensaje justo antes de devolverlos a
la aplicación del consumidor. Para obtener más información, consulte Cifrado de datos (p. 395) y la
publicación Cifrado de mensajes publicados en Amazon SNS con AWS KMS en el blog informático de
AWS.

Además, los temas FIFO de SNS y las colas FIFO de SQS admiten la privacidad de los mensajes con
puntos de enlace de la VPC de interfaz impulsados por AWS PrivateLink. Mediante los puntos de enlace
de interfaz, puede enviar mensajes desde subredes de Amazon Virtual Private Cloud (Amazon VPC) a
temas y colas de FIFO sin atravesar Internet público. En este modelo, se mantiene su mensajería dentro
de la infraestructura y la red de AWS, lo que mejora la seguridad general de su aplicación. Cuando utiliza
AWS PrivateLink, no necesita configurar una gateway de Internet, una conversión de las direcciones de red
(NAT) o una red privada virtual (VPN). Para obtener más información, consulte Privacidad del tráfico entre
redes (p. 404) y la publicación Asegurar los mensajes publicados en Amazon SNS con AWS PrivateLink
en el blog informático de AWS.

Los temas FIFO de SNS también admiten colas de mensajes fallidos y almacenamiento de mensajes en
todas las zonas de disponibilidad. Para obtener más información, consulte Durabilidad de mensajes para
temas FIFO (p. 59).

Durabilidad de mensajes para temas FIFO


Los temas FIFO de Amazon SNS y las colas FIFO de Amazon SQS son duraderos. Ambos tipos de
recursos almacenan los mensajes de forma redundante en varias zonas de disponibilidad y proporcionan
colas de mensajes fallidos para manejar casos excepcionales.

En Amazon SNS, la entrega de mensajes falla cuando el tema de Amazon SNS no puede obtener acceso
a una cola de Amazon SQS suscrita por un error en el cliente o en el servidor:

• Si los errores del cliente se producen cuando el tema FIFO de SNS tiene metadatos obsoletos de la
suscripción. Dos casos comunes de errores del lado del cliente se producen cuando el propietario de la
cola FIFO de SQS realiza una de las siguientes acciones:
• Elimina la cola.
• Cambia la política de cola de forma que impida que la entidad principal de servicio de Amazon SNS le
entregue mensajes.

Amazon SNS no vuelve a intentar entregar mensajes que han fallado debido a errores del lado del
cliente.
• Pueden producirse errores en el lado del servidor en estas situaciones:

59
Amazon Simple Notification
Service Guía para desarrolladores
Duración del almacenamiento de los mensajes

• El servicio Amazon SQS no está disponible.


• Amazon SQS no puede procesar una solicitud válida del servicio Amazon SNS.

Cuando se producen errores en el servidor, los temas de SNS FIFO vuelven a intentar entregarlos
un máximo de 100 015 veces durante 23 días. Para obtener más información, consulte Reintento de
entrega de mensajes de Amazon SNS (p. 108).

Para cualquier tipo de error, Amazon SNS puede dejar de lado los mensajes a las colas de mensajes
fallidos de Amazon SQS para que no se pierdan los datos.

En Amazon SQS, el procesamiento de mensajes falla cuando la aplicación de consumidor no recibe


el mensaje, lo procesa y lo elimina de la cola. Cuando se produce un error en la cantidad máxima de
solicitudes de recepción, Amazon SQS puede dejar de lado los mensajes a las colas de mensajes fallidos
para que no se pierdan los datos.

En el caso de uso de ejemplo de administración de precios de partes de automóviles (p. 46), la empresa
puede asignar una cola de mensajes fallidos (DLQ) de SQS FIFO a cada suscripción de temas de SNS
FIFO, así como a cada cola FIFO de SQS suscrita. De esta manera, se protege a la empresa de cualquier
pérdida de actualización de precios.

60
Amazon Simple Notification
Service Guía para desarrolladores
Duración del almacenamiento de los mensajes

La cola de mensajes fallidos asociada a una suscripción de SNS FIFO, o a una cola FIFO de SQS,
debe ser una cola FIFO de SQS. La cola de mensajes fallidos debe estar en la misma región de AWS
y Cuenta de AWS como la suscripción SNS FIFO o la cola FIFO SQS que protege. Para obtener más
información, consulte Colas de mensajes fallidos (DLQ) de Amazon SNS (p. 112) y la publicación
Diseñar aplicaciones duraderas sin servidor con DLQs para Amazon SNS, Amazon SQS, AWS Lambda en
el Blog informático de AWS.

61
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplos de código

Ejemplos de código para temas FIFO


Puede utilizar los siguientes ejemplos de códigos de para integrar el caso de uso de ejemplo de
administración de precios de partes de automóviles (p. 46) con temas de SNS FIFO y colas FIFO de
SQS.

Temas
• Mediante un SDK de AWS (p. 62)
• Uso AWS CloudFormation (p. 64)

Mediante un SDK de AWS


Con AWS SDK, puede crear un tema FIFO de Amazon SNS al establecer su atributo FifoTopic a
verdadero. Puede crear una cola FIFO de Amazon SQS al establecer su atributo FifoQueue a verdadero.
Además, debe agregar el sufijo .fifo al nombre de cada recurso FIFO. Después de crear un tema o una
cola FIFO, no puede convertirlo en un tema o cola estándar.

En el ejemplo de código siguiente, se crean estos recursos FIFO:

• El tema de SNS FIFO que distribuye las actualizaciones de precios.


• Las colas FIFO de SQS que proporcionan estas actualizaciones a las dos aplicaciones (mayorista y
minorista)
• Las suscripciones FIFO de SNS que conectan ambas colas con el tema

En este ejemplo, se establecen las Políticas de filtro (p. 84) en las suscripciones. Si prueba el ejemplo
al publicar un mensaje en el tema, asegúrese de publicar el mensaje con el atributo de business.
Especifique retail o wholesale en el valor de atributo. De lo contrario, el mensaje se filtra y no se
entrega a las colas suscritas. Para obtener más información, consulte Filtrado de mensajes para temas
FIFO (p. 55).

Java

SDK para Java 1.x

Cree un tema FIFO y colas FIFO. Suscriba las colas al tema.

// Create API clients

AWSCredentialsProvider credentials = getCredentials();

AmazonSNS sns = new AmazonSNSClient(credentials);


AmazonSQS sqs = new AmazonSQSClient(credentials);

// Create FIFO topic

Map<String, String> topicAttributes = new HashMap<String, String>();

[Link]("FifoTopic", "true");
[Link]("ContentBasedDeduplication", "false");

String topicArn = [Link](


new CreateTopicRequest()
.withName("[Link]")
.withAttributes(topicAttributes)
).getTopicArn();

62
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo FIFO (AWS SDK)

// Create FIFO queues

Map<String, String> queueAttributes = new HashMap<String, String>();

[Link]("FifoQueue", "true");

// Disable content-based deduplication because messages published with the same


body
// might carry different attributes that must be processed independently.
// The price management system uses the message attributes to define whether a
given
// price update applies to the wholesale application or to the retail application.
[Link]("ContentBasedDeduplication", "false");

String wholesaleQueueUrl = [Link](


new CreateQueueRequest()
.withName("[Link]")
.withAttributes(queueAttributes)
).getQueueUrl();

String retailQueueUrl = [Link](


new CreateQueueRequest()
.withName("[Link]")
.withAttributes(queueAttributes)
).getQueueUrl();

// Subscribe FIFO queues to FIFO topic, setting required permissions

String wholesaleSubscriptionArn =
[Link](sns, sqs, topicArn, wholesaleQueueUrl);

String retailSubscriptionArn =
[Link](sns, sqs, topicArn, retailQueueUrl);

Establezca una política de filtro en cada suscripción para que cada aplicación de suscriptor reciba
solo las actualizaciones de precios que necesita.

// Set the Amazon SNS subscription filter policies

SNSMessageFilterPolicy wholesalePolicy = new SNSMessageFilterPolicy();


[Link]("business", "wholesale");
[Link](sns, wholesaleSubscriptionArn);

SNSMessageFilterPolicy retailPolicy = new SNSMessageFilterPolicy();


[Link]("business", "retail");
[Link](sns, retailSubscriptionArn);

Redacte y publique un mensaje que actualice el precio mayorista.

// Publish message to FIFO topic

String subject = "Price Update";


String payload = "{\"product\": 214, \"price\": 79.99}";
String groupId = "PID-214";
String dedupId = [Link]().toString();
String attributeName = "business";
String attributeValue = "wholesale";

Map<String, MessageAttributeValue> attributes = new HashMap<>();

[Link](

63
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo FIFO (AWS CloudFormation)

attributeName,
new MessageAttributeValue()
.withDataType("String")
.withStringValue(attributeValue));

[Link](
new PublishRequest()
.withTopicArn(topicArn)
.withSubject(subject)
.withMessage(payload)
.withMessageGroupId(groupId);
.withMessageDeduplicationId(dedupId)
.withMessageAttributes(attributes);

• Encuentre instrucciones y más código en GitHub.

Recepción de mensajes de suscripciones FIFO


Ahora puede recibir actualizaciones de precios en las aplicaciones mayoristas y minoristas. Como se
muestra en the section called “Caso de uso de temas FIFO” (p. 46), el punto de entrada de cada
aplicación de consumidor es la cola FIFO de SQS, que su función AWS Lambda correspondiente puede
sondear de manera automática. Cuando una cola FIFO SQS es una fuente de eventos para una función
Lambda, Lambda escala su flota de sondeos según sea necesario para consumir mensajes de manera
eficaz.

Para obtener más información, consulte Uso de AWS Lambda con Amazon SQS en la Guía para
desarrolladores de AWS Lambda. Para obtener información sobre cómo escribir sus propios sondeos
de cola, consulte Recomendaciones para colas estándar de Amazon SQS y colas FIFO en laGuía para
desarrolladores de Amazon Simple Queue Service y ReceiveMessage en la Referencia de la API de
Amazon Simple Queue Service.

Uso AWS CloudFormation


Gracias a AWS CloudFormation, puede utilizar un archivo de plantilla para crear y configurar una colección
de recursos de AWS juntos como una sola unidad. En esta sección, se incluye una plantilla de ejemplo que
crea lo siguiente:

• El tema de SNS FIFO que distribuye las actualizaciones de precios.


• Las colas FIFO de SQS que proporcionan estas actualizaciones a las dos aplicaciones (mayorista y
minorista)
• Las suscripciones FIFO de SNS que conectan ambas colas con el tema
• Una política de filtro (p. 84) en la que se especifica que las aplicaciones de suscriptor reciben solo las
actualizaciones de precios que necesitan.

Note

Si prueba este código de muestra al publicar un mensaje en el tema, asegúrese de publicar el


mensaje con el atributo de business. Especifique retail o wholesale en el valor de atributo.
De lo contrario, el mensaje se filtra y no se entrega a las colas suscritas.

{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"PriceUpdatesTopic": {
"Type": "AWS::SNS::Topic",

64
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo FIFO (AWS CloudFormation)

"Properties": {
"TopicName": "[Link]",
"FifoTopic": true,
"ContentBasedDeduplication": false
}
},
"WholesaleQueue": {
"Type": "AWS::SQS::Queue",
"Properties": {
"QueueName": "[Link]",
"FifoQueue": true,
"ContentBasedDeduplication": false
}
},
"RetailQueue": {
"Type": "AWS::SQS::Queue",
"Properties": {
"QueueName": "[Link]",
"FifoQueue": true,
"ContentBasedDeduplication": false
}
},
"WholesaleSubscription": {
"Type": "AWS::SNS::Subscription",
"Properties": {
"TopicArn": {
"Ref": "PriceUpdatesTopic"
},
"Endpoint": {
"Fn::GetAtt": [
"WholesaleQueue",
"Arn"
]
},
"Protocol": "sqs",
"RawMessageDelivery": "false",
"FilterPolicy": {
"business": [
"wholesale"
]
}
}
},
"RetailSubscription": {
"Type": "AWS::SNS::Subscription",
"Properties": {
"TopicArn": {
"Ref": "PriceUpdatesTopic"
},
"Endpoint": {
"Fn::GetAtt": [
"RetailQueue",
"Arn"
]
},
"Protocol": "sqs",
"RawMessageDelivery": "false",
"FilterPolicy": {
"business": [
"retail"
]
}
}
},
"SalesQueuesPolicy": {
"Type": "AWS::SQS::QueuePolicy",

65
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo FIFO (AWS CloudFormation)

"Properties": {
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": [
"sqs:SendMessage"
],
"Resource": "*",
"Condition": {
"ArnEquals": {
"aws:SourceArn": {
"Ref": "PriceUpdatesTopic"
}
}
}
}
]
},
"Queues": [
{
"Ref": "WholesaleQueue"
},
{
"Ref": "RetailQueue"
}
]
}
}
}
}

Para obtener más información sobre la implementación de recursos de AWS mediante una plantilla de
AWS CloudFormation, consulte Introducción en la Guía del usuario de AWS CloudFormation.

66
Amazon Simple Notification
Service Guía para desarrolladores
AWS Management Console

Publicación de mensajes en Amazon


SNS
Después de crear un tema de Amazon SNS (p. 27) y suscribir un punto de enlace (p. 34) a él, puede
publicar mensajes en un tema. Cuando se publica un mensaje, Amazon SNS intenta entregar el mensaje al
punto de enlace (p. 35) suscrito.
Important

Puede publicar mensajes solo en temas y puntos de enlaces en la misma región de AWS.

Temas
• Para publicar mensajes en temas de Amazon SNS mediante la AWS Management Console, siga estos
pasos: (p. 67)
• Para publicar un mensaje en un tema mediante la AWS, siga estos pasos: (p. 68)
• Publicación de mensajes grandes con Amazon SNS y Amazon S3 (p. 75)
• Atributos de mensajes de Amazon SNS (p. 78)
• Agrupación en lotes de mensajes de Amazon SNS (p. 81)

Para publicar mensajes en temas de Amazon SNS


mediante la AWS Management Console, siga estos
pasos:
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación izquierdo, elija Topics (Temas).
3. En la página Temas, seleccione un tema y, a continuación, elija Publicar en tema.

En la consola, se abre la página Publicar mensaje en un tema.


4. En la sección Detalles básicos, haga lo siguiente:

a. (Opcional) Ingrese un asunto para el mensaje.


b. En el caso de un tema FIFO (p. 46), ingrese un ID de grupo de mensajes. Los mensajes del
mismo grupo de mensajes se entregan en el orden en que se publican.
c. En el caso de un tema FIFO, escriba un ID de desduplicación de mensajes. Este ID es opcional si
ha habilitado la configuración Desduplicación de mensajes en función del contenido para el tema.
d. (Opcional) En el caso de las notificaciones push en móviles (p. 296), ingrese un valor de período
de vida (TTL) en segundos. Es el tiempo que un servicio de notificaciones push, como Apple Push
Notification Service (APNs) o Firebase Cloud Messaging (FCM), tiene para entregar el mensaje al
punto de enlace.
5. En la sección Message body (Cuerpo del mensaje), realice alguna de las siguientes acciones:

a. Elija Carga idéntica para todos los protocolos de entrega y, a continuación, ingrese el mensaje.

67
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

b. Elija Carga personalizada para cada protocolo de entrega y, a continuación, ingrese un objeto
JSON para definir el mensaje que se envía a cada protocolo.

Para obtener más información, consulte Publicación de la carga útil específica de la


plataforma (p. 280).
6. En la sección Atributos del mensaje, agregue cualquier atributo que quiera que Amazon SNS haga
coincidir con el atributo FilterPolicy de la suscripción y, de esta manera, poder decidir si el punto
de enlace suscrito tiene interés en el mensaje publicado.

a. En Tipo, elija un tipo de atributo, como [Link].


Note

Para el tipo de atributo [Link], incluya la matriz entre corchetes ([]). Dentro
de la matriz, delimite los valores de cadena con comillas dobles. No es necesario usar
comillas con los números ni con las palabras clave true, false y null.
b. Ingrese un nombre para el atributo, como, por ejemplo, customer_interests.
c. Ingrese un valor para el atributo, como, por ejemplo, ["soccer", "rugby", "hockey"].

Si el tipo de atributo es Cadena, [Link] o Número, Amazon SNS evalúa el atributo del
mensaje con la política de filtro de una suscripción (p. 84) (si existe), antes de enviar el mensaje a
la suscripción.

Para obtener más información, consulte Atributos de mensajes de Amazon SNS (p. 78).
7. Elija Publish message (Publicar mensaje).

El mensaje se publica en el tema. Además, en la consola, se abre la página Detalles.

Para publicar un mensaje en un tema mediante la


AWS, siga estos pasos:
Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

En los siguientes ejemplos de código, se muestra cómo publicar mensajes en un tema de Amazon SNS.

.NET

AWS SDK for .NET


• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{

68
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

Aws::SNS::SNSClient sns;
Aws::String message = argv[1];
Aws::String topic_arn = argv[2];

Aws::SNS::Model::PublishRequest psms_req;
psms_req.SetMessage(message);
psms_req.SetTopicArn(topic_arn);

auto psms_out = [Link](psms_req);

if (psms_out.IsSuccess())
{
std::cout << "Message published successfully " << std::endl;
}
else
{
std::cout << "Error while publishing message " <<
psms_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Go.

Java

SDK para Java 2.x

public static void pubTopic(SnsClient snsClient, String message, String


topicArn) {

try {
PublishRequest request = [Link]()
.message(message)
.topicArn(topicArn)
.build();

PublishResponse result = [Link](request);


[Link]([Link]() + " Message sent. Status is " +
[Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

69
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {PublishCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


var params = {
Message: "MESSAGE_TEXT", // MESSAGE_TEXT
TopicArn: "TOPIC_ARN", //TOPIC_ARN
};

const run = async () => {


try {
const data = await [Link](new PublishCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

70
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

suspend fun pubTopic(topicArnVal: String, messageVal: String) {

val request = PublishRequest{


message = messageVal
topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
println("${[Link]} message sent.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish en la Referencia de la API de AWS SDK para
Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Sends a message to an Amazon SNS topic.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';


$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->publish([
'Message' => $message,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for PHP.

71
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

Python

SDK para Python (Boto3)

Publique un mensaje con atributos para que una suscripción pueda filtrar en función de los
atributos.

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def publish_message(topic, message, attributes):


"""
Publishes a message, with attributes, to a topic. Subscriptions can be
filtered
based on message attributes so that a subscription receives messages only
when specified attributes are present.

:param topic: The topic to publish to.


:param message: The message to publish.
:param attributes: The key-value attributes to attach to the message.
Values
must be either `str` or `bytes`.
:return: The ID of the message.
"""
try:
att_dict = {}
for key, value in [Link]():
if isinstance(value, str):
att_dict[key] = {'DataType': 'String', 'StringValue': value}
elif isinstance(value, bytes):
att_dict[key] = {'DataType': 'Binary', 'BinaryValue': value}
response = [Link](Message=message, MessageAttributes=att_dict)
message_id = response['MessageId']
[Link](
"Published message with attributes %s to topic %s.", attributes,
[Link])
except ClientError:
[Link]("Couldn't publish message to topic %s.", [Link])
raise
else:
return message_id

Publique un mensaje que toma diferentes formas en función del protocolo del suscriptor.

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def publish_multi_message(
topic, subject, default_message, sms_message, email_message):
"""
Publishes a multi-format message to a topic. A multi-format message takes
different forms based on the protocol of the subscriber. For example,
an SMS subscriber might receive a short, text-only version of the message

72
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

while an email subscriber could receive an HTML version of the message.

:param topic: The topic to publish to.


:param subject: The subject of the message.
:param default_message: The default version of the message. This version is
sent to subscribers that have protocols that are
not
otherwise specified in the structured message.
:param sms_message: The version of the message sent to SMS subscribers.
:param email_message: The version of the message sent to email subscribers.
:return: The ID of the message.
"""
try:
message = {
'default': default_message,
'sms': sms_message,
'email': email_message
}
response = [Link](
Message=[Link](message), Subject=subject,
MessageStructure='json')
message_id = response['MessageId']
[Link]("Published multi-format message to topic %s.", [Link])
except ClientError:
[Link]("Couldn't publish message to topic %s.", [Link])
raise
else:
return message_id

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def message_sent?(sns_client, topic_arn, message)

sns_client.publish(topic_arn: topic_arn, message: message)


rescue StandardError => e
puts "Error while sending the message: #{[Link]}"
end

def run_me

topic_arn = 'SNS_TOPIC_ARN'
region = 'REGION'
message = 'MESSAGE' # The text of the message to send.

sns_client = Aws::SNS::[Link](region: region)

puts "Message sending."

if message_sent?(sns_client, topic_arn, message)


puts 'The message was sent.'
else
puts 'The message was not sent. Stopping program.'

73
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

exit 1
end
end

run_me if $PROGRAM_NAME == __FILE__

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Ruby.

Rust

SDK para Rust


Note

Esta documentación es para un SDK en versión preliminar. El SDK está sujeto a cambios
y no se debe utilizar en producción.

async fn subscribe_and_publish(
client: &Client,
topic_arn: &str,
email_address: &str,
) -> Result<(), Error> {
println!("Receiving on topic with ARN: `{}`", topic_arn);

let rsp = client


.subscribe()
.topic_arn(topic_arn)
.protocol("email")
.endpoint(email_address)
.send()
.await?;

println!("Added a subscription: {:?}", rsp);

let rsp = client


.publish()
.topic_arn(topic_arn)
.message("hello sns!")
.send()
.await?;

println!("Published message: {:?}", rsp);

Ok(())
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la referencia de la API SDK para
Rust de AWS.

74
Amazon Simple Notification
Service Guía para desarrolladores
Cargas de mensajes grandes

Publicación de mensajes grandes con Amazon SNS


y Amazon S3
Para publicar mensajes de Amazon SNS grandes, puede utilizar la biblioteca de clientes extendidos de
Amazon SNS para Java. Esta biblioteca es útil para los mensajes que son mayores que el máximo actual
de 256 KB, hasta un máximo de 2 GB. En la biblioteca, se guarda la carga real en un bucket de Amazon
S3 y se publica la referencia del objeto almacenado de Amazon S3 al tema. Las colas de Amazon SQS
suscritas pueden utilizar la biblioteca de clientes extendidos de Amazon SQS para Java con el fin de
eliminar la referencia y recuperar cargas de Amazon S3. Otros puntos de enlace, como Lambda, pueden
utilizar la descarga de carga de la biblioteca común de Java para AWS con el fin de eliminar la referencia y
recuperar la carga.

Prerequisites
A continuación, se indican los requisitos previos para utilizar biblioteca de clientes extendidos de Amazon
SNS para Java:

• Un SDK de AWS.

En el ejemplo de esta página, se utiliza el SDK para Java de AWS. Para instalar y configurar el SDK,
consulte Configurar el SDK para Java de AWS en la Guía para desarrolladores de AWS SDK for Java.
• Una Cuenta de AWS con las credenciales adecuadas.

Para crear una Cuenta de AWS, vaya a la página de inicio de AWS y, a continuación, elija Crear una
cuenta de AWS. Siga las instrucciones.

Para obtener información sobre las credenciales, consulte Configurar las credenciales y regiones de
AWS para el desarrollo en la Guía para desarrolladores de AWS SDK for Java.
• Java 8 o superior.
• La biblioteca de clientes extendidos de Amazon SNS para Java (también disponible de Maven).

Configuración del almacenamiento de mensajes


La biblioteca de carga ampliada de Amazon SNS se utiliza en la biblioteca común Java de descarga de
carga para AWS con el fin de almacenar y recuperar mensajes. Puede configurar las siguientes opciones
de almacenamiento de mensajes de Amazon S3:

• Umbral de tamaños de mensajes personalizados: los mensajes con cargas y atributos que superan este
tamaño se almacenan de manera automática en Amazon S3.
• Indicador de alwaysThroughS3: establezca este valor en true para forzar que todas las cargas de
mensajes se almacenen en Amazon S3. Por ejemplo:

SNSExtendedClientConfiguration snsExtendedClientConfiguration = new


SNSExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client,
BUCKET_NAME).withAlwaysThroughS3(true);

• Clave KMS personalizada: la clave que se utiliza para el cifrado del lado del servidor en su bucket de
Amazon S3.
• Nombre del bucket: el nombre del bucket de Amazon S3 para almacenar cargas de mensajes.

75
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo: Publicación de mensajes en Amazon
SNS con carga almacenada en Amazon S3

Ejemplo: Publicación de mensajes en Amazon SNS


con carga almacenada en Amazon S3
A continuación, mostramos un ejemplo de cómo hacer lo siguiente:

• Crear un tema y una cola de ejemplo.


• Suscriba la cola para recibir mensajes del tema.
• Publique un mensaje de prueba.

La carga del mensaje se almacena en Amazon S3 y se publica la referencia a ella. El cliente extendido de
Amazon SQS se utiliza para recibir el mensaje.

SDK para Java 1.x

Para publicar mensajes grandes, utilice la biblioteca de clientes extendidos de Amazon SNS para
Java. El mensaje que envía hace referencia a un objeto de Amazon S3 en el que se incluye el
contenido real del mensaje.

import [Link];
import [Link];
import [Link];
import [Link];
import [Link].s3.AmazonS3;
import [Link].s3.AmazonS3ClientBuilder;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class Example {

public static void main(String[] args) {


final String BUCKET_NAME = "extended-client-bucket";
final String TOPIC_NAME = "extended-client-topic";
final String QUEUE_NAME = "extended-client-queue";
final Regions region = Regions.DEFAULT_REGION;

//Message threshold controls the maximum message size that will be allowed to
be published
//through SNS using the extended client. Payload of messages exceeding this
value will be stored in
//S3. The default value of this parameter is 256 KB which is the maximum
message size in SNS (and SQS).
final int EXTENDED_STORAGE_MESSAGE_SIZE_THRESHOLD = 32;

//Initialize SNS, SQS and S3 clients


final AmazonSNS snsClient =
[Link]().withRegion(region).build();
final AmazonSQS sqsClient =
[Link]().withRegion(region).build();
final AmazonS3 s3Client =
[Link]().withRegion(region).build();

76
Amazon Simple Notification
Service Guía para desarrolladores
Otros protocolos de puntos de enlace

//Create bucket, topic, queue and subscription


[Link](BUCKET_NAME);
final String topicArn = [Link](
new CreateTopicRequest().withName(TOPIC_NAME)
).getTopicArn();
final String queueUrl = [Link](
new CreateQueueRequest().withQueueName(QUEUE_NAME)
).getQueueUrl();
final String subscriptionArn = [Link](
snsClient, sqsClient, topicArn, queueUrl
);

//To read message content stored in S3 transparently through SQS extended


client,
//set the RawMessageDelivery subscription attribute to TRUE
final SetSubscriptionAttributesRequest subscriptionAttributesRequest = new
SetSubscriptionAttributesRequest();
[Link](subscriptionArn);
[Link]("RawMessageDelivery");
[Link]("TRUE");
[Link](subscriptionAttributesRequest);

//Initialize SNS extended client


//PayloadSizeThreshold triggers message content storage in S3 when the
threshold is exceeded
//To store all messages content in S3, use AlwaysThroughS3 flag
final SNSExtendedClientConfiguration snsExtendedClientConfiguration = new
SNSExtendedClientConfiguration()
.withPayloadSupportEnabled(s3Client, BUCKET_NAME)
.withPayloadSizeThreshold(EXTENDED_STORAGE_MESSAGE_SIZE_THRESHOLD);
final AmazonSNSExtendedClient snsExtendedClient = new
AmazonSNSExtendedClient(snsClient, snsExtendedClientConfiguration);

//Publish message via SNS with storage in S3


final String message = "This message is stored in S3 as it exceeds the
threshold of 32 bytes set above.";
[Link](topicArn, message);

//Initialize SQS extended client


final ExtendedClientConfiguration sqsExtendedClientConfiguration = new
ExtendedClientConfiguration()
.withPayloadSupportEnabled(s3Client, BUCKET_NAME);
final AmazonSQSExtendedClient sqsExtendedClient =
new AmazonSQSExtendedClient(sqsClient, sqsExtendedClientConfiguration);

//Read the message from the queue


final ReceiveMessageResult result = [Link](queueUrl);
[Link]("Received message is " +
[Link]().get(0).getBody());
}
}

• Encuentre instrucciones y más código en GitHub.

Otros protocolos de puntos de enlace


Tanto las bibliotecas de Amazon SNS como Amazon SQS utilizan la descarga de carga de la biblioteca
común de Java para AWS con el fin de almacenar y recuperar cargas de mensajes con Amazon S3.
Cualquier punto de enlace habilitado para Java (por ejemplo, un punto de enlace HTTPS implementado en
Java) puede usar la misma biblioteca para eliminar la referencia al contenido del mensaje.

77
Amazon Simple Notification
Service Guía para desarrolladores
Atributos de mensajes

Los puntos de enlace que no pueden usar la biblioteca común de Java de descarga de carga para AWS
pueden seguir publicando mensajes con cargas almacenadas en Amazon S3. A continuación, mostramos
un ejemplo de una referencia de Amazon S3 que se publica mediante el ejemplo de código anterior:

[
"[Link].PayloadS3Pointer",
{
"s3BucketName": "extended-client-bucket",
"s3Key": "xxxx-xxxxx-xxxxx-xxxxxx"
}
]

Atributos de mensajes de Amazon SNS


Amazon SNS admite los atributos de entrega de mensajes, con los que se pueden ofrecer elementos
de metadatos estructurados (como marcas temporales, datos geoespaciales, firmas e identificadores)
relacionados con el mensaje. En el caso de las suscripciones SQS, se puede enviar un máximo de
10 atributos de mensaje cuando se activa Raw Message Delivery (p. 97) (Entrega de mensajes sin
procesar). Para enviar más de 10 atributos de mensaje, debe estar desactivada la entrega de mensajes sin
procesar.

Los atributos de los mensajes son opcionales y están separados del cuerpo de los mensajes, pero se
envían junto a él. El receptor puede utilizar esta información para decidir cómo gestionar el mensaje sin
tener que procesar el cuerpo de este en primer lugar.

Para obtener información sobre cómo enviar mensajes con atributos mediante la AWS Management
Console o el AWS SDK for Java, consulte el tutorial Para publicar mensajes en temas de Amazon SNS
mediante la AWS Management Console, siga estos pasos: (p. 67).
Note
Los atributos de los mensajes se envían únicamente cuando la estructura de los mensajes es
String, no JSON.

También puede utilizar los atributos del mensaje como ayuda para estructurar el mensaje de notificación
push en los puntos de enlace móviles. En este caso, los atributos del mensaje solo se usan para ayudar
a estructurar el mensaje de notificación push. Los atributos no se entregan al punto de enlace, como se
entregan cuando se envían mensajes con atributos a puntos de enlace de Amazon SQS.

También puede utilizar atributos de mensajes para que sus mensajes se puedan filtrar mediante políticas
de filtro de suscripciones. Puede aplicar políticas de filtro a las suscripciones de temas. Cuando se aplica
una política de filtro, una suscripción recibe solo los mensajes que tienen atributos aceptados por la
política. Para obtener más información, consulte Filtrado de mensajes en Amazon SNS (p. 84).

Elementos y validación de los atributos de los


mensajes
Cada atributo de mensaje consta de los siguientes elementos:

• Nombre: el nombre del atributo de mensaje puede contener los siguientes caracteres: A-Z, a-z, 0-9,
subrayado (_), guion (-) y punto (.). El nombre no debe comenzar ni finalizar con un punto y no debe
tener dos puntos sucesivos. El nombre distingue entre mayúsculas y minúsculas y debe ser único entre
todos los nombres de atributo del mensaje. El nombre puede tener una longitud de hasta 256 caracteres.
El nombre no puede comenzar con AWS. o Amazon. (ni ninguna variación en el uso de mayúsculas y
minúsculas), ya que estos prefijos están reservados para el uso de Amazon Web Services.
• Tipo: los tipos de datos admitidos para el atributo de mensaje son String, [Link], Number y
Binary. El tipo de datos tiene las mismas restricciones en lo que respecta al contenido que el cuerpo

78
Amazon Simple Notification
Service Guía para desarrolladores
Tipos de datos

del mensaje. El tipo de datos distingue entre mayúsculas y minúsculas y puede tener una longitud de
hasta 256 bytes. Para obtener más información, consulte la sección Tipos de datos y validación de los
atributos de los mensajes (p. 79).
• Valor: el valor del atributo de mensaje especificado por el usuario. Para los tipos de datos String, el
atributo de valor tiene las mismas restricciones en lo que respecta al contenido que el cuerpo del
mensaje. Para obtener más información, consulte la acción Publicar en la Referencia de la API de
Amazon Simple Notification Service.

El nombre, el tipo y el valor no deben estar vacíos ni ser null. Además, el cuerpo del mensaje no debe
estar vacío ni ser null. Todas las partes del atributo de mensaje, incluido el nombre, el tipo y el valor, están
incluidas en la restricción de tamaño del mensaje, que actualmente es de 256 KB.

Tipos de datos y validación de los atributos de los


mensajes
Los tipos de datos de los atributos de los mensajes identifican la forma en que Amazon SNS gestiona los
valores de los atributos de los mensajes. Por ejemplo, si el tipo es un número, Amazon SNS valida que es
un número.

Amazon SNS admite los siguientes tipos de datos lógicos para todos los puntos de enlace, excepto según
se indica:

• Cadena: las cadenas son Unicode con codificación binaria UTF-8. Para obtener una lista de valores de
códigos, consulte [Link]
Note

No se admiten valores sustitutos en los atributos de los mensajes. Por ejemplo, si se utiliza un
valor sustituto para representar un emoji, se producirá el siguiente error: Invalid attribute
value was passed in for message attribute.
• [Link]: una matriz, con formato de cadena, que puede contener varios valores. Los valores
pueden ser cadenas, números o las palabras clave true, false y null.

No se admite este tipo de datos para las suscripciones de AWS Lambda. Si especifica este tipo de datos
para los puntos de enlace de Lambda, se pasa como el tipo de datos String en la carga útil JSON que
Amazon SNS entrega a Lambda.
• Número: los números son enteros positivos o negativos o números de coma flotante. Tienen una
precisión y un rango adecuados para abarcar la mayoría de los posibles valores que los tipos integer,
9 9
float y double admiten normalmente. Un número puede tener un valor comprendido entre -10 y 10 , con
una precisión de 5 dígitos tras el separador decimal. Los ceros iniciales y finales se recortan.

No se admite este tipo de datos para las suscripciones de AWS Lambda. Si especifica este tipo de datos
para los puntos de enlace de Lambda, se pasa como el tipo de datos String en la carga útil JSON que
Amazon SNS entrega a Lambda.
• Binario: con los atributos de tipo binarios, se puede almacenar datos binarios de cualquier índole, tales
como datos comprimidos, datos cifrados o imágenes.

Atributos de mensaje reservados para notificaciones


de inserción en móviles
En la siguiente tabla se muestran los atributos de mensaje reservados para los servicios de notificación
push en móviles que puede utilizar para estructurar su mensaje de notificación push:

79
Amazon Simple Notification
Service Guía para desarrolladores
Atributos de mensaje reservados para
notificaciones de inserción en móviles

Servicio de notificaciones de Atributo de mensaje reservado


inserción

ADM [Link]

APNs [Link].APNS_MDM.TTL

[Link].APNS_MDM_SANDBOX.TTL

[Link].APNS_PASSBOOK.TTL

[Link].APNS_PASSBOOK_SANDBOX.TTL

[Link].APNS_SANDBOX.TTL

[Link].APNS_VOIP.TTL

[Link].APNS_VOIP_SANDBOX.TTL

[Link].COLLAPSE_ID

[Link]

[Link].PUSH_TYPE

[Link]

[Link]

Baidu [Link]

[Link]

[Link]

[Link]

FCM [Link]

[Link]

macOS [Link].MACOS_SANDBOX.TTL

[Link]

MPNS [Link]

[Link]

[Link]

WNS [Link]

[Link]

[Link]

[Link]

[Link]

[Link]

80
Amazon Simple Notification
Service Guía para desarrolladores
Agrupación en lotes de mensajes

Servicio de notificaciones de Atributo de mensaje reservado


inserción

[Link]

Agrupación en lotes de mensajes de Amazon SNS


¿Qué es la agrupación en lotes de mensajes?
Una alternativa a la publicación de mensajes en temas estándar o FIFO mediante solicitudes de API
Publish individuales consiste en utilizar la API PublishBatch de Amazon SNS para publicar hasta
10 mensajes en una única solicitud de API. Enviar los mensajes por lotes puede contribuir a reducir los
costes asociados a la conexión de aplicaciones distribuidas (mensajería A2A (p. 120)) o al envío de
notificaciones a personas (mensajería A2P (p. 187)) con Amazon SNS hasta 10 veces. Amazon SNS
tiene cuotas en cuanto al número de mensajes que se pueden publicar en un tema por segundo en función
de la región en la que se opere. Consulte la página Cuotas y puntos de conexión de Amazon SNS de la
guía de Referencia general de AWS para obtener más información sobre las cuotas de API.
Note

El tamaño total agregado de todos los mensajes que se envíen en una única solicitud de API
PublishBatch no puede superar los 262 144 bytes (256 KB).
La API PublishBatch utiliza la misma acción de API Publish para las políticas de IAM.

¿Cómo funciona la agrupación en lotes de mensajes?


Publicar mensajes con la API PublishBatch es similar a hacerlo con la API Publish. La principal
diferencia es que a cada mensaje de una solicitud de API PublishBatch se le debe asignar un ID de lote
único (hasta 80 caracteres). De esta forma, Amazon SNS puede devolver respuestas de API individuales
para cada mensaje de un lote, con objeto de confirmar que el mensaje se ha publicado, o bien que se ha
producido un error. En el caso de los mensajes que se publiquen en temas FIFO, además de asignar un ID
de lote único, se debe incluir un MessageDeduplicationID y un MessageGroupId en cada mensaje
individual.

Examples
Publicación de un lote de 10 mensajes en un tema estándar

// Imports
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

// Code
private static final int MAX_BATCH_SIZE = 10;

public static void publishBatchToTopic(AmazonSNS snsClient, String topicArn) {


try {
// Create the batch entries to send
List<PublishBatchRequestEntry> entries = [Link](0, MAX_BATCH_SIZE)

81
Amazon Simple Notification
Service Guía para desarrolladores
Examples

.mapToObj(i -> new PublishBatchRequestEntry()


.withId("id" + i)
.withMessage("message" + i))
.collect([Link]());

// Create the batch request


PublishBatchRequest request = new PublishBatchRequest()
.withTopicArn(topicArn)
.withPublishBatchRequestEntries(entries);

// Publish the batch request


PublishBatchResult publishBatchResult = [Link](request);

// Handle the successfully sent messages


[Link]().forEach(publishBatchResultEntry -> {
[Link]("Batch Id for successful message: " +
[Link]());
[Link]("Message Id for successful message: " +
[Link]());
});

// Handle the failed messages


[Link]().forEach(batchResultErrorEntry -> {
[Link]("Batch Id for failed message: " +
[Link]());
[Link]("Error Code for failed message: " +
[Link]());
[Link]("Sender Fault for failed message: " +
[Link]());
[Link]("Failure Message for failed message: " +
[Link]());
});
} catch (AmazonSNSException e) {
// Handle any exceptions from the request
[Link]([Link]());
[Link](1);
}
}

Publicación de un lote de 10 mensajes en un tema FIFO

// Imports
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

// Code
private static final int MAX_BATCH_SIZE = 10;

public static void publishBatchToFifoTopic(AmazonSNS snsClient, String topicArn) {


try {
// Create the batch entries to send
List<PublishBatchRequestEntry> entries = [Link](0, MAX_BATCH_SIZE)
.mapToObj(i -> new PublishBatchRequestEntry()
.withId("id" + i)
.withMessage("message" + i)
.withMessageGroupId("groupId")
.withMessageDeduplicationId("deduplicationId" + i))
.collect([Link]());

82
Amazon Simple Notification
Service Guía para desarrolladores
Examples

// Create the batch request


PublishBatchRequest request = new PublishBatchRequest()
.withTopicArn(topicArn)
.withPublishBatchRequestEntries(entries);

// Publish the batch request


PublishBatchResult publishBatchResult = [Link](request);

// Handle the successfully sent messages


[Link]().forEach(publishBatchResultEntry -> {
[Link]("Batch Id for successful message: " +
[Link]());
[Link]("Message Id for successful message: " +
[Link]());
[Link]("SequenceNumber for successful message: " +
[Link]());
});

// Handle the failed messages


[Link]().forEach(batchResultErrorEntry -> {
[Link]("Batch Id for failed message: " +
[Link]());
[Link]("Error Code for failed message: " +
[Link]());
[Link]("Sender Fault for failed message: " +
[Link]());
[Link]("Failure Message for failed message: " +
[Link]());
});

} catch (AmazonSNSException e) {
// Handle any exceptions from the request
[Link]([Link]());
[Link](1);
}
}

83
Amazon Simple Notification
Service Guía para desarrolladores
Políticas de filtro de suscripciones

Filtrado de mensajes en Amazon


SNS
De forma predeterminada, un suscriptor de un tema de Amazon SNS recibe todos los mensajes publicados
en el tema. Para recibir un subconjunto de los mensajes, un suscriptor debe asignar una política de filtro a
la suscripción del tema.

Una política de filtro es un simple objeto JSON que contiene atributos que definen qué mensajes recibe el
suscriptor. Cuando publica un mensaje en un tema, Amazon SNS compara los atributos del mensaje con
los atributos de la política de filtro para cada una de las suscripciones del tema. Si coincide cualquiera de
los atributos, Amazon SNS envía el mensaje al suscriptor. De lo contrario, Amazon SNS omite el suscriptor
sin enviar el mensaje. Si una suscripción no tiene una política de filtro, la suscripción recibe todos los
mensajes publicados en su tema.

Puede simplificar el uso de Amazon SNS mediante la consolidación de los criterios de filtrado de mensajes
en sus suscripciones de temas. De este modo, puede descargar la lógica de filtrado de mensajes de los
suscriptores y la lógica de direccionamiento de mensajes de los publicadores, por lo que no es necesario
filtrar mensajes mediante la creación de un tema independiente para cada condición. Puede utilizar un
único tema y diferenciar los mensajes mediante atributos. Cada suscriptor recibe y procesa únicamente los
mensajes aceptados por su política de filtro.

Por ejemplo, puede utilizar un único tema para publicar todos los mensajes generados por las
transacciones de su sitio web de comercio. Para indicar el estado de la transacción, puede asignar un
atributo (como order_placed, order_cancelled u order_declined) a cada mensaje. Mediante la
creación de suscripciones con políticas de filtro, puede dirigir el mensaje a la cola designada para procesar
el estado de transacción del mensaje.

Para las aplicaciones que tienen mensajes de notificación del sistema de distribución, los temas de
Amazon SNS proporcionan un punto de acceso lógico que actúa como canal de comunicación para los
puntos de conexión relacionados. Recomendamos utilizar las políticas de filtro de suscripciones (p. 84)
de Amazon SNS para las excepciones en las comunicaciones de aplicación a aplicación (A2A) (p. 120).

Para obtener más información, consulte Filtrar mensajes publicados en temas.

Temas
• Políticas de filtro de suscripciones de Amazon SNS (p. 84)
• Aplicación de una política de filtro de suscripciones (p. 92)
• Eliminación de una política de filtro de suscripciones (p. 95)

Políticas de filtro de suscripciones de Amazon SNS


Una política de filtro de suscripciones le permite especificar nombres de atributo y asignar una lista de
valores a cada nombre de atributo. Para obtener más información, consulte Filtrado de mensajes en
Amazon SNS (p. 84).

Cuando Amazon SNS evalúa los atributos del mensaje con la política de filtro de suscripciones, omite los
atributos de mensaje que no están especificados en la política.

84
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplos de políticas de filtro

Important

Los servicios de AWS, tales como IAM y Amazon SNS, utilizan un modelo de informática
distribuida llamado consistencia final. Los añadidos o cambios a una política de filtro de
suscripción pueden tardar hasta 15 minutos en tener efecto.

Una suscripción acepta un mensaje con las siguientes condiciones:

• Cada nombre de atributo de una política de filtro coincide con un nombre de atributo asignado al
mensaje.
• Para cada nombre de atributo coincidente, existe al menos una coincidencia entre los siguientes
elementos:
• Los valores del nombre de atributo en la política de filtro
• Los atributos de mensaje

Temas
• Ejemplos de políticas de filtro (p. 85)
• Restricciones de política de filtro (p. 86)
• Coincidencia de valores de cadena de atributo (p. 87)
• Coincidencia de valor numérico de atributo (p. 89)
• Coincidencia de clave de atributo (p. 91)
• Lógica AND/OR (p. 91)

Ejemplos de políticas de filtro


En el siguiente ejemplo, se muestra una carga de mensaje enviada por un tema de Amazon SNS que
publica transacciones de los clientes. El campo MessageAttributes incluye atributos que describen la
transacción:

• Intereses del cliente


• Nombre del almacén
• Estado del evento
• Precio de compra en USD

Como este mensaje incluye el campo MessageAttributes, cualquier suscripción de tema que incluya
una política de filtro puede aceptar o rechazar de manera selectiva el mensaje.

{
"Type": "Notification",
"MessageId": "a1b2c34d-567e-8f90-g1h2-i345j67klmn8",
"TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic",
"Message": "message-body-with-transaction-details",
"Timestamp": "2019-11-03T[Link].631Z",
"SignatureVersion": "4",
"Signature": "signature",
"UnsubscribeURL": "unsubscribe-url",
"MessageAttributes": {
"customer_interests": {
"Type": "[Link]",
"Value": "[\"soccer\", \"rugby\", \"hockey\"]"
},
"store": {
"Type": "String",
"Value":"example_corp"

85
Amazon Simple Notification
Service Guía para desarrolladores
Restricciones de política de filtro

},
"event": {
"Type": "String",
"Value": "order_placed"
},
"price_usd": {
"Type": "Number",
"Value": "210.75"
}
}
}

Para obtener información sobre cómo aplicar atributos a un mensaje, consulte Atributos de mensajes de
Amazon SNS (p. 78).

Las siguientes políticas de filtro aceptan o rechazan mensajes en función de sus nombres de atributo y
valores.

Política que acepta el mensaje de ejemplo


Los atributos de la siguiente política de filtro de suscripciones coinciden con los atributos asignados en el
mensaje de ejemplo.

Si un atributo de esta política no coincide con un atributo asignado en el mensaje, la política rechaza el
mensaje.

{
"store": ["example_corp"],
"event": [{"anything-but": "order_cancelled"}],
"customer_interests": [
"rugby",
"football",
"baseball"
],
"price_usd": [{"numeric": [">=", 100]}]
}

Política que rechaza el mensaje de ejemplo


La siguiente política de filtro de suscripciones tiene varias discrepancias entre sus atributos y los atributos
asignados en el mensaje de ejemplo. Como el nombre de atributo encrypted no aparece en los atributos
del mensaje, este atributo de la política provoca que se rechace el mensaje, con independencia del valor
que tenga asignado.

Si se producen discrepancias, la política rechaza el mensaje.

{
"store": ["example_corp"],
"event": ["order_cancelled"],
"encrypted": [false],
"customer_interests": [
"basketball",
"baseball"
]
}

Restricciones de política de filtro


Cuando cree una política de filtro, tenga presentes las siguientes restricciones:

86
Amazon Simple Notification
Service Guía para desarrolladores
Coincidencia de valores de cadena de atributo

• Para el tipo de datos String, la comparación de atributos entre la política y el mensaje distingue entre
mayúsculas y minúsculas.
9 9
• Los atributos numéricos de la política pueden tener un valor comprendido entre -10 y 10 , con una
precisión de 5 dígitos tras el separador decimal.
• La combinación total de valores no debe ser superior a 150. Calcule la combinación total multiplicando el
número de valores de cada matriz.

Considere la siguiente política:

{
"key_a": ["value_one", "value_two", "value_three"],
"key_b": ["value_one"],
"key_c": ["value_one", "value_two"]
}

La primera matriz tiene tres valores, la segunda tiene un valor y la tercera tiene dos valores. La
combinación total se calcula del siguiente modo:

3 x 1 x 2 = 6

• Amazon SNS compara los atributos de la política solo con los atributos de mensaje que tienen los
siguientes tipos de datos:
• String
• [Link]
• Number
• Amazon SNS ignora los atributos de mensaje con el tipo de datos Binary.
• El código JSON de la política de filtro puede contener lo siguiente:
• cadenas entre comillas
• números
• las palabras clave true, false y null, sin comillas
• Cuando utilice la API de Amazon SNS, debe pasar el código JSON de la política de filtro como una
cadena UTF-8 válida.
• Una política de filtro puede tener un máximo de cinco nombres de atributos.
• El tamaño máximo de una política es 256 KB.
• De forma predeterminada, puede tener hasta 200 políticas de filtro por cada Cuenta de AWS. Para
aumentar esta cuota, envíe una solicitud de aumento de cuota.
• Para las excepciones en los mensajes de aplicación a persona (A2P) (p. 187), recomendamos usar
Amazon Pinpoint. Amazon Pinpoint permite la creación de segmentos dinámicos en función de criterios
basados en atributos seleccionados y envía mensajes a través de una variedad de canales (email,
notificaciones push, SMS y canales personalizados) de forma similar a como lo hace Amazon SNS.

Coincidencia de valores de cadena de atributo


Puede utilizar los valores de cadena para que coincidan con los atributos de mensaje y filtrar los mensajes.
Los valores de cadena están entre comillas en la política JSON.

Puede utilizar las siguientes operaciones de cadena para emparejar los atributos de los mensajes.

Coincidencia exacta
La coincidencia exacta se produce cuando un valor de atributo de la política coincide con uno o varios
valores de atributo del mensaje.

87
Amazon Simple Notification
Service Guía para desarrolladores
Coincidencia de valores de cadena de atributo

Considere el atributo de política siguiente:

"customer_interests": ["rugby", "tennis"]

Coincide con los siguientes atributos de mensaje:

"customer_interests": {"Type": "String", "Value": "rugby"}

"customer_interests": {"Type": "String", "Value": "tennis"}

Sin embargo, no coincide con el siguiente atributo de mensaje:

"customer_interests": {"Type": "String", "Value": "baseball"}

Coincidencia de prefijo
Cuando un atributo de política incluye la palabra clave prefix, coincide con cualquier valor de atributo de
mensaje que empiece por los caracteres especificados.

Considere el atributo de política siguiente:

"customer_interests": [{"prefix": "bas"}]

Coincide con cualquiera de los siguientes atributos de mensaje:

"customer_interests": {"Type": "String", "Value": "baseball"}

"customer_interests": {"Type": "String", "Value": "basketball"}

Sin embargo, no coincide con el siguiente atributo de mensaje:

"customer_interests": {"Type": "String", "Value": "rugby"}

Coincidencia "anything-but"
Cuando un valor de atributo de política incluye la palabra clave anything-but, coincide con cualquier
atributo de mensaje que no incluya cualquiera de los valores de atributo de política.

Considere el atributo de política siguiente:

"customer_interests": [{"anything-but": ["rugby", "tennis"]}]

Coincide con cualquiera de los siguientes atributos de mensaje:

"customer_interests": {"Type": "String", "Value": "baseball"}

"customer_interests": {"Type": "String", "Value": "football"}

También coincide con el siguiente atributo de mensaje (porque contiene un valor que no es rugby ni
tennis):

88
Amazon Simple Notification
Service Guía para desarrolladores
Coincidencia de valor numérico de atributo

"customer_interests": {"Type": "[Link]", "Value": "["rugby", "baseball"]"}

Sin embargo, no coincide con el siguiente atributo de mensaje:

"customer_interests": {"Type": "String", "Value": "rugby"}

Uso de un prefijo con el operador anything-but


Para el atributo cadena, también puede usar un prefijo con el operador de anything-but.

Por ejemplo, el atributo de política siguiente deniega el prefijo order-:

"event":[{"anything-but": {"prefix": "order-"}}]

Coincide con cualquiera de los siguientes atributos:

"event": {"Type": "String", "Value": "data-entry"}

"event": {"Type": "String", "Value": "order_number"}

Sin embargo, no coincide con el siguiente atributo:

"event": {"Type": "String", "Value": "order-cancelled"}

Coincidencia de direcciones IP
Puede utilizar el operador cidr para verificar si un mensaje entrante se origina desde una dirección IP o
subred específica.

Considere el atributo de política siguiente:

"source_ip":[{"cidr": "[Link]/24"}]

Coincide con cualquiera de los siguientes atributos de mensaje:

"source_ip": {"Type": "String", "Value": "[Link]"}

"source_ip": {"Type": "String", "Value": "[Link]"}

Sin embargo, no coincide con el siguiente atributo de mensaje:

"source_ip": {"Type": "String", "Value": "[Link]"}

Coincidencia de valor numérico de atributo


Puede utilizar los valores numéricos para que coincidan con los atributos de mensaje y filtrar los
mensajes. Los valores numéricos no están entre comillas en la política JSON. Puede utilizar las siguientes
operaciones numéricas para emparejar los atributos de los mensajes.

89
Amazon Simple Notification
Service Guía para desarrolladores
Coincidencia de valor numérico de atributo

Note

Los prefijos solo se admiten para la coincidencia del atributo cadena.

Coincidencia exacta
Cuando un valor de atributo de política incluye la palabra clave numeric y el operador =, coincide con
cualquier atributo de mensajes que tenga el mismo nombre y un valor numérico igual.

Considere el atributo de política siguiente:

"price_usd": [{"numeric": ["=",301.5]}]

Coincide con cualquiera de los siguientes atributos de mensaje:

"price_usd": {"Type": "Number", "Value": 301.5}

"price_usd": {"Type": "Number", "Value": 3.015e2}

Coincidencia "anything-but"
Cuando un valor de atributo de política incluye la palabra clave anything-but, coincide con cualquier
atributo de mensaje que no incluya cualquiera de los valores de atributo de política.

Considere el atributo de política siguiente:

"price": [{"anything-but": [100, 500]}]

Coincide con cualquiera de los siguientes atributos de mensaje:

"price": {"Type": "Number", "Value": 101}

"price": {"Type": "Number", "Value": 100.1}

También coincide con el siguiente atributo de mensaje (porque contiene un valor que no es 100 ni 500):

"price": {"Type": "[Link]", "Value": "[100, 50]"}

Sin embargo, no coincide con el siguiente atributo de mensaje:

"price": {"Type": "Number", "Value": 100}

Coincidencia de intervalo de valores


Además del operador =, un atributo de política numérico puede incluir los siguientes operadores: <, <=, > y
>=.

Considere el atributo de política siguiente:

"price_usd": [{"numeric": ["<", 0]}]

90
Amazon Simple Notification
Service Guía para desarrolladores
Coincidencia de clave de atributo

Coincide con cualquier atributo de mensaje con valores numéricos negativos.

Considere otro atributo de mensaje:

"price_usd": [{"numeric": [">", 0, "<=", 150]}]

Coincide con cualquier atributo de mensaje con números positivos hasta el 150.

Coincidencia de clave de atributo


Puede utilizar el operador exists para devolver los mensajes entrantes con o sin los atributos
especificados en la política de filtrado:

• Utilice "exists": true para devolver los mensajes entrantes que incluyan el atributo especificado.

Por ejemplo, el atributo siguiente utiliza el operador exists con un valor de true:

"store": [{"exists": true}]

Coincide con cualquier mensaje que contenga la clave de atributo store, como el siguiente:

"store": "fans"
"customer_interests": ["baseball", "basketball"]

Sin embargo, no coincide con cualquier mensaje sin la clave de atributo store, como el siguiente:

"customer_interests": ["baseball", "basketball"]

• Utilice "exists": false para devolver los mensajes entrantes que no incluyan el atributo
especificado.

En el siguiente ejemplo, se muestra el efecto de utilizar el operador exists con un valor de false:

"store": [{"exists": false}]

No coincide con ningún mensaje que contenga la clave de atributo store, como el siguiente:

"store": "fans"
"customer_interests": ["baseball", "basketball"]

Sin embargo, coincide con cualquier mensaje sin la clave de atributo store, como el siguiente:

"customer_interests": ["baseball", "basketball"]

Lógica AND/OR
Puede utilizar operaciones que incluyan la lógica AND/OR para que coincidan con los atributos de
mensaje.

Lógica AND
Puede aplicar la lógica AND utilizando varios nombres de atributo.

91
Amazon Simple Notification
Service Guía para desarrolladores
Aplicación de una política de filtro de suscripciones

Considere la siguiente política:

{
"customer_interests": ["rugby"],
"price_usd": [{"numeric": [">", 100]}]
}

Hace coincidir cualquier atributo de mensaje con el valor de customer_interests establecido en rugby
y el valor de price_usd establecido en un número mayor que 100.

Lógica OR
Puede aplicar la lógica OR asignando varios valores a un nombre de atributo.

Considere el atributo de política siguiente:

"customer_interests": ["rugby", "football", "baseball"]

Hace coincidir cualquier atributo de mensaje con el valor de customer_interests establecido en


rugby, football o baseball.
Note

En la actualidad, no puede usar filtros de SNS para aplicar la lógica OR a través de diferentes
atributos de mensajes. En su lugar, puede utilizar varias suscripciones de SNS con diferentes
puntos de enlace para lograr el mismo efecto. Por ejemplo, suponga que tiene atributos de
mensajes llamados customer_interests y customer_preferences. Para aplicar la lógica
OR en ambos atributos, cree una suscripción de SNS para que coincida con cada atributo de
mensaje. A continuación, puede utilizar su aplicación de suscriptor para consumir ambos tipos de
mensajes a través de los diferentes puntos de enlace.

Aplicación de una política de filtro de suscripciones


Puede aplicar una política de filtro a una suscripción de Amazon SNS mediante la consola de Amazon
SNS. O bien, para aplicar políticas mediante programación, puede utilizar la API de Amazon SNS, la AWS
Command Line Interface, la (AWS CLI) o cualquier SDK de AWS compatible con Amazon SNS.
Important

Los servicios de AWS, tales como IAM y Amazon SNS utilizan un modelo de informática
distribuida llamado consistencia final. Los añadidos o cambios a una política de filtro de
suscripción pueden tardar hasta 15 minutos en tener efecto.

AWS Management Console


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, seleccione Subscriptions (Suscripciones).
3. Seleccione una suscripción y, a continuación, elija Edit (Editar).
4. En la página Edit (Editar), amplíe la sección Subscription filter policy (Política de filtro de suscripción).
5. En el campo JSON editor (Editor JSON), proporcione el cuerpo JSON de su política de filtrado.
6. Elija Save changes.

Amazon SNS aplica la política de filtro a la suscripción.

92
Amazon Simple Notification
Service Guía para desarrolladores
AWS CLI

AWS CLI
Para aplicar una política de filtro con la AWS Command Line Interface (AWS CLI), utilice el comando set-
subscription-attributes, tal y como se muestra en el ejemplo siguiente:

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name


FilterPolicy --attribute-value '{"store":["example_corp"],"event":["order_placed"]}'

Para la opción --attribute-name, especifique FilterPolicy. Para --attribute-value,


especifique la política JSON.

Para proporcionar un objeto JSON válido para su política, incluya los nombres de atributos y valores
entre comillas dobles. Incluya también todo el argumento de la política entre comillas. Para evitar que las
comillas se interpreten como caracteres de escape, puede utilizar comillas simples para delimitar la política
y comillas dobles para delimitar los nombres y los valores JSON, tal y como se muestra en el ejemplo
anterior.

Para verificar que su política de filtro se ha aplicado, utilice el comando get-subscription-


attributes. Los atributos del resultado deben mostrar la política de filtro para la clave FilterPolicy,
tal y como se muestra en el ejemplo siguiente:

$ aws sns get-subscription-attributes --subscription-arn arn:aws:sns: ...


{
"Attributes": {
"Endpoint": "endpoint . . .",
"Protocol": "https",
"RawMessageDelivery": "false",
"EffectiveDeliveryPolicy": "delivery policy . . .",
"ConfirmationWasAuthenticated": "true",
"FilterPolicy": "{\"store\": [\"example_corp\"], \"event\": [\"order_placed\"]}",
"Owner": "111122223333",
"SubscriptionArn": "arn:aws:sns: . . .",
"TopicArn": "arn:aws:sns: . . ."
}
}

AWS SDK
En los siguientes ejemplos de código, se muestra cómo establecer una política de filtro de Amazon SNS.

Java

SDK para Java 2.x

public static void usePolicy(SnsClient snsClient, String subscriptionArn) {

try {
SNSMessageFilterPolicy fp = new SNSMessageFilterPolicy();

// Add a filter policy attribute with a single value


[Link]("store", "example_corp");
[Link]("event", "order_placed");

// Add a prefix attribute


[Link]("customer_interests", "bas");

// Add an anything-but attribute

93
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

[Link]("customer_interests", "baseball");

// Add a filter policy attribute with a list of values


ArrayList<String> attributeValues = new ArrayList<>();
[Link]("rugby");
[Link]("soccer");
[Link]("hockey");
[Link]("customer_interests", attributeValues);

// Add a numeric attribute


[Link]("price_usd", "=", 0);

// Add a numeric attribute with a range


[Link]("price_usd", ">", 0, "<=", 100);

// Apply the filter policy attributes to an Amazon SNS subscription


[Link](snsClient, subscriptionArn);

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSubscriptionAttributes en la Referencia de la API de
AWS SDK for Java 2.x.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def add_subscription_filter(subscription, attributes):


"""
Adds a filter policy to a subscription. A filter policy is a key and a
list of values that are allowed. When a message is published, it must have
an
attribute that passes the filter or it will not be sent to the
subscription.

:param subscription: The subscription the filter policy is attached to.


:param attributes: A dictionary of key-value pairs that define the filter.
"""
try:
att_policy = {key: [value] for key, value in [Link]()}
subscription.set_attributes(
AttributeName='FilterPolicy',
AttributeValue=[Link](att_policy))
[Link]("Added filter to subscription %s.", [Link])
except ClientError:
[Link](
"Couldn't add filter to subscription %s.", [Link])
raise

94
Amazon Simple Notification
Service Guía para desarrolladores
API de Amazon SNS

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSubscriptionAttributes en la Referencia de la API de
AWS SDK for Python (Boto3).

API de Amazon SNS


Para aplicar una política de filtro con la API de Amazon SNS, realice una solicitud a la acción
SetSubscriptionAttributes. Establezca el parámetro AttributeName en FilterPolicy y
establezca el parámetro AttributeValue en el objeto JSON de la política de filtro.

AWS CloudFormation
Para aplicar una política de filtro con AWS CloudFormation, utilice una plantilla JSON o YAML
para crear una pila de AWS CloudFormation. Para obtener más información, consulte la propiedad
de FilterPolicy del recurso de AWS::SNS::Subscription en la Guía del usuario de AWS
CloudFormation y la plantilla de ejemplo de AWS CloudFormation.

1. Inicie sesión en la consola de AWS CloudFormation.


2. Elija Create Stack.
3. En la página Select Template (Seleccionar plantilla), elija Upload a template to Amazon S3 (Cargar
una plantilla en Amazon S3), elija el archivo y, a continuación, elija Next (Siguiente).
4. En la página Specify Details (Especificar detalles), haga lo siguiente:

a. Para Stack Name (Nombre de la pila), escriba MyFilterPolicyStack.


b. Para myHttpEndpoint, escriba el punto de enlace HTTP que se debe suscribir al tema.
Tip

Si no dispone de un punto de enlace HTTP, cree uno.


5. En la página Options, seleccione Next.
6. En la página Review (Revisar), elija Create (Crear).

Eliminación de una política de filtro de


suscripciones
Para dejar de filtrar los mensajes que se envían a una suscripción, quite la política de filtro de la
suscripción sobrescribiéndola con un cuerpo JSON vacío. Después de quitar la política, la suscripción
acepta todos los mensajes que se han publicado en ella.

AWS Management Console


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, seleccione Subscriptions (Suscripciones).
3. Seleccione una suscripción y, a continuación, elija Edit (Editar).
4. En la página Editar EXAMPLE1-23bc-4567-d890-ef12g3hij456, expanda la sección Política de
filtro de suscripciones.
5. En el campo JSON editor (Editor de JSON), proporcione un cuerpo JSON vacío de su política de filtro:
{}.

95
Amazon Simple Notification
Service Guía para desarrolladores
AWS CLI

6. Elija Save changes.

Amazon SNS aplica la política de filtro a la suscripción.

AWS CLI
Para eliminar una política de filtro con la AWS CLI, utilice el comando set-subscription-attributes
y proporcione un cuerpo JSON vacío para el argumento --attribute-value:

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name


FilterPolicy --attribute-value "{}"

API de Amazon SNS


Para quitar una política de filtro con la API de Amazon SNS, realice una solicitud a la acción
SetSubscriptionAttributes. Establezca el parámetro AttributeName en FilterPolicy y
proporcione un cuerpo JSON vacío para el parámetro AttributeValue.

96
Amazon Simple Notification
Service Guía para desarrolladores
Entrega de mensajes sin procesar

Entrega de mensajes de Amazon


SNS
En esta sección, se describe cómo funciona la entrega de mensajes.

Temas
• Entrega de mensajes sin procesar de Amazon SNS (p. 97)
• Envío de mensajes de Amazon SNS a una cola de Amazon SQS de otra cuenta (p. 98)
• Envío de mensajes de Amazon SNS a una cola de Amazon SQS o a una función AWS Lambda en una
región distinta (p. 101)
• Estado de entrega de mensajes de Amazon SNS (p. 102)
• Reintento de entrega de mensajes de Amazon SNS (p. 108)
• Colas de mensajes fallidos (DLQ) de Amazon SNS (p. 112)

Entrega de mensajes sin procesar de Amazon SNS


Para evitar que los puntos de enlace de Amazon Kinesis Data Firehose (p. 120),Amazon SQS (p. 142),
yHTTP/S (p. 153) procesen el formato JSON de los mensajes, Amazon SNS permite la entrega de
mensajes sin procesar:

• Cuando se habilita la entrega de mensajes sin procesar para los puntos de enlace de Amazon Kinesis
Data Firehose o Amazon SQS, los metadatos de Amazon SNS se eliminan del mensaje publicado y el
mensaje se envía tal cual.
• Cuando habilita la entrega de mensajes sin formato para los puntos de enlace HTTP/S, el encabezado
HTTP x-amz-sns-rawdelivery con su valor establecido en true se agrega al mensaje, lo que indica
que el mensaje se ha publicado sin formato JSON.
• Cuando habilita la entrega de mensajes sin procesar para los puntos de conexión HTTP/S, se entregan
el cuerpo del mensaje, la IP del cliente y los encabezados necesarios. Cuando especifica atributos de
mensaje, no se enviará.
• Cuando habilita la entrega de mensajes sin procesar para los puntos de conexión de Kinesis Data
Firehose, se entrega el cuerpo del mensaje. Cuando especifica atributos de mensaje, no se enviará.

Para habilitar la entrega de mensajes sin procesar mediante un SDK de AWS, debe utilizar la acción de la
API SetSubscriptionAttribute y establecer el valor del atributo RawMessageDeliveryen true.

Habilitación de la entrega de mensajes sin procesar


mediante la AWS Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. En la página Temas, elija un tema suscrito a un punto de enlace Kinesis Data Firehose, Amazon SQS
o HTTP/S.
4. En la página MiTema, en la sección Subscription (Suscripción), seleccione una suscripción y elija Edit
(Editar).
5. En la página Editar EXAMPLE1-23bc-4567-d890-ef12g3hij456, en la sección DetallesExida, elija
Habilitar la entrega de mensajes sin procesar.

97
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplos de formato de mensajes

6. Elija Save changes.

Ejemplos de formato de mensajes


En los siguientes ejemplos, el mismo mensaje se envía dos veces a la misma cola de Amazon SQS. La
única diferencia es que la entrega de mensajes sin procesar está desactivada para el primer mensaje y
habilitada para el segundo.

• La entrega de mensajes sin procesar está desactivada

{
"Type": "Notification",
"MessageId": "dc1e94d9-56c5-5e96-808d-cc7f68faa162",
"TopicArn": "arn:aws:sns:us-east-2:111122223333:ExampleTopic1",
"Subject": "TestSubject",
"Message": "This is a test message.",
"Timestamp": "2021-02-16T[Link].978Z",
"SignatureVersion": "1",
"Signature": "FMG5tlZhJNHLHUXvZgtZzlk24FzVa7oX0T4P03neeXw8ZEXZx6z35j2FOTuNYShn2h0bKNC/
zLTnMyIxEzmi2X1shOBWsJHkrW2xkR58ABZF+4uWHEE73yDVR4SyYAikP9jstZzDRm
+bcVs8+T0yaLiEGLrIIIL4esi1llhIkgErCuy5btPcWXBdio2fpCRD5x9oR6gmE/
rd5O7lX1c1uvnv4r1Lkk4pqP2/iUfxFZva1xLSRvgyfm6D9hNklVyPfy
+7TalMD0lzmJuOrExtnSIbZew3foxgx8GT+lbZkLd0ZdtdRJlIyPRP44eyq78sU0Eo/LsDr0Iak4ZDpg8dXg==",
"SigningCertURL": "[Link]
[Link]",
"UnsubscribeURL": "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-
east-2:111122223333:ExampleTopic1:e1039402-24e7-40a3-a0d4-797da162b297"
}

• La entrega de mensajes sin procesar está habilitada

This is a test message.

Envío de mensajes de Amazon SNS a una cola de


Amazon SQS de otra cuenta
Puede publicar una notificación en un tema de Amazon SNS con una o varias suscripciones a colas de
Amazon SQS de otra cuenta. Configure el tema y las colas igual que lo haría si estuviesen en la misma
cuenta (consulte Colas de distribución ramificada a Amazon SQS (p. 142)). La principal diferencia radica
en cómo controla la confirmación de suscripción y eso depende de cómo suscribe la cola al tema.

Temas
• El propietario de la cola crea la suscripción (p. 98)
• Un usuario que no es el propietario de la cola crea una suscripción (p. 100)

El propietario de la cola crea la suscripción


La cuenta que creó la cola de Amazon SQS es el propietario de la cola. Cuando el propietario de la cola
crea una suscripción, esta no necesita una confirmación. La cola comienza a recibir notificaciones desde
el tema tan pronto como la acción Subscribe se completa. Para dejar que el propietario de la cola se
suscriba al tema del propietario del tema, el propietario del tema debe conceder un permiso de cuenta al
propietario de la cola para llamar a la acción Subscribe en el tema.

98
Amazon Simple Notification
Service Guía para desarrolladores
El propietario de la cola crea la suscripción

Paso 1: Establecer la política del tema mediante la AWS


Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. Seleccione un tema y, a continuación, seleccione Edit (Editar).
4. En la página Edit MyTopic (Editar MiTema), amplíe la sección Access policy (Política de acceso).
5. Escriba la siguiente política:

{
"Statement":[{
"Effect":"Allow",
"Principal":{
"AWS":"111122223333"
},
"Action":"sns:Subscribe",
"Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
}]
}

Esta política concede permiso a la cuenta 111122223333 para llamar a sns:Subscribe en


MyTopic en la cuenta 123456789012.

Un usuario con las credenciales de la cuenta 111122223333 puede suscribirse a MyTopic. Este
permiso permite al ID de la cuenta delegar el permiso a su rol o usuario de IAM. Solo la cuenta raíz o
los usuarios administradores podrán llamar a sns:Subscribe. El usuario o rol de IAM también debe
tener sns:subscribe para permitir que su cola se suscriba.
6. Elija Save changes.

Un usuario con las credenciales de la cuenta 111122223333 puede suscribirse a MiTema.

Paso 2: Agregar una suscripción de cola de Amazon SQS a un


tema de otra Cuenta de AWS mediante la AWS Management
Console
Antes de comenzar, asegúrese de que tiene los ARN del tema y la cola y de que tiene el permiso
específico para que el tema envíe mensajes a la cola (p. 144).

1. Inicie sesión en la consola de Amazon SQS.


2. En el panel de navegación, elija Queues (Colas).
3. En la lista de colas, elija la cola para suscribirse al tema de Amazon SNS.
4. En el menú Actions (Acciones), elija Subscribe to Amazon SNS topic (Suscribirse a tema de Amazon
SNS).
5. Desde Specify an Amazon SNS topic available for this queue menu (Especificar un tema de Amazon
SNS disponible para este menú de cola), elija el SNS topic (Tema de SNS) para la cola.
6. Elija Enter Amazon SNS topic ARN (Ingresar ARN de tema de Amazon SNS) y, a continuación,
ingrese el Amazon Resource Name (ARN) (Nombre de recurso de Amazon [ARN]) del tema.
7. Seleccione Save.
Note

• Para poder comunicarse con el servicio, la cola debe tener permisos para Amazon SNS.

99
Amazon Simple Notification
Service Guía para desarrolladores
Un usuario que no es el propietario
de la cola crea una suscripción
• Puesto que usted es el propietario de la cola, no tiene que confirmar la suscripción.

Un usuario que no es el propietario de la cola crea una


suscripción
Cualquier usuario que crea una suscripción y no es el propietario de la cola tiene que confirmar la
suscripción.

Cuando utiliza la acción Subscribe, Amazon SNS envía una confirmación de suscripción a la cola. La
suscripción aparece en la consola de Amazon SNS, con su ID de suscripción establecido en Confirmación
pendiente.

Para confirmar la suscripción, un usuario con permiso para leer los mensajes de la cola debe visitar la
URL de suscripción. Hasta que no se confirme la suscripción, no se enviarán a la cola las notificaciones
publicadas en el tema. Para confirmar la suscripción, puede utilizar la consola de Amazon SQS o la acción
ReceiveMessage.
Note

Antes de suscribir un punto de enlace al tema, asegúrese de que la cola pueda recibir mensajes
desde el tema mediante la configuración del permiso sqs:SendMessage para la cola. Para
obtener más información, consulte Paso 2: Conceder permiso al tema de Amazon SNS y enviar
mensajes a la cola de Amazon SQS (p. 144) .

Paso 2: Agregar una suscripción de cola de Amazon SQS a un


tema de otra Cuenta de AWS mediante la AWS Management
Console
Antes de comenzar, asegúrese de que tiene los ARN del tema y la cola y de que tiene el permiso
específico para que el tema envíe mensajes a la cola (p. 144).

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación, seleccione Subscriptions (Suscripciones).
3. En la página Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).
4. En la página Create subscription (Crear suscripción), en la sección Details (Detalles), haga lo
siguiente:

a. En Topic ARN (ARN del tema), introduzca el ARN del tema.


b. En Protocolo, elija Amazon SQS.
c. En Endpoint (Punto de enlace), introduzca el ARN de la cola.
d. Elija Create subscription (Crear suscripción).
Note

• Para poder comunicarse con el servicio, la cola debe tener permisos para Amazon
SNS.
• Puesto que usted es el propietario de la cola, no tiene que confirmar la suscripción.

Para confirmar una suscripción mediante la AWS Management


Console
1. Inicie sesión en la consola de Amazon SQS.

100
Amazon Simple Notification
Service Guía para desarrolladores
Entrega entre regiones

2. Seleccione la cola que tenga una suscripción pendiente con el tema.


3. Seleccione Queue Actions (Acciones de cola), View/Delete Messages (Ver/Eliminar mensajes) y, a
continuación, seleccione Start Polling for Messages (Comenzar el sondeo de mensajes).

Se recibe un mensaje con la confirmación de la suscripción en la cola.


4. En la columna Body (Cuerpo) , realice las siguientes acciones:

a. Seleccione More Details (Más detalles).


b. En el cuadro de diálogo Message Details (Detalles de mensajes), busque y anote el valor de
SubscribeURL, por ejemplo:

[Link]
Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-
east-2:123456789012:MyTopic&Token=2336412f37fb...

5. En un navegador web, navegue hasta la URL.

Se muestra una respuesta XML, por ejemplo:

<ConfirmSubscriptionResponse>
<ConfirmSubscriptionResult>
<SubscriptionArn>arn:aws:sns:us-east-2:123456789012:MyTopic:1234a567-
bc89-012d-3e45-6fg7h890123i</SubscriptionArn>
</ConfirmSubscriptionResult>
<ResponseMetadata>
<RequestId>abcd1efg-23hi-jkl4-m5no-p67q8rstuvw9</RequestId>
</ResponseMetadata>
</ConfirmSubscriptionResponse>

La cola suscrita está lista para recibir mensajes del tema.


6. (Opcional) Si ve la suscripción del tema en la consola de Amazon SNS, puede ver que el mensaje
Confirmación pendiente se ha sustituido por el ARN de suscripción en la columna ID de suscripción.

Envío de mensajes de Amazon SNS a una cola de


Amazon SQS o a una función AWS Lambda en una
región distinta
Amazon SNS admite entregas entre regiones, tanto para regiones habilitadas de forma predeterminada
como para las regiones registradas (p. 101). Si desea conocer la lista actual de las regiones de AWS
compatibles con Amazon SNS, incluidas las regiones registradas, consulte Puntos de enlace y cuotas de
Amazon Simple Notification Serviceen la Referencia general de Amazon Web Services.

Amazon SNS admite la entrega entre regiones de notificaciones a colas de Amazon SQS y a funciones
AWS Lambda. Cuando una de las regiones es una región registrada, debe especificar una entidad
principal de servicio de Amazon SNS diferente en la política del recurso suscrito.

Regiones registradas
Amazon SNS admite las siguientes regiones registradas:

• África (Ciudad del Cabo)


• Asia Pacific (Hong Kong)
• Europe (Milan)

101
Amazon Simple Notification
Service Guía para desarrolladores
Estado de entrega de mensajes

• Middle East (Bahrain)

Para obtener información sobre la habilitación de la región registrada, consulte Administración de regiones
de AWS en la Referencia general de Amazon Web Services.

Cuando se utiliza Amazon SNS para entregar mensajes de las regiones registradas a regiones que están
habilitadas de forma predeterminada, debe modificar la política de recursos creada para la cola. Sustituya
la entidad principal [Link] por sns.<opt-in-region>.[Link]. Por ejemplo:

• Para suscribir una cola de Amazon SQS en Este de EE. UU. (Norte de Virginia) a un tema de
SNS en Asia-Pacífico (Hong Kong), agregue la entidad principal en la política de cola a [Link]-
[Link]. Las regiones registradas incluyen cualquier región lanzada después del 20
de marzo de 2019, que incluye Asia-Pacífico (Hong Kong), Medio Oriente (Baréin), UE (Milán) y África
(Ciudad del Cabo). Las regiones lanzadas antes del 20 de marzo de 2019 están habilitadas de forma
predeterminada.
Note

AWS también admite la entrega entre regiones a Amazon SQS desde una región que está
habilitada de forma predeterminada a una región registrada. Sin embargo, no se admite
el reenvío entre regiones de mensajes SNS desde regiones registradas a otras regiones
registradas.
• Para suscribir una función AWS Lambda en Este de EE. UU. (Norte de Virginia) a un tema de SNS
en Asia-Pacífico (Hong Kong), cambie la entidad principal en la política de funciones AWS Lambda
a [Link]. Las regiones registradas incluyen cualquier región lanzada
después del 20 de marzo de 2019, que incluye Asia-Pacífico (Hong Kong), Medio Oriente (Baréin),
UE (Milán) y África (Ciudad del Cabo). Las regiones lanzadas antes del 20 de marzo de 2019 están
habilitadas de forma predeterminada.
Note

AWS no admite la entrega entre regiones a Lambda desde una región que está habilitada de
forma predeterminada a una región registrada. Además, no se admite el reenvío entre regiones
de mensajes SNS desde regiones registradas a otras regiones registradas.

Estado de entrega de mensajes de Amazon SNS


Con Amazon SNS, puede registrar el estado de entrega de los mensajes de notificación enviados a los
temas con los puntos de enlace de Amazon SNS siguientes:

• HTTP
• Amazon Kinesis Data Firehose
• AWS Lambda
• Punto de enlace de aplicación de plataforma
• Amazon Simple Queue Service

Después de configurar los atributos de estado de entrega de los mensajes, se envían entradas de registro
a CloudWatch Logs para los mensajes enviados a los suscriptores de temas. El log del estado de entrega
de los mensajes aporta información operativa de mejor calidad, como la siguiente:

• Saber si un mensaje se ha entregado al punto de enlace de Amazon SNS.


• Identificar la respuesta enviada desde el punto de enlace de Amazon SNS a Amazon SNS.
• Determinar el tiempo de permanencia del mensaje (el tiempo entre la marca de tiempo de publicación y
justo antes de entregarlo a un punto de enlace de Amazon SNS).

102
Amazon Simple Notification
Service Guía para desarrolladores
Configuración del registro del estado de entrega
mediante la AWS Management Console
Si desea configurar los atributos de los temas para el estado de entrega de los mensajes, puede utilizar la
AWS Management Console, los kits de desarrollo de software (SDK) de AWS o la API de consultas.

Temas
• Configuración del registro del estado de entrega mediante la AWS Management Console (p. 103)
• Configuración de los atributos del estado de entrega de los mensajes para los temas suscritos a
puntos de enlace de Amazon SNS mediante los SDK de AWS (p. 103)

Configuración del registro del estado de entrega


mediante la AWS Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. En la página Topics (Temas) seleccione un tema y Delete (Eliminar).
4. En la página Editar MiTema, expanda la sección Registro de estado de entrega.
5. Elija el protocolo para los que desea registrar el estado de entrega, por ejemplo AWS Lambda.
6. Ingrese el valor de Velocidad de muestreo correcto, es decir, el porcentaje de mensajes de éxito para
el que desea recibir CloudWatch Logs.
7. En la subsección Roles de IAM, lleve a cabo una de las siguientes operaciones:

• Para elegir un rol de servicio existente de la cuenta, elija Use existing service role (Utilizar el rol de
servicio existente) y, a continuación, especifique los roles de IAM para las entregas correctas y con
error.

• Para crear un nuevo rol de servicio en la cuenta, elija Create new service role (Crear un nuevo rol
de servicio) y después Create new roles (Crear roles nuevos) para definir los roles de IAM para las
entregas correctas y con error en la consola de IAM.

Elija Permitir si desea conceder a Amazon SNS acceso de escritura para utilizar CloudWatch Logs
en su nombre.
8. Elija Save changes.

Ahora podrá ver y analizar los CloudWatch Logs en los que se encuentra el estado de entrega de los
mensajes. Para obtener más información sobre el uso de CloudWatch, consulte la documentación de
CloudWatch.

Configuración de los atributos del estado de entrega


de los mensajes para los temas suscritos a puntos de
enlace de Amazon SNS mediante los SDK de AWS
Con los SDK de AWS, se ofrecen API en varios lenguajes para utilizar atributos de estado de entrega de
mensajes con Amazon SNS.

Atributos de los temas


Puede utilizar los siguientes valores de nombres de atributos de los temas para el estado de entrega de los
mensajes:

HTTP

103
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de los atributos del estado de entrega
de los mensajes para los temas suscritos a puntos de
• HTTPSuccessFeedbackRoleArn
enlace de Amazon SNS mediante los SDK de AWS
• HTTPSuccessFeedbackSampleRate
• HTTPFailureFeedbackRoleArn

Amazon Kinesis Data Firehose

• FirehoseSuccessFeedbackRoleArn
• FirehoseSuccessFeedbackSampleRate
• FirehoseFailureFeedbackRoleArn

AWS Lambda

• LambdaSuccessFeedbackRoleArn
• LambdaSuccessFeedbackSampleRate
• LambdaFailureFeedbackRoleArn

Punto de enlace de aplicación de plataforma

• ApplicationSuccessFeedbackRoleArn
• ApplicationSuccessFeedbackSampleRate
• ApplicationFailureFeedbackRoleArn
Note

Además de poder configurar los atributos de los temas para el estado de entrega de los
mensajes de notificación enviados a puntos de enlace de la aplicación de Amazon SNS,
también puede configurar atributos de las aplicaciones para el estado de entrega de los
mensajes de notificaciones push enviados a los servicios de notificaciones push. Para obtener
más información, consulte Uso de los atributos de la aplicaciones de Amazon SNS para el
estado de entrega de los mensajes.

Amazon SQS

• SQSSuccessFeedbackRoleArn
• SQSSuccessFeedbackSampleRate
• SQSFailureFeedbackRoleArn

Gracias a los atributos <ENDPOINT>SuccessFeedbackRoleArn y


<ENDPOINT>FailureFeedbackRoleArn, se puede conceder a Amazon SNS acceso de escritura
para utilizar CloudWatch Logs en su nombre. El atributo <ENDPOINT>SuccessFeedbackSampleRate
permite especificar el porcentaje de la frecuencia de muestreo (0-100) de los mensajes entregados
correctamente. Una vez configurado el atributo <ENDPOINT>FailureFeedbackRoleArn, todas las
entregas de mensajes erróneas generarán CloudWatch Logs.

AWSEjemplos del SDK de para configurar los atributos de los


temas
En los siguientes ejemplos de código, se muestra cómo crear atributos de temas de Amazon SNS.

104
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de los atributos del estado de entrega
de los mensajes para los temas suscritos a puntos de
Java enlace de Amazon SNS mediante los SDK de AWS

SDK para Java 2.x

public static void setTopAttr(SnsClient snsClient, String attribute, String


topicArn, String value) {

try {

SetTopicAttributesRequest request = [Link]()


.attributeName(attribute)
.attributeValue(value)
.topicArn(topicArn)
.build();

SetTopicAttributesResponse result =
[Link](request);
[Link]("\n\nStatus was " +
[Link]().statusCode() + "\n\nTopic " + [Link]()
+ " updated " + [Link]() + " to " +
[Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SetTopicAttributesCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
AttributeName: "ATTRIBUTE_NAME", // ATTRIBUTE_NAME
TopicArn: "TOPIC_ARN", // TOPIC_ARN
AttributeValue: "NEW_ATTRIBUTE_VALUE", //NEW_ATTRIBUTE_VALUE
};

105
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de los atributos del estado de entrega
de los mensajes para los temas suscritos a puntos de
enlace de Amazon SNS mediante los SDK de AWS
const run = async () => {
try {
const data = await [Link](new SetTopicAttributesCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun setTopAttr(attribute: String?, topicArnVal: String?, value: String?) {

val request = SetTopicAttributesRequest {


attributeName = attribute
attributeValue = value
topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("Topic ${[Link]} was updated.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**

106
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de los atributos del estado de entrega
de los mensajes para los temas suscritos a puntos de
* Configureenlace de Amazon
the message SNS mediante
delivery status los SDK de AWS
attributes for an Amazon SNS Topic.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);
$attribute = 'Policy | DisplayName | DeliveryPolicy';
$value = 'First Topic';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->setTopicAttributes([
'AttributeName' => $attribute,
'AttributeValue' => $value,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for PHP.

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

policy = '{
"Version":"2008-10-17",
"Id":"__default_policy_ID",
"Statement":[{
"Sid":"__default_statement_ID",
"Effect":"Allow",
"Principal":{
"AWS":"*"
},
"Action":["SNS:Publish"],
"Resource":"' + MY_TOPIC_ARN + '",
"Condition":{
"ArnEquals":{
"AWS:SourceArn":"' + MY_RESOURCE_ARN + '"}
}
}]
}'
# Replace us-west-2 with the AWS Region you're using for Amazon SNS.
sns = Aws::SNS::[Link](region: 'REGION')

# Get topic by ARN


topic = [Link]()

107
Amazon Simple Notification
Service Guía para desarrolladores
Reintentos de entrega de mensajes

# Add policy to topic


topic.set_attributes({
attribute_name: "POLICY_NAME",
attribute_value: policy
})

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for Ruby.

Reintento de entrega de mensajes de Amazon SNS


Amazon SNS define una política de entrega para cada protocolo de entrega. En la política de entrega, se
define cómo Amazon SNS reintenta la entrega de mensajes cuando se producen errores en el servidor
(cuando el sistema que aloja el punto de enlace suscrito deja de estar disponible). Cuando se agota la
política de entrega, Amazon SNS deja de intentar la entrega y descarta el mensaje, a menos que se
adjunte una cola de mensajes fallidos a la suscripción. Para obtener más información, consulte Colas de
mensajes fallidos (DLQ) de Amazon SNS (p. 112) .

Temas
• Protocolos y políticas de entrega (p. 108)
• Fases de la política de entrega (p. 109)
• Creación de una política de entrega HTTP/S (p. 110)

Protocolos y políticas de entrega


Note

• A excepción de HTTP/S, no puede cambiar las políticas de entrega definidas mediante Amazon
SNS. Solo HTTP/S admite políticas personalizadas. Consulte Creación de una política de
entrega HTTP/S (p. 110).
• Amazon SNS aplica la fluctuación de retardo a los reintentos de entrega. Para obtener más
información, consulte la publicación Retroceso exponencial y fluctuación de retardo del blog de
arquitectura de AWS.
• El tiempo total de reintentos de la política para un punto de conexión HTTP/S no puede ser
superior a 3600 segundos. Se trata de un límite codificado y no se puede aumentar.

Tipo de Protocolos Fase de Fase Fase de Fase Total de


punto de de entrega reintento previa a la regresión posterior a la intentos
conexión inmediato regresión regresión
(sin retraso)

Puntos Amazon 3 veces, sin 2 veces, 1 10 veces, 100 000 100 015


de enlace Kinesis Data retraso segundo de con retardo veces, con veces,
administrados Firehose¹ diferencia exponencial, 20 segundos durante 23
por AWS de 1 de diferencia días
AWS segundo a
Lambda 20 segundos

108
Amazon Simple Notification
Service Guía para desarrolladores
Fases de la política de entrega

Tipo de Protocolos Fase de Fase Fase de Fase Total de


punto de de entrega reintento previa a la regresión posterior a la intentos
conexión inmediato regresión regresión
(sin retraso)

Amazon
SQS

Puntos SMTP 0 veces, sin 2 veces, 10 10 veces, 38 veces, 50 intentos,


de enlace demora segundos de con retardo 600 durante 6
administrados SMS diferencia exponencial, segundos horas
por el cliente de 10 (10 minutos)
Inserción en
segundos de diferencia
móvil
a 600
segundos
(10 minutos)

¹ Para los errores de limitación controlada con el protocolo Kinesis Data Firehose, Amazon SNS utiliza la
misma política de entrega que para los puntos de enlace administrados por el cliente.

Fases de la política de entrega


En el siguiente diagrama, se muestran las fases de una política de entrega.

Cada política de entrega se compone de cuatro fases.

1. Fase de reintento inmediato (sin retraso): esta fase se produce inmediatamente después del intento
inicial de entrega. No hay un plazo de tiempo entre los reintentos de esta fase.
2. Fase previa al retroceso: esta fase sigue a la fase de reintento inmediato. Amazon SNS utiliza esta fase
para intentar realizar un conjunto de reintentos antes de aplicar una función de respaldo. En esta fase se
especifica el número de reintentos y el tiempo de retraso entre ellos.
3. Fase de retroceso: en esta fase, se controla el retraso entre reintentos mediante la función de retry-
backoff. En esta fase, se establece el retraso mínimo, el retraso máximo y la función retry-backoff, que
define con qué rapidez van a ir aumentando los retrasos desde el valor mínimo hasta alcanzar el retraso
máximo. La función de retardo puede ser aritmética, exponencial, geométrica o lineal.

109
Amazon Simple Notification
Service Guía para desarrolladores
Creación de una política de entrega HTTP/S

4. Fase posterior al retroceso: esta fase sigue a la fase de retroceso. Especifica un número de reintentos y
el tiempo de retraso entre ellos. Esta es la fase final.

Creación de una política de entrega HTTP/S


Puede utilizar una política de entrega y sus cuatro fases para definir cómo va a reintentar Amazon SNS la
entrega de mensajes a puntos de enlace HTTP/S/S. Con Amazon SNS, se puede invalidar la política de
reintentos predeterminada en los puntos de enlace HTTP si, por ejemplo, desea personalizar la política en
función de la capacidad del servidor HTTP.

Puede configurar su política de entrega HTTP/S como un objeto JSON en el nivel de la suscripción o
del tema. Cuando la directiva se define en el nivel del tema, se aplica a todas las suscripciones HTTP/S
asociadas al tema.

Debe personalizar la política de entrega en función de la capacidad de su servidor HTTP/S. Puede


establecer la política como un atributo del tema o un atributo de la suscripción. Si todas las suscripciones
HTTP/S del tema están dirigidas al mismo servidor HTTP/S, le recomendamos que establezca la política
de entrega como un atributo del tema. De ese modo, seguirá siendo válida en todas las suscripciones
HTTP/S del tema. De lo contrario, deberá redactar una política de entrega para cada suscripción HTTP/S
del tema, en función de la capacidad del servidor HTTP/S al que se aplique la directiva.

Con el siguiente objeto JSON, se representa una política de entrega con la que se indica a Amazon SNS
que debe volver a intentar una entrega HTTP/S fallida, tal y se indica a continuación:

1. 3 veces inmediatamente en la fase sin retraso


2. 2 veces (1 segundo de diferencia) en la fase previa al retardo
3. 10 veces (con retardo exponencial de entre 1 segundo y 60 segundos)
4. 35 veces (60 segundos de diferencia) en la fase posterior al retroceso.

En esta política de entrega de ejemplo, Amazon SNS realiza un total de 50 intentos antes de descartar
el mensaje. Para conservar el mensaje después de agotar los reintentos especificados en la política de
entrega, configure su suscripción con el fin de mover los mensajes que no se entregan a una cola de
mensajes fallidos (DLQ). Para obtener más información, consulte Colas de mensajes fallidos (DLQ) de
Amazon SNS (p. 112) .
Note
Con esta política de entrega, también se indica a Amazon SNS que debe limitar las entregas a un
máximo de 10 por segundo, mediante la propiedad maxReceivesPerSecond. Esta velocidad de
limitación controlada y automática podría dar lugar a más mensajes publicados (tráfico entrante)
que entregados (tráfico saliente). Cuando hay más tráfico entrante que saliente, la suscripción
puede acumular una gran cantidad de mensajes atrasados, lo que podría provocar una latencia de
entrega de mensajes elevada. En tus políticas de entrega, asegúrese de especificar un valor para
maxReceivesPerSecond que no afecte de manera negativa su carga de trabajo.

{
"healthyRetryPolicy": {
"minDelayTarget": 1,
"maxDelayTarget": 60,
"numRetries": 50,
"numNoDelayRetries": 3,
"numMinDelayRetries": 2,
"numMaxDelayRetries": 35,
"backoffFunction": "exponential"
},
"sicklyRetryPolicy": null,
"throttlePolicy": {
"maxReceivesPerSecond": 10

110
Amazon Simple Notification
Service Guía para desarrolladores
Creación de una política de entrega HTTP/S

},
"guaranteed": false
}

La política de entrega se compone de una política de reintentos y una política de limitación controlada. En
total, hay ocho atributos en una política de entrega.

Política Descripción Constraint

minDelayTarget Retraso mínimo de un reintento. Entre 1 y el retraso máximo

Unidad: segundos Valor predeterminado: 20

maxDelayTarget Retraso máximo de un reintento. Entre el retraso mínimo y 3600

Unidad: segundos Valor predeterminado: 20

numRetries Número total de reintentos, Entre 0 y 100


incluidos los reintentos
inmediatos, los reintentos Predeterminado: 3
previos al retardo y los reintentos
posteriores al retardo.

numMaxDelayRetries Número de reintentos en la 0 o más


fase posterior al retardo, con el
retraso máximo entre ellos. Predeterminado: 0

numNoDelayRetries Número de reintentos que se van 0 o más


a realizar inmediatamente, sin
retraso entre ellos. Predeterminado: 0

numMinDelayRetries Número de reintentos en la fase 0 o más


previa al retardo, con el retraso
mínimo especificado entre ellos. Predeterminado: 0

backoffFunction Modelo de retardo entre Una de las cuatro opciones:


reintentos.
• aritmética
• exponencial
• geométrica
• lineal

Valor predeterminado: lineal

sicklyRetryPolicy Este atributo ha quedado Valor predeterminado: nulo


obsoleto. Está presente solo por
motivos de compatibilidad con
versiones anteriores.

guaranteed Este atributo ha quedado Valor predeterminado: falso


obsoleto. Está presente solo por
motivos de compatibilidad con
versiones anteriores.

maxReceivesPerSecond Número máximo de entregas por 1 o más


segundo y suscripción.
Valor predeterminado: sin
limitación controlada

111
Amazon Simple Notification
Service Guía para desarrolladores
Colas de mensajes fallidos (DLQ)

Amazon SNS utiliza la siguiente fórmula para calcular la cantidad de reintentos en la fase de retardo:

numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries

Puede utilizar tres parámetros para controlar la frecuencia de los reintentos en la fase de retardo.

• minDelayTarget: se utiliza para definir el retraso asociado al primer intento de reintento en la fase de
retroceso.
• maxDelayTarget: se utiliza para definir el retraso asociado al último intento de reintento en la fase de
retroceso.
• backoffFunction: se utiliza para definir el algoritmo que Amazon SNS utiliza para calcular el plazo
de tiempo asociado a todos los intentos de reintento entre el primer y el último reintento de la fase de
retroceso. Puede utilizar una de las cuatro funciones de retardo.

En el siguiente diagrama, se muestra cómo afecta cada función de retardo al retraso relacionado con
los reintentos durante la fase de retardo en una política de entrega con el número total de reintentos
establecido en 10, el retraso mínimo establecido en 5 segundos y el retraso máximo establecido en
260 segundos. El eje vertical representa el plazo de tiempo en segundos asociado a cada uno de los 10
reintentos. El eje horizontal representa el número de reintentos, desde el primero hasta el décimo.

Colas de mensajes fallidos (DLQ) de Amazon SNS


Una cola de mensajes fallidos es una cola de Amazon SQS a la que una suscripción de Amazon SNS
puede enviar mensajes que no se pueden entregar de manera correcta a los suscriptores. Los mensajes
que no se pueden entregar debido a errores del cliente o errores del servidor se mantienen en la cola de
mensajes fallidos para su posterior análisis o reprocesamiento. Para obtener más información, consulte
Configuración de una cola de mensajes fallidos de Amazon SNS para una suscripción (p. 115) y
Reintento de entrega de mensajes de Amazon SNS (p. 108).
Note

• La suscripción a Amazon SNS y la cola de Amazon SQS deben estar en la misma región y
cuenta de AWS.
• En un tema FIFO (p. 46), utilice una cola FIFO de Amazon SQS como una cola de mensajes
fallidos para la suscripción de Amazon SNS.

112
Amazon Simple Notification
Service Guía para desarrolladores
¿Por qué no se pueden entregar los mensajes?

• Para utilizar una cola de Amazon SQS cifrada como cola de mensajes fallidos, debe utilizar
un CMK personalizado con una política de clave con la que se otorgue a la entidad principal
de servicio Amazon SNS acceso a las acciones de la API de AWS KMS. Para obtener
más información, consulte Cifrado en reposo (p. 395) en esta guía y Protección de datos
de Amazon SQS con el cifrado del lado del servidor (SSE) y AWS KMS en la Guía para
desarrolladores de Amazon Simple Queue Service.

Temas
• ¿Por qué no se pueden entregar los mensajes? (p. 113)
• ¿Cómo funcionan las colas de mensajes fallidos? (p. 113)
• ¿Cómo se transfieren los mensajes a una cola de mensajes fallidos? (p. 114)
• ¿Cómo puedo sacar los mensajes de una cola de mensajes fallidos? (p. 114)
• ¿Cómo puedo monitorizar y registrar las colas de mensajes fallidos? (p. 114)
• Configuración de una cola de mensajes fallidos de Amazon SNS para una suscripción (p. 115)

¿Por qué no se pueden entregar los mensajes?


En general, la entrega de mensajes falla cuando Amazon SNS no puede obtener acceso a un punto de
enlace suscrito por un error en el lado del cliente o del servidor. Cuando Amazon SNS recibe un error del
lado del cliente o continúa recibiendo un error en el lado del servidor de un mensaje que supera la cantidad
de reintentos especificada por la política de reintentos correspondiente, descarta el mensaje, a menos que
se adjunte una cola de mensajes fallidos a la suscripción. Las entregas fallidas no cambian el estado de
las suscripciones. Para obtener más información, consulte Reintento de entrega de mensajes de Amazon
SNS (p. 108).

Errores del cliente


Los errores del lado del cliente pueden producirse cuando Amazon SNS tiene metadatos obsoletos de
la suscripción. Estos errores suelen producirse cuando un propietario elimina el punto de enlace (por
ejemplo, una función Lambda suscrita a un tema de Amazon SNS) o cuando un propietario cambia la
política asociada al punto de enlace suscrito de forma que impide que Amazon SNS entregue mensajes al
punto de enlace. Amazon SNS no vuelve a intentar la entrega del mensaje que falla como resultado de un
error del lado del cliente.

Errores del servidor


Los errores del servidor pueden producirse cuando el sistema responsable del punto de enlace suscrito
deja de estar disponible o devuelve una excepción que indica que no puede procesar una solicitud válida
procedente de Amazon SNS. Cuando se producen errores en el lado del servidor, Amazon SNS reintenta
las entregas fallidas mediante una función de retroceso exponencial o lineal. Cuando los errores del
servidor se deben a puntos de enlace administrados por AWS que cuentan con el respaldo de Amazon
SQS o AWS Lambda, Amazon SNS intenta entregarlos un máximo de 100 015 veces durante 23 días.

Los puntos de enlace administrados por el cliente (como HTTP, SMTP, SMS o inserción móvil) también
pueden causar errores en el lado del servidor. Amazon SNS reintenta también la entrega a estos tipos
de puntos de enlace. Aunque los puntos de enlace HTTP son compatibles con las políticas de reintentos
definidas por el cliente, Amazon SNS establece una política interna de 50 reintentos de entrega durante
6 horas para los puntos de enlace SMTP, SMS e inserción móvil.

¿Cómo funcionan las colas de mensajes fallidos?


Como las entregas de mensajes se producen en el nivel de la suscripción, se adjunta una cola de
mensajes fallidos a la suscripción de Amazon SNS (y no al tema). De este modo, puede identificar más
fácilmente el punto de enlace de destino original de cada mensaje.

113
Amazon Simple Notification
Service Guía para desarrolladores
¿Cómo se transfieren los mensajes
a una cola de mensajes fallidos?
Las colas de mensajes fallidos que se adjuntan a las suscripciones de Amazon SNS son colas de Amazon
SQS normales. Para obtener más información acerca del período de retención de mensajes, consulte
Cuotas relacionadas con los mensajes en la Guía para desarrolladores de Amazon Simple Queue Service.
Puede cambiar el período de retención de los mensajes con la acción SetQueueAttributes de la API
de Amazon SQS. Para que las aplicaciones sean más resistentes, le recomendamos que establezca el
período máximo de retención de las colas de mensajes fallidos en 14 días.

¿Cómo se transfieren los mensajes a una cola de


mensajes fallidos?
Los mensajes se transfieren a la cola de mensajes fallidos a través de una política de redireccionamiento.
Una política de redireccionamiento es un objeto JSON que hace referencia al ARN de la cola de mensajes
fallidos. El atributo deadLetterTargetArn especifica el ARN. El ARN debe apuntar a una cola de
Amazon SQS de la misma región y cuenta de Cuenta de AWS que la suscripción de Amazon SNS. Para
obtener más información, consulte Configuración de una cola de mensajes fallidos de Amazon SNS para
una suscripción (p. 115).
Note

En un tema FIFO (p. 46), utilice una cola FIFO de Amazon SQS como una cola de mensajes
fallidos para la suscripción de Amazon SNS.

El siguiente objeto JSON es un ejemplo de una política de redireccionamiento asociada a una suscripción
de SNS.

{
"deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
}

¿Cómo puedo sacar los mensajes de una cola de


mensajes fallidos?
Los mensajes se pueden sacar de la cola de mensajes fallidos de dos formas:

• Evitar escribir lógica de consumo de Amazon SQS: establezca la cola de mensajes fallidos como fuente
de eventos en la función Lambda para drenar dicha cola.
• Escribir la lógica del consumidor de Amazon SQS: utilice la API de Amazon SQS, el SDK de AWSo
AWS CLI para escribir la lógica de consumidor personalizada para el sondeo, el procesamiento y la
eliminación de los mensajes de la cola de mensajes fallidos.

¿Cómo puedo monitorizar y registrar las colas de


mensajes fallidos?
Puede utilizar métricas de Amazon CloudWatch para monitorear las colas de mensajes fallidos asociadas
a las suscripciones de Amazon SNS. Todas las colas de Amazon SQS emiten métricas de CloudWatch
a intervalos de un minuto. Para obtener más información, consulte Métricas de CloudWatch disponibles
para Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue Service. Todas las
suscripciones de Amazon SNS con colas de mensajes fallidos también emiten métricas de CloudWatch.
Para obtener más información, consulte Monitoreo de los temas de Amazon SNS mediante Amazon
CloudWatch (p. 444).

Para recibir notificaciones sobre la actividad de las colas de mensajes fallidos, puede utilizar las métricas
y alarmas de CloudWatch. Por ejemplo, si espera que la cola de mensajes fallidos esté siempre vacía,

114
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una cola de mensajes fallidos

puede crear una alarma de CloudWatch con la métrica NumberOfMessagesSent. Puede establecer el
umbral de la alarma en 0 y especificar un tema de Amazon SNS al que se enviarán notificaciones cuando
esta se active. Este tema de Amazon SNS puede enviar la notificación de alarma a cualquier tipo de punto
de enlace final (como una dirección de correo electrónico, un número de teléfono o una aplicación de
localización móvil).

Puede utilizar CloudWatch Logs para investigar las excepciones que provocan que las entregas de
Amazon SNS no se realicen de forma correcta y para que los mensajes se envíen a las colas de mensajes
fallidos. Amazon SNS puede registrar entregas correctas y fallidas en CloudWatch. Para obtener más
información, consulte Estado de entrega de mensajes de Amazon SNS (p. 102).

Configuración de una cola de mensajes fallidos de


Amazon SNS para una suscripción
Una cola de mensajes fallidos es una cola de Amazon SQS a la que una suscripción de Amazon SNS
puede enviar mensajes que no se pueden entregar de manera correcta a los suscriptores. Los mensajes
que no se pueden entregar debido a errores del cliente o errores del servidor se mantienen en la cola de
mensajes fallidos para su posterior análisis o reprocesamiento. Para obtener más información, consulte
Colas de mensajes fallidos (DLQ) de Amazon SNS (p. 112) y Reintento de entrega de mensajes de
Amazon SNS (p. 108).

En esta página, se muestra cómo puede usar la AWS Management Console, el SDK de AWS, la AWS
CLI y AWS CloudFormation con el fin de configurar una cola de mensajes fallidos para una suscripción a
Amazon SNS.

Prerequisites
Antes de configurar una cola de mensajes fallidos, complete los siguientes requisitos previos:

1. Cree un tema de Amazon SNS (p. 27) llamado MyTopic.


2. Cree una cola de Amazon SQS llamada MyEndpoint con el fin de utilizarla como punto de enlace
para la suscripción de Amazon SNS.
3. (Omitir para AWS CloudFormation) Suscriba la cola al tema (p. 142).
4. Cree otra cola de Amazon SQS llamada MyDeadLetterQueue con el fin de utilizarla como cola de
mensajes fallidos para la suscripción de Amazon SNS.
5. Para conceder a la entidad principal de Amazon SNS acceso a la acción de la API de Amazon SQS,
establezca la siguiente política de cola para MyDeadLetterQueue.

{
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic"
}
}
}]
}

Temas

115
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una cola de mensajes fallidos

• Si desea configurar una cola de mensajes fallidos para una suscripción de Amazon SNS mediante la ,
siga estos pasos: AWS Management Console (p. 116)
• Si desea configurar una cola de mensajes fallidos para una suscripción de Amazon SNS mediante un
SDK de AWS, siga estos pasos: (p. 116)
• Si desea configurar una cola de mensajes fallidos para una suscripción de Amazon SNS mediante la ,
siga estos pasos: AWS CLI (p. 117)
• Si desea configurar una cola de mensajes fallidos para una suscripción de Amazon SNS mediante la ,
siga estos pasos: AWS CloudFormation (p. 117)

Si desea configurar una cola de mensajes fallidos para una


suscripción de Amazon SNS mediante la , siga estos pasos:
AWS Management Console
Asegúrese de completar los requisitos previos (p. 115) antes de comenzar con este tutorial.

1. Inicie sesión en la consola de Amazon SQS.


2. Cree una cola de Amazon SQS o utilice una cola existente, y anote su ARN en la pestaña Detalles de
la cola; por ejemplo:

arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue

Note

En un tema FIFO (p. 46), utilice una cola FIFO de Amazon SQS como una cola de mensajes
fallidos para la suscripción de Amazon SNS.
3. Inicie sesión en la consola de Amazon SNS.
4. En el panel de navegación, seleccione Subscriptions (Suscripciones).
5. En la página Subscriptions (Suscripciones), seleccione una suscripción existente y haga clic en Edit
(Editar).
6. En la página Editar 1234a567-bc89-012d-3e45-6fg7h890123i, expanda la sección Política de
redireccionamiento (cola de mensajes fallidos) y, a continuación, haga lo siguiente:

a. Elija Enabled (Habilitado).


b. Especifique el ARN de una cola de Amazon SQS.
7. Elija Save changes.

Su suscripción está configurada para usar una cola de mensajes fallidos.

Si desea configurar una cola de mensajes fallidos para una


suscripción de Amazon SNS mediante un SDK de AWS, siga
estos pasos:
Asegúrese de completar los requisitos previos (p. 115) antes de ejecutar este ejemplo.

Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

En el siguiente ejemplo de código, se muestra la configuración de una cola de Amazon SQS como una
cola de mensajes fallidos para una suscripción a Amazon SNS.

116
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una cola de mensajes fallidos

Java

SDK para Java 1.x

// Specify the ARN of the Amazon SNS subscription.


String subscriptionArn =
"arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-
bc89-012d-3e45-6fg7h890123i";

// Specify the ARN of the Amazon SQS queue to use as a dead-letter queue.
String redrivePolicy =
"{\"deadLetterTargetArn\":\"arn:aws:sqs:us-
east-2:123456789012:MyDeadLetterQueue\"}";

// Set the specified Amazon SQS queue as a dead-letter queue


// of the specified Amazon SNS subscription by setting the RedrivePolicy attribute.
SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest()
.withSubscriptionArn(subscriptionArn)
.withAttributeName("RedrivePolicy")
.withAttributeValue(redrivePolicy);
[Link](request);

• Encuentre instrucciones y más código en GitHub.

Si desea configurar una cola de mensajes fallidos para una


suscripción de Amazon SNS mediante la , siga estos pasos:
AWS CLI
Asegúrese de completar los requisitos previos (p. 115) antes de comenzar con este tutorial.

1. Instalar y configurar la AWS CLI. Para obtener más información, consulte la Guía del usuario de AWS
Command Line Interface.
2. Utilice el siguiente comando.

aws sns set-subscription-attributes \


--subscription-arn arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-
bc89-012d-3e45-6fg7h890123i
--attribute-name RedrivePolicy
--attribute-value "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-
east-2:123456789012:MyDeadLetterQueue\"}"

Si desea configurar una cola de mensajes fallidos para una


suscripción de Amazon SNS mediante la , siga estos pasos:
AWS CloudFormation
Asegúrese de completar los requisitos previos (p. 115) antes de comenzar con este tutorial.

1. Copie el siguiente código JSON a un archivo denominado [Link].

{
"Resources": {
"mySubscription": {
"Type" : "AWS::SNS::Subscription",

117
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una cola de mensajes fallidos

"Properties" : {
"Protocol": "sqs",
"Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint",
"TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic",
"RedrivePolicy": {
"deadLetterTargetArn":
"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
}
}
}
}
}

2. Inicie sesión en la consola de AWS CloudFormation.


3. En la página Select Template (Seleccionar plantilla), elija Upload a template to Amazon S3 (Cargar
una plantilla en Amazon S3), seleccione el archivo [Link] y haga clic en Next
(Siguiente).
4. En la página Specify Details (Especificar detalles), escriba MyDeadLetterQueue en Stack Name
(Nombre de pila) y haga clic en Next (Siguiente).
5. En la página Options, seleccione Next.
6. En la página Review (Revisar), elija Create (Crear).

AWS CloudFormation comienza a crear la pila MyDeadLetterQueue y muestra el estado


CREATE_IN_PROGRESS. Cuando el proceso se haya completado, AWS CloudFormation mostrará el
estado CREATE_COMPLETE.

118
Amazon Simple Notification
Service Guía para desarrolladores

Análisis y archivado de mensajes de


Amazon SNS
En Amazon SNS, se ofrece archivado y análisis de mensajes a través de Amazon Kinesis Data Firehose.
Puede ampliar las notificaciones a los flujos de entrega de Kinesis Data Firehose para enviar notificaciones
a destinos de almacenamiento y análisis compatibles con Kinesis Data Firehose, incluidos Amazon Simple
Storage Service (Amazon S3), Amazon Redshift y más. Para obtener información, consulte las siguientes
páginas:

• Distribución ramificada a los flujos de entrega de Kinesis Data Firehose (p. 120)
• Ejemplo de caso de uso para archivado y análisis de mensajes (p. 132)
• Trabajo con destinos de flujos de entrega (p. 122)

119
Amazon Simple Notification
Service Guía para desarrolladores
Distribución ramificada a los flujos
de entrega de Kinesis Data Firehose

Uso de Amazon SNS para la


mensajería de aplicación a aplicación
(A2A)
En esta sección, se proporciona información sobre el uso de Amazon SNS para la mensajería de
aplicación a aplicación con suscriptores.

Temas
• Distribución ramificada a los flujos de entrega de Kinesis Data Firehose (p. 120)
• Distribución ramificada a las funciones Lambda (p. 141)
• Colas de distribución ramificada a Amazon SQS (p. 142)
• Distribución ramificada a puntos de enlace HTTP/S (p. 153)
• Distribución ramificada a las canalizaciones de bifurcación de eventos de AWS (p. 168)

Distribución ramificada a los flujos de entrega de


Kinesis Data Firehose
Puede suscribir el flujo de entrega de Amazon Kinesis Data Firehose a temas de SNS, lo que le permite
enviar notificaciones a otros puntos de enlace de almacenamiento y análisis. Los mensajes publicados en
un tema de SNS se envían al flujo de entrega de Kinesis Data Firehose suscrito y se entregan al destino
tal y como se configura en Kinesis Data Firehose. El propietario de una suscripción puede suscribir hasta
cinco flujos de entrega de Kinesis Data Firehose a un tema de SNS.

Mediante los flujos de entrega de Kinesis Data Firehose, puede dispersar las notificaciones


de Amazon SNS entre Amazon Simple Storage Service (Amazon S3), Amazon Redshift,
Amazon OpenSearch Service (OpenSearch Service) y proveedores de servicios de terceros, como
Datadog, New Relic, MongoDB y Splunk.

Por ejemplo, puede utilizar esta funcionalidad para almacenar de forma permanente los mensajes
enviados a un tema en un bucket de Amazon S3 con fines de conformidad, archivado u otros fines. Para
ello, cree un flujo de entrega de Kinesis Data Firehose con un destino de bucket de S3 y suscriba ese flujo
de entrega al tema de SNS. Como otro ejemplo, para realizar el análisis de los mensajes enviados a un
tema de SNS, cree un flujo de entrega con un destino de índice de OpenSearch Service. A continuación,
suscribirá el flujo de entrega de Kinesis Data Firehose al tema de SNS.

Amazon SNS también es compatible con el registro de estado de entrega de mensajes para las
notificaciones enviadas a los puntos de enlace de Kinesis Data Firehose. Para obtener más información,
consulte Estado de entrega de mensajes de Amazon SNS (p. 102).

Temas
• Requisitos previos para suscribir flujos de entrega de Kinesis Data Firehose a temas de Amazon
SNS (p. 121)
• Suscripción de un flujo de entrega de Kinesis Data Firehose a un tema de Amazon SNS (p. 122)
• Trabajo con destinos de flujos de entrega (p. 122)
• Ejemplo de caso de uso para archivado y análisis de mensajes (p. 132)

120
Amazon Simple Notification
Service Guía para desarrolladores
Requisitos previos

Requisitos previos para suscribir flujos de entrega de


Kinesis Data Firehose a temas de Amazon SNS
Para suscribir un flujo de entrega de Amazon Kinesis Data Firehose a un tema de SNS, su Cuenta de AWS
debe contar con lo siguiente:

• Un tema de SNS estándar. Para obtener más información, consulte Creación de un tema de Amazon
SNS (p. 27).
• Un flujo de entrega de Kinesis Data Firehose. Para obtener más información, consulte Creación de un
flujo de entrega de Amazon Kinesis Data Firehose y Conceda a su aplicación acceso a sus recursos de
Kinesis Data Firehose en la Guía para desarrolladores de Amazon Kinesis Data Firehose.
• Un rol de (IAM) AWS Identity and Access Management que confía en el principal de servicio de Amazon
SNS y tiene permiso para escribir en el flujo de entrega. Ingresará el nombre de recurso de Amazon
(ARN) de este rol como SubscriptionRoleARN cuando cree la suscripción. Amazon SNS asume
este rol y, gracias a esto, Amazon SNS puede colocar registros en el flujo de entrega de Kinesis Data
Firehose.

En el siguiente ejemplo de política, se muestran los permisos recomendados:

{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"firehose:DescribeDeliveryStream",
"firehose:ListDeliveryStreams",
"firehose:ListTagsForDeliveryStream",
"firehose:PutRecord",
"firehose:PutRecordBatch"
],
"Resource": [
"arn:aws:firehose:us-east-1:111111111111:deliverystream/firehose-sns-delivery-
stream"
],
"Effect": "Allow"
}
]
}

Con el fin de proporcionar permiso completo para usar Kinesis Data Firehose, también puede usar
la política administrada de AWS AmazonKinesisFirehoseFullAccess. O bien, con el fin de
proporcionar permisos más estrictos para usar Kinesis Data Firehose, puede crear su propia política.
Como mínimo, en la política se debe proporcionar permiso para ejecutar la operación PutRecord en un
flujo de entrega específico.

En todos los casos, también debe editar la relación de confianza para incluir el principal de servicio de
Amazon SNS. Por ejemplo:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "sts:AssumeRole"
}

121
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un flujo de entrega a un tema

]
}

Para obtener más información acerca de cómo crear roles, consulte Creación de un rol para delegar
permisos a un servicio de AWS en la Guía del usuario de IAM.

Una vez que haya completado estos requisitos, puede suscribir el flujo de entrega al tema de
SNS (p. 122).

Suscripción de un flujo de entrega de Kinesis Data


Firehose a un tema de Amazon SNS
Para enviar notificaciones de Amazon SNS a los flujos de entrega de Amazon Kinesis Data
Firehose (p. 120), primero asegúrese de haber abordado todos los requisitos previos (p. 121).

Para suscribir un flujo de entrega de Kinesis Data Firehose a un tema de Amazon SNS, siga estos
pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación, seleccione Subscriptions.
3. En la página Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).
4. En la página Create subscription (Crear suscripción), en la sección Details (Detalles), haga lo
siguiente:

a. En ARN de tema, elija el nombre de recurso de Amazon (ARN) de un tema estándar.


b. En Protocolo, elija Kinesis Data Firehose.
c. En Punto de enlace, elija el ARN de un flujo de entrega de Kinesis Data Firehose en el que se
puedan recibir notificaciones de Amazon SNS.
d. En ARN del rol, especifique el ARN rol de (IAM) AWS Identity and Access Management que
creó para escribir en flujos de entrega de Kinesis Data Firehose. Para obtener más información,
consulte Requisitos previos para suscribir flujos de entrega de Kinesis Data Firehose a temas de
Amazon SNS (p. 121).
e. (Opcional) Para eliminar cualquier metadato de Amazon SNS de los mensajes publicados, elija
Habilitar la entrega de mensajes. Para obtener más información, consulte Entrega de mensajes
sin procesar de Amazon SNS (p. 97).
5. (Opcional) Para configurar una política de filtro, expanda la sección Política de filtro de suscripción.
Para obtener más información, consulte Políticas de filtro de suscripciones de Amazon SNS (p. 84).
6. (Opcional) Para configurar una cola de mensajes fallidos en la suscripción, expanda la sección
Política de reconducción (cola de mensajes fallidos). Para obtener más información, consulte Colas de
mensajes fallidos (DLQ) de Amazon SNS (p. 112).
7. Elija Create subscription (Crear suscripción).

En la consola se crea la suscripción y se abre la página Detalles de la suscripción.

Trabajo con destinos de flujos de entrega


A través de los flujos de entrega de Amazon Kinesis Data Firehose (p. 120), puede enviar mensajes a
otros puntos de enlace. En esta sección, se describe cómo trabajar con destinos compatibles.

Temas
• Destinos de Amazon S3 (p. 123)

122
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

• Destinos de OpenSearch Service (p. 125)


• Destinos de Amazon Redshift (p. 127)
• Destinos HTTP (p. 130)

Destinos de Amazon S3
En esta sección, se proporciona información acerca de los flujos de entrega de Amazon Kinesis Data
Firehose con los que se publican datos en Amazon Simple Storage Service (Amazon S3).

Temas
• Formato de mensajes archivados para destinos de Amazon S3 (p. 123)
• Análisis de mensajes de destinos de Amazon S3 (p. 124)

Formato de mensajes archivados para destinos de Amazon S3


En el siguiente ejemplo, se muestra una notificación de Amazon SNS enviada a un bucket de Amazon
Simple Storage Service (Amazon S3), mediante sangrías para facilitar la lectura.
Note

En este ejemplo, se desactivó la entrega de mensajes sin formato en el mensaje publicado. Si se


desactiva la entrega de mensajes sin formato, Amazon SNS agrega metadatos JSON al mensaje,
incluidas las siguientes propiedades:

• Type
• MessageId

123
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

• TopicArn
• Subject
• Timestamp
• UnsubscribeURL
• MessageAttributes

Para obtener más información acerca de la entrega sin procesar, consulte Entrega de mensajes
sin procesar de Amazon SNS (p. 97).

{
"Type": "Notification",
"MessageId": "719a6bbf-f51b-5320-920f-3385b5e9aa56",
"TopicArn": "arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic",
"Subject": "My 1st subject",
"Message": "My 1st body",
"Timestamp": "2020-11-26T[Link].032Z",
"UnsubscribeURL": "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:333333333333:my-kinesis-test-
topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5",
"MessageAttributes": {
"myKey1": {
"Type": "String",
"Value": "myValue1"
},
"myKey2": {
"Type": "String",
"Value": "myValue2"
}
}
}

En el siguiente ejemplo, se muestran tres mensajes SNS enviados a través de un flujo de entrega de
Amazon Kinesis Data Firehose al mismo bucket de Amazon S3. Se tiene en cuenta el almacenamiento en
búfer y los saltos de línea separan los mensajes.

{"Type":"Notification","MessageId":"d7d2513e-6126-5d77-
bbe2-09042bd0a03a","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-
kinesis-test-topic","Subject":"My 1st subject","Message":"My 1st
body","Timestamp":"2020-11-27T[Link].100Z","UnsubscribeURL":"https://
[Link]/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-
east-1:313276652360:my-kinesis-test-topic:0b410f3c-
ee5e-49d8-b59b-3b4aa6d8fcf5","MessageAttributes":{"myKey1":
{"Type":"String","Value":"myValue1"},"myKey2":{"Type":"String","Value":"myValue2"}}}
{"Type":"Notification","MessageId":"0c0696ab-7733-5bfb-b6db-
ce913c294d56","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-
kinesis-test-topic","Subject":"My 2nd subject","Message":"My 2nd
body","Timestamp":"2020-11-27T[Link].151Z","UnsubscribeURL":"https://
[Link]/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-
east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-
b59b-3b4aa6d8fcf5","MessageAttributes":{"myKey1":{"Type":"String","Value":"myValue1"}}}
{"Type":"Notification","MessageId":"816cd54d-8cfa-58ad-91c9-8d77c7d173aa","TopicArn":"arn:aws:sns:us-
east-1:333333333333:my-kinesis-test-topic","Subject":"My 3rd subject","Message":"My
3rd body","Timestamp":"2020-11-27T[Link].755Z","UnsubscribeURL":"https://
[Link]/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-
east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5"}

Análisis de mensajes de destinos de Amazon S3


En esta página, se describe cómo analizar los mensajes de Amazon SNS enviados a través de flujos de
entrega de Amazon Kinesis Data Firehose a destinos de Amazon Simple Storage Service (Amazon S3).

124
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

Para analizar los mensajes SNS enviados a través de flujos de entrega de Kinesis Data Firehose a
destinos de Amazon S3, siga estos pasos:

1. Configure sus recursos de Amazon S3. Para recibir instrucciones, consulte Creación de un bucket en
la Guía del usuario de Amazon Simple Storage Service y Trabajar con buckets de Amazon S3 en la
Guía del usuario de Amazon Simple Storage Service.
2. Configure el flujo de entrega. Para obtener más información, consulte Elija Amazon S3 para su destino
en la Guía para desarrolladores de Amazon Kinesis Data Firehose.
3. Utilice Amazon Athena para consultar los objetos de Amazon S3 mediante SQL estándar. Para
obtener más información, consulte Introducción en la Guía del usuario de Amazon Athena.

Consulta de ejemplo

En esta consulta, suponga lo siguiente:

• Los mensajes se almacenan en la tabla notifications del esquema default.


• En la tabla notifications, se incluye una columna timestamp con un tipo de string.

Con la siguiente consulta, se devuelven todos los mensajes SNS recibidos en el intervalo de fechas
especificado:

SELECT *
FROM [Link]
WHERE from_iso8601_timestamp(timestamp) BETWEEN TIMESTAMP '2020-12-01 [Link]' AND
TIMESTAMP '2020-12-02 [Link]';

Destinos de OpenSearch Service
En esta sección, se proporciona información sobre los flujos de entrega de Amazon Kinesis Data Firehose
con los que se publican datos en Amazon OpenSearch Service (OpenSearch Service).

Temas

125
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

• Formato de los mensajes archivados en los índices de OpenSearch Service (p. 126)


• Análisis de mensajes de los destinos de OpenSearch Service (p. 127)

Formato de los mensajes archivados en los índices de OpenSearch Service


En el siguiente ejemplo, se muestra una notificación de Amazon SNS enviada a un índice de
Amazon OpenSearch Service (OpenSearch Service) llamado my-index. Este índice tiene un campo de
filtro de tiempo en el campo Timestamp. La notificación SNS se coloca en la propiedad _source de la
carga.
Note

En este ejemplo, se desactivó la entrega de mensajes sin formato en el mensaje publicado. Si se


desactiva la entrega de mensajes sin formato, Amazon SNS agrega metadatos JSON al mensaje,
incluidas las siguientes propiedades:

• Type
• MessageId
• TopicArn
• Subject
• Timestamp
• UnsubscribeURL
• MessageAttributes

Para obtener más información acerca de la entrega sin procesar, consulte Entrega de mensajes
sin procesar de Amazon SNS (p. 97).

{
"_index": "my-index",
"_type": "_doc",
"_id": "49613100963111323203250405402193283794773886550985932802.0",
"_version": 1,
"_score": null,
"_source": {
"Type": "Notification",
"MessageId": "bf32e294-46e3-5dd5-a6b3-bad65162e136",
"TopicArn": "arn:aws:sns:us-east-1:111111111111:my-topic",
"Subject": "Sample subject",
"Message": "Sample message",
"Timestamp": "2020-12-02T[Link].189Z",
"UnsubscribeURL": "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:111111111111:my-
topic:b5aa9bc1-9c3d-452b-b402-aca2cefc63c9",
"MessageAttributes": {
"my_attribute": {
"Type": "String",
"Value": "my_value"
}
}
},
"fields": {
"Timestamp": [
"2020-12-02T[Link].189Z"
]
},
"sort": [
1606948161189
]

126
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

Análisis de mensajes de los destinos de OpenSearch Service


En esta página, se describe cómo analizar los mensajes de Amazon SNS enviados a través de
flujos de entrega de Amazon Kinesis Data Firehose a destinos de Amazon OpenSearch Service
(OpenSearch Service).

Para analizar los mensajes de SNS enviados a través de flujos de entrega de


Kinesis Data Firehose a destinos de OpenSearch Service, siga estos pasos:

1. Configure los recursos de OpenSearch Service. Para obtener instrucciones, consulte Introducción a


Amazon OpenSearch Service en la Guía para desarrolladores de Amazon OpenSearch Service.
2. Configure el flujo de entrega. Para obtener instrucciones, consulte Elegir OpenSearch Service como
destino en la Guía para desarrolladores de Amazon Kinesis Data Firehose.
3. Ejecute una consulta mediante las consultas de OpenSearch Service y Kibana. Para obtener más
información, consulte Paso 3: buscar documentos en un dominio del servicio OpenSearch y Kibana en
la Guía para desarrolladores de Amazon OpenSearch Service.

Consulta de ejemplo

En el siguiente ejemplo, se consulta el índice my-index de todos los mensajes SNS recibidos en el
intervalo de fechas especificado:

POST [Link]
{
"query": {
"bool": {
"filter": [
{
"range": {
"Timestamp": {
"gte": "2020-12-08T[Link].000Z",
"lte": "2020-12-09T[Link].000Z",
"format": "strict_date_optional_time"
}
}
}
]
}
}
}

Destinos de Amazon Redshift


En esta sección, se describe cómo ampliar las notificaciones de Amazon SNS a una transmisión de
entrega de Amazon Kinesis Data Firehose en la que se publiquen datos en Amazon Redshift. Con esta
configuración, puede conectarse a la base de datos de Amazon Redshift y utilizar una herramienta
de consulta SQL para consultar la base de datos de los mensajes de Amazon SNS que cumplan
determinados criterios.

127
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

Temas
• Estructura de la tabla de archivos para los destinos de Amazon Redshift (p. 128)
• Análisis de mensajes de destinos de Amazon Redshift (p. 129)

Estructura de la tabla de archivos para los destinos de Amazon Redshift


En los puntos de enlace de Amazon Redshift, los mensajes publicados de Amazon SNS se archivan como
filas en una tabla. A continuación, se muestra un ejemplo.
Note

En este ejemplo, se desactivó la entrega de mensajes sin formato en el mensaje publicado. Si se


desactiva la entrega de mensajes sin formato, Amazon SNS agrega metadatos JSON al mensaje,
incluidas las siguientes propiedades:

• Type
• MessageId
• TopicArn
• Subject
• Message
• Timestamp
• UnsubscribeURL
• MessageAttributes

128
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

Para obtener más información acerca de la entrega sin procesar, consulte Entrega de mensajes
sin procesar de Amazon SNS (p. 97).
Si bien Amazon SNS agrega propiedades al mensaje con las mayúsculas que se muestran en
esta lista, los nombres de columna de las tablas de Amazon Redshift aparecen en minúsculas.
Para transformar los metadatos JSON en el punto de enlace de Amazon Redshift, puede utilizar
el comando COPY SQL. Para obtener más información, consulte los ejemplos Copiar desde JSON
y Cargar desde datos JSON con la opción 'auto ignorecase' en la Guía para desarrolladores de
bases de datos de Amazon Redshift.

type messageId topicarn subject message timestamp unsubscribeurl


messageattributes

Notification ea544832- arn:aws:sns:us-


Asunto de Mensaje 2020-12-02T[Link].272Z
https:// {\"my_attribute
a0d8-581d-9275-108243c46103
east-1:111111111111:my-
muestra de muestra [Link]- \":{\"Type\":
topic [Link]/?
\"String\",
Action=Unsubscribe&SubscriptionArn=a
\"Value\":
east-1:111111111111:my-
\"my_value
topic:326deeeb-
\"}}
cbf4-45da-
b92b-
ca77a247813b

Notification ab124832- arn:aws:sns:us-


Asunto de Mensaje 2020-12-03T[Link].129Z
https:// {\"my_attribute2\":
a0d8-581d-9275-108243c46114
east-1:111111111111:my-
muestra 2 de [Link]- {\"Type\":
topic muestra 2 [Link]/?
\"String\",
Action=Unsubscribe&SubscriptionArn=a
\"Value\":
east-1:111111111111:my-
\"my_value
topic:326deeeb-
\"}}
cbf4-45da-
b92b-
ca77a247813b

Notification ce644832- arn:aws:sns:us-


Asunto de Mensaje 2020-12-09T[Link].405Z
https:// {\"my_attribute3\":
a0d8-581d-9275-108243c46125
east-1:111111111111:my-
muestra 3 de [Link]- {\"Type\":
topic muestra 3 [Link]/?
\"String\",
Action=Unsubscribe&SubscriptionArn=a
\"Value\":
east-1:111111111111:my-
\"my_value
topic:326deeeb-
\"}}
cbf4-45da-
b92b-
ca77a247813b

Para obtener más información sobre la distribución de notificaciones a los puntos de enlace de Amazon
Redshift, consulte Destinos de Amazon Redshift (p. 127).

Análisis de mensajes de destinos de Amazon Redshift


En esta página, se describe cómo analizar los mensajes de Amazon SNS enviados a través de flujos de
entrega de Amazon Kinesis Data Firehose a destinos de Amazon Redshift.

Para analizar los mensajes SNS enviados a través de flujos de entrega de Kinesis Data Firehose a
destinos de Amazon Redshift, siga estos pasos:

1. Configure sus recursos de Amazon Redshift. Para obtener instrucciones, consulte Introducción a
Amazon Redshift en la Guía de introducción a Amazon Redshift.
2. Configure el flujo de entrega. Para obtener más información, consulte Elija Amazon Redshift para su
destino en la Guía para desarrolladores de Amazon Kinesis Data Firehose.

129
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

3. Ejecute una consulta. Para obtener más información, consulte Consulta de una base de datos
mediante el editor de consultas en la Guía de administración de clústeres de Amazon Redshift.

Consulta de ejemplo

En esta consulta, suponga lo siguiente:

• Los mensajes se almacenan en la tabla notifications del esquema public predeterminado.


• La propiedad Timestamp del mensaje SNS se almacena en la columna timestamp de la tabla con un
tipo de datos de columna de timestamptz.
Note

Para transformar los metadatos JSON en el punto de enlace de Amazon Redshift, puede
utilizar el comando COPY SQL. Para obtener más información, consulte los ejemplos Copiar
desde JSON y Cargar desde datos JSON con la opción 'auto ignorecase' en la Guía para
desarrolladores de bases de datos de Amazon Redshift.

Con la siguiente consulta, se devuelven todos los mensajes SNS recibidos en el intervalo de fechas
especificado:

SELECT *
FROM [Link]
WHERE timestamp > '2020-12-01T[Link].000Z' AND timestamp < '2020-12-02T[Link].000Z';

Destinos HTTP
En esta sección, se proporciona información acerca de los flujos de entrega de Amazon Kinesis Data
Firehose con los que se publican datos en los puntos de enlace HTTP.

130
Amazon Simple Notification
Service Guía para desarrolladores
Destinos de flujos de entrega

Temas
• Formato de mensajes entregados para destinos HTTP (p. 131)

Formato de mensajes entregados para destinos HTTP


A continuación, se muestra un ejemplo de cuerpo de la solicitud HTTP POST de Amazon SNS que un flujo
de entrega de Amazon Kinesis Data Firehose puede enviar al punto de enlace HTTP. La notificación SNS
se codifica como una carga útil base64 en la propiedad records.
Note

En este ejemplo, se desactivó la entrega de mensajes sin formato en el mensaje publicado. Para
obtener más información acerca de la entrega sin procesar, consulte Entrega de mensajes sin
procesar de Amazon SNS (p. 97).

"body": {
"requestId": "ebc9e8b2-fce3-4aef-a8f1-71698bf8175f",
"timestamp": 1606255960435,
"records": [
{
"data":
"eyJUeXBlIjoiTm90aWZpY2F0aW9uIiwiTWVzc2FnZUlkIjoiMjFkMmUzOGQtMmNhYi01ZjYxLTliYTItYmJiYWFhYzg0MGY2IiwiV
}
]
}

131
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

Ejemplo de caso de uso para archivado y análisis de


mensajes
En esta sección, se proporciona un tutorial sobre un caso de uso común para archivar y analizar mensajes
de Amazon SNS.

La configuración de este caso de uso es una plataforma de emisión de billetes de avión que opera en un
entorno regulado. La plataforma está sujeta a un marco de conformidad que exige que la empresa archive
todas las ventas de entradas durante un mínimo de cinco años. Para cumplir el objetivo de conformidad en
materia de retención de datos, la empresa suscribe un flujo de entrega de Amazon Kinesis Data Firehose a
un tema de SNS existente. El destino del flujo de entrega es un bucket de Amazon Simple Storage Service
(Amazon S3). Con esta configuración, todos los eventos publicados en el tema de SNS se archivan en el
bucket de Amazon S3. En el siguiente diagrama, se ilustra la arquitectura de esta configuración.

132
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

Para ejecutar análisis y obtener información sobre la venta de entradas, la empresa ejecuta consultas SQL
con Amazon Athena. Por ejemplo, la empresa puede consultar para conocer los destinos más populares y
los viajeros más frecuentes.

Con el fin de crear los recursos de AWS para este caso de uso, puede usar la AWS Management Console
o una plantilla de AWS CloudFormation.

133
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

Temas
• Creación de los recursos iniciales (p. 134)
• Un flujo de entrega de Kinesis Data Firehose. (p. 135)
• Suscripción del flujo de entrega de Kinesis Data Firehose al tema de Amazon SNS (p. 136)
• Prueba y consulta de la configuración (p. 138)
• Uso de una plantilla AWS CloudFormation (p. 139)

Creación de los recursos iniciales


En esta página, se describe cómo crear los siguientes recursos para el caso de uso de ejemplo de
archivado de mensajes y análisis (p. 132):

• Un bucket de Amazon Simple Storage Service (Amazon S3)


• Dos colas de Amazon Simple Queue Service (Amazon SQS)
• Un tema de Amazon SNS
• Dos suscripciones de Amazon SQS al tema de Amazon SNS

Para crear los recursos iniciales, siga estos pasos:

1. Cree un bucket de Amazon S3:

a. Abra la consola de Amazon S3.


b. Elija Create bucket (Crear bucket).
c. En Nombre del bucket, ingrese un nombre único. Mantenga los otros campos como valores
predeterminados.
d. Elija Create bucket (Crear bucket).

Para obtener más información sobre los buckets de Amazon S3, consulte Creación de un bucket en la
Guía del usuario de Amazon Simple Storage Service y Trabajar con buckets de Amazon S3 en la Guía
del usuario de Amazon Simple Storage Service.
2. Cree las dos colas de Amazon SQS:

a. Abra la consola de Amazon SQS.


b. Elija Create queue (Crear cola).
c. En Type (Tipo), seleccione Standard (Estándar).
d. En Name (Nombre), ingrese ticketPaymentQueue.
e. En Política de acceso, en Elegir método, elija Avanzado.
f. En el cuadro Política de JSON, pegue la siguiente política:

{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "sqs:SendMessage",
"Resource": "*",
"Condition": {
"ArnEquals": {

134
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

"aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:ticketTopic"
}
}
}
]
}

En esta política de acceso, reemplace el número Cuenta de AWS (123456789012) por el suyo y
cambie la región de AWS (us-east-1) en consecuencia.
g. Elija Create queue (Crear cola).
h. Repita estos pasos para crear una segunda cola SQS llamada ticketFraudQueue.

Para obtener más información sobre la creación de colas SQS, consulte Creación de una cola de
Amazon SQS (consola) en la Guía para desarrolladores de Amazon Simple Queue Service.
3. Cree el tema de SNS:

a. Abra la página Topics (Temas) en la consola de Amazon SNS.


b. Elija Create new topic.
c. En Detalles, en Tipo, elija Estándar.
d. En Name (Nombre), ingrese ticketTopic.
e. Elija Create new topic.

Para obtener más información sobre la creación de temas de SNS, consulte Creación de un tema de
Amazon SNS (p. 27).
4. Suscriba las colas de SQS al tema de SNS:

a. En la consola de Amazon SNS, en la página de detalles del tema TicketTopic, elija Crear
suscripción.
b. En Detalles, en Protocolo, elija Amazon SQS.
c. En Punto de enlace, elija el nombre de recurso de Amazon (ARN) de la cola
TicketPaymentQueue.
d. Elija Create subscription (Crear suscripción).
e. Repita estos pasos para crear una segunda suscripción con el ARN de la cola TicketFraudQueue.

Para obtener más información sobre la suscripción a los temas de SNS, consulte Suscripción a
un tema de Amazon SNS (p. 34). También puede suscribir colas de SQS a temas de SNS desde
la consola de Amazon SQS. Para obtener más información, consulte Suscripción de una cola de
Amazon SQS a un tema de Amazon SNS (consola) en la Guía para desarrolladores de Amazon
Simple Queue Service.

Ha creado los recursos iniciales para este caso de uso de ejemplo. Para continuar, consulte Un flujo de
entrega de Kinesis Data Firehose. (p. 135).

Un flujo de entrega de Kinesis Data Firehose.


En esta página, se describe cómo crear un flujo de entrega de Amazon Kinesis Data Firehose para el caso
de uso de ejemplo de archivado y análisis de mensajes (p. 132).

Para crear un flujo de entrega de Kinesis Data Firehose, siga estos pasos:

1. Abra la consola de servicios de Amazon Kinesis.


2. Seleccione Kinesis Data Firehose y, a continuación, elija Crear un flujo de entrega.
135
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

3. En la página Nuevo flujo de entrega, en Nombre del flujo de entrega, ingrese ticketUploadStream
y, a continuación, elija Siguiente.
4. En la página Procesar registros, elija Siguiente.
5. En la página Elegir un destino, haga lo siguiente:

a. En Destino, elija Amazon S3.


b. En Destino S3, en bucket de S3, elija el bucket de S3 que creó en un principio (p. 134).
c. Elija Next (Siguiente).
6. En la página Ajustar configuración, en Condiciones del búfer S3, realice una de las siguientes
operaciones:

• En Tamaño del búfer, ingrese 1.


• En Intervalo del búfer, ingrese 60.

Con el uso de estos valores para el búfer de Amazon S3, puede probar con rapidez la configuración.
La primera condición que se cumple desencadena la entrega de datos al bucket de S3.
7. En la página Ajustar configuración, en Permisos, elija crear un rol de (IAM) AWS Identity and Access
Management con los permisos necesarios asignados de manera automática. A continuación, elija
Next.
8. En la página Revisar, elija Crear un flujo de entrega.
9. Desde la página de flujos de entrega de Kinesis Data Firehose, elija el flujo de entrega que acaba de
crear (ticketUploadStream). En la pestaña Detalles, anote el nombre de recurso de Amazon (ARN) del
flujo para después.

Para obtener más información sobre la creación de flujos de entrega, consulte Creación de un flujo de
entrega de Amazon Kinesis Data Firehose en la Guía para desarrolladores de Amazon Kinesis Data
Firehose. Para obtener más información acerca de la creación de roles de IAM, consulte Creación de un rol
para delegar permisos a un servicio de AWS en la Guía del usuario de IAM.

Ha creado el flujo de entrega de Kinesis Data Firehose con los permisos necesarios. Para continuar,
consulte Suscripción del flujo de entrega de Kinesis Data Firehose al tema de Amazon SNS (p. 136).

Suscripción del flujo de entrega de Kinesis Data Firehose al tema


de Amazon SNS
En esta página, se describe cómo crear lo siguiente para el caso de uso de ejemplo de archivado de
mensajes y análisis (p. 132):

• El rol de (IAM) AWS Identity and Access Management con el que se logra que la suscripción a Amazon
SNS ponga registros en el flujo de entrega de Amazon Kinesis Data Firehose.
• La suscripción al flujo de entrega de Kinesis Data Firehose al tema de SNS.

Con el fin de crear el rol de IAM para la suscripción a Amazon SNS, siga estos pasos:

1. Abra la página Roles en la consola de IAM.


2. Elija Create role.
3. En Select type of trusted entity (Seleccionar tipo de entidad de confianza), elija AWS service (Servicio
de AWS).
4. En Elegir un caso de uso, elija SNS. A continuación, elija Next: Permissions (Siguiente: permisos).
5. Elija Next: Tags (Siguiente: etiquetas).

136
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

6. Elija Next: Review (Siguiente: revisar).


7. En la página Revisión, en Nombre del rol, ingrese ticketUploadStreamSubscriptionRole. A
continuación, elija Create role.
8. Cuando se crea el rol, elija su nombre (ticketUploadStreamSubscriptionRole)
9. En la página Resumen, elija Agregar política en línea.
10. En la página Crear política, elija la pestaña JSON y, a continuación, pegue la siguiente política en el
cuadro:

{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"firehose:DescribeDeliveryStream",
"firehose:ListDeliveryStreams",
"firehose:ListTagsForDeliveryStream",
"firehose:PutRecord",
"firehose:PutRecordBatch"
],
"Resource": [
"arn:aws:firehose:us-east-1:123456789012:deliverystream/
ticketUploadStream"
],
"Effect": "Allow"
}
]
}

En esta política, reemplace el número Cuenta de AWS (123456789012) por el suyo y cambie la
región de AWS (us-east-1) en consecuencia.
11. Elija Review policy (Revisar política).
12. En la página Crear política, en Nombre, ingrese FirehoseSnsPolicy. A continuación, elija Create
policy (Crear política).
13. En la página Resumen del rol, tenga en cuenta el ARN de rol para después.

Para obtener más información acerca de la creación de roles de IAM, consulte Creación de un rol para
delegar permisos a un servicio de AWS en la Guía del usuario de IAM.

Para suscribir el flujo de entrega de Kinesis Data Firehose al tema de SNS, siga estos pasos:

1. Abra la página Topics (Temas) en la consola de Amazon SNS.


2. En la pestaña Suscripciones, elija Crear suscripción.
3. En Detalles, en Protocolo, elija Amazon Kinesis Data Firehose.
4. En Punto de enlace, ingrese el nombre de recurso de Amazon (ARN) del flujo de entrega
ticketUploadStream que creó con anterioridad. Por ejemplo, escriba arn:aws:firehose:us-
east-1:123456789012:deliverystream/ticketUploadStream.
5. En ARN del rol de suscripción, ingrese el ARN del rol de IAM ticketUploadStreamSubscriptionRole
que acaba de crear. Por ejemplo, escriba arn:aws:iam::123456789012:role/
ticketUploadStreamSubscriptionRole.
6. Seleccione el cuadro de verificación Habilitar la entrega de mensajes sin procesar.
7. Elija Create subscription (Crear suscripción).

Ha creado el rol de IAM y la suscripción al tema de SNS. Para continuar, consulte Prueba y consulta de la
configuración (p. 138).

137
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

Prueba y consulta de la configuración


En esta página, se describe cómo probar el caso de uso de ejemplo de archivado y análisis de
mensajes (p. 132) mediante la publicación de un mensaje en el tema de Amazon SNS. Entre las
instrucciones se incluye una consulta de ejemplo que puede ejecutar y adaptar a sus propias necesidades.

Para probar la configuración

1. Abra la página Topics (Temas) en la consola de Amazon SNS.


2. Elija el tema ticketTopic.
3. Elija Publish message (Publicar mensaje).
4. En la página Publicar mensaje en tema, ingrese lo siguiente en el cuerpo del mensaje. Agregue un
carácter de nueva línea al final del mensaje.

{"BookingDate":"2020-12-15","BookingTime":"2020-12-15
[Link]","Destination":"Miami","FlyingFrom":"Vancouver","TicketNumber":"abcd1234"}

Mantenga todas las demás opciones en sus valores predeterminados.


5. Elija Publish message (Publicar mensaje).

Para obtener más información sobre la publicación de mensajes, consulte Publicación de mensajes en
Amazon SNS (p. 67).
6. Después del intervalo de flujo de entrega de 60 segundos, abra la consola de Amazon Simple Storage
Service (Amazon S3) y elija el bucket de Amazon S3 que creó en un principio (p. 134).

El mensaje publicado aparece en el bucket.

Para consultar los datos, siga estos pasos:

1. Abra la consola de Amazon Athena.


2. Ejecute una consulta.

Por ejemplo, supongamos que en la tabla notifications del esquema default se incluyen los
siguientes datos:

{"BookingDate":"2020-12-15","BookingTime":"2020-12-15
[Link]","Destination":"Miami","FlyingFrom":"Vancouver","TicketNumber":"abcd1234"}
{"BookingDate":"2020-12-15","BookingTime":"2020-12-15
[Link]","Destination":"Miami","FlyingFrom":"Omaha","TicketNumber":"efgh5678"}
{"BookingDate":"2020-12-15","BookingTime":"2020-12-15
[Link]","Destination":"Miami","FlyingFrom":"NewYork","TicketNumber":"ijkl9012"}
{"BookingDate":"2020-12-15","BookingTime":"2020-12-15
[Link]","Destination":"Delhi","FlyingFrom":"Omaha","TicketNumber":"mnop3456"}

Para buscar el destino principal, ejecute la siguiente consulta:

SELECT destination
FROM [Link]
GROUP BY destination
ORDER BY count(*) desc
LIMIT 1;

Para consultar los tickets vendidos durante un intervalo de fecha y hora específico, ejecute una
consulta como la siguiente:

138
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

SELECT *
FROM [Link]
WHERE bookingtime
BETWEEN TIMESTAMP '2020-12-15 [Link]'
AND TIMESTAMP '2020-12-15 [Link]';

Puede adaptar ambas consultas de muestra según sus propias necesidades. Si desea obtener más
información sobre el uso de Athena para ejecutar consultas, consulte Introducción en la Guía del
usuario de Amazon Athena.

Limpieza
Para evitar incurrir en cargos de uso después de haber terminado la prueba, elimine los siguientes
recursos que creó durante el tutorial:

• Suscripciones a Amazon SNS


• Tema de Amazon SNS
• Colas de Amazon Simple Queue Service (Amazon SQS)
• Bucket de Amazon S3
• Flujo de entrega de Amazon Kinesis Data Firehose
• AWS Identity and Access ManagementRoles y políticas de (IAM)

Uso de una plantilla AWS CloudFormation


Para automatizar la implementación de caso de uso de ejemplo de archivado y análisis de
mensajes (p. 132) de Amazon SNS, puede usar la siguiente plantilla YAML:

---
AWSTemplateFormatVersion: '2010-09-09'
Description: Template for creating an SNS archiving use case
Resources:
ticketUploadStream:
DependsOn:
- ticketUploadStreamRolePolicy
Type: AWS::KinesisFirehose::DeliveryStream
Properties:
S3DestinationConfiguration:
BucketARN: !Sub 'arn:${AWS::Partition}:s[Link]${ticketArchiveBucket}'
BufferingHints:
IntervalInSeconds: 60
SizeInMBs: 1
CompressionFormat: UNCOMPRESSED
RoleARN: !GetAtt [Link]
ticketArchiveBucket:
Type: AWS::S3::Bucket
ticketTopic:
Type: AWS::SNS::Topic
ticketPaymentQueue:
Type: AWS::SQS::Queue
ticketFraudQueue:
Type: AWS::SQS::Queue
ticketQueuePolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Statement:

139
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo de caso de uso

Effect: Allow
Principal:
Service: [Link]
Action:
- sqs:SendMessage
Resource: '*'
Condition:
ArnEquals:
aws:SourceArn: !Ref ticketTopic
Queues:
- !Ref ticketPaymentQueue
- !Ref ticketFraudQueue
ticketUploadStreamSubscription:
Type: AWS::SNS::Subscription
Properties:
TopicArn: !Ref ticketTopic
Endpoint: !GetAtt [Link]
Protocol: firehose
SubscriptionRoleArn: !GetAtt [Link]
ticketPaymentQueueSubscription:
Type: AWS::SNS::Subscription
Properties:
TopicArn: !Ref ticketTopic
Endpoint: !GetAtt [Link]
Protocol: sqs
ticketFraudQueueSubscription:
Type: AWS::SNS::Subscription
Properties:
TopicArn: !Ref ticketTopic
Endpoint: !GetAtt [Link]
Protocol: sqs
ticketUploadStreamRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Sid: ''
Effect: Allow
Principal:
Service: [Link]
Action: sts:AssumeRole
ticketUploadStreamRolePolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: FirehoseticketUploadStreamRolePolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- s3:AbortMultipartUpload
- s3:GetBucketLocation
- s3:GetObject
- s3:ListBucket
- s3:ListBucketMultipartUploads
- s3:PutObject
Resource:
- !Sub 'arn:aws:s[Link]${ticketArchiveBucket}'
- !Sub 'arn:aws:s[Link]${ticketArchiveBucket}/*'
Roles:
- !Ref ticketUploadStreamRole
ticketUploadStreamSubscriptionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:

140
Amazon Simple Notification
Service Guía para desarrolladores
Distribución ramificada a las funciones Lambda

Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- [Link]
Action:
- sts:AssumeRole
Policies:
- PolicyName: SNSKinesisFirehoseAccessPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- firehose:DescribeDeliveryStream
- firehose:ListDeliveryStreams
- firehose:ListTagsForDeliveryStream
- firehose:PutRecord
- firehose:PutRecordBatch
Effect: Allow
Resource:
- !GetAtt [Link]

Distribución ramificada a las funciones Lambda


Amazon SNS y AWS Lambda están integrados para que pueda invocar funciones Lambda con
notificaciones de Amazon SNS. Cuando se publica un mensaje en un tema de SNS que tiene una función
Lambda suscrita, la función Lambda se invoca con la carga del mensaje publicado. La función Lambda
recibe la carga del mensaje como un parámetro de entrada y puede manipular la información del mensaje,
publicar el mensaje en otros temas de SNS o enviar el mensaje a otros servicios de AWS.

Además, Amazon SNS también es compatible con los atributos de estado de entrega de los mensajes para
las notificaciones enviadas a los puntos de enlace de Lambda. Para obtener más información, consulte
Estado de entrega de mensajes de Amazon SNS (p. 102).

Prerequisites
Para invocar funciones Lambda mediante notificaciones de Amazon SNS, necesita lo siguiente:

• Lambda function
• Tema de Amazon SNS

Para obtener información acerca de cómo crear una función Lambda para utilizarla con Amazon SNS,
consulte Uso de Lambda con Amazon SNS. Para obtener más información acerca de la creación de un
tema de Amazon SNS, consulte Crear un tema.

Cuando se utiliza Amazon SNS para enviar mensajes desde regiones registradas a regiones habilitadas de
forma predeterminada, debe modificar la política creada en la función de AWS Lambda reemplazando la
entidad principal [Link] por sns.<opt-in-region>.[Link].

Por ejemplo, si desea suscribir una función Lambda en EE. UU. Este (Norte de Virginia) a un tema de SNS
en Asia-Pacífico (Hong Kong), cambie la entidad principal en la política de funciones de AWS Lambda a
[Link]. Las regiones registradas incluyen cualquier región lanzada después
del 20 de marzo de 2019, que incluye Asia-Pacífico (Hong Kong), Medio Oriente (Baréin), UE (Milán) y
África (Ciudad del Cabo). Las regiones lanzadas antes del 20 de marzo de 2019 están habilitadas de forma
predeterminada.

141
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una función a un tema

Note

AWS no admite la entrega entre regiones a Lambda desde una región que está habilitada de
forma predeterminada a una región registrada. Además, no se admite el reenvío entre regiones de
mensajes SNS desde regiones registradas a otras regiones registradas.

Suscripción de una función a un tema


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. Elija un tema en la página Topics (Temas).
4. En la sección Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).
5. En la página Create subscription (Crear suscripción), en la sección Details (Detalles), haga lo
siguiente:

a. Compruebe el Topic ARN (ARN de tema) elegido.


b. En Protocol (Protocolo), elija AWS Lambda.
c. En Endpoint (Punto de enlace), escriba el ARN de una función.
d. Seleccione Create subscription.

Cuando se publica un mensaje en un tema de SNS que tiene una función Lambda suscrita, la función
Lambda se invoca con la carga del mensaje publicado. Para obtener información sobre cómo utilizar AWS
Lambda con Amazon SNS, incluido un tutorial, consulte Uso de AWS Lambda con Amazon SNS.

Colas de distribución ramificada a Amazon SQS


Amazon SNS trabaja estrechamente con Amazon Simple Queue Service (Amazon SQS). Estos servicios
ofrecen a los desarrolladores diferentes beneficios. Con Amazon SNS, las aplicaciones pueden enviar
mensajes en los que el tiempo es esencial a varios suscriptores a través del mecanismo “push”, lo que
elimina la necesidad de comprobar o “sondear” de forma periódica en busca de actualizaciones. Amazon
SQS es un servicio de cola de mensajes que emplean las aplicaciones distribuidas para intercambiar
mensajes mediante un modelo de sondeo, y puede utilizarse para desacoplar los componentes de envío
y los de recepción, sin necesitar que cada componente esté disponible de forma simultánea. Al utilizar
Amazon SNS y Amazon SQS de forma conjunta, los mensajes pueden entregarse a aquellas aplicaciones
que requieran la notificación inmediata de un evento y también pueden conservarse en una cola de
Amazon SQS para que otras aplicaciones los procesen posteriormente.

Cuando suscribe una cola de Amazon SQS a un tema de Amazon SNS, puede publicar un mensaje en
el tema y Amazon SNS envía un mensaje Amazon SQS a la cola suscrita. En el mensaje Amazon SQS
se incluye el tema y el mensaje que se publicaron en el tema junto con los metadatos del mensaje en un
documento JSON. El mensaje Amazon SQS tendrá un aspecto similar al documento JSON siguiente.

{
"Type" : "Notification",
"MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Subject" : "Testing publish to subscribed queues",
"Message" : "Hello world!",
"Timestamp" : "2012-03-29T[Link].901Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLEnTrFPa3...",
"SigningCertURL" : "[Link]
[Link]",

142
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una cola a un tema

"UnsubscribeURL" : "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-
ab0e-4ec2-88e0-db410a0f2bee"
}

Suscripción de una cola de Amazon SQS a un tema


de Amazon SNS
Para habilitar un tema de Amazon SNS de modo que envíe mensajes a una cola de Amazon SQS, siga
uno de estos procedimientos:

• Utilice Consola de Amazon SQS, lo que simplifica el proceso. Para obtener más información, consulte
Suscripción de una cola de Amazon SQS a un tema de Amazon SNS en la Guía para desarrolladores de
Amazon Simple Queue Service.
• Sigue estos pasos:
1. Obtenga el nombre de recurso de Amazon (ARN) de la cola a la que desea enviar mensajes y del
tema al que desea suscribir la cola. (p. 143)
2. Conceda permiso sqs:SendMessage al tema de Amazon SNS para que pueda enviar mensajes a la
cola. (p. 144)
3. Suscriba la cola al tema de Amazon SNS. (p. 144)
4. Otorgue a los usuarios de IAM o a Cuentas de AWS los permisos adecuados para publicar en el tema
de Amazon SNS y leer los mensajes de la cola de Amazon SQS. (p. 145)
5. Pruebe el procedimiento publicando un mensaje en el tema y leyendo el mensaje de la cola. (p. 147)

Si desea saber cómo configurar un tema para enviar mensajes a una cola que está en otra cuenta de
AWS, consulte Envío de mensajes de Amazon SNS a una cola de Amazon SQS de otra cuenta (p. 98).

Para ver una plantilla de AWS CloudFormation que crea un tema que envía mensajes a dos colas, consulte
Uso de una plantilla de AWS CloudFormation para crear un tema que envíe mensajes a las colas de
Amazon SQS (p. 148).

Paso 1: Obtener el ARN de la cola y el del tema


Cuando suscriba una cola a un tema, necesitará una copia del ARN de la cola. Del mismo modo, a la hora
de dar permiso para que el tema envíe mensajes a la cola, necesitará una copia del ARN del tema.

Para obtener el ARN de la cola, puede utilizar la consola de Amazon SQS o la acción de API
GetQueueAttributes.

Para obtener el ARN de la cola de la consola de Amazon SQS, siga estos pasos:

1. Inicie sesión en AWS Management Console y abra la consola de Amazon SQS en https://
[Link]/sqs/.
2. Seleccione la casilla de la cola cuyo ARN quiere obtener.
3. En la sección Detalles, copie el valor del ARN de forma que pueda utilizarlo para suscribirse al tema
de Amazon SNS.

Para obtener el ARN del tema, puede utilizar la consola de Amazon SNS, el comando de sns-get-
topic-attributes o la acción GetQueueAttributes de la API.

Para obtener el ARN del tema desde la consola de Amazon SNS, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.

143
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una cola a un tema

2. En el panel de navegación, seleccione el tema cuyo ARN desea obtener.


3. En la sección Detalles, copie el valor ARN del tema de forma que pueda utilizarlo para dar permiso al
tema de Amazon SNS y enviar mensajes a la cola.

Paso 2: Conceder permiso al tema de Amazon SNS y enviar


mensajes a la cola de Amazon SQS
Para que un tema de Amazon SNS pueda enviar mensajes a una cola, debe establecer una política en la
cola en la que el tema de Amazon SNS pueda ejecutar la acción sqs:SendMessage.

Antes de suscribir una cola a un tema, necesita un tema y una cola. Si todavía no ha creado un tema o una
cola, créelo ahora. Para obtener más información, consulte Creación de un tema y Creación de una cola en
laGuía para desarrolladores de Amazon Simple Queue Service.

Para establecer una política en una cola, puede utilizar la consola de Amazon SQS o la acción
SetQueueAttributes de la API. Antes de comenzar, asegúrese de que dispone del ARN del tema al que
desea dar permiso para enviar mensajes a la cola.

Para establecer una política SendMessage en una cola mediante la consola de Amazon SQS, siga
estos pasos:

1. Inicie sesión en AWS Management Console y abra la consola de Amazon SQS en https://
[Link]/sqs/.
2. Seleccione el cuadro de la cola cuya política desea establecer, elija la pestaña Política de acceso y, a
continuación, elija Agregar un permiso.
3. En la sección Política de acceso, defina quién puede acceder a la cola.

• Añada una condición que permite la acción para el tema.


• Establezca Principal para que sea el servicio de Amazon SNS, como se muestra en el ejemplo
siguiente.

Por ejemplo, con la siguiente política, MiTema puede enviar mensajes a MyQueue.

{
"Statement": [{
"Effect":"Allow",
"Principal": {
"Service": "[Link]"
},
"Action":"sqs:SendMessage",
"Resource":"arn:aws:sqs:us-east-2:123456789012:MyQueue",
"Condition":{
"ArnEquals":{
"aws:SourceArn":"arn:aws:sns:us-east-2:123456789012:MyTopic"
}
}
}]
}

Paso 3: Suscribir la cola al tema de Amazon SNS


Para enviar mensajes a una cola a través de un tema, debe suscribir la cola al tema de Amazon SNS. La
cola se especifica con el ARN. Para suscribirse a un tema, puede utilizar la consola de Amazon SNS , el
comando sns-subscribe de la CLI o la acción de API Subscribe. Antes de comenzar, asegúrese de
que tiene el ARN de la cola a la que desea suscribirse.

144
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una cola a un tema

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación, elija Topics (Temas).
3. Elija un tema en la página Topics (Temas).
4. En la página MiTema, en la página Subscriptions (Suscripciones), elija Create subscription (Crear
suscripción).
5. En la página Create subscription (Crear suscripción), en la sección Details (Detalles), haga lo
siguiente:

a. Verifique el Topic ARN (ARN de tema).


b. En Protocolo, elija Amazon SQS.
c. En Punto de enlace, ingrese el ARN de una cola de Amazon SQS.
d. Elija Create subscription (Crear suscripción).

Cuando se confirme la suscripción, el campo Subscription ID (ID de suscripción) de la nueva


suscripción mostrará el ID de suscripción. Si el propietario de la cola crea la suscripción, esta se
confirmará de forma automática y se activará casi de inmediato.

Normalmente, suscribirá su propia cola a su propio tema en su propia cuenta. Sin embargo, también
puede suscribir una cola de otra cuenta a su tema. Si el usuario que crea la suscripción no es el
propietario de la cola (por ejemplo, si un usuario de una cuenta A suscribe una cola de una cuenta B
a un tema de la cuenta A), la suscripción deberá confirmarse. Para obtener más información sobre
cómo suscribir una cola desde otra cuenta y confirmar la suscripción, consulte Envío de mensajes de
Amazon SNS a una cola de Amazon SQS de otra cuenta (p. 98).

Paso 4: Conceder a los usuarios permisos para las acciones


adecuadas del tema y la cola
Debe utilizar AWS Identity and Access Management (IAM) para permitir que solo los usuarios adecuados
puedan publicar en el tema de Amazon SNS y leer o eliminar mensajes de la cola de Amazon SQS. Para
obtener más información sobre el control de las acciones que pueden realizar los usuarios de IAM en los
temas y las colas, consulte Uso de políticas basadas en identidades con Amazon SNS (p. 433) y Identity
and Access Management en Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue
Service.

Hay dos formas de controlar el acceso a un tema o una cola:

• Agregue una política a un usuario o un grupo de IAM (p. 145). La forma más sencilla de dar a los
usuarios permisos para temas o colas consiste en crear un grupo, añadir la política adecuada al grupo
y, a continuación, añadir usuarios a dicho grupo. Es mucho más fácil añadir y eliminar usuarios de un
grupo que mantener un seguimiento de las políticas que se han configurado para los distintos usuarios.
• Añadiendo una política a un tema o una cola (p. 146). Si desea conceder permisos para un tema o una
cola a otra cuenta de AWS, el único modo de hacerlo es agregando una política que tenga como entidad
principal la Cuenta de AWS a la que desee conceder los permisos.

Debe utilizar el primer método para la mayoría de los casos (aplicar políticas a grupos y administrar
los permisos de los usuarios añadiendo o eliminando los usuarios a los grupos). Si necesita conceder
permisos a un usuario de otra cuenta, debe utilizar el segundo método.

Adición de una política a un usuario o un grupo de IAM


Si ha agregado la política siguiente a un usuario o un grupo de IAM, debe conceder a dicho usuario o a los
miembros de dicho grupo permiso para ejecutar la acción sns:Publish en el tema MiTema.

145
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una cola a un tema

{
"Statement": [{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic"
}]
}

Si ha agregado la siguiente política a un usuario o un grupo de IAM, debe conceder a dicho usuario
o a los miembros de dicho grupo permiso para ejecutar las acciones sqs:ReceiveMessage y
sqs:DeleteMessage en las colas MyQueue1 y MyQueue2.

{
"Statement":[{
"Effect":"Allow",
"Action":[
"sqs:ReceiveMessage",
"sqs:DeleteMessage"
],
"Resource":[
"arn:aws:sqs:us-east-2:123456789012:MyQueue1",
"arn:aws:sqs:us-east-2:123456789012:MyQueue2"
]
}]
}

Añadir una política a un tema o una cola


Las siguientes políticas de ejemplo muestran cómo dar a otra cuenta permisos sobre a un tema y una cola.
Note

Cuando concede a otra Cuenta de AWS acceso a un recurso de su cuenta, también concede a
los usuarios de IAM que tienen permisos de acceso de nivel de administrador (acceso a todos los
recursos) a ese recurso. Al resto de usuarios de IAM de la otra cuenta se les deniega de manera
automática el acceso al recurso. Si desea conceder a usuarios específicos de IAM en esa Cuenta
de AWS acceso a su recurso, la cuenta o el usuario de IAM con acceso de nivel de administrador
debe delegar permisos para el recurso a esos usuarios de IAM. Para obtener más información
acerca de la delegación entre cuentas, consulte Habilitar el acceso entre cuentas en la Guía del
usuario de IAM.

Si ha añadido la política siguiente a un tema MiTema en la cuenta 123456789012, debe conceder a la


cuenta 111122223333 permiso para ejecutar la acción sns:Publish en dicho tema.

{
"Statement":[{
"Effect":"Allow",
"Principal":{
"AWS":"111122223333"
},
"Action":"sns:Publish",
"Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
}]
}

Si ha añadido la política siguiente a un tema MyQueue en la cuenta 123456789012, debe dar a la cuenta
111122223333 permiso para ejecutar las acciones sqs:ReceiveMessage y sqs:DeleteMessage en
dicha cola.

146
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una cola a un tema

{
"Statement":[{
"Effect":"Allow",
"Principal":{
"AWS":"111122223333"
},
"Action":[
"sqs:DeleteMessage",
"sqs:ReceiveMessage"
],
"Resource":[
"arn:aws:sqs:us-east-2:123456789012:MyQueue"
]
}]
}

Paso 5: Probar las suscripciones de un tema a una cola


Puede probar las suscripciones de un tema a una cola publicando en el tema y viendo el mensaje que el
tema envía a la cola.

Para publicar en un tema mediante la consola de Amazon SNS, siga estos pasos:

1. Utilice las credenciales de la Cuenta de AWS o del usuario de IAM con permiso para publicar en el
tema con el fin de iniciar sesión en la AWS Management Console y abrir la consola de Amazon SNS
en [Link]
2. En el panel de navegación, seleccione el tema y elija Publish to Topic (Publicar en tema).
3. En el cuadro Subject (Asunto), escriba un asunto (por ejemplo, Testing publish to queue), en
el cuadro Message (Mensaje), introduzca algún texto (por ejemplo, Hello world!) y, por último,
elija Publish Message (Publicar mensaje). Aparecerá el siguiente mensaje: Your message has been
successfully published.

Para ver el mensaje del tema mediante la consola de Amazon SQS, siga estos pasos:

1. Utilice las credenciales de la Cuenta de AWS o del usuario de IAM con permiso para ver los mensajes
en la cola, iniciar sesión en AWS Management Console y abrir la consola de Amazon SQS en https://
[Link]/sqs/.
2. Marque la casilla de la cola que está suscrita al tema.
3. En el menú desplegable Queue Action (Acción de cola), seleccione View/Delete Messages (Ver/
Eliminar mensajes) y elija Start Polling for Messages (Comenzar el sondeo de mensajes). Se
visualizará un mensaje del tipo Notification (Notificación).
4. En la columna Body (Cuerpo), elija More Details (Más información). El cuadro Message Details
(Detalles de mensajes) contiene un documento JSON con el tema y el mensaje que ha publicado en el
tema. El mensaje tiene un aspecto similar al documento JSON siguiente.

{
"Type" : "Notification",
"MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Subject" : "Testing publish to subscribed queues",
"Message" : "Hello world!",
"Timestamp" : "2012-03-29T[Link].901Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLEnTrFPa3...",
"SigningCertURL" : "[Link]
[Link]",

147
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo (AWS CloudFormation)

"UnsubscribeURL" : "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-
ab0e-4ec2-88e0-db410a0f2bee"
}

5. Seleccione la opción Close. Ha publicado correctamente en un tema que envía mensajes de


notificación a una cola.

Uso de una plantilla de AWS CloudFormation para


crear un tema que envíe mensajes a las colas de
Amazon SQS
Gracias a AWS CloudFormation, puede utilizar un archivo de plantilla para crear y configurar una colección
de recursos de AWS juntos como una sola unidad. Esta sección tiene una plantilla de ejemplo que facilita
la implementación de temas que publiquen en colas. Las plantillas se hacen cargo de los pasos de
configuración en su lugar, creando dos colas y un tema con suscripciones a las colas, añadiendo una
política a las colas, de modo que el tema pueda enviar mensajes a las colas y creando usuarios y grupos
de IAM para controlar el acceso a dichos recursos.

Para obtener más información sobre la implementación de recursos de AWS mediante una plantilla de
AWS CloudFormation, consulte Introducción en la Guía del usuario de AWS CloudFormation.

Uso de una plantilla de AWS CloudFormation para configurar


temas y colas en una Cuenta de AWS
Con la plantilla de ejemplo, se crea un tema de Amazon SNS con el que se puede enviar mensajes a dos
colas de Amazon SQS con los permisos adecuados para que los miembros de un grupo de IAM puedan
publicar en el tema y los de otro leer mensajes de las colas. Además, con la plantilla, se crean usuarios de
IAM que se agregan a cada grupo.

Copie el contenido de la plantilla en un archivo. También puede descargar la plantilla de la página Plantillas
de AWS CloudFormation. En la página de plantillas, elija Examinar las plantillas de ejemplo por servicio de
AWS y, a continuación, Amazon Simple Queue Service.

MySNSTopic está configurado para publicar en dos puntos de enlace suscritos, que son dos colas de
Amazon SQS (MyQueue1 y MyQueue2). MyPublishTopicGroup es un grupo de IAM cuyos miembros
tienen permiso para publicar en MySNSTopic mediante la acción de API Publicar o el comando sns-
publish. Con la plantilla, se crean los usuarios de IAM MyPublishUser y MyQueueUser, que se les
da perfiles de inicio de sesión y claves de acceso. El usuario que crea una pila con esta plantilla
especifica las contraseñas para los perfiles de inicio de sesión como parámetros de entrada. También
se crean claves de acceso para los dos usuarios de IAM con MyQueueUserKey y MyPublishUserKey.
AddUserToMyPublishTopicGroup añade MyPublishUser a MyPublishTopicGroup para que el usuario tenga
los permisos asignadas al grupo.

MyRDMessageQueueGroup es un grupo de IAM cuyos miembros tienen permiso para leer y eliminar
mensajes de las dos colas de Amazon SQS mediante las acciones de API ReceiveMessage y
DeleteMessage. AddUserToMyQueueGroup añade MyQueueUser a MyRDMessageQueueGroup para
que el usuario tenga los permisos asignados al grupo. MyQueuePolicy asigna el permiso para que
MySNSTopic publique sus notificaciones en las dos colas.

El siguiente listado muestra el contenido de la plantilla de AWS CloudFormation.

148
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo (AWS CloudFormation)

"AWSTemplateFormatVersion" : "2010-09-09",

"Description" : "AWS CloudFormation Sample Template SNSToSQS: This Template creates an


SNS topic that can send messages to
two SQS queues with appropriate permissions for one IAM user to publish to the topic and
another to read messages from the queues.
MySNSTopic is set up to publish to two subscribed endpoints, which are two SQS queues
(MyQueue1 and MyQueue2). MyPublishUser is an IAM user
that can publish to MySNSTopic using the Publish API. MyTopicPolicy assigns that
permission to MyPublishUser. MyQueueUser is an IAM user
that can read messages from the two SQS queues. MyQueuePolicy assigns those permissions
to MyQueueUser. It also assigns permission for
MySNSTopic to publish its notifications to the two queues. The template creates access
keys for the two IAM users with MyPublishUserKey
and MyQueueUserKey. ***Warning*** you will be billed for the AWS resources used if you
create a stack from this template.",

"Parameters": {
"MyPublishUserPassword": {
"NoEcho": "true",
"Type": "String",
"Description": "Password for the IAM user MyPublishUser",
"MinLength": "1",
"MaxLength": "41",
"AllowedPattern": "[a-zA-Z0-9]*",
"ConstraintDescription": "must contain only alphanumeric characters."
},
"MyQueueUserPassword": {
"NoEcho": "true",
"Type": "String",
"Description": "Password for the IAM user MyQueueUser",
"MinLength": "1",
"MaxLength": "41",
"AllowedPattern": "[a-zA-Z0-9]*",
"ConstraintDescription": "must contain only alphanumeric characters."
}
},

"Resources": {
"MySNSTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"Subscription": [{
"Endpoint": {
"Fn::GetAtt": ["MyQueue1", "Arn"]
},
"Protocol": "sqs"
},
{
"Endpoint": {
"Fn::GetAtt": ["MyQueue2", "Arn"]
},
"Protocol": "sqs"
}
]
}
},
"MyQueue1": {
"Type": "AWS::SQS::Queue"
},
"MyQueue2": {
"Type": "AWS::SQS::Queue"
},
"MyPublishUser": {
"Type": "AWS::IAM::User",

149
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo (AWS CloudFormation)

"Properties": {
"LoginProfile": {
"Password": {
"Ref": "MyPublishUserPassword"
}
}
}
},
"MyPublishUserKey": {
"Type": "AWS::IAM::AccessKey",
"Properties": {
"UserName": {
"Ref": "MyPublishUser"
}
}
},
"MyPublishTopicGroup": {
"Type": "AWS::IAM::Group",
"Properties": {
"Policies": [{
"PolicyName": "MyTopicGroupPolicy",
"PolicyDocument": {
"Statement": [{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": {
"Ref": "MySNSTopic"
}
}]
}
}]
}
},
"AddUserToMyPublishTopicGroup": {
"Type": "AWS::IAM::UserToGroupAddition",
"Properties": {
"GroupName": {
"Ref": "MyPublishTopicGroup"
},
"Users": [{
"Ref": "MyPublishUser"
}]
}
},
"MyQueueUser": {
"Type": "AWS::IAM::User",
"Properties": {
"LoginProfile": {
"Password": {
"Ref": "MyQueueUserPassword"
}
}
}
},
"MyQueueUserKey": {
"Type": "AWS::IAM::AccessKey",
"Properties": {
"UserName": {
"Ref": "MyQueueUser"
}
}
},
"MyRDMessageQueueGroup": {
"Type": "AWS::IAM::Group",

150
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo (AWS CloudFormation)

"Properties": {
"Policies": [{
"PolicyName": "MyQueueGroupPolicy",
"PolicyDocument": {
"Statement": [{
"Effect": "Allow",
"Action": [
"sqs:DeleteMessage",
"sqs:ReceiveMessage"
],
"Resource": [{
"Fn::GetAtt": ["MyQueue1", "Arn"]
},
{
"Fn::GetAtt": ["MyQueue2", "Arn"]
}
]
}]
}
}]
}
},
"AddUserToMyQueueGroup": {
"Type": "AWS::IAM::UserToGroupAddition",
"Properties": {
"GroupName": {
"Ref": "MyRDMessageQueueGroup"
},
"Users": [{
"Ref": "MyQueueUser"
}]
}
},
"MyQueuePolicy": {
"Type": "AWS::SQS::QueuePolicy",
"Properties": {
"PolicyDocument": {
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": ["sqs:SendMessage"],
"Resource": "*",
"Condition": {
"ArnEquals": {
"aws:SourceArn": {
"Ref": "MySNSTopic"
}
}
}
}]
},
"Queues": [{
"Ref": "MyQueue1"
}, {
"Ref": "MyQueue2"
}]
}
}
},
"Outputs": {
"MySNSTopicTopicARN": {
"Value": {
"Ref": "MySNSTopic"
}

151
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplo (AWS CloudFormation)

},
"MyQueue1Info": {
"Value": {
"Fn::Join": [
" ",
[
"ARN:",
{
"Fn::GetAtt": ["MyQueue1", "Arn"]
},
"URL:",
{
"Ref": "MyQueue1"
}
]
]
}
},
"MyQueue2Info": {
"Value": {
"Fn::Join": [
" ",
[
"ARN:",
{
"Fn::GetAtt": ["MyQueue2", "Arn"]
},
"URL:",
{
"Ref": "MyQueue2"
}
]
]
}
},
"MyPublishUserInfo": {
"Value": {
"Fn::Join": [
" ",
[
"ARN:",
{
"Fn::GetAtt": ["MyPublishUser", "Arn"]
},
"Access Key:",
{
"Ref": "MyPublishUserKey"
},
"Secret Key:",
{
"Fn::GetAtt": ["MyPublishUserKey", "SecretAccessKey"]
}
]
]
}
},
"MyQueueUserInfo": {
"Value": {
"Fn::Join": [
" ",
[
"ARN:",
{
"Fn::GetAtt": ["MyQueueUser", "Arn"]
},
"Access Key:",

152
Amazon Simple Notification
Service Guía para desarrolladores
Distribución ramificada a puntos de enlace HTTP/S

{
"Ref": "MyQueueUserKey"
},
"Secret Key:",
{
"Fn::GetAtt": ["MyQueueUserKey", "SecretAccessKey"]
}
]
]
}
}
}
}

Distribución ramificada a puntos de enlace HTTP/S


Puede utilizar Amazon SNS para enviar mensajes de notificación a uno o varios puntos de enlace HTTP
o HTTPS. Cuando suscribe un punto de enlace a un tema, puede publicar una notificación en el tema
y Amazon SNS enviará una solicitud HTTP POST al entregar el contenido de la notificación al punto de
enlace suscrito. Cuando suscribe el punto de enlace, indica si Amazon SNS utiliza HTTP o HTTPS para
enviar la solicitud POST al punto de enlace. Si utiliza HTTPS, puede aprovechar la compatibilidad con
Amazon SNS para lo siguiente:

• Indicación de nombre de servidor (SNI): con esta, Amazon SNS puede admitir puntos de enlace HTTPS
que requieren SNI, como un servidor que solicita varios certificados para alojar varios dominios. Para
obtener más información sobre SNI, consulte Server Name Indication.

• Autenticación de acceso básica abreviada: con esta, podrá especificar un nombre de


usuario y contraseña en la URL HTTPS para la solicitud HTTP POST, como https://
user:password@[Link] o [Link] El nombre de usuario y la contraseña
se cifran a través de la conexión SSL establecida al utilizar HTTPS. Solo el nombre de dominio se envía
en texto sin cifrar. Para obtener más información sobre la autenticación de acceso básica o abreviada,
consulte RFC-2617.
Important

Las URL HTTPS solo se pueden recuperar desde una acción de la API
GetSubscriptionAttributes de Amazon SNS, para las entidades principales a las que ha
concedido acceso a la API.
Note

El servicio de cliente debe admitir el encabezado de respuesta HTTP/1.1 401


Unauthorized

La solicitud contiene el asunto y el mensaje que se publicaron en el tema junto con los metadatos de la
notificación en un documento JSON. La solicitud tendrá un aspecto similar a la siguiente solicitud HTTP
POST. Para obtener más información sobre el encabezado HTTP y el formato JSON del cuerpo de la
solicitud, consulte Encabezados de HTTP/HTTPS (p. 162) y Formato JSON de notificación HTTP/
HTTPS (p. 164).

POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-
west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55

153
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un punto de enlace a un tema

Content-Length: 761
Content-Type: text/plain; charset=UTF-8
Host: [Link]
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
"Type" : "Notification",
"MessageId" : "da41e39f-ea4d-435a-b922-c6aae3915ebe",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Subject" : "test",
"Message" : "test message",
"Timestamp" : "2012-04-25T[Link].719Z",
"SignatureVersion" : "1",
"Signature" :
"EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUD
"SigningCertURL" : "[Link]
[Link]",
"UnsubscribeURL" : "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-
west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}

Temas
• Suscripción de un punto de enlace HTTP/S a un tema (p. 154)
• Verificación de la firmas de mensajes de Amazon SNS (p. 160)
• Análisis de formatos de mensajes (p. 162)

Suscripción de un punto de enlace HTTP/S a un tema


En las páginas de esta sección, se describe cómo suscribir puntos de enlace HTTP/S a temas de Amazon
SNS.

Temas
• Paso 1: Asegúrese de que el punto de enlace está listo para procesar mensajes de Amazon
SNS. (p. 154)
• Paso 2: Suscribir el punto de enlace HTTP/HTTPS al tema de Amazon SNS (p. 157)
• Pase 3: Confirme la suscripción (p. 158)
• Paso 4: Definir la política de reintentos de entrega para la suscripción (opcional) (p. 158)
• Paso 5: Conceder a los usuarios permisos para publicar en el tema (opcional) (p. 158)
• Paso 6: Enviar mensajes al punto de enlace HTTP/HTTPS (p. 159)

Paso 1: Asegúrese de que el punto de enlace está listo para


procesar mensajes de Amazon SNS.
Antes de suscribir su punto de enlace HTTP o HTTPS a un tema, debe asegurarse de que el punto de
enlace HTTP o HTTPS tiene la capacidad de administrar las solicitudes HTTP POST que Amazon SNS
utiliza para enviar la confirmación de suscripción y los mensajes de notificación. Por lo general, esto
implica crear e implementar una aplicación web (por ejemplo, un servlet Java si el host del punto de enlace
ejecuta Linux con Apache y Tomcat) que procese las solicitudes HTTP de Amazon SNS. Cuando suscribe
un punto de enlace HTTP, Amazon SNS envía una solicitud de confirmación de la suscripción. El punto
de enlace debe estar preparado para recibir y procesar esta solicitud cuando cree la suscripción, porque
Amazon SNS envía esta solicitud en ese momento. Amazon SNS no enviará notificaciones al punto de

154
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un punto de enlace a un tema

enlace hasta que se confirme la suscripción. Una vez confirmada la suscripción, Amazon SNS enviará
notificaciones al punto de enlace cuando se ejecute una acción de publicación en el tema suscrito.

Para configurar el punto de enlace para que procese los mensajes de confirmación de la
suscripción y de notificación

1. El código debe leer los encabezados HTTP de las solicitudes HTTP POST que Amazon SNS envía
a su punto de enlace. El código debe examinar el campo de encabezado x-amz-sns-message-
type, en el que se indica el tipo de mensaje que Amazon SNS ha enviado. En este encabezado,
puede determinar el tipo de mensaje sin tener que analizar el cuerpo de la solicitud HTTP. Hay
dos tipos que debe administrar: SubscriptionConfirmation y Notification. El mensaje
UnsubscribeConfirmation se utiliza únicamente cuando la suscripción se elimina del tema.

Para obtener información detallada sobre el encabezado HTTP, consulte Encabezados de HTTP/
HTTPS (p. 162). La siguiente solicitud HTTP POST es un ejemplo de un mensaje de confirmación de
la suscripción.

POST / HTTP/1.1
x-amz-sns-message-type: SubscriptionConfirmation
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: [Link]
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
"Type" : "SubscriptionConfirmation",
"MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
"Token" : "2336412f37f...",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-
west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL
included in this message.",
"SubscribeURL" : "[Link]
Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-
west-2:123456789012:MyTopic&Token=2336412f37...",
"Timestamp" : "2012-04-26T[Link].751Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLEpH+...",
"SigningCertURL" : "[Link]
[Link]"
}

2. El código debe analizar el documento JSON del cuerpo de la solicitud HTTP POST para leer los
pares de nombre-valor que conforman el mensaje de Amazon SNS. Utilice un analizador JSON que
se encargue de convertir la representación en forma de secuencias de escape de los caracteres de
control en sus valores de caracteres ASCII (por ejemplo, convertir \n en un carácter de nueva línea).
Puede utilizar un analizador JSON existente como Jackson JSON Processor o crear el suyo propio.
Para poder enviar el texto del asunto y los campos de los mensajes en formato JSON válido, Amazon
SNS debe convertir algunos caracteres de control en secuencias de escape que se puedan incluir en
el documento JSON. Cuando reciba el documento JSON en el cuerpo de la solicitud POST enviada a
su punto de enlace, debe convertir los caracteres incluidos en secuencias de escape en sus valores
de caracteres originales si desea una representación exacta del asunto original y de los mensajes
publicados en el tema. Esto es fundamental si desea verificar la firma de una notificación, porque la
firma utiliza el mensaje y el asunto en sus formatos originales como parte de la cadena para firmar.
3. El código debe verificar la autenticidad de una notificación, la confirmación de la suscripción o la
cancelación del mensaje de confirmación enviado por Amazon SNS. Mediante la información incluida
en el mensaje de Amazon SNS, el punto de enlace puede volver a crear la firma para que se pueda

155
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un punto de enlace a un tema

verificar el contenido del mensaje cotejando la firma propia con la firma que Amazon SNS envió con el
mensaje. Para obtener más información acerca de la verificación de la firma de un mensaje, consulte
Verificación de la firmas de mensajes de Amazon SNS (p. 160).
4. Según el tipo especificado por el campo de encabezado x-amz-sns-message-type, el código debe
leer el documento JSON incluido en el cuerpo de la solicitud HTTP y procesar el mensaje. Estas son
las directrices para administrar los dos tipos principales de mensajes:

SubscriptionConfirmation

Lea el valor de SubscribeURL y visite esa URL. Para confirmar la suscripción y empezar a
recibir notificaciones en el punto de enlace, debe visitar la URL SubscribeURL (por ejemplo,
enviando una solicitud HTTP GET a la URL). Consulte el ejemplo de la solicitud HTTP del paso
anterior para ver cómo es esa URL SubscribeURL. Para obtener más información sobre el
formato del mensaje SubscriptionConfirmation, consulte Formato JSON de confirmación
de suscripción HTTP/HTTPS (p. 163). Cuando visite la dirección URL, recibirá una respuesta
similar al siguiente documento XML. El documento devuelve el ARN de suscripción del punto de
enlace en el elemento ConfirmSubscriptionResult.

<ConfirmSubscriptionResponse xmlns="[Link]
<ConfirmSubscriptionResult>
<SubscriptionArn>arn:aws:sns:us-
west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn>
</ConfirmSubscriptionResult>
<ResponseMetadata>
<RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId>
</ResponseMetadata>
</ConfirmSubscriptionResponse>

En lugar de visitar la URL SubscribeURL, puede confirmar la suscripción mediante la acción


ConfirmSubscription con Token establecido en su valor correspondiente en el mensaje
SubscriptionConfirmation. Si desea permitir únicamente al propietario del tema y al
propietario de la suscripción que cancelen la suscripción del punto de enlace, puede llamar a la
acción ConfirmSubscription con una firma de AWS.
Notification

Lea los valores de Subject y Message para obtener la información de la notificación que se
publicó en el tema.

Para obtener más información sobre el formato del mensaje Notification, consulte
Encabezados de HTTP/HTTPS (p. 162). La siguiente solicitud HTTP POST es un ejemplo de un
mensaje de notificación enviado al punto de enlace [Link].

POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-
west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
Content-Length: 773
Content-Type: text/plain; charset=UTF-8
Host: [Link]
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
"Type" : "Notification",
"MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Subject" : "My First Message",
"Message" : "Hello world!",

156
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un punto de enlace a un tema

"Timestamp" : "2012-05-02T[Link].655Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLEw6JRN...",
"SigningCertURL" : "[Link]
[Link]",
"UnsubscribeURL" : "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-
west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
}

5. Asegúrese de que su punto de enlace responde al mensaje HTTP POST de Amazon SNS con el
código de estado adecuado. El tiempo de espera de la conexión se agotará en 15 segundos. Si el
punto de enlace no responde antes de que se agote el tiempo de espera de la conexión, o si devuelve
un código de estado fuera del intervalo 200-4xx, Amazon SNS considerará la entrega del mensaje un
intento fallido.
6. Asegúrese de que el código puede administrar los reintentos de entrega de mensajes de Amazon
SNS. Si Amazon SNS no recibe una respuesta correcta del punto de enlace, intenta entregar de
nuevo el mensaje. Esto se aplica a todos los mensajes, incluido el mensaje de confirmación de la
suscripción. De forma predeterminada, si la entrega inicial del mensaje da un error, Amazon SNS
realiza tres reintentos con un intervalo entre los intentos fallidos establecido en 20 segundos.
Note

El tiempo de espera de la solicitud de mensajes se agota tras 15 segundos. Esto significa


que si no se pudo entregar el mensaje porque se agotó el tiempo de espera, Amazon SNS
lo volverá a intentar aproximadamente 35 segundos después del intento de entrega anterior.
Puede establecer una política de entrega diferente para el punto de enlace.

En resumen, Amazon SNS intenta entregar de nuevo un mensaje únicamente después de un campo
de encabezado x-amz-sns-message-id de entrega. Comparando los ID de los mensajes que ha
procesado con los mensajes entrantes, puede determinar si se trata de un reintento de entrega del
mensaje.
7. Si suscribe un punto de enlace HTTPS, asegúrese de que el punto de enlace tiene un certificado de
servidor de una entidad de certificación (CA) de confianza. Amazon SNS solo enviará mensajes a
puntos de enlace HTTPS que tengan un certificado de servidor de una CA en la que confíe Amazon
SNS.
8. Implemente el código que ha creado para recibir mensajes de Amazon SNS. Cuando suscriba el
punto de enlace, este debe estar preparado para recibir al menos el mensaje de confirmación de la
suscripción.

Paso 2: Suscribir el punto de enlace HTTP/HTTPS al tema de


Amazon SNS
Para enviar mensajes a un punto de enlace HTTP o HTTPS a través de un tema, debe suscribir el
punto de enlace al tema de Amazon SNS. El punto de enlace se especifica por medio de su URL. Para
suscribir a un tema, puede utilizar la consola de Amazon SNS, el comando sns-subscribe o la acción
de API Suscribir. Antes de empezar, asegúrese de que tiene la dirección URL del punto de enlace que
desea suscribir y de que el punto de enlace está preparado para recibir los mensajes de configuración y
notificación, tal como se describe en el paso 1.

Para suscribir un punto de enlace HTTP o HTTPS a un tema mediante la consola de Amazon
SNS, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación izquierdo, elija Topics (Temas) y, a continuación, seleccione el tema.

157
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un punto de enlace a un tema

3. Elija la lista desplegable Other actions (Otras acciones) y seleccione Subscribe to topic (Suscribirse al
tema).
4. En la lista desplegable Protocol (Protocolo), seleccione HTTP o HTTPS.
5. En el cuadro Endpoint (Punto de enlace), pegue la dirección URL del punto de enlace al que desea
que el tema envíe los mensajes y, a continuación, elija Create subscription (Crear suscripción).
6. Para el mensaje Subscription request received! (Se ha recibido la solicitud de suscripción), elija Close
(Cerrar).

El campo Subscription ID (ID de suscripción) de la suscripción nueva contiene PendingConfirmation.


Cuando confirme la suscripción, Subscription ID (ID de suscripción) mostrará el ID de suscripción.

Pase 3: Confirme la suscripción


Tras la suscripción a su punto de enlace, Amazon SNS enviará un mensaje de confirmación de la
suscripción al punto de enlace. Ya debe tener el código que ejecuta las acciones descritas en el paso
1 (p. 154) implementado en el punto de enlace. En concreto, el código del punto de enlace debe
recuperar el valor de SubscribeURL del mensaje de confirmación de la suscripción y visitar la ubicación
especificada por el valor de SubscribeURL o ponerla a disposición del usuario para que pueda visitar
de manera manual la dirección SubscribeURL (por ejemplo, mediante un navegador web). Amazon
SNS no enviará mensajes al punto de enlace hasta que se haya confirmado la suscripción. Cuando
visite la dirección SubscribeURL, la respuesta contendrá un documento XML que incluye un elemento
SubscriptionArn que especifica el ARN de la suscripción. También puede utilizar la consola de Amazon
SNS para comprobar que la suscripción se ha confirmado: en el ID de suscripción, se mostrará el ARN de
la suscripción en lugar del valor PendingConfirmation que se mostró cuando agregó la suscripción.

Paso 4: Definir la política de reintentos de entrega para la


suscripción (opcional)
De forma predeterminada, si la entrega inicial del mensaje da un error, Amazon SNS realiza tres reintentos
con un intervalo entre los intentos fallidos establecido en 20 segundos. Como se ha explicado en el paso
1 (p. 154), el punto de enlace debe tener código que pueda administrar los reintentos de entrega de
mensajes. Mediante la configuración de la política de entrega en un tema o suscripción, puede controlar la
frecuencia y el intervalo con los que Amazon SNS intenta entregar de nuevo los mensajes fallidos. Puede
configurar una política de entrega en un tema o en una determinada suscripción.

Paso 5: Conceder a los usuarios permisos para publicar en el


tema (opcional)
De forma predeterminada, el propietario del tema tiene permisos para publicar en el tema. Para
permitir que otros usuarios o aplicaciones publiquen en el tema, debe utilizar AWS Identity and Access
Management (IAM) para conceder permiso de publicación al tema. Si desea obtener más información
sobre cómo conceder permisos para las acciones de Amazon SNS a los usuarios de IAM, consulte Uso de
políticas basadas en identidades con Amazon SNS (p. 433).

Hay dos formas de controlar el acceso a un tema:

• Agregue una política a un usuario o un grupo de IAM. La forma más sencilla de conceder a los usuarios
permisos para temas consiste en crear un grupo, añadir la política adecuada al grupo y, a continuación,
añadir usuarios a dicho grupo. Es mucho más fácil añadir y eliminar usuarios de un grupo que mantener
un seguimiento de las políticas que se han configurado para los distintos usuarios.
• Añadiendo una política al tema. Si desea conceder permisos para un tema a otra cuenta de AWS, el
único modo de hacerlo es agregando una política que tenga como entidad principal la Cuenta de AWS a
la que desee conceder los permisos.

158
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un punto de enlace a un tema

Debe utilizar el primer método para la mayoría de los casos (aplicar políticas a grupos y administrar
los permisos de los usuarios añadiendo o eliminando los usuarios a los grupos). Si necesita conceder
permisos a un usuario de otra cuenta, utilice el segundo método.

Si ha agregado la política siguiente a un usuario o un grupo de IAM, debe conceder a dicho usuario o a los
miembros de dicho grupo permiso para ejecutar la acción sns:Publish en el tema MiTema.

{
"Statement":[{
"Sid":"AllowPublishToMyTopic",
"Effect":"Allow",
"Action":"sns:Publish",
"Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
}]
}

La siguiente política de ejemplo muestra cómo conceder a otra cuenta permisos sobre un tema.
Note
Cuando concede a otra Cuenta de AWS acceso a un recurso de su cuenta, también concede a
los usuarios de IAM que tienen permisos de acceso de nivel de administrador (acceso a todos los
recursos) a ese recurso. Al resto de usuarios de IAM de la otra cuenta se les deniega de manera
automática el acceso al recurso. Si desea conceder a usuarios específicos de IAM en esa Cuenta
de AWS acceso a su recurso, la cuenta o el usuario de IAM con acceso de nivel de administrador
debe delegar permisos para el recurso a esos usuarios de IAM. Para obtener más información
acerca de la delegación entre cuentas, consulte Habilitar el acceso entre cuentas en la Guía del
usuario de IAM.

Si ha añadido la política siguiente a un tema MiTema en la cuenta 123456789012, debe conceder a la


cuenta 111122223333 permiso para ejecutar la acción sns:Publish en dicho tema.

{
"Statement":[{
"Sid":"Allow-publish-to-topic",
"Effect":"Allow",
"Principal":{
"AWS":"111122223333"
},
"Action":"sns:Publish",
"Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
}]
}

Paso 6: Enviar mensajes al punto de enlace HTTP/HTTPS


Puede enviar un mensaje a las suscripciones de un tema mediante su publicación en el tema. Para
publicar en un tema, puede utilizar la consola de Amazon SNS, el comando sns-publish de la CLI o la
API Publish.

Si ha seguido el paso 1 (p. 154), el código que ha implementado en el punto de enlace debería procesar
la notificación.

Para publicar en un tema mediante la consola de Amazon SNS, siga estos pasos:

1. Utilice las credenciales de la Cuenta de AWS o del usuario de IAM con permiso para publicar en el
tema con el fin de iniciar sesión en la AWS Management Console y abrir la consola de Amazon SNS
en [Link]
2. En el panel de navegación izquierdo, elija Topics (Temas) y, a continuación, seleccione un tema.
3. Seleccione el botón Publish message (Publicar mensaje).

159
Amazon Simple Notification
Service Guía para desarrolladores
Verificación de las firmas de los mensajes

4. En el cuadro Subject (Asunto), introduzca el asunto (por ejemplo, Testing publish to my


endpoint).
5. En el cuadro Message (Mensaje), introduzca algún texto (por ejemplo, Hello world!) y elija Publish
message (Publicar mensaje).

Aparecerá el siguiente mensaje: Your message has been successfully published.

Verificación de la firmas de mensajes de Amazon SNS


Debe verificar la autenticidad de una notificación, la confirmación de la suscripción o la cancelación del
mensaje de confirmación enviado por Amazon SNS. Mediante la información incluida en el mensaje de
Amazon SNS, el punto de enlace puede volver a crear la cadena para firmar y la firma para que pueda
verificar el contenido del mensaje cotejando la firma que ha vuelto a crear a partir del contenido del
mensaje con la firma que Amazon SNS envió con el mensaje.

Para ayudar a evitar que se produzcan ataques de suplantación, debe hacer lo siguiente cuando verifique
los mensajes enviados por Amazon SNS:

• Utilice siempre HTTPS para obtener el certificado de Amazon SNS.


• Valide la autenticidad del certificado.
• Verifique que el certificado se ha recibido de Amazon SNS.
• Cuando sea posible, utilice uno de los SDK de AWS compatibles con Amazon SNS para validar y
verificar los mensajes.

Para verificar la firma de un mensaje de Amazon SNS, cuando se utilizan solicitudes basadas en
consultas HTTP, siga estos pasos:

1. Extraiga los pares de nombre-valor del documento JSON en el cuerpo de la solicitud HTTP POST
que Amazon SNS envía al punto de enlace. Usará los valores de algunos de los pares de nombre-
valor para crear la cadena para firmar. Cuando verifique la firma de un mensaje de Amazon SNS,
es fundamental que convierta los caracteres de control precedidos por secuencias de escape en
sus representaciones originales en forma de caracteres en los valores de Message y Subject.
Estos valores deben estar en sus formatos originales cuando se utilizan como parte de la cadena
para firmar. Para obtener información sobre cómo analizar el documento JSON, consulte Paso 1:
Asegúrese de que el punto de enlace está listo para procesar mensajes de Amazon SNS. (p. 154).

SignatureVersion indica la versión de la firma. A partir de la versión de la firma, puede determinar


los requisitos de generación de la firma. En el caso de las notificaciones de Amazon SNS, Amazon
SNS admite, en este momento, la versión 1 de firmas. En esta sección se indican los pasos para crear
una firma mediante Signature Versión 1.
2. Obtenga el certificado X509 que Amazon SNS usó para firmar el mensaje. El valor SigningCertURL
apunta a la ubicación en la que se encuentra el certificado X509 utilizado para crear la firma digital
para el mensaje. Recupere el certificado de esta ubicación.
3. Extraiga la clave pública del certificado. La clave pública del certificado especificada por
SigningCertURL se utiliza para verificar la autenticidad y la integridad del mensaje.
4. Determine el tipo de mensaje. El formato de la cadena para firmar depende del tipo de mensaje,
especificado por el valor de Type.
5. Cree la cadena para firmar. La cadena para firmar es un carácter de nueva línea, una lista delimitada
de pares de nombre-valor del mensaje. Cada par de nombre-valor se representa con el nombre
seguido de un carácter de nueva línea, seguido de un valor y con un carácter de nueva línea al final.
Los pares de nombre-valor deben mostrarse en el orden de clasificación de bytes.

En función del tipo de mensaje, la cadena para firmar debe tener los siguientes pares de nombre-
valor.

160
Amazon Simple Notification
Service Guía para desarrolladores
Verificación de las firmas de los mensajes

Notification

Los mensajes de notificación deben contener los siguientes pares de nombre-valor:

Message
MessageId
Subject (if included in the message)
Timestamp
TopicArn
Type

El siguiente ejemplo es una cadena para firmar de una notificación () Notification.

Message
My Test Message
MessageId
4d4dc071-ddbf-465d-bba8-08f81c89da64
Subject
My subject
Timestamp
2019-01-31T[Link].321Z
TopicArn
arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P
Type
Notification

SubscriptionConfirmation y UnsubscribeConfirmation

Los mensajes SubscriptionConfirmation y UnsubscribeConfirmation deben contener


los siguientes pares de nombre-valor:

Message
MessageId
SubscribeURL
Timestamp
Token
TopicArn
Type

El siguiente ejemplo es una cadena para firmar de una notificación ()


SubscriptionConfirmation.

Message
My Test Message
MessageId
3d891288-136d-417f-bc05-901c108273ee
SubscribeURL
[Link]
Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:s4-
MySNSTopic-1G1WEFCOXTC0P&Token=233...
Timestamp
2019-01-31T[Link].719Z
Token
233...
TopicArn
arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P
Type
SubscriptionConfirmation

161
Amazon Simple Notification
Service Guía para desarrolladores
Análisis de formatos de mensajes

6. Descodifique el valor de Signature del formato Base64. El mensaje entrega la firma en el valor de
Signature, que está codificado en Base64. Antes de comparar el valor de la firma con la firma que
ha calculado, asegúrese de descodificar el valor de Signature de Base64 para comparar los valores
utilizando el mismo formato.
7. Genere el valor hash derivado del mensaje de Amazon SNS. Envíe el mensaje de Amazon SNS, en
formato canónico, a la misma función hash que se utilizó para generar la firma.
8. Genere el valor hash certificado del mensaje de Amazon SNS. El valor hash certificado es el resultado
de utilizar el valor de la clave pública (del paso 3) para descifrar la firma entregada con el mensaje de
Amazon SNS.
9. Verifique la autenticidad y la integridad del mensaje de Amazon SNS. Compare el valor hash derivado
(del paso 7) con el valor hash certificado (del paso 8). Si los valores son idénticos, el receptor puede
estar seguro de que el mensaje no se ha modificado mientras estaba en tránsito y de que se ha
originado desde Amazon SNS. Si los valores no son idénticos, el receptor no debe confiar en el
mensaje.

Análisis de formatos de mensajes


Amazon SNS utiliza los siguientes formatos.

Temas
• Encabezados de HTTP/HTTPS (p. 162)
• Formato JSON de confirmación de suscripción HTTP/HTTPS (p. 163)
• Formato JSON de notificación HTTP/HTTPS (p. 164)
• Formato JSON de confirmación de cancelación de suscripción HTTP/HTTPS (p. 166)
• Formato JSON de política de entrega SetSubscriptionAttributes (p. 167)
• Formato JSON de política de entrega SetTopicAttributes (p. 168)

Encabezados de HTTP/HTTPS
Cuando Amazon SNS envía una confirmación de suscripción, una notificación o un mensaje de
confirmación de anulación de la suscripción a los puntos de enlace HTTP/HTTPS, envía un mensaje POST
con una serie de valores de encabezado específicos de Amazon SNS. Puede utilizar dichos valores de
encabezado para realizar operaciones como identificar el tipo de mensaje sin tener que analizar el cuerpo
del mensaje JSON para leer el valor Type.

x-amz-sns-message-type

Tipo de mensaje. Los valores posibles son SubscriptionConfirmation, Notification y


UnsubscribeConfirmation.
x-amz-sns-message-id

Identificador universal único, exclusivo para cada mensaje publicado. En las notificaciones que
Amazon SNS reenvía durante un reintento, se usa el ID de mensaje original.
x-amz-sns-topic-arn

Nombre de recurso de Amazon (ARN) del tema en el que se publicó el mensaje.


x-amz-sns-subscription-arn

ARN de la suscripción a este punto de enlace.

El encabezado HTTP POST siguiente es un ejemplo de encabezado de un mensaje de notificación a un


punto de enlace HTTP.

162
Amazon Simple Notification
Service Guía para desarrolladores
Análisis de formatos de mensajes

POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-
beaa-fcfcc21c8f55
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: [Link]
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

Formato JSON de confirmación de suscripción HTTP/HTTPS


Tras la suscripción a un punto de enlace HTTP/HTTPS, Amazon SNS envía un mensaje de confirmación
de la suscripción al punto de enlace HTTP/HTTPS. Este mensaje contiene un valor SubscribeURL
que debe visitar para confirmar la suscripción (o bien, puede utilizar el valor Token con la acción
ConfirmSubscription).
Note
Amazon SNS no envía notificaciones a este punto de conexión hasta que se confirma la
suscripción

El mensaje de confirmación de la suscripción es un mensaje POST con un cuerpo que contiene un


documento JSON con los siguientes pares de nombre-valor.

Message

Cadena que describe el mensaje. Para la confirmación de suscripción, esta cadena tiene el aspecto
siguiente:

You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.


\nTo confirm the subscription, visit the SubscribeURL included in this message.

MessageId

Identificador universal único, exclusivo para cada mensaje publicado. En los mensajes que Amazon
SNS reenvía durante un reintento, se usa el ID de mensaje original.
Signature

Firma cifrada con Base64 "SHA1withRSA" de los valores Message, MessageId, Type, Timestamp y
TopicArn.
SignatureVersion

Versión de la firma de Amazon SNS utilizada.


SigningCertURL

Dirección URL del certificado que se utilizó para firmar el mensaje.


SubscribeURL

Dirección URL que debe visitar para confirmar la suscripción. O bien, puede utilizar el Token con la
acción ConfirmSubscription para confirmar la suscripción.
Timestamp

Hora (GMT) de envío de la confirmación de suscripción.


Token

Valor que puede utilizar con la acción ConfirmSubscription para confirmar la suscripción. También
puede visitar simplemente SubscribeURL.

163
Amazon Simple Notification
Service Guía para desarrolladores
Análisis de formatos de mensajes

TopicArn

Nombre de recurso de Amazon (ARN) del tema al que está suscrito este punto de enlace.
Type

Tipo de mensaje. Para obtener una confirmación de suscripción, el tipo es


SubscriptionConfirmation.

El mensaje HTTP POST siguiente es un ejemplo de un mensaje SubscriptionConfirmation a un punto de


enlace HTTP.

POST / HTTP/1.1
x-amz-sns-message-type: SubscriptionConfirmation
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: [Link]
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
"Type" : "SubscriptionConfirmation",
"MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
"Token" : "2336412f37...",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-
west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included
in this message.",
"SubscribeURL" : "[Link]
Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-
west-2:123456789012:MyTopic&Token=2336412f37...",
"Timestamp" : "2012-04-26T[Link].751Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLEpH
+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH8
"SigningCertURL" : "[Link]
[Link]"
}

Formato JSON de notificación HTTP/HTTPS


Cuando Amazon SNS envía una notificación a un punto de enlace HTTP o HTTPS suscrito, el cuerpo del
mensaje POST enviado al punto de enlace contiene un documento JSON con los siguientes pares de
nombre-valor.

Message

Valor Message especificado cuando se publicó la notificación en el tema.


MessageId

Identificador universal único, exclusivo para cada mensaje publicado. En las notificaciones que
Amazon SNS reenvía durante un reintento, se usa el ID de mensaje original.
Signature

Firma SHA1withRSA codificada en Base64 de los valores de Message, MessageId, Subject (en caso
de incluirse), Type, Timestamp y TopicArn.
SignatureVersion

Versión de la firma de Amazon SNS utilizada.

164
Amazon Simple Notification
Service Guía para desarrolladores
Análisis de formatos de mensajes

SigningCertURL

Dirección URL del certificado que se utilizó para firmar el mensaje.


Subject

Parámetro Subject especificado cuando se publicó la notificación en el tema.


Note

Se trata de un parámetro opcional. Si no se especifica el parámetro Subject, el par de nombre


y valor no aparecerá en este documento JSON.
Timestamp

Hora (GMT) de publicación de la notificación.


TopicArn

Nombre de recurso de Amazon (ARN) del tema en el que se publicó el mensaje.


Type

Tipo de mensaje. Para una notificación, el tipo es Notification.


UnsubscribeURL

Dirección URL que puede utilizar para cancelar la suscripción del punto de enlace a este tema.
Si visita esta URL, Amazon SNS cancela la suscripción del punto de enlace y deja de enviarle
notificaciones.

El mensaje HTTP POST siguiente es un ejemplo de un mensaje de notificación a un punto de enlace


HTTP.

POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-
west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
Content-Length: 773
Content-Type: text/plain; charset=UTF-8
Host: [Link]
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
"Type" : "Notification",
"MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Subject" : "My First Message",
"Message" : "Hello world!",
"Timestamp" : "2012-05-02T[Link].655Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLEw6JRN...",
"SigningCertURL" : "[Link]
[Link]",
"UnsubscribeURL" : "[Link]
Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-
west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
}

165
Amazon Simple Notification
Service Guía para desarrolladores
Análisis de formatos de mensajes

Formato JSON de confirmación de cancelación de suscripción


HTTP/HTTPS
Después de cancelar la suscripción de un punto de enlace HTTP/HTTPS a un tema, Amazon SNS envía
un mensaje de confirmación de cancelación de la suscripción al punto de enlace.

El mensaje de cancelación de la suscripción es un mensaje POST con un cuerpo que contiene un


documento JSON con los siguientes pares de nombre-valor.

Message

Cadena que describe el mensaje. Para la confirmación de la cancelación de suscripción, esta cadena
tiene el aspecto siguiente:

You have chosen to deactivate subscription arn:aws:sns:us-


east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this
operation and restore the subscription, visit the SubscribeURL included in this
message.

MessageId

Identificador universal único, exclusivo para cada mensaje publicado. En los mensajes que Amazon
SNS reenvía durante un reintento, se usa el ID de mensaje original.
Signature

Firma cifrada con Base64 "SHA1withRSA" de los valores Message, MessageId, Type, Timestamp y
TopicArn.
SignatureVersion

Versión de la firma de Amazon SNS utilizada.


SigningCertURL

Dirección URL del certificado que se utilizó para firmar el mensaje.


SubscribeURL

Dirección URL que debe visitar para volver a confirmar la suscripción. O bien, puede utilizar el Token
con la acción ConfirmSubscription para volver a confirmar la suscripción.
Timestamp

Hora (GMT) de envío de la cancelación de la suscripción.


Token

Valor que puede utilizar con la acción ConfirmSubscription para volver a confirmar la suscripción.
También puede visitar simplemente SubscribeURL.
TopicArn

Nombre de recurso de Amazon (ARN) del tema del que el punto de enlace ha cancelado su
suscripción.
Type

Tipo de mensaje. Para obtener una confirmación de la cancelación de suscripción, el tipo es


UnsubscribeConfirmation.

El mensaje HTTP POST siguiente es un ejemplo de un mensaje UnsubscribeConfirmation a un punto de


enlace HTTP.

166
Amazon Simple Notification
Service Guía para desarrolladores
Análisis de formatos de mensajes

POST / HTTP/1.1
x-amz-sns-message-type: UnsubscribeConfirmation
x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-
beaa-fcfcc21c8f55
Content-Length: 1399
Content-Type: text/plain; charset=UTF-8
Host: [Link]
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
"Type" : "UnsubscribeConfirmation",
"MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d",
"Token" : "2336412f37...",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Message" : "You have chosen to deactivate subscription arn:aws:sns:us-
west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation
and restore the subscription, visit the SubscribeURL included in this message.",
"SubscribeURL" : "[Link]
Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-
west-2:123456789012:MyTopic&Token=2336412f37fb6...",
"Timestamp" : "2012-04-26T[Link].581Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLEHXgJm...",
"SigningCertURL" : "[Link]
[Link]"
}

Formato JSON de política de entrega SetSubscriptionAttributes


Si envía una solicitud a la acción SetSubscriptionAttributes y establece el parámetro AttributeName en el
valor DeliveryPolicy, el valor del parámetro AttributeValue válido debe ser un objeto JSON válido. Por
ejemplo, el siguiente ejemplo establece la política de entrega en 5 reintentos en total.

[Link]
?Action=SetSubscriptionAttributes
&SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic
%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca
&AttributeName=DeliveryPolicy
&AttributeValue={"healthyRetryPolicy":{"numRetries":5}}
...

Utilice el siguiente formato JSON para el valor del parámetro AttributeValue.

{
"healthyRetryPolicy" : {
"minDelayTarget" : int,
"maxDelayTarget" : int,
"numRetries" : int,
"numMaxDelayRetries" : int,
"backoffFunction" : "linear|arithmetic|geometric|exponential"
},
"throttlePolicy" : {
"maxReceivesPerSecond" : int
}
}

Para obtener más información sobre la acción SetSubscriptionAttribute, consulteSetSubscriptionAttributes


en la Referencia de la API de Amazon Simple Notification Service.

167
Amazon Simple Notification
Service Guía para desarrolladores
Distribución ramificada a las canalizaciones
de bifurcación de eventos de AWS
Formato JSON de política de entrega SetTopicAttributes
Si envía una solicitud a la acción SetTopicAttributes y establece el parámetro AttributeName en el valor
DeliveryPolicy, el valor del parámetro AttributeValue válido debe ser un objeto JSON válido. Por
ejemplo, el siguiente ejemplo establece la política de entrega en 5 reintentos en total.

[Link]
?Action=SetTopicAttributes
&TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic
&AttributeName=DeliveryPolicy
&AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}}
...

Utilice el siguiente formato JSON para el valor del parámetro AttributeValue.

{
"http" : {
"defaultHealthyRetryPolicy" : {
"minDelayTarget": int,
"maxDelayTarget": int,
"numRetries": int,
"numMaxDelayRetries": int,
"backoffFunction": "linear|arithmetic|geometric|exponential"
},
"disableSubscriptionOverrides" : Boolean,
"defaultThrottlePolicy" : {
"maxReceivesPerSecond" : int
}
}
}

Para obtener más información sobre la acción SetTopicAttribute, consulte SetTopicAttributes en la


Referencia de la API de Amazon Simple Notification Service.

Distribución ramificada a las canalizaciones de


bifurcación de eventos de AWS
Para el archivado y el análisis de eventos, Amazon SNS recomienda ahora utilizar su integración nativa
con Amazon Kinesis Data Firehose. Puede suscribir los flujos de entrega de Kinesis Data Firehose
a temas de SNS, lo que le permitirá enviar notificaciones a puntos de conexión de archivo y análisis,
como buckets de Amazon Simple Storage Service (Amazon S3), tablas de Amazon Redshift,
Amazon OpenSearch Service (OpenSearch Service) y otros. El uso de Amazon SNS con flujos de
entrega de Kinesis Data Firehose es una solución completamente administrada y sin código en la que no
se necesita el uso de funciones de AWS Lambda. Para obtener más información, consulte Distribución
ramificada a los flujos de entrega de Kinesis Data Firehose (p. 120).

Puede usar Amazon SNS para crear aplicaciones basadas en eventos que utilicen los servicios de
suscriptor para realizar trabajos de manera automática en respuesta a eventos desencadenados por los
servicios de publicador. Este patrón arquitectónico puede hacer que los servicios sean más reutilizables,
interoperables y escalables. Sin embargo, puede ser muy laborioso bifurcar el procesamiento de
eventos a canalizaciones que cumplan los requisitos comunes de administración de eventos, como el
almacenamiento de eventos, la copia de seguridad, la búsqueda, el análisis y la repetición.

168
Amazon Simple Notification
Service Guía para desarrolladores
Cómo funcionan las canalizaciones
de bifurcación de eventos de AWS
Para acelerar el desarrollo de sus aplicaciones basadas en eventos, puede suscribirse a canalizaciones
de gestión de eventos, basadas en canalizaciones de bifurcación de eventos de AWS, a temas de Amazon
SNS. AWS Event Fork Pipelines es un conjunto de aplicaciones anidadas de código abierto basadas en el
modelo AWS Serverless Application Model (AWS SAM) que se puede implementar directamente desde el
conjunto de aplicaciones de AWS Event Fork Pipelines (elija Show apps that create custom IAM roles or
resource policies [Mostrar aplicaciones que crean roles de IAM o políticas de recursos personalizados]) en
la cuenta de AWS.

Para un caso de uso de canalizaciones de bifurcación de eventos de AWS, consulte Implementación y


prueba de la aplicación de muestra de las canalizaciones de bifurcación de eventos de AWS (p. 173).

Temas
• Cómo funcionan las canalizaciones de bifurcación de eventos de AWS (p. 169)
• Implementación de canalizaciones de bifurcación de eventos de AWS (p. 172)
• Implementación y prueba de la aplicación de muestra de las canalizaciones de bifurcación de eventos
de AWS (p. 173)
• Suscripción de las canalizaciones de bifurcaciones de eventos de AWS a un tema de Amazon
SNS (p. 180)

Cómo funcionan las canalizaciones de bifurcación de


eventos de AWS
AWSLas canalizaciones de bifurcación de eventos de son un patrón de diseño sin servidor. Sin embargo,
también son una suite de aplicaciones sin servidor anidadas basadas en SAM de AWS (que puede
implementar de forma directa desde AWS Serverless Application Repository [SAR de AWS] en su Cuenta
de AWS para enriquecer sus plataformas basadas en eventos). Puede implementar estas aplicaciones
anidadas de forma individual, según lo requiera su arquitectura.

Temas
• Canalización de almacenamiento y copia de seguridad de eventos (p. 170)
• Canalización de búsqueda y análisis de eventos (p. 171)
• Canalización de reproducción de eventos (p. 171)

En el siguiente diagrama, se muestra una aplicación de canalizaciones de bifurcación de eventos de AWS


complementada por tres aplicaciones anidadas. Puede implementar cualquiera de las canalizaciones
desde la suite de canalizaciones de bifurcación de eventos de AWS en el SAR de AWS de forma
independiente, según los requisitos de su arquitectura.

169
Amazon Simple Notification
Service Guía para desarrolladores
Cómo funcionan las canalizaciones
de bifurcación de eventos de AWS

Cada canalización se suscribe al mismo tema de Amazon SNS, lo que le permite procesar eventos en
paralelo a medida que se publican en el tema. Cada canalización es independiente y puede establecer
su propia política de filtros de suscripción (p. 84). De este modo una canalización puede procesar solo un
subconjunto de los eventos que le interesan (en lugar de todos los eventos publicados en el tema).
Note
Como las tres AWS se colocan junto con las canalizaciones de bifurcación de eventos normales
(y es posible que ya estén suscritas al tema de Amazon SNS), no es necesario cambiar nada del
publicador de mensajes actual para utilizar las canalizaciones de bifurcación de eventos de AWS
en las cargas de trabajo existentes.

Canalización de almacenamiento y copia de seguridad de


eventos
En el siguiente diagrama se muestra la canalización de almacenamiento y copia de seguridad de
eventos. Puede suscribir esta canalización a su tema de Amazon SNS para hacer una copia de seguridad
automática de los eventos que fluyen por su sistema.

Esta canalización se compone de una cola de Amazon SQS con la que se almacenan en búfer los eventos
entregados por el tema de Amazon SNS, una función AWS Lambda con la que se sondean de manera
automática estos eventos en la cola y se los envía a un flujo de Amazon Kinesis Data Firehose, y un
bucket de Amazon S3 con el que se hace una copia de seguridad duradera de los eventos cargados por el
flujo.

170
Amazon Simple Notification
Service Guía para desarrolladores
Cómo funcionan las canalizaciones
de bifurcación de eventos de AWS
Para optimizar el comportamiento del flujo de Firehose, puede configurarlo para que almacene en búfer,
transforme y comprima los eventos antes de cargarlos en el bucket. A medida que se carguen los eventos,
puede utilizar Amazon Athena para consultar el bucket mediante consultas SQL estándar. También puede
configurar la canalización para reutilizar un bucket de Amazon S3 existente o crear uno nuevo.

Canalización de búsqueda y análisis de eventos


En el siguiente diagrama se muestra la canalización de búsqueda y análisis de eventos. Puede suscribir
esta canalización a su tema de Amazon SNS para indexar los eventos que fluyen a través de su sistema
en un dominio de búsqueda y, a continuación, ejecutar análisis en ellos.

Esta canalización se compone de una cola de Amazon SQS con la que se almacenan en búfer los
eventos que entrega el tema de Amazon SNS, una función de AWS Lambda con la que se sondean
los eventos de la cola y se los envía a un flujo de Amazon Kinesis Data Firehose, un dominio de
Amazon OpenSearch Service con el que se indexan los eventos cargados por el flujo de Firehose y un
bucket de Amazon S3 con el que se almacenan los eventos fallidos que no se pueden indexar en el
dominio de búsqueda.

Para afinar el flujo de Firehose en términos de almacenamiento en búfer, transformación y compresión de


eventos, puede configurar esta canalización.

También puede configurar si la canalización debe reutilizar un dominio de OpenSearch existente en su


Cuenta de AWS o crear uno nuevo automáticamente. A medida que los eventos se indexan en el dominio
de búsqueda, puede utilizar Kibana para ejecutar análisis de sus eventos y actualizar los paneles visuales
en tiempo real.

Canalización de reproducción de eventos


En el siguiente diagrama se muestra la canalización de reproducción de eventos. Para registrar los
eventos que ha procesado el sistema en los últimos 14 días (por ejemplo, cuando su plataforma necesita
recuperarse de un error), puede suscribir esta canalización a su tema de Amazon SNS y, a continuación,
reprocesar los eventos.

Esta canalización se compone de una cola de Amazon SQS en la que se almacenan los eventos que
entrega el tema de Amazon SNS y una función AWS Lambda con la que se sondean los eventos de la cola
y se los redirecciona a su canalización de procesamiento de eventos normales, que también está suscrita a
su tema.

171
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de canalizaciones
de bifurcación de eventos de AWS

Note

De forma predeterminada, la función de reproducción está deshabilitada, por lo que no


redirecciona los eventos. Si necesita volver a procesar los eventos, debe habilitar la cola de
reproducción de Amazon SQS como fuente de eventos para la función de reproducción de AWS
Lambda.

Implementación de canalizaciones de bifurcación de


eventos de AWS
La suite de canalizaciones de bifurcación de eventos de AWS (elija Mostrar aplicaciones que crean
políticas de recursos o roles de IAM personalizados) está disponible como un grupo de aplicaciones
públicas en el AWS Serverless Application Repository, desde donde puede implementarlas y probarlas de
forma manual mediante la AWS Lambdaconsola de . Para obtener información sobre la implementación
de canalizaciones mediante la consola de AWS Lambda, consulte Suscripción de las canalizaciones de
bifurcaciones de eventos de AWS a un tema de Amazon SNS (p. 180).

En los escenarios de producción, le recomendamos que integre las canalizaciones de bifurcación de


eventos de AWS dentro de la plantilla AWS SAM de su aplicación general. La característica de aplicación
anidada le permite hacerlo añadiendo el recurso AWS::Serverless::Application a la plantilla de
AWS SAM, con una referencia a AWS y la ApplicationId de SemanticVersion SAR de la aplicación
anidada.

Por ejemplo, puede utilizar la canalización de almacenamiento y copia de seguridad de eventos como una
aplicación anidada si añade el siguiente fragmento YAML a la sección Resources de su plantilla de AWS
SAM.

Backup:
Type: AWS::Serverless::Application
Properties:
Location:
ApplicationId: arn:aws:serverlessrepo:us-east-2:123456789012:applications/fork-event-
storage-backup-pipeline

172
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de las canalizaciones
de bifurcación de eventos de AWS
SemanticVersion: 1.0.0
Parameters:
#The ARN of the Amazon SNS topic whose messages should be backed up to the Amazon S3
bucket.
TopicArn: !Ref MySNSTopic

Al especificar los valores de parámetro, puede utilizar funciones intrínsecas de AWS CloudFormation para
hacer referencia a otros recursos de la plantilla. Por ejemplo, en el fragmento YAML anterior, el parámetro
TopicArn hace referencia al recurso MySNSTopic de AWS::SNS::Topic, definido en otra parte de la
plantilla de AWS SAM. Para obtener más información, consulte la Referencia de función intrínseca en la
Guía del usuario de AWS CloudFormation.
Note

En la página de la consola de AWS Lambda de la aplicación de AWS SAR, se encuentra el botón


Copiar como recurso de SAM, que copia el código YAML necesario para anidar una aplicación de
AWS SAR en el portapapeles.

Implementación y prueba de la aplicación de muestra


de las canalizaciones de bifurcación de eventos de
AWS
Para acelerar el desarrollo de sus aplicaciones basadas en eventos, puede suscribirse a canalizaciones
de gestión de eventos, basadas en canalizaciones de bifurcación de eventos de AWS, a temas de Amazon
SNS. AWS Event Fork Pipelines es un conjunto de aplicaciones anidadas de código abierto basadas en
el modelo AWS Serverless Application Model (AWS SAM) que se puede implementar directamente desde
el conjunto de aplicaciones AWS Event Fork Pipelines (elija Show apps that create custom IAM roles or
resource policies [Mostrar aplicaciones que crean roles de IAM o políticas de recursos personalizados])
en la cuenta de AWS. Para obtener más información, consulte Cómo funcionan las canalizaciones de
bifurcación de eventos de AWS (p. 169).

En esta página, se muestra cómo se puede utilizar la AWS Management Console para implementar y
probar la aplicación de muestra de las canalizaciones de bifurcación de eventos de AWS.
Important

Para evitar incurrir en costos no deseados después de terminar de implementar la aplicación


de muestra de las canalizaciones de bifurcación de eventos de AWS, elimine su pila de AWS
CloudFormation. Para obtener más información, consulte Eliminación de una pila en la consola de
AWS CloudFormation en la Guía del usuario de AWS CloudFormation.

Temas
• Caso de uso de las canalizaciones de bifurcación de eventos de AWS de ejemplo (p. 173)
• Paso 1: Implementar la aplicación de muestra (p. 175)
• Paso 2: Ejecutar la aplicación de muestra (p. 176)
• Paso 3: Verificar la ejecución de la aplicación de muestra y sus canalizaciones (p. 177)
• Paso 4: Simular un problema y reproducir eventos para la recuperación (p. 178)

Caso de uso de las canalizaciones de bifurcación de eventos de


AWS de ejemplo
En el siguiente escenario, se describe una aplicación de comercio electrónico basada en eventos y sin
servidor en la que se utilizan canalizaciones de bifurcación de eventos de AWS. Puede utilizar esta

173
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de las canalizaciones
de bifurcación de eventos de AWS
aplicación de comercio electrónico de ejemplo en AWS Serverless Application Repository e implementarla
después en su Cuenta de AWS mediante la consola de AWS Lambda, donde puede probarla y examinar
su código fuente en GitHub.

En esta aplicación de comercio electrónico, se reciben los pedidos de los compradores a través de
una API compatible con REST alojada por API Gateway y respaldada por la función AWS Lambda
CheckoutApiBackendFunction. Con esta función, se publican todos los pedidos recibidos en un
tema de Amazon SNS llamado CheckoutEventsTopic que, a su vez, distribuye los pedidos a cuatro
canalizaciones diferentes.

La primera canalización es la canalización normal de procesamiento de pago que ha diseñado e


implementado el propietario de la aplicación de comercio electrónico. Esta canalización tiene la cola de
Amazon SQS CheckoutQueue con la que se almacenan en búfer todos los pedidos recibidos, una función
AWS Lambda llamada CheckoutFunction con la que se sondean la cola para procesar estos pedidos
y la tabla DynamoDB de CheckoutTable en la que se guardan de forma segura todos los pedidos
realizados.

Aplicación de canalizaciones de bifurcación de eventos de AWS


Los componentes de la aplicación de comercio electrónico controlan la lógica de negocio central. Sin
embargo, el propietario de la aplicación de comercio electrónico también debe tener en cuenta lo siguiente:

• Conformidad: copias de seguridad seguras y comprimidas, encriptadas en reposo, y saneamiento de la


información confidencial.
• Resistencia: reproducción de los pedidos más recientes en caso de que se interrumpa el proceso de
gestión logística.
• Capacidad de búsqueda: ejecutar análisis y generar métricas en pedidos realizados.

En lugar de implementar esta lógica de procesamiento de eventos, el propietario de la aplicación puede


suscribir las canalizaciones de bifurcación de AWS al tema de Amazon SNS CheckoutEventsTopic.

• Canalización de almacenamiento y copia de seguridad de eventos (p. 170) se ha configurado para


transformar los datos a fin de eliminar los detalles de la tarjeta de crédito, almacenar en búfer los datos
durante 60 segundos, comprimirlos mediante GZIP y cifrarlos mediante la clave maestra del cliente

174
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de las canalizaciones
de bifurcación de eventos de AWS
(CMK) predeterminada para Amazon S3. Esta CMK se administra mediante AWS y se basa en AWS Key
Management Service (AWS KMS).

Para obtener más información, consulte Elija Amazon S3 para su destino, Transformación de datos
de Amazon Kinesis Data Firehose yAjustar configuración en la Guía para desarrolladores de Amazon
Kinesis Data Firehose.
• Canalización de búsqueda y análisis de eventos (p. 171) se ha configurado con una duración de
reintento de índice de 30 segundos, un bucket para almacenar los pedidos que no se han indexado en el
dominio de búsqueda y una política de filtro para restringir el conjunto de pedidos indexados.

Para obtener más información, consulte Elegir OpenSearch Service como destino en la Guía para
desarrolladores de Amazon Kinesis Data Firehose.
• Canalización de reproducción de eventos (p. 171) se ha configurado con la parte de cola de Amazon
SQS de la canalización normal de procesamiento de pedidos que ha diseñado e implementado el
propietario de la aplicación de comercio electrónico.

Para obtener más información, consulte Nombre y URL de la cola en la Guía para desarrolladores de
Amazon Simple Queue Service.

La siguiente política de filtro de JSON se establece en la configuración para la canalización de búsqueda


y análisis de eventos. Solo coincide con los pedidos entrantes en los que el importe total es de 100 USD o
superior. Para obtener más información, consulte Filtrado de mensajes en Amazon SNS (p. 84).

{
"amount": [{ "numeric": [ ">=", 100 ] }]
}

Cuando se utiliza el patrón de canalizaciones de bifurcación de eventos de AWS, el propietario de la


aplicación de comercio electrónico puede evitar la sobrecarga de desarrollo que, a menudo, sigue la
lógica de codificación indiferenciada para el control de eventos. En su lugar, puede implementar las
canalizaciones de bifurcación de eventos de AWS de forma directa desde AWS Serverless Application
Repository en su Cuenta de AWS.

Paso 1: Implementar la aplicación de muestra


1. Inicie sesión en la consola de AWS Lambda.
2. En el panel de navegación, elija Functions (Funciones) y, a continuación, Create function (Crear
función).
3. En la página Create function (Crear función), proceda del modo siguiente:

a. Elija Examinar el repositorio de aplicaciones sin servidor, Aplicaciones públicas, Mostrar


aplicaciones que crean roles de IAM personalizados o políticas de recursos.
b. Busque fork-example-ecommerce-checkout-api y, a continuación, elija la aplicación.
4. En la página fork-example-ecommerce-checkout-api, haga lo siguiente:

a. En la sección Application settings (Configuración de la aplicación), escriba el valor de Application


name (Nombre de aplicación) (por ejemplo, fork-example-ecommerce-my-app).
Note

• Para encontrar fácilmente sus recursos más tarde, mantenga el prefijo fork-
example-ecommerce.
• Para cada implementación, el nombre de la aplicación debe ser único. Si reutiliza
un nombre de aplicación, la implementación actualizará solo la pila de AWS
CloudFormation implementada anteriormente (en lugar de crear una nueva).

175
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de las canalizaciones
de bifurcación de eventos de AWS
b. (Opcional) Ingrese una de las siguientes configuraciones de LogLevel para ejecutar la función
Lambda de su aplicación:

• DEBUG
• ERROR
• INFO (predeterminado)
• WARNING
5. Elija I acknowledge that this app creates custom IAM roles, resource policies and deploys nested
applications (Confirmo que esta aplicación crea políticas de recursos o roles de IAM personalizados
e implementa aplicaciones anidadas) y, a continuación, en la parte inferior de la página, elija Deploy
(Implementar).

En la página Estado de implementación para fork-example-ecommerce-my-app, Lambda muestra el


estado La aplicación se está implementando.

En la sección Resources (Recursos), AWS CloudFormation comienza a crear la pila y muestra el


estado CREATE_IN_PROGRESS para cada recurso. Cuando el proceso se haya completado, AWS
CloudFormation mostrará el estado CREATE_COMPLETE.
Note

La implementación de todos los recursos puede tardar entre 20 y 30 minutos.

Cuando se haya completado la implementación, Lambda muestra el estado La aplicación se ha


implementado.

Paso 2: Ejecutar la aplicación de muestra


1. En la consola de AWS Lambda, en el panel de navegación, seleccione Applications (Aplicaciones).
2. En la página Applications (Aplicaciones), en el campo de búsqueda, busque serverlessrepo-
fork-example-ecommerce-my-app y, a continuación, seleccione la aplicación.
3. En la sección Resources (Recursos), haga lo siguiente:

a. Para buscar el recurso cuyo tipo es ApiGateway RestApi, ordene los recursos por Type (Tipo), por
ejemplo, ServerlessRestApi, y, a continuación, expanda el recurso.
b. Se muestran dos recursos anidados, de los tipos ApiGateway Deployment y ApiGateway Stage.
c. Copie el enlace Prod API endpoint (Punto de enlace de la API de Prod) y añádale /checkout,
por ejemplo:

[Link]

4. Copie el siguiente código JSON a un archivo denominado test_event.json.

{
"id": 15311,
"date": "2019-03-25T[Link]-08:00",
"status": "confirmed",
"customer": {
"id": 65144,
"name": "John Doe",
"email": "[Link]@[Link]"
},
"payment": {
"id": 2509,
"amount": 450.00,
"currency": "usd",
"method": "credit",

176
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de las canalizaciones
de bifurcación de eventos de AWS
"card-network": "visa",
"card-number": "1234 5678 9012 3456",
"card-expiry": "10/2022",
"card-owner": "John Doe",
"card-cvv": "123"
},
"shipping": {
"id": 7600,
"time": 2,
"unit": "days",
"method": "courier"
},
"items": [{
"id": 6512,
"product": 8711,
"name": "Hockey Jersey - Large",
"quantity": 1,
"price": 400.00,
"subtotal": 400.00
}, {
"id": 9954,
"product": 7600,
"name": "Hockey Puck",
"quantity": 2,
"price": 25.00,
"subtotal": 50.00
}]
}

5. Para enviar una solicitud HTTPS a su punto de enlace de la API, pase la carga de evento de muestra
como entrada mediante la ejecución de un comando curl, por ejemplo:

curl -d "$(cat test_event.json)" [Link]


[Link]/Prod/checkout

La API devuelve la siguiente respuesta vacía, lo que indica que la ejecución es correcta:

{ }

Paso 3: Verificar la ejecución de la aplicación de muestra y sus


canalizaciones
Paso 1: Verificar la ejecución de la canalización de pago de muestra
1. Inicie sesión en la consola de Amazon DynamoDB.
2. En el panel de navegación, elija Tables (Tablas).
3. Busque serverlessrepo-fork-example y elija CheckoutTable.
4. En la página de detalles de tabla, elija Items (Elementos) y, a continuación, el elemento creado.

Se muestran los atributos almacenados.

Paso 2: Verificar la ejecución de la canalización de almacenamiento y copia de


seguridad de eventos
1. Inicie sesión en la consola de Amazon S3.
2. En el panel de navegación, elija Buckets.

177
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de las canalizaciones
de bifurcación de eventos de AWS
3. Busque serverlessrepo-fork-example y, a continuación, elija CheckoutBucket.
4. Navegue por la jerarquía de directorios hasta que encuentre un archivo con la extensión .gz.
5. Para descargar el archivo, elija Actions (Acciones), Open (Abrir).
6. La canalización se configura con una función Lambda con la que se sanea la información de la tarjeta
de crédito por razones de conformidad.

Para verificar que la carga de JSON almacenada no contiene información de tarjeta de crédito,
descomprima el archivo.

Paso 3: Verificar la ejecución de la canalización de búsqueda y análisis de


eventos
1. Inicie sesión en la consola de Amazon OpenSearch Service.
2. En el panel de navegación, en My domains (Mis dominios), elija su dominio con el prefijo serverl-
analyt.
3. La canalización se configura con una política de filtro de suscripciones de Amazon SNS con la que se
establece una condición de coincidencia numérica.

Para verificar que el evento está indexado porque hace referencia a un pedido cuyo valor es superior
a 100 USD, en la página serverl-analyt-abcdefgh1ijk, elija Indices (Índices), checkout_events.

Paso 4: Verificar la ejecución de la canalización de reproducción de eventos


1. Inicie sesión en la consola de Amazon SQS.
2. En la lista de colas, busque serverlessrepo-fork-example y elija ReplayQueue.
3. Elija Queue Actions (Acciones de cola), View/Delete Messages (Ver/Eliminar mensajes).
4. En el cuadro de diálogo Ver/Eliminar mensajes en fork-example-ecommerce-my-app...ReplayP-
ReplayQueue-123ABCD4E5F6, elija Iniciar sondeo de mensajes.
5. Para verificar que el evento está en cola, seleccione More Details (Más detalles) junto al mensaje que
aparece en la cola.

Paso 4: Simular un problema y reproducir eventos para la


recuperación
Paso 1: Habilitar el problema simulado y enviar una segunda solicitud de la API
1. Inicie sesión en la consola de AWS Lambda.
2. En el panel de navegación, elija Functions (Funciones).
3. Busque serverlessrepo-fork-example y elija CheckoutFunction.
4. En la página fork-example-ecommerce-my-app-CheckoutFunction-ABCDEF..., en la sección
Environment variables (Variables de entorno), establezca la variable BUG_ENABLED en true
(verdadero) y, a continuación, elija Save (Guardar).
5. Copie el siguiente código JSON a un archivo denominado test_event_2.json.

{
"id": 9917,
"date": "2019-03-26T[Link]-08:00",
"status": "confirmed",
"customer": {
"id": 56999,

178
Amazon Simple Notification
Service Guía para desarrolladores
Implementación de las canalizaciones
de bifurcación de eventos de AWS
"name": "Marcia Oliveira",
"email": "[Link]@[Link]"
},
"payment": {
"id": 3311,
"amount": 75.00,
"currency": "usd",
"method": "credit",
"card-network": "mastercard",
"card-number": "1234 5678 9012 3456",
"card-expiry": "12/2025",
"card-owner": "Marcia Oliveira",
"card-cvv": "321"
},
"shipping": {
"id": 9900,
"time": 20,
"unit": "days",
"method": "plane"
},
"items": [{
"id": 9993,
"product": 3120,
"name": "Hockey Stick",
"quantity": 1,
"price": 75.00,
"subtotal": 75.00
}]
}

6. Para enviar una solicitud HTTPS a su punto de enlace de la API, pase la carga de evento de muestra
como entrada mediante la ejecución de un comando curl, por ejemplo:

curl -d "$(cat test_event_2.json)" [Link]


[Link]/Prod/checkout

La API devuelve la siguiente respuesta vacía, lo que indica que la ejecución es correcta:

{ }

Paso 2: Verificar el daño de datos simulados


1. Inicie sesión en la consola de Amazon DynamoDB.
2. En el panel de navegación, elija Tables (Tablas).
3. Busque serverlessrepo-fork-example y elija CheckoutTable.
4. En la página de detalles de tabla, elija Items (Elementos) y, a continuación, el elemento creado.

Se muestran los atributos almacenados, algunos marcados como CORRUPTED! (Dañados).

Paso 3: Deshabilitar el problema simulado


1. Inicie sesión en la consola de AWS Lambda.
2. En el panel de navegación, elija Functions (Funciones).
3. Busque serverlessrepo-fork-example y elija CheckoutFunction.
4. En la página fork-example-ecommerce-my-app-CheckoutFunction-ABCDEF..., en la sección
Environment variables (Variables de entorno), establezca la variable BUG_ENABLED en false (falso)
y, a continuación, elija Save (Guardar).

179
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una canalización de eventos a un tema

Paso 4: Habilitar la reproducción para la recuperación del problema


1. En la consola de AWS Lambda, en el panel de navegación, seleccione Functions (Funciones).
2. Busque serverlessrepo-fork-example y elija ReplayFunction.
3. Expanda la sección Designer (Diseñador), elija el mosaico SQS y, a continuación, en la sección SQS,
elija Enabled (Habilitado).
Note

El desencadenador de fuentes de eventos de Amazon SQS tarda aproximadamente un


minuto en habilitarse.
4. Seleccione Save.
5. Para ver los atributos recuperados, vuelva a la consola de Amazon DynamoDB.
6. Para desactivar la reproducción, vuelva a la consola de AWS Lambda y desactive el desencadenador
de la fuente de eventos de Amazon SQS de ReplayFunction.

Suscripción de las canalizaciones de bifurcaciones de


eventos de AWS a un tema de Amazon SNS
Para acelerar el desarrollo de sus aplicaciones basadas en eventos, puede suscribirse a canalizaciones
de gestión de eventos, basadas en canalizaciones de bifurcación de eventos de AWS, a temas de Amazon
SNS. AWS Event Fork Pipelines es un conjunto de aplicaciones anidadas de código abierto, basadas en
el modelo AWS Serverless Application Model (AWS SAM), que se puede implementar directamente desde
el conjunto de aplicaciones AWS Event Fork Pipelines (elija Show apps that create custom IAM roles or
resource policies [Mostrar aplicaciones que crean roles de IAM o políticas de recursos personalizados])
en la cuenta de AWS. Para obtener más información, consulte Cómo funcionan las canalizaciones de
bifurcación de eventos de AWS (p. 169).

En esta sección, se muestra cómo se puede utilizar la AWS Management Console para implementar una
canalización y, luego, suscribirse las canalizaciones de bifurcación de eventos de AWS a un tema de
Amazon SNS. Antes de comenzar, cree un tema de Amazon SNS (p. 27).

Para eliminar los recursos que componen una canalización, busque la canalización en la página
Applications (Aplicaciones) de la consola de AWS Lambda, expanda la sección SAM template (Plantilla
de SAM), elija CloudFormation stack (Pila de CloudFormation) y, a continuación, seleccione Other Actions
(Otras acciones), Delete Stack (Eliminar pila).

Temas
• Para implementar y suscribir la canalización de almacenamiento y copia de seguridad de
eventos (p. 180)
• Para implementar y suscribir la canalización de búsqueda y análisis de eventos (p. 182)
• Para implementar y suscribir la canalización de reproducción de eventos (p. 185)

Para implementar y suscribir la canalización de almacenamiento


y copia de seguridad de eventos

Para el archivado y el análisis de eventos, Amazon SNS recomienda ahora utilizar su integración nativa
con Amazon Kinesis Data Firehose. Puede suscribir los flujos de entrega de Kinesis Data Firehose
a temas de SNS, lo que le permitirá enviar notificaciones a puntos de conexión de archivo y análisis,
como buckets de Amazon Simple Storage Service (Amazon S3), tablas de Amazon Redshift,

180
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una canalización de eventos a un tema

Amazon OpenSearch Service (OpenSearch Service) y otros. El uso de Amazon SNS con flujos de


entrega de Kinesis Data Firehose es una solución completamente administrada y sin código en la que no
se necesita el uso de funciones de AWS Lambda. Para obtener más información, consulte Distribución
ramificada a los flujos de entrega de Kinesis Data Firehose (p. 120).

En este tutorial, se muestra cómo implementar la canalización de almacenamiento y copia de seguridad


de eventos (p. 170) y suscribirla a un tema de Amazon SNS. Con este proceso, se convierte de forma
automática la plantilla de AWS SAM asociada con la canalización en una pila de AWS CloudFormation
y, a continuación, se implementa la pila en su Cuenta de AWS. Este proceso también crea y configura el
conjunto de recursos que componen la canalización de almacenamiento y copia de seguridad de eventos,
incluidos los siguientes:

• Cola de Amazon SQS


• Lambda function
• Flujos de entrega de Kinesis Data Firehose
• Bucket de copia de seguridad de Amazon S3

Para obtener más información sobre la configuración de un flujo con un bucket de S3 como destino,
consulte S3DestinationConfiguration en la Referencia de la API de Amazon Kinesis Data Firehose.

Para obtener más información sobre la transformación de eventos y sobre la configuración del
almacenamiento en búfer, la compresión y el cifrado de eventos, consulte Creación de un flujo de entrega
de Amazon Kinesis Data Firehose en la Guía para desarrolladores de Amazon Kinesis Data Firehose.

Para obtener más información sobre el filtrado de eventos, consulte Políticas de filtro de suscripciones de
Amazon SNS (p. 84) en esta guía.

1. Inicie sesión en la consola de AWS Lambda.


2. En el panel de navegación, elija Functions (Funciones) y, a continuación, Create function (Crear
función).
3. En la página Create function (Crear función), proceda del modo siguiente:

a. Elija Examinar el repositorio de aplicaciones sin servidor, Aplicaciones públicas, Mostrar


aplicaciones que crean roles de IAM personalizados o políticas de recursos.
b. Busque fork-event-storage-backup-pipeline y, a continuación, elija la aplicación.
4. En la página fork-event-storage-backup-pipeline, proceda del modo siguiente:

a. En la sección Application settings (Configuración de la aplicación), escriba el valor de Application


name (Nombre de aplicación) (por ejemplo, my-app-backup).
Note

• Para cada implementación, el nombre de la aplicación debe ser único. Si reutiliza


un nombre de aplicación, la implementación actualizará solo la pila de AWS
CloudFormation implementada anteriormente (en lugar de crear una nueva).
b. (Opcional) En BucketArn, escriba el ARN del bucket de S3 en el que se cargan los eventos
entrantes. Si no escribe un valor, se crea un nuevo bucket de S3 en su cuenta de AWS.
c. (Opcional) En DataTransformationFunctionArn, ingrese el ARN de la función Lambda mediante la
que se transforman los eventos entrantes. Si no escribe un valor, se deshabilita la transformación
de datos.
d. (Opcional) Ingrese una de las siguientes configuraciones de LogLevel para ejecutar la función
Lambda de su aplicación:

• DEBUG

181
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una canalización de eventos a un tema

• ERROR
• INFO (predeterminado)
• WARNING
e. En TopicArn, ingrese el ARN del tema de Amazon SNS al que se debe suscribir esta instancia de
la canalización de bifurcación.
f. (Opcional) En StreamBufferingIntervalInSeconds y StreamBufferingSizeInMBs, escriba los valores
para configurar el almacenamiento en búfer de los eventos entrantes. Si no escribe ningún valor,
se utilizan 300 segundos y 5 MB.
g. (Opcional) Escriba una de las siguientes opciones de StreamCompressionFormat para comprimir
los eventos entrantes:

• GZIP
• SNAPPY
• UNCOMPRESSED (predeterminado)
• ZIP
h. (Opcional) En StreamPrefix, escriba el prefijo de cadena para asignar nombres a los archivos
almacenados en el bucket de copia de seguridad de S3. Si no escribe un valor, no se usa ningún
prefijo.
i. (Opcional) En SubscriptionFilterPolicy, ingrese la política de filtro de suscripciones de Amazon
SNS, en formato JSON, que se utilizará para filtrar los eventos entrantes. La política de filtro
decide qué eventos se almacenan en el bucket de copia de seguridad de S3. Si no escribe ningún
valor, no se utiliza el filtrado (se almacenan todos los eventos).
j. Elija I acknowledge that this app creates custom IAM roles, resource policies and deploys
nested applications (Confirmo que esta aplicación crea políticas de recursos o roles de
IAM personalizados e implementa aplicaciones anidadas) y, a continuación, elija Deploy
(Implementar).

En la página Estado de implementación para my-app, Lambda muestra el estado La aplicación se está
implementando.

En la sección Resources (Recursos), AWS CloudFormation comienza a crear la pila y muestra el


estado CREATE_IN_PROGRESS para cada recurso. Cuando el proceso se haya completado, AWS
CloudFormation mostrará el estado CREATE_COMPLETE.

Cuando se haya completado la implementación, Lambda muestra el estado La aplicación se ha


implementado.

Los mensajes publicados en su tema de Amazon SNS se almacenan en el bucket de copia de seguridad
de S3 aprovisionado de manera automática por la canalización de almacenamiento y copia de seguridad
de eventos.

Para implementar y suscribir la canalización de búsqueda y


análisis de eventos

Para el archivado y el análisis de eventos, Amazon SNS recomienda ahora utilizar su integración nativa
con Amazon Kinesis Data Firehose. Puede suscribir los flujos de entrega de Kinesis Data Firehose
a temas de SNS, lo que le permitirá enviar notificaciones a puntos de conexión de archivo y análisis,
como buckets de Amazon Simple Storage Service (Amazon S3), tablas de Amazon Redshift,
Amazon OpenSearch Service (OpenSearch Service) y otros. El uso de Amazon SNS con flujos de
entrega de Kinesis Data Firehose es una solución completamente administrada y sin código en la que no
se necesita el uso de funciones de AWS Lambda. Para obtener más información, consulte Distribución
ramificada a los flujos de entrega de Kinesis Data Firehose (p. 120).

182
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una canalización de eventos a un tema

En este tutorial, se muestra cómo implementar la canalización de búsqueda y análisis de


eventos (p. 171) y suscribirla a un tema de Amazon SNS. Con este proceso, se convierte de forma
automática la plantilla de AWS SAM asociada con la canalización en una pila de AWS CloudFormation
y, a continuación, se implementa la pila en su Cuenta de AWS. Este proceso también crea y configura
el conjunto de recursos que componen la canalización de búsqueda y análisis de eventos, incluidos los
siguientes:

• Cola de Amazon SQS


• Lambda function
• Flujos de entrega de Kinesis Data Firehose
• Dominio de Amazon OpenSearch Service
• Bucket de Amazon S3 de mensajes fallidos

Para obtener más información sobre la configuración de un flujo con un índice como destino, consulte
ElasticsearchDestinationConfiguration en la Referencia de la API de Amazon Kinesis Data
Firehose.

Para obtener más información sobre la transformación de eventos y sobre la configuración del
almacenamiento en búfer, la compresión y el cifrado de eventos, consulte Creación de un flujo de entrega
de Amazon Kinesis Data Firehose en la Guía para desarrolladores de Amazon Kinesis Data Firehose.

Para obtener más información sobre el filtrado de eventos, consulte Políticas de filtro de suscripciones de
Amazon SNS (p. 84) en esta guía.

1. Inicie sesión en la consola de AWS Lambda.


2. En el panel de navegación, elija Functions (Funciones) y, a continuación, Create function (Crear
función).
3. En la página Create function (Crear función), proceda del modo siguiente:

a. Elija Examinar el repositorio de aplicaciones sin servidor, Aplicaciones públicas, Mostrar


aplicaciones que crean roles de IAM personalizados o políticas de recursos.
b. Busque fork-event-search-analytics-pipeline y, a continuación, elija la aplicación.
4. En la página fork-event-search-analytics-pipeline, proceda del modo siguiente:

a. En la sección Application settings (Configuración de la aplicación), escriba el valor de Application


name (Nombre de aplicación) (por ejemplo, my-app-search).
Note

Para cada implementación, el nombre de la aplicación debe ser único. Si reutiliza un


nombre de aplicación, la implementación actualizará solo la pila de AWS CloudFormation
implementada anteriormente (en lugar de crear una nueva).
b. (Opcional) En DataTransformationFunctionArn, ingrese el ARN de la función Lambda que se usa
para transformar los eventos entrantes. Si no escribe un valor, se deshabilita la transformación de
datos.
c. (Opcional) Ingrese una de las siguientes configuraciones de LogLevel para ejecutar la función
Lambda de su aplicación:

• DEBUG
• ERROR
• INFO (predeterminado)
• WARNING
d. (Opcional) En SearchDomainArn, ingrese el ARN del dominio de OpenSearch Service, un clúster
que configura la funcionalidad de computación y almacenamiento necesaria. Si no escribe ningún
valor, se creará un nuevo dominio con la configuración predeterminada.

183
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una canalización de eventos a un tema

e. En TopicArn, ingrese el ARN del tema de Amazon SNS al que se debe suscribir esta instancia de
la canalización de bifurcación.
f. En SearchIndexName, ingrese el nombre del índice de OpenSearch Service para la búsqueda y el
análisis de eventos.
Note

Las siguientes cuotas se aplican a los nombres de índice:

• No pueden incluir letras mayúsculas


• No pueden incluir los siguientes caracteres: \ / * ? " < > | ` , #
• No pueden comenzar por los siguientes caracteres: - + _
• No pueden ser los siguientes: . ..
• No pueden tener más de 80 caracteres
• No pueden tener más de 255 bytes
• No puede contener dos puntos (desde OpenSearch Service 7.0)
g. (Opcional) Ingrese una de las siguientes configuraciones de SearchIndexRotationPeriod para el
periodo de rotación del índice de OpenSearch Service:

• NoRotation (predeterminado)
• OneDay
• OneHour
• OneMonth
• OneWeek

La rotación de índice agrega una marca temporal al nombre del índice, lo que facilita el
vencimiento de los datos antiguos.
h. En SearchTypeName, ingrese el nombre del tipo de OpenSearch Service para organizar los
eventos en un índice.
Note

• Los nombres de tipos de OpenSearch Service pueden contener cualquier carácter


(excepto bytes nulos), pero no pueden comenzar con _.
• En OpenSearch Service 6.x, solo puede haber un tipo por índice. Si especifica un tipo
nuevo para un índice que ya tiene otro tipo, Kinesis Data Firehose devuelve un error
de tiempo de ejecución.
i. (Opcional) En StreamBufferingIntervalInSeconds y StreamBufferingSizeInMBs, escriba los valores
para configurar el almacenamiento en búfer de los eventos entrantes. Si no escribe ningún valor,
se utilizan 300 segundos y 5 MB.
j. (Opcional) Escriba una de las siguientes opciones de StreamCompressionFormat para comprimir
los eventos entrantes:

• GZIP
• SNAPPY
• UNCOMPRESSED (predeterminado)
• ZIP
k. (Opcional) En StreamPrefix, escriba el prefijo de cadena para asignar nombres a los archivos
almacenados en el bucket de mensajes fallidos de S3. Si no escribe un valor, no se usa ningún
prefijo.

184
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una canalización de eventos a un tema

l. (Opcional) En StreamRetryDurationInSeconds, ingrese la duración de reintentos de los casos en


los que Kinesis Data Firehose no pueda indexar eventos en el índice de OpenSearch Service. Si
no escribe un valor, se usan 300 segundos.
m. (Opcional) En SubscriptionFilterPolicy, ingrese la política de filtro de suscripciones de Amazon
SNS, en formato JSON, que se utilizará para filtrar los eventos entrantes. La política de filtro
decide qué eventos se indexan en el índice de OpenSearch Service. Si no escribe ningún valor,
no se utiliza el filtrado (se indexan todos los eventos).
n. Elija I acknowledge that this app creates custom IAM roles, resource policies and deploys
nested applications (Confirmo que esta aplicación crea políticas de recursos o roles de
IAM personalizados e implementa aplicaciones anidadas) y, a continuación, elija Deploy
(Implementar).

En la página Estado de la implementación para my-app-search, Lambda muestra el estado La aplicación


se está implementando.

En la sección Resources (Recursos), AWS CloudFormation comienza a crear la pila y muestra el


estado CREATE_IN_PROGRESS para cada recurso. Cuando el proceso se haya completado, AWS
CloudFormation mostrará el estado CREATE_COMPLETE.

Cuando se haya completado la implementación, Lambda muestra el estado La aplicación se ha


implementado.

Los mensajes publicados en su tema de Amazon SNS se indexan en el índice de OpenSearch Service


aprovisionado de manera automática por la canalización de búsqueda y análisis de eventos. Si la
canalización no puede indexar un evento, lo almacena en un bucket de mensajes fallidos de S3.

Para implementar y suscribir la canalización de reproducción de


eventos
En este tutorial, se muestra cómo implementar la canalización de reproducción de eventos (p. 171) y
suscribirla a un tema de Amazon SNS. Con este proceso, se convierte de forma automática la plantilla
de AWS SAM asociada con la canalización en una pila de AWS CloudFormation y, a continuación, se
implementa la pila en su Cuenta de AWS. Con este proceso, también se crea y configura el conjunto de
recursos que componen la canalización de reproducción de eventos, incluida una cola de Amazon SQS y
una función Lambda.

Para obtener más información sobre el filtrado de eventos, consulte Políticas de filtro de suscripciones de
Amazon SNS (p. 84) en esta guía.

1. Inicie sesión en la consola de AWS Lambda.


2. En el panel de navegación, elija Functions (Funciones) y, a continuación, Create function (Crear
función).
3. En la página Create function (Crear función), proceda del modo siguiente:

a. Elija Examinar el repositorio de aplicaciones sin servidor, Aplicaciones públicas, Mostrar


aplicaciones que crean roles de IAM personalizados o políticas de recursos.
b. Busque fork-event-replay-pipeline y, a continuación, elija la aplicación.
4. En la página fork-event-replay-pipeline, proceda del modo siguiente:

a. En la sección Application settings (Configuración de la aplicación), escriba el valor de Application


name (Nombre de aplicación) (por ejemplo, my-app-replay).

185
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una canalización de eventos a un tema

Note

Para cada implementación, el nombre de la aplicación debe ser único. Si reutiliza un


nombre de aplicación, la implementación actualizará solo la pila de AWS CloudFormation
implementada anteriormente (en lugar de crear una nueva).
b. (Opcional) Ingrese una de las siguientes configuraciones de LogLevel para ejecutar la función
Lambda de su aplicación:

• DEBUG
• ERROR
• INFO (predeterminado)
• WARNING
c. (Opcional) En ReplayQueueRetentionPeriodInSeconds, ingrese la cantidad de tiempo, en
segundos, en el que la cola de reproducción de Amazon SQS conserva el mensaje. Si no escribe
un valor, se usan 1 209 600 segundos (14 días).
d. En TopicArn, ingrese el ARN del tema de Amazon SNS al que se debe suscribir esta instancia de
la canalización de bifurcación.
e. En DestinationQueueName, ingrese el nombre de la cola de Amazon SQS a la que la función de
reproducción de Lambda reenvía los mensajes.
f. (Opcional) En SubscriptionFilterPolicy, ingrese la política de filtro de suscripciones de Amazon
SNS, en formato JSON, que se utilizará para filtrar los eventos entrantes. La política de filtro
decide qué eventos se almacenan en búfer para la reproducción. Si no escribe ningún valor, no se
utiliza el filtrado (todos los eventos se almacenan en búfer para la reproducción).
g. Elija I acknowledge that this app creates custom IAM roles, resource policies and deploys
nested applications (Confirmo que esta aplicación crea políticas de recursos o roles de
IAM personalizados e implementa aplicaciones anidadas) y, a continuación, elija Deploy
(Implementar).

En la página Estado de implementación para my-app-replay, Lambda muestra el estado La aplicación


se está implementando.

En la sección Resources (Recursos), AWS CloudFormation comienza a crear la pila y muestra el


estado CREATE_IN_PROGRESS para cada recurso. Cuando el proceso se haya completado, AWS
CloudFormation mostrará el estado CREATE_COMPLETE.

Cuando se haya completado la implementación, Lambda muestra el estado La aplicación se ha


implementado.

Los mensajes publicados en su tema de Amazon SNS se almacenan en búfer para reproducirlos en la cola
de Amazon SQS aprovisionada de manera automática por la canalización de reproducción de eventos.
Note

De forma predeterminada, la reproducción está deshabilitada. Para habilitar la reproducción, vaya


a la página de la función en la consola de Lambda, expanda la sección Diseñador, seleccione el
mosaico SQS y, a continuación, en la sección SQS, elija Habilitado.

186
Amazon Simple Notification
Service Guía para desarrolladores
Mensajería de texto móvil (SMS)

Uso de Amazon SNS para


mensajería de aplicación a persona
(A2P)
En esta sección, se proporciona información sobre el uso de Amazon SNS para las notificaciones de
usuario con suscriptores tales como aplicaciones móviles, números de teléfono móvil y direcciones de
correo electrónico.

Temas
• Mensajería de texto móvil (SMS) (p. 187)
• Notificaciones de inserción en móviles (p. 268)
• Notificaciones por correo electrónico (p. 299)

Mensajería de texto móvil (SMS)


Puede utilizar Amazon SNS para enviar mensajes de texto o mensajes SMS a dispositivos habilitados
para recibir SMS. Dispone de la capacidad de enviar un mensaje directamente a un número de
teléfono (p. 225) o de enviar un mensaje a varios números de teléfono (p. 222) a la vez suscribiendo
dichos números de teléfono a un tema y enviando el mensaje al tema.

Puede configurar las preferencias de SMS (p. 218) de la cuenta de AWS para adaptar las entregas de
SMS a sus casos de uso y su presupuesto. Por ejemplo, puede elegir si los mensajes están optimizados
en materia de costos o entrega fiable. También puede especificar las cuotas de gasto de las entregas de
mensajes individuales y las cuotas de gasto mensuales de su Cuenta de AWS.

Cuando así lo exijan la legislación y los reglamentos locales (como es el caso, por ejemplo, de los EE. UU.
y Canadá), los destinatarios de SMS tienen la posibilidad de cancelar su suscripción (p. 238), lo que
significa que eligen dejar de recibir mensajes SMS desde su Cuenta de AWS. Cuando un destinatario
cancela su suscripción, usted puede, dentro de unos límites, volver a confirmar el número de teléfono para
reanudar el envío de mensajes.

Amazon SNS es compatible con la mensajería SMS en varias regiones, y usted puede enviar
mensajes a más de 200 países y regiones. Para obtener más información, consulte Regiones y países
admitidos (p. 251) .

Temas
• Entorno de pruebas de SMS (p. 188)
• Identidades de origen de los mensajes SMS (p. 190)
• Solicitud de asistencia para mensajería SMS con Amazon SNS (p. 209)
• Configuración de las preferencias de mensajería SMS (p. 218)
• Envío de mensajes SMS (p. 221)
• Monitorización de la actividad de SMS (p. 232)
• Administración de números de teléfono y suscripciones a SMS (p. 238)

187
Amazon Simple Notification
Service Guía para desarrolladores
Entorno de pruebas de SMS

• Regiones y países admitidos (p. 251)


• Prácticas recomendadas de SMS (p. 260)
• Requisitos de SMS para Singapur (p. 263)
• Requisitos especiales para enviar mensajes SMS a destinos en Estados Unidos (p. 264)
• Requisitos especiales para enviar mensajes SMS a destinatarios en la India (p. 264)

Entorno de pruebas de SMS


Cuando comience a utilizar Amazon SNS para enviar mensajes SMS, su cuenta de AWS se encuentra en
el entorno de pruebas de SMS. El entorno de pruebas de SMS proporciona un entorno seguro para que
pruebe las características de Amazon SNS sin arriesgar su reputación como remitente de SMS. Mientras
su cuenta se encuentre en el entorno de pruebas de SMS, puede utilizar todas las características de
Amazon SNS, con las siguientes restricciones:

• Puede enviar mensajes SMS solo a números de teléfono de destino verificados.


• Puede tener hasta 10 números de teléfono de destino verificados.
• Solo puede eliminar números de teléfono de destino después de que hayan transcurrido 24 horas o más
desde la verificación o el último intento de verificación.

Cuando su cuenta se mueve fuera del entorno de pruebas, estas restricciones se eliminan y puede enviar
mensajes SMS a cualquier destinatario.

Temas
• Adición y verificación de números de teléfono en el entorno de pruebas de SMS (p. 188)
• Eliminación de números de teléfono del entorno de pruebas de SMS (p. 189)
• Salida del entorno de pruebas de SMS (p. 189)

Adición y verificación de números de teléfono en el entorno de


pruebas de SMS
Para empezar a enviar mensajes SMS mientras su cuenta de AWS se encuentra en el entorno de pruebas
de SMS (p. 188), primero agregue números de teléfono de destino y, a continuación, verifíquelos.
Note

Al igual que con las cuentas que no se encuentran en el entorno de pruebas de SMS, se
necesita una identidad de origen (p. 190) antes de enviar mensajes SMS a destinatarios
en algunos países o regiones. Para obtener más información, consulte Regiones y países
admitidos (p. 251).
Los ID de origen incluyen ID de remitente (p. 191) y diferentes tipos de números de
origen (p. 191). Para ver los números de origen existentes, en el panel de navegación de la
consola de Amazon SNS, elija Números de origen. En este momento, los ID de remitente no
aparecen en esta lista.

Para agregar y verificar números de teléfono de destino, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el menú de la consola, elija una región que admita la mensajería SMS de AWS (p. 251).
3. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
4. En la página Mensajería de texto móvil (SMS), en Números de teléfono de destino de entorno de
pruebas, elija Agregar número de teléfono.

188
Amazon Simple Notification
Service Guía para desarrolladores
Entorno de pruebas de SMS

5. En Detalles de destino, ingrese el código del país y el número de teléfono, especifique el idioma que
desea utilizar para el mensaje de verificación y, a continuación, elija Agregar número de teléfono.

Amazon SNS envía una contraseña de uso único (OTP) al número de teléfono de destino. Si el
número de teléfono de destino no recibe la OTP en 15 minutos, elija Reenviar código de verificación.
Puede enviar el OTP al mismo número de teléfono de destino hasta cinco veces cada 24 horas.
6. En el cuadro Código de verificación, ingrese el OTP enviado al número de teléfono de destino y, a
continuación, elija Verificar número de teléfono.

El número de teléfono de destino y su estado de verificación aparecen en la sección Números de


teléfono de destino del entorno de pruebas. Si el estado de verificación es Pendiente, la verificación no
se realizó de forma correcta. Esto puede suceder, por ejemplo, si no ingresó el código de país con el
número de teléfono. Solo puede eliminar los números de teléfono de destino pendientes o verificados
después de que hayan pasado 24 horas o más desde la verificación o el último intento de verificación.
7. Repita estos pasos en cada región en la que desee utilizar este número de teléfono de destino.

Eliminación de números de teléfono del entorno de pruebas de


SMS
Puede eliminar números de teléfono de destino pendientes o verificados desde el entorno de pruebas de
SMS (p. 188).

Para eliminar números de teléfono de destino del entorno de pruebas de SMS, siga estos pasos:

1. Espere 24 horas después de verificar el número de teléfono (p. 188) o 24 horas después de su
último intento de verificación.
2. Inicie sesión en la consola de Amazon SNS.
3. En el menú de la consola, elija una región que admita la mensajería SMS de AWS (p. 251) en la que
agregó un número de teléfono de destino.
4. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
5. En la página Mensajería de texto móvil (SMS), en Números de teléfono de destino de entorno de
pruebas, elija el número de teléfono que desea eliminar y, a continuación, Eliminar número de
teléfono.
6. Para confirmar que desea eliminar el número de teléfono, ingrese delete me y, a continuación, elija
Eliminar.

Si han transcurrido 24 horas o más desde que verificó o intentó verificar el número de teléfono de
destino, se elimina y Amazon SNS actualiza la lista de sus números de teléfono de destino.
7. Repita estos pasos en cada región en la que haya agregado el número de teléfono de destino y que
ya no tenga previsto utilizar.

Salida del entorno de pruebas de SMS


Para sacar su Cuenta de AWS del entorno de pruebas de SMS (p. 188), primero debe agregar, verificar y
probar los números de teléfono de destino. A continuación, debe crear un caso con AWS Support.

Para solicitar la salida de su cuenta de AWS del entorno de pruebas de SMS, siga estos pasos:

1. Mientras su Cuenta de AWS se encuentra en el entorno de pruebas de SMS, agregue y


verifique (p. 188) uno o más números de teléfono de destino.
2. Confirme que puede publicar y recibir mensajes en, como mínimo, un número de teléfono de destino
verificado.

189
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Para obtener instrucciones sobre cómo publicar mensajes SMS en uno o más números de teléfono,
consulte Publicación en un teléfono móvil (p. 225).
3. En la página Mensajería de texto móvil (SMS) de la consola de Amazon SNS, en Información de la
cuenta, elija Salir de entorno de pruebas de SMS.

El centro AWS Support se abre y crea un caso. La opción Aumento de límites de servicio ya está
seleccionada y el tipo de límite se establece en Mensajería de texto SNS.
4. En Detalles del caso, proporcione la siguiente información:

• Un enlace al sitio o el nombre de la aplicación desde la que planea enviar mensajes SMS
• El tipo de mensajes que tiene previsto enviar: contraseñas de un solo uso, promocionales o
transaccionales
• La Región de AWS desde la que tiene previsto enviar mensajes SMS
• Los países o regiones a los que tiene previsto enviar mensajes SMS
• Una descripción de cómo sus clientes optan por recibir mensajes suyos
• Cualquier plantilla de mensaje que planee utilizar
5. En Requests (Solicitudes), realice el siguiente procedimiento:

a. En Región, elija la opción Región de AWS en la que desea sacar su Cuenta de AWS del entorno
de pruebas de SMS.
b. Para Resource Type (Tipo de recurso), elija General Limits (Límites generales).
c. En Límite, elija Salir del entorno de pruebas de SMS.
d. (Opcional) Para presentar otras solicitudes, como un aumento del límite, elija Agregar otra
solicitud. A continuación, elija las opciones de la solicitud.
6. (Opcional) En Descripción del caso, ingrese cualquier información adicional relevante sobre la
solicitud.
7. En Opciones de contacto, elija su idioma de contacto preferido.
8. Elija Submit (Enviar).

El equipo de AWS Support proporcionará una respuesta inicial a su solicitud antes de 24 horas.

Para evitar que nuestros sistemas sean utilizados para enviar contenido no solicitado o malicioso,
consideramos cada solicitud con detenimiento. Si podemos, accederemos a su solicitud dentro de ese
plazo de 24 horas. Sin embargo, si necesitamos que nos brinde más información, puede que la solicitud
tarde más tiempo en concederse.

Si su caso de uso no se ajusta a nuestras políticas, es posible que no podamos atender su solicitud.

Identidades de origen de los mensajes SMS


Cuando envía mensajes SMS mediante Amazon SNS, puede identificarse con sus destinatarios mediante
los siguientes tipos de identidades de origen:

• ID de remitente (p. 191)


• Números de origen (p. 191)

Note

La mensajería SMS de Amazon SNS está disponible en regiones en las que Amazon Pinpoint no
es compatible en este momento. Si opera en Europa (Estocolmo), Medio Oriente (Baréin), Europa
(París), América del Sur (São Paulo) o EE. UU. Oeste (Norte de California), abra la consola

190
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

de Amazon Pinpoint en la región EE. UU. Este (Norte de Virginia) para registrar su empresa y
campaña de 10DLC, pero no solicite un número 10DLC. En su lugar, abra un caso en el centro
de AWS Support para solicitar un número 10DLC en la región de AWS en la que utiliza o piensa
utilizar Amazon SNS para enviar mensajes SMS. Para obtener más información sobre cómo
solicitar identidades de origen, consulte Solicitud de asistencia para mensajería SMS con Amazon
SNS (p. 209).

ID de remitente
El ID de remitente es un nombre alfabético que identifica al remitente de un mensaje SMS. Cuando se
envía un mensaje SMS mediante un ID de remitente y el destinatario se encuentra en una zona donde se
admite la autenticación mediante ID de remitente, este último aparece en el dispositivo del destinatario en
lugar de un número de teléfono. El ID de remitente proporciona al destinatario del SMS más información
sobre el remitente que un número de teléfono, un código largo o un código corto.

Important

AWS prohíbe la suplantación de SMS, en la que el ID de remitente se utiliza para suplantar a otra
persona, empresa o producto. Utiliza solo un ID de remitente que represente una marca o marca
comercial de su propiedad.

El uso de un ID de remitente no supone ningún cargo adicional. Sin embargo, la asistencia y los requisitos
de autenticación del ID de remitente varían. En varios mercados importantes (tales como Canadá, China y
los Estados Unidos, entre otros), no se admite el uso de ID de remitente. En algunas zonas, se exige que
las empresas que envían mensajes SMS a clientes individuales utilicen un ID de remitente previamente
registrado en una agencia reguladora o en un grupo del sector.

Números de origen
Un número de origen es una cadena numérica con la que se identifica el número de teléfono del remitente
de un mensaje SMS. Cuando envía un mensaje SMS con un número de origen, el dispositivo del
destinatario muestra el número de origen como el número de teléfono del remitente. Puede especificar
diferentes números de origen por caso de uso.
Tip

Para ver una lista completa de todos los números existentes de origen en su cuenta de AWS, en
el panel de navegación de la consola de Amazon SNS, elija Números de origen.

La compatibilidad con los números de origen no está disponible en los países en los que la legislación local
exige el uso de ID de remitente (p. 191) en lugar de números de origen.

Temas
• 10DLC (p. 191)
• Números de teléfono gratuitos (p. 206)
• Códigos cortos (p. 207)
• Códigos largos de persona a persona (P2P) (p. 208)
• Comparación de números de producto en EE. UU. (p. 208)

10DLC
Los operadores estadounidenses ya no admiten el uso de mensajería SMS de aplicación a persona (A2P)
a través de códigos largos locales sin registrar. En el caso de la mensajería SMS A2P de gran volumen, los

191
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

operadores estadounidenses ofrecen un nuevo tipo de código largo llamado códigos largos de 10 dígitos
(10DLC).

¿Qué es 10DLC?

10DLC es un tipo de código largo que se registra con los operadores para admitir mensajería SMS A2P
de gran volumen con el formato de número de teléfono de 10 dígitos. Amazon SNS ya no ofrece códigos
largos locales como un producto SMS y, en su lugar, ofrece 10DLC. 10DLC no lo afecta si solo usa
códigos cortos y números gratuitos.

10DLC es un número de teléfono de 10 dígitos que se utiliza solo en Estados Unidos. Los mensajes
enviados desde un 10DLC a los destinatarios muestran un número de 10 dígitos como remitente. A
diferencia de los números gratuitos, 10DLC admite mensajería transacciones y promocional, y puede
incluir cualquier código de área de EE. UU.

Si tiene códigos largos locales existentes, puede solicitar que estos se habiliten para 10DLC. Para ello,
complete el proceso de registro de 10DLC y, a continuación, envíe un ticket de asistencia. En caso de que
surja un problema al habilitar el código largo para 10DLC, se lo notificará y se le pedirá que solicite un
nuevo 10DLC a través de la consola de Amazon Pinpoint (no Amazon SNS). Si quiere obtener información
acerca de cómo presentar un ticket de asistencia para convertir un código largo, consulte Asociación de un
código largo con una campaña 10DLC (p. 203).

Para utilizar un número de 10DLC, primero registre su empresa y cree una campaña de 10DLC mediante
la consola de Amazon Pinpoint (no Amazon SNS). AWS comparte esta información con The Campaign
Registry, un tercero que aprueba o rechaza su registro según la información. En algunos casos, el registro
ocurre de inmediato. Por ejemplo, si ya se ha registrado en The Campaign Registry, es posible que ya
tengan su información. Sin embargo, algunas campañas pueden tardar una semana o más en aprobarse.
Después de que su empresa y su campaña 10DLC se aprueben, puede comprar un número 10DLC
y asociarlo a su campaña. Solicitar un 10DLC también puede tardar hasta una semana en aprobarse.
Aunque puede asociar varios 10DLC a una sola campaña, no puede usar el mismo 10DLC en varias
campañas. Para cada campaña que cree, necesita tener un 10DLC único.
Important

Si utiliza códigos largos locales o un grupo compartido de números, debe cambiar a 10DLC.
No lo afecta si solo utiliza códigos cortos y números gratuitos. Para obtener más información
sobre cómo utiliza The Campaign Registry, consulte la página Preguntas frecuentes en
[Link].

Capacidades de 10DLC

Las posibilidades de los números de teléfono 10DLC dependen de los operadores de telefonía móvil que
utilicen sus destinatarios. AT&T establece un límite en el número de partes de mensajes que se pueden
enviar cada minuto para cada campaña. T-Mobile proporciona un límite diario de los mensajes que se
pueden enviar para cada empresa, sin límite en el número de partes de mensajes que se pueden enviar
por minuto. Verizon no ha publicado los límites de rendimiento, pero utiliza un sistema de filtrado para
10DLC que está diseñado para eliminar el spam, los mensajes no solicitados y el contenido abusivo, con
menos énfasis en el rendimiento real de los mensajes.

Las nuevas campañas 10DLC que se asocian a empresas no verificadas pueden enviar 75 partes de
mensajes por minuto a los destinatarios que utilizan AT&T y 2000 mensajes por día a los destinatarios que
utilizan T-Mobile. El límite de empresa se comparte en todas sus campañas 10DLC. Por ejemplo, si ha
registrado una empresa y dos campañas, la asignación diaria de 2000 mensajes a los clientes de T-Mobile
se comparte entre esas campañas. Del mismo modo, si registra la misma empresa en más de una cuenta
de AWS, la asignación diaria se comparte entre esas cuentas.

Si sus necesidades de rendimiento superan estos límites, puede solicitar que se verifique el registro de
su empresa. Al verificar el registro de su empresa, un proveedor de verificación externo analiza los datos

192
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

de su empresa. El proveedor de verificación proporciona una puntuación de verificación, que determina


la capacidad de sus campañas 10DLC. El servicio de verificación tiene un costo único. Para obtener más
información, consulte Verificación de su registro de 10DLC de Amazon SNS (p. 197).

Su tasa de rendimiento real variará en función de varios factores, por ejemplo, si su empresa se ha
verificado o no, sus tipos de campaña y su puntuación de verificación. El siguiente diagrama de flujo
muestra las tasas de rendimiento para varias situaciones.

Las tasas de rendimiento para 10DLC las determinan los operadores de telefonía móvil de EE. UU. en
colaboración con Campaign Registry. Ni Amazon SNS ni ningún otro servicio de envío de SMS puede
aumentar el rendimiento de 10DLC más allá de estas tasas. Si necesita altas tasas de rendimiento y de
capacidad de entrega en todos los operadores de EE. UU., le recomendamos que utilice un código corto.
Para obtener más información sobre la obtención de un código corto, consulte Solicitud de códigos cortos
dedicados para mensajería por SMS con Amazon SNS (p. 210).

Introducción a 10DLC

Utilice la consola de Amazon Pinpoint (no Amazon SNS) para solicitar su 10DLC. Siga estos pasos con el
fin de configurar 10DLC para utilizar con sus campañas 10DLC.

1. Registre su empresa.

193
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Para poder solicitar un 10DLC, su empresa debe estar registrada en The Campaign Registry; para
obtener información, consulte Registro de una empresa (p. 194). El registro suele ser instantáneo a
menos que The Campaign Registry necesite más información. Hay una cuota de registro única para
registrar su empresa, que se muestra en la página de registro. Este pago por única vez se paga por
separado de los cargos mensuales de la campaña y 10DLC.
Note

La mensajería SMS de Amazon SNS está disponible en regiones en las que Amazon Pinpoint
no es compatible en este momento. En estos casos, abra la consola de Amazon Pinpoint en la
región EE. UU. Este (Norte de Virginia) para registrar su empresa y campaña de 10DLC, pero
no solicite un número 10DLC. En su lugar, abra un caso en el centro de AWS Support para
solicitar un número 10DLC en la región de AWS en la que utiliza o piensa utilizar Amazon SNS
para enviar mensajes SMS. Para obtener información sobre las regiones donde está disponible
Amazon Pinpoint, consulte Cuotas y puntos de enlace de Amazon Pinpointen la referencia
general de AWS.
2. (Opcional, pero recomendado) Solicite la verificación

Si el registro de su empresa se realiza correctamente, puede empezar a crear campañas 10DLC de bajo
volumen y de uso mixto. Estas campañas pueden enviar 75 mensajes por minuto a los destinatarios
que utilizan AT&T, y su empresa registrada puede enviar 2000 mensajes al día a los destinatarios que
utilizan T-Mobile. Si su caso de uso requiere una tasa de rendimiento que supere estos valores, puede
solicitar la verificación del registro de su empresa. Verificar el registro de su empresa puede aumentar
las tasas de rendimiento de sus empresas y campañas, pero no está garantizado que lo haga. Para
obtener más información sobre la verificación, consulte Verificación de su registro de 10DLC de Amazon
SNS (p. 197).
3. Registre su campaña.

Después de hacerlo, cree una campaña 10DLC y asóciela a una de sus empresas registradas. Esta
campaña se envía a The Campaign Registry para que la apruebe. En la mayoría de los casos, la
aprobación de la campaña 10DLC es instantánea, a menos que The Campaign Registry necesite más
información. Para obtener más información, consulte Registro de una campaña de 10DLC (p. 199).
4. Solicite su número 10DLC.

Una vez aprobada su campaña 10DLC, puede solicitar un 10DLC y asociar ese número a la campaña
aprobada. En su campaña 10DLC, solo se puede usar un número aprobado para ella. Consulte
Solicitud de números 10DLC, números gratuitos y códigos largos P2P para mensajes SMS con Amazon
SNS (p. 213).

Registro y cuotas mensuales de 10DLC

Hay cuotas mensuales y de registro asociadas al uso de 10DLC, como el registro de su empresa y la
campaña 10DLC. Estos son independientes de cualquier otra tarifa mensual que cobra AWS. Para obtener
información, consulte la página Precios de SMS de Amazon SNS en todo el mundo.

Registro de una empresa

Antes de solicitar un 10DLC, debe registrar su empresa en The Campaign Registry.


Note

La mensajería SMS de Amazon SNS está disponible en regiones en las que Amazon Pinpoint
no es compatible en este momento. En estos casos, abra la consola de Amazon Pinpoint en la
región EE. UU. Este (Norte de Virginia) para registrar su empresa y campaña de 10DLC, pero no
solicite un número 10DLC. En su lugar, abra un caso en el centro de AWS Support para solicitar
un número 10DLC en la región de AWS en la que utiliza o piensa utilizar Amazon SNS para enviar
mensajes SMS. Para obtener información sobre las regiones donde está disponible Amazon

194
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Pinpoint, consulte Cuotas y puntos de enlace de Amazon Pinpointen la referencia general de


AWS.

Estados de registro de empresa 10DLC

Al registrar su empresa o marca, se devuelve uno de los dos estados: Unverified (No verificado) o Verified
(Verificado). Si el estado del registro de su empresa es Unverified (No verificado), significa que ha habido
un problema con el registro. Por ejemplo, el nombre de la empresa registrada que ha proporcionado podría
no coincidir exactamente con el nombre registrado de la empresa asociada al identificador fiscal que ha
proporcionado. Si encuentra algún problema con los datos de registro de su empresa, puede corregirlos.
Para obtener más información sobre la modificación de los detalles de registro de su empresa, consulte
Edición o eliminación de una empresa registrada (p. 198).

Si el estado del registro de su empresa es Verified (Verificado), los datos de registro que ha proporcionado
son correctos y puede empezar a crear campañas 10DLC.

Registro de su empresa o marca

Tiene que registrar su empresa solo una vez. Una vez registrada, podrá editar la información de su
empresa y de sus contactos. Para eliminar una empresa registrada, cree un caso con AWS Support.
Para obtener más información sobre cómo editar o eliminar los datos de la empresa, consulte Edición o
eliminación de una empresa registrada (p. 198).

Para registrar una empresa, siga estos pasos:

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En el panel de navegación, en SMS and voice (SMS y voz), elija Phone numbers (Números de
teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), elija Register company (Registrar empresa).
Note

En la página Register your company (Registre su empresa), se muestra Registration fee


(Cuota de registro). Se trata de un pago por única vez asociado al registro de su empresa.
Este costo es independiente de cualquier otro costo o cuota mensual. Se le cobra cuando
registra su empresa o cuando modifica los datos de un registro de empresa existente.
4. En la sección Company info (Información de empresa), haga lo siguiente:

• En Legal company name (Nombre jurídico de la empresa), ingrese el nombre con el que está
registrada la empresa. El nombre que ingrese debe coincidir exactamente con el nombre de la
empresa que está asociado con el número de identificación fiscal que proporcione.

Important

Asegúrese de utilizar el nombre jurídico exacto de su empresa. Una vez enviada, no podrá
cambiar esta información. Una información incorrecta o incompleta puede hacer que su
registro se retrase o se deniegue.

• En What type of legal form is this organization (Qué tipo de forma jurídica tiene esta organización),
elija la opción que mejor describa a su empresa.

Note

Las opciones US government (Gobierno de EE. UU.) y Not-for-profit (Sin ánimo de lucro)


solo pueden utilizarse para registrar organizaciones con sede en Estados Unidos. Si su
organización tiene la sede en un país distinto de EE. UU., debe registrarse como Private for-

195
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

profit (Empresa privada con ánimo de lucro), independientemente de la forma jurídica real de
su organización.

• Si eligió Public for profit (Empresa pública con ánimo de lucro) en el paso anterior, ingrese el
símbolo bursátil de la empresa y la bolsa en la que cotiza.
• En Country of registration (País de registro), elija el país donde está registrada la empresa.
• En Doing Business As (DBA) o brand name (Hacer negocios como [DBA] o nombre de marca),
ingrese cualquier otro nombre con el que su empresa haga negocios.
• En Tax ID (Identificador fiscal), ingrese el identificador fiscal de su empresa. El identificador que
ingrese dependerá del país en el que esté registrada su empresa.
• Si está registrando una entidad estadounidense o no estadounidense que tiene un número de
identificación de empleador del IRS (EIN), ingrese su EIN de nueve dígitos. El nombre jurídico de
la empresa, el EIN y la dirección física que ingrese deben coincidir con la información de empresa
que está registrada en el IRS.
• Si está registrando una entidad canadiense, ingrese su número de corporación federal o
provincial. No ingrese el número de empresa (BN) que le proporciona la CRA. El nombre jurídico
de la empresa, el número de la corporación y la dirección física que ingrese deben coincidir con la
información de empresa que está registrada en Corporations Canada.
• Si está registrando una entidad con sede en otro país, ingrese el identificador fiscal principal de su
país. En muchos países, es la parte numérica de su número de identificación del IVA.
• En Vertical (Sector), elija la categoría que mejor describa la empresa que va a registrar.
5. En la sección Contact info (Información de contacto), haga lo siguiente:

• En Address/Street (Dirección/Calle), ingrese la dirección física asociada a su empresa.


• En City (Ciudad), ingrese la ciudad en la que se encuentra la dirección física.
• En State or region (Estado o región), ingrese el estado o la región donde se encuentra la dirección.
• En Zip Code/Postal Code (Código postal), ingrese el código postal asociado a la dirección.
• En Company website (Sitio web de la empresa), ingrese la URL completa del sitio web de su
empresa. Incluya «[Link] o «[Link] al principio de la dirección.
• En Support email (Correo electrónico de asistencia), ingrese una dirección de correo electrónico.
• En Support phone number (Número de teléfono de asistencia), ingrese un número de teléfono con
código de país.

Note

Campaign Registry requiere una dirección de correo electrónico y un número de teléfono de


contacto en caso de que se necesite verificar la información de registro con un representante
de su empresa.
6. Cuando haya terminado, elija Create. El registro de su empresa se presenta en Campaign Registry.
En la mayoría de los casos, su registro se acepta inmediatamente y se le proporciona un estado.

Si el estado del registro de su empresa es Verified (Verificado), puede empezar a crear campañas 10DLC
de bajo volumen y de uso mixto. Puede utilizar este tipo de campaña para enviar hasta 75 mensajes por
minuto a los destinatarios que utilizan AT&T y su empresa registrada puede enviar 2000 mensajes al día
a los destinatarios que utilizan T-Mobile. También puede enviar mensajes a destinatarios que utilicen
otros operadores estadounidenses, como Verizon y US Cellular. Estos operadores no hacen cumplir
estrictamente los límites de rendimiento, pero sí supervisan intensamente los mensajes 10DLC en busca
de signos de spam y abuso.

Si su caso de uso requiere una tasa de rendimiento que supere estos valores, puede solicitar una
comprobación adicional del registro de su empresa. Para obtener más información sobre la verificación del
registro de su marca, consulte Verificación de su registro de 10DLC de Amazon SNS (p. 197).
196
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Si el estado del registro de su empresa es Unverified (No verificado), significa que ha habido problemas
con la información que ha proporcionado. Compruebe la información que ha proporcionado y confirme que
todos los campos contienen la información correcta. Puede realizar cambios en algunas partes del registro
de su empresa en la consola de Amazon Pinpoint. Para obtener más información sobre la modificación de
los detalles de registro de su empresa, consulte Edición de un registro de empresa 10DLC (p. 198).

Verificación de su registro de 10DLC de Amazon SNS

Si el registro de la empresa es correcto y quiere registrar una campaña con mayor capacidad de
rendimiento, debe examinar el registro de la empresa.

Cuando verifica su registro, una organización externa analiza los detalles de la empresa que ha
proporcionado y devuelve una puntuación de verificación. Una alta puntuación de verificación puede
conllevar mayores tasas de rendimiento para su empresa 10DLC y las campañas asociadas a ella. No
obstante, no está garantizado que la verificación de antecedentes aumente su rendimiento.

Las puntuaciones de verificación no se aplican de forma retroactiva. En otras palabras, si ya ha creado


una campaña 10DLC y más tarde verifica el registro de empresa, la puntuación de verificación no se aplica
automáticamente a la campaña existente. Por esta razón, debe verificar su empresa o marca antes de
crear cualquiera de sus campañas 10DLC.
Note

Hay una cuota no reembolsable de 40 USD por la verificación de su empresa o marca.

Para verificar el registro de su empresa

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En el panel de navegación, en SMS and voice (SMS y voz), elija Phone numbers (Números de
teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), elija la empresa 10DLC que desee verificar.
4. En la página de detalles de la empresa, hacia el final de la página, elija Apply for vetting (Solicitar
verificación).
5. En la ventana Apply for additional vetting (Solicitar investigación adicional), elija Submit (Enviar).

Para las empresas con sede en EE. UU., el proceso de verificación suele durar alrededor de un
minuto. En el caso de las empresas que no tienen sede en EE. UU., el proceso de verificación puede
llevar mucho más tiempo, según la disponibilidad de los datos de ese país.

Después de enviar una solicitud de verificación, volverá a la página de detalles de la empresa. La sección
Company vetting results (Resultados de verificación de la empresa) muestra el estado y los resultados
de su solicitud de verificación. Cuando el proceso de verificación se completa, esta tabla muestra una
puntuación de verificación en la columna Score (Puntuación). Su puntuación de verificación determina
su capacidad de rendimiento de 10DLC. Su rendimiento varía en función del tipo de campaña que cree.
Si crea campañas 10DLC de uso mixto o relacionadas con el marketing, debe tener una puntuación de
verificación más alta que la que necesitaría para otros tipos de campaña con el fin de lograr altas tasas
de rendimiento. Para obtener más información sobre las capacidades de los números de teléfono 10DLC,
consulte Capacidades de 10DLC (p. 192).

Si cambia los datos del registro de su empresa después de completar el proceso de verificación, puede
solicitar que se vuelva a verificar su registro. Si solo cambia el sector para el registro de su empresa, su
puntuación de verificación no cambiará. Si cambia algún dato que no sea el sector, el resultado de su
verificación podría cambiar. En cualquier caso, se le cobrará de nuevo la tarifa única de verificación.

197
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Edición o eliminación de una empresa registrada


Puede editar parte de la información de registro de 10DLC de su empresa directamente en la consola
de Amazon Pinpoint. También puede eliminar un registro de empresa 10DLC si crea un caso en el AWS
Support Center.

Edición de un registro de empresa 10DLC


Después de completar el proceso de registro de 10DLC de una empresa, puede editar los detalles de su
registro.

Si aparece un mensaje de error después de editar los datos de registro de empresa, podría haber otros
problemas con el registro. Puede abrir un ticket con AWS Support para solicitar más información.

Para editar una empresa

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En el panel de navegación, en SMS and voice (SMS y voz), elija Phone numbers (Números de
teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), en la lista de campañas, elija el nombre de la
empresa cuyos detalles desea editar.
4. Elija Edit (Editar).
5. Modifique la información de registro según sea necesario. Elija Re-submit (Volver a enviar) cuando
haya terminado.
Note
Cuando vuelva a enviar sus datos de registro, se le cobrará una cuota de registro único.
Actualmente, esta cuota de registro es de 4 USD.

Eliminación de un registro de empresa 10DLC


Si desea eliminar una empresa registrada, debe abrir un ticket con AWS Support. No puede eliminar una
empresa mediante la consola de Amazon Pinpoint.

Para eliminar una empresa

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En el panel de navegación, en SMS and voice (SMS y voz), elija Phone numbers (Números de
teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), elija Request to delete company (Solicitud para
eliminar empresa).
4. Confirme que desea continuar; para ello, elija de nuevo Request to delete company (Solicitud para
eliminar empresa) para abrir AWS Support Center.
5. Para el tipo de caso, elija Aumento de límites de servicio.
6. Para el tipo de límite, elija Pinpoint.
7. En la sección Requests (Solicitudes), elija el valor de Region (Región) y, a continuación para Limit
(Límite), elija 10DLC - request to update/delete 10DLC company or campaign (10DLC: solicitud para
actualizar o eliminar empresa o campaña 10DLC).
8. Deje vacío el campo New limit value (Nuevo valor límite).
9. En Use case description (Descripción del caso de uso), ingrese el nombre de empresa que desea
eliminar y, a continuación, proporcione los detalles de lo que desea que se haga.
10. En Contact options (Opciones de contacto), en Preferred contact language (Idioma de contacto
preferido), elija el idioma que prefiera utilizar para comunicarse con el equipo de AWS Support.

198
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

11. En Contact method (Método de contacto), elija el método preferido de contacto para comunicarse con
el equipo de AWS Support.
12. Elija Submit (Enviar).

Registro de una campaña de 10DLC

Cuando registra una campaña 10DLC, proporciona una descripción de su caso de uso, así como las
plantillas de mensajes que piensa utilizar. Para poder crear y registrar una campaña 10DLC, primero debe
registrar su empresa. Para obtener información sobre el registro de su empresa, consulte Registro de una
empresa (p. 194).
Note

Después de registrar su empresa, Amazon Pinpoint muestra uno de los dos estados del registro:
Verified (Verificado) o Unverified (No verificado). Solo puede completar el proceso de registro de
la campaña 10DLC si el estado del registro de su empresa es Verified (Verificado). Podrá crear
campañas de uso mixto de bajo volumen.
Si el estado es Unverified (No verificado), suele significar que algunos de los datos que
proporcionó al registrar su empresa eran incorrectos. No podrá crear campañas 10DLC mientras
su empresa tenga este estado. Puede modificar el registro de su empresa para intentar solucionar
los problemas con el registro. Para obtener más información sobre la modificación de los registros
de empresa 10DLC, consulte Edición o eliminación de una empresa registrada (p. 198).

En esta página, primero proporciona los detalles sobre la empresa para la que está creando la campaña
10DLC y, a continuación, del caso de uso de la propia campaña. La información de esta página se
proporciona a The Campaign Registry para que la apruebe.

En esta sección, elegirá la empresa para la que está creando la campaña 10DLC y proporcionará más
detalles.

Registro de una campaña 10DLC

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En SMS and voice (SMS y voz), elija Phone numbers (Números de teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), elija Create a 10DLC campaign (Crear una
campaña 10DLC).
4. En la página Create a 10DLC campaign (Crear una campaña 10DLC), en la sección Campaign info
(Información de la campaña), haga lo siguiente:

a. En Nombre de la empresa, elige la empresa para la que está creando esta campaña. Si aún no
ha registrado la empresa, debe hacerlo. Para obtener más información sobre el registro de una
empresa, consulte Registro de una empresa (p. 194).
b. En 10DLC campaign name (Nombre de campaña 10DLC), ingrese un nombre para la campaña.
c. Para Vertical (Sector), elija la opción que mejor represente a su empresa.
d. Para Help message (Mensaje de ayuda), ingrese el mensaje que recibirán sus clientes si envían
la palabra clave «HELP» a su número de teléfono 10DLC.
e. Para Stop message (Mensaje de detención), ingrese el mensaje que recibirán sus clientes si
envían la palabra clave «STOP» a su número de teléfono 10DLC.
Tip

Sus clientes pueden responder a sus mensajes con la palabra «HELP» para saber más
sobre los mensajes que les envía. También pueden responder «STOP» para dejar de
recibir mensajes suyos. Los operadores de telefonía móvil de EE. UU. le exigen que
responda a estas dos palabras clave.

199
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

A continuación, se presenta un ejemplo de respuesta a HELP que cumple con los


requisitos de los operadores de telefonía móvil de EE. UU.:
ExampleCorp Account Alerts: For help call 1-888-555-0142 or go to
[Link]. Msg&data rates may apply. Text STOP to cancel.
A continuación, se presenta un ejemplo de una respuesta a STOP conforme:
You are unsubscribed from ExampleCorp Account Alerts. No more
messages will be sent. Reply HELP for help or call 1-888-555-0142.
Las respuestas a estas palabras clave deben contener 160 caracteres como máximo.
5. En la sección Campaign use case (Caso de uso de campaña), haga lo siguiente:

a. Para Use case type (Tipo de caso de uso), si tiene un caso de uso relacionado con
organizaciones benéficas, elija Special (Especial). En caso contrario, elija Standard (Estándar).
b. En Caso de uso, elija un caso de uso que se asemeje más a su campaña en la lista de casos de
uso preestablecidos. La tarifa mensual por cada caso de uso aparece junto al nombre del caso de
uso.
Note

Al lado de cada tipo de caso de uso se muestra el cargo mensual por el registro de la
campaña 10DLC. La mayoría de los tipos de campaña 10DLC tienen el mismo cargo
mensual. El cargo por registrar casos de uso mixto de bajo volumen es menor que el
de otros tipos de casos de uso. Sin embargo, las campañas mixtas de bajo volumen
admiten tasas de rendimiento más bajas que otros tipos de campañas.
c. Ingrese al menos un Sample SMS message (Mensaje SMS de muestra). Este es el mensaje de
ejemplo que piensa enviar a sus clientes. Si tiene previsto utilizar varias plantillas de mensajes
para esta campaña 10DLC, inclúyalas también.
Important

No utilice un marcador de posición para los mensajes de muestra. Los mensajes de


ejemplo que proporcione deben reflejar los mensajes reales que piensa enviar con la
mayor precisión posible.
6. La sección Campaign and content attributes (Atributos de campaña y contenido) contiene una serie
de preguntas de tipo Yes (SÍ) o No relacionadas con las características concretas de la campaña.
Algunos atributos son obligatorios, por lo que no se puede cambiar el valor predeterminado.

Asegúrese de que los atributos que elija sean los adecuados para su campaña.

Indique si cada uno de los siguientes puntos se aplica a la campaña que está registrando:

• Registro de suscriptores: los suscriptores pueden optar por recibir mensajes sobre esta campaña.
• Exclusión de suscriptores: los suscriptores pueden optar por dejar recibir mensajes sobre esta
campaña.
• Ayuda para suscriptores: los suscriptores pueden ponerse en contacto con el remitente del mensaje
después de enviar la palabra clave HELP.
• Grupo de números: en esta campaña de 10DLC, se utilizan más de 50 números de teléfono.
• Préstamo directo o acuerdo de préstamo: en la campaña, se incluye información sobre préstamos
directos u otros acuerdos de préstamo.
• Enlace integrado: en la campaña 10DLC, se incluye un enlace integrado. Los enlaces de
acortadores de URL comunes, como TinyUrl o [Link], no están permitidos. Sin embargo, puede
utilizar acortadores de URL que ofrecen dominios personalizados.
• Embedded phone number (Número de teléfono insertado): la campaña incluye un número de
teléfono insertado que no es un número de asistencia al cliente.
• Marketing de filiales: en la campaña 10DLC, se incluye información de marketing de filiales.

200
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

• Contenido restringido por edad: en la campaña 10DLC, se incluye contenido restringido por edad
según lo definido por las directrices del operador y de la Asociación de Telecomunicaciones
Celulares e Internet (CTIA).
7. Seleccione Create (Crear).

Tras enviar los datos de registro de su campaña, se abre la página de SMS y voz. Aparecerá un
mensaje en el que se indica que su campaña se ha enviado y está en revisión. Puede ver el estado
de su solicitud en la pestaña Campañas 10DLC. Puede verificar el estado de su registro en la pestaña
10DLC, que será una de las siguientes:

• Activa: Se ha aprobado su campaña 10DLC. Puede solicitar un número de teléfono 10DLC y asociar
ese número a su campaña. Para obtener más información, consulte Solicitud de números 10DLC,
números gratuitos y códigos largos P2P para mensajes SMS con Amazon SNS (p. 213).
• Pending (Pendiente): su campaña 10DLC aún no se ha aprobado. En algunos casos, la aprobación
puede tardar una semana o más. Si el estado cambia, la consola de Amazon Pinpoint refleja ese
cambio. No le notificamos cambios de estado.
• Rejected (Rechazada): su campaña 10DLC se ha rechazado. Para obtener más información, envía
una solicitud de asistencia que incluya el ID de campaña de la campaña rechazada.
• Suspendida: uno o más operadores han suspendido su campaña 10DLC. Para obtener más
información, envía una solicitud de asistencia que incluya el ID de campaña de la campaña
suspendida. Amazon Pinpoint no incluye motivos de suspensión en la consola y no le notificamos si
su campaña se suspende.
8. Si se aprueba su campaña 10DLC, puede solicitar un número 10DLC y asociarlo a esa campaña
aprobada. Para obtener información acerca de la solicitud de un número 10DLC, consulte Solicitud
de números 10DLC, números gratuitos y códigos largos P2P para mensajes SMS con Amazon
SNS (p. 213).

Uso de las campañas 10DLC en varias regiones de AWS

Cuando registre una empresa, estará disponible en su cuenta de AWS en todas las regiones de AWS. No
obstante, no ocurre lo mismo con las campañas 10DLC. Una campaña 10DLC solo puede utilizarse en la
región de AWS en la que se registró.

Si tiene previsto utilizar 10DLC en más de una región de AWS, deberá registrar campañas 10DLC distintas
en cada una de ellas. Este paso es necesario para cumplir los requisitos del operador. Se le cobra por
cada campaña que registre, aunque el caso de uso sea exactamente el mismo.

Registrar varias campañas tiene la ventaja añadida de aumentar sus tasas de rendimiento para los
mensajes que envíe a los destinatarios que utilicen AT&T como su operador de telefonía móvil, ya que
AT&T proporciona tasas de rendimiento de 10DLC para cada campaña. Compárelo con la forma en que T-
Mobile gestiona el rendimiento de 10DLC, que se basa en una asignación diaria de mensajes para cada
empresa (independientemente del número de campañas).

Edición o eliminación de una campaña 10DLC

Puede editar la respuesta HELP, la respuesta STOP y los mensajes de ejemplo de una campaña 10DLC
mediante la consola de Amazon Pinpoint. También puede eliminar las campañas 10DLC mediante la
consola.

Edición de una campaña 10DLC

Una vez aprobada la campaña, podrá modificar los mensajes HELP, STOP y de muestra. También
puede agregar mensajes de ejemplo adicionales. Los cambios en estos campos no requieren una nueva
aprobación de Campaign Registry ni de los operadores. No podrá modificar ningún otro campo una vez
aprobada la campaña 10DLC.

201
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Puede tener un máximo de cinco mensajes de muestra. No se puede reducir el número de mensajes de
ejemplo que ha registrado originalmente. Por ejemplo, si ha registrado su campaña con tres mensajes
SMS de muestra, no puede reducir el número de mensajes SMS de muestra a menos de tres.
Note

Si desea modificar cualquier campo que no sea el de los mensajes HELP, STOP y de muestra,
deberá primero eliminar la campaña 10DLC y, a continuación, volver a crearla para incluir la
información actualizada.

Para editar una campaña 10DLC

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En el panel de navegación, en SMS and voice (SMS y voz), elija Phone numbers (Números de
teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), elija la campaña 10DLC que desee editar.
4. En la sección Campaign messages (Mensajes de campaña) de la página de detalles de la campaña,
elija Edit (Editar).
5. Actualice cualquiera de los siguientes campos:

• Help message (Mensaje de ayuda)


• Stop message (Mensaje de detención)
• Sample SMS message (Mensaje SMS de muestra)

No puede eliminar un mensaje de muestra previamente agregado, ni borrar el contenido de un


mensaje de muestra para que el campo quede vacío. Si elimina el contenido de un mensaje sin
reemplazarlo, se utilizará el mensaje original al actualizarlo.
6. Elija Update (Actualizar). Aparece un banner de confirmación que le permite saber que los mensajes
de la campaña se han actualizado.

Eliminación de una campaña 10DLC

Puede eliminar una campaña 10DLC mediante la consola de Amazon Pinpoint. Antes de eliminar una
campaña 10DLC, deberá eliminar todos los números de teléfono asociados a esa campaña.
Important

Cuando elimina un número 10DLC de una campaña, ya no tiene acceso a ese número. Además,
no se pueden restaurar las campañas 10DLC eliminadas.

Para eliminar una campaña 10DLC

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En el panel de navegación, en SMS and voice (SMS y voz), elija Phone numbers (Números de
teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), elija la campaña 10DLC que desee editar.
4. En la sección Phone numbers (Números de teléfono), anote los números de teléfono asociados a la
campaña.
5. En la pestaña Phone numbers (Números de teléfono), elija el número 10DLC que desea eliminar y, a
continuación, elija Remove phone number (Eliminar número de teléfono).

202
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Note

Este paso solo es necesario si tiene varios números de teléfono 10DLC asociados a la
campaña. Si solo tiene un número de teléfono asociado a la campaña 10DLC ese número
aparecerá en la pestaña 10DLC campaigns (Campañas 10DLC). Anote el número que
aparece en la pestaña.
6. En el cuadro de confirmación, ingrese delete y, a continuación, elija Confirm (Confirmar). Un
mensaje de realización correcta aparece en la parte superior de la página de SMS y voz.
7. Repita los dos pasos anteriores para cada número de 10DLC asociado a la campaña.
8. Tras eliminar los números asociados a la campaña 10DLC, elija la pestaña 10DLC campaigns
(Campañas 10DLC).
9. Elija la campaña 10DLC que desea eliminar.
10. En la esquina superior derecha de la página 10DLC campaign details (Detalles de la campaña
10DLC), elija Delete (Eliminar).
11. En el cuadro de confirmación, ingrese delete y, a continuación, elija Confirm (Confirmar). Un
mensaje de realización correcta aparece en la parte superior de la página de SMS y voz.

Asociación de un código largo con una campaña 10DLC

Si tiene un código largo existente, puede asociar ese código largo a una de sus campañas actuales 10DLC
mediante la presentación de una solicitud de asistencia. El código largo que asocie a la campaña 10DLC
solo se puede usar con esa campaña y no se puede usar para ninguna otra campaña. Mientras su código
largo se migra a 10DLC, podrá seguir usándolo. Sin embargo, hasta que se apruebe, no podrá utilizarlo
para ninguna campaña 10DLC.

Para presentar la solicitud, necesitará lo siguiente:

• Los códigos largos para asociar a una campaña 10DLC


• El ID de la campaña 10DLC que se debe asociar con el código largo

Note

Antes de asociar códigos largos a una campaña, debe tener registrada esa campaña 10DLC.
Si aún no ha creado y registrado una campaña 10DLC, consulte Registro de una campaña de
10DLC (p. 199).

Para asignar un código largo a 10DLC, siga estos pasos:

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En Configuración y, después, en SMS y voz, elija la pestaña Números de teléfono.
3. Elija el código largo que desea convertir a un 10DLC.
4. Para abrir el Centro de asistencia , elija Asignar a la campaña 10DLC.
5. Para el tipo de caso, elija Aumento de límites de servicio.
6. En Tipo de límite, elija Pinpoint.
7. En la sección Requests (Solicitudes), elija el valor de Region (Región) y, a continuación, para Limit
(Límite), elija 10 DLC - Associate existing US long code to 10DLC campaign (10 DLC: asociar el
código largo de EE. UU. existente a la campaña 10DLC).
8. En Descripción del caso, para Descripción de caso de uso, asegúrese de incluir el ID de campaña
10DLC y los números de código largos que quiere asociar a esa campaña. Puede incluir varios
códigos largos en la solicitud, pero solo debe incluir un ID de campaña.

203
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

9. En Contact options (Opciones de contacto), en Preferred contact language (Idioma de contacto


preferido), elija el idioma que prefiera utilizar para comunicarse con el equipo de AWS Support.
10. En Contact method (Método de contacto), elija el método preferido de contacto para comunicarse con
el equipo de AWS Support.
11. Elija Submit (Enviar).

Acceso entre cuentas de 10DLC

Cada número de teléfono 10DLC está asociado a una sola cuenta en una sola región de AWS. Si desea
utilizar el mismo número de teléfono 10DLC para enviar mensajes en más de una cuenta o región, tiene
dos opciones:

1. Puede registrar la misma empresa y campaña en cada una de sus cuentas de AWS. Estos registros
se administran y cobran por separado. Si registra la misma empresa en varias cuentas de AWS, el
número de mensajes que puede enviar a los clientes de T-Mobile por día se comparte entre cada una
de esas cuentas.
2. Puede completar el proceso de registro de 10DLC en una cuenta de AWS y utilizar AWS Identity and
Access Management (IAM) para conceder a otras cuentas permiso para efectuar envíos a través de su
número 10DLC.
Note

Esta opción permite un verdadero acceso entre cuentas a sus números de teléfono 10DLC.
No obstante, tenga en cuenta que los mensajes enviados desde sus cuentas secundarias
se tratan como si fueran enviados desde su cuenta principal. Las cuotas y la facturación se
contabilizan en la cuenta principal y no en las secundarias.

Configuración del acceso entre cuentas mediante políticas de IAM

Puede utilizar los roles de IAM para asociar otras cuentas con su cuenta principal. Después, puede delegar
los permisos de acceso de su cuenta principal en sus cuentas secundarias concediéndoles acceso a los
números 10DLC de la cuenta principal.

Para conceder acceso a un número 10DLC en su cuenta principal

1. Si aún no lo ha hecho, complete el proceso de registro de 10DLC en la cuenta principal. Este proceso
conlleva tres pasos:

• Registre su empresa. Para obtener más información, consulte Registro de su empresa o


marca (p. 195) para su uso con 10DLC.
• Registre su campaña 10DLC (caso de uso). Para obtener más información, consulte Registro de
una campaña de 10DLC (p. 199).
• Asocie un número de teléfono a su campaña 10DLC. Para obtener más información, consulte
Asociación de un código largo con una campaña 10DLC (p. 203).
2. Cree un rol de IAM en su cuenta principal que permita a otra cuenta llamar a la operación API
Publish para su número de teléfono 10DLC. Para obtener más información sobre la creación de
roles, consulte Creación de roles de IAM en la Guía del usuario de IAM.
3. Delegue y pruebe el permiso de acceso desde su cuenta principal utilizando los roles de IAM con
cualquiera de sus demás cuentas que necesiten utilizar sus números 10DLC. Por ejemplo, puede
delegar el permiso de acceso de su cuenta de producción a su cuenta de desarrollo. Para obtener
más información sobre la delegación y la comprobación de permisos, consulte Delegación del acceso
a través de la cuenta de AWS mediante los roles de IAM en la Guía del usuario de IAM.
4. Con el nuevo rol, envíe un mensaje con un número 10DLC de la cuenta principal. Para obtener más
información sobre el uso de un rol, consulte Uso de roles de IAM en la Guía del usuario de IAM.

204
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Obtención de información sobre los problemas de registro de 10DLC

En algunas situaciones, podría recibir un mensaje de error cuando intente registrar su empresa o su
campaña 10DLC.

Problemas de registro de empresa

Al registrar su empresa, verá uno de los dos estados de registro: Verified (Verificado) o Unverified (No
verificado). Si el estado del registro de la empresa es Verified (Verificado), entonces el registro de su
empresa ha sido correcto. Puede empezar a crear campañas 10DLC.

Si el estado del registro de su empresa es Unverified (No verificado), significa que ha habido problemas
con la información que ha proporcionado. La consola de Amazon Pinpoint proporciona información sobre
las razones por las que el registro de su empresa obtuvo este estado.

Para ver los problemas de registro de su empresa 10DLC

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. En el panel de navegación, en SMS and voice (SMS y voz), elija Phone numbers (Números de
teléfono).
3. En la pestaña 10DLC campaigns (Campañas 10DLC), en la lista de campañas, elija el nombre de la
empresa de la que desea obtener más información.
4. La página de detalles de la empresa contiene información sobre los asuntos que se identificaron en su
registro. Si un campo de la sección Company info (Información de la empresa) contiene un símbolo de
advertencia, el problema de registro está relacionado con la información de ese campo.

Compruebe la información que ha proporcionado y confirme que todos los campos contienen la
información correcta. Puede editar el registro de su empresa en la consola de Amazon Pinpoint. Para
obtener más información sobre la modificación de los detalles de registro de su empresa, consulte
Edición o eliminación de una empresa registrada (p. 198).

Si no puede identificar el problema con el registro, puede crear un caso con AWS Support para solicitar
información adicional. Siga el procedimiento en Problemas de registro de campaña para crear un caso.

Problemas de registro de campaña

Cuando registre su campaña 10DLC, es posible que aparezca un mensaje de error en determinadas
situaciones.

Para enviar una solicitud de información sobre una campaña 10DLC rechazada

1. Inicie sesión en AWS Management Console y abra la consola de Amazon Pinpoint en https://
[Link]/pinpoint/.
2. Elija Asistencia y, después, Centro de asistencia.
3. En la página Asistencia, elija Crear caso.
4. Para Case type (Tipo de caso), elija Service limit increase (Aumento del límite de servicio).
5. En Limit type (Tipo de límite), elija Pinpoint SMS (SMS de Pinpoint).
6. En la sección Resources (Recursos), haga lo siguiente:

• En Region (Región), elija la región de AWS en la que intentó registrar la campaña.


• En Resource Type (Tipo de recurso), elija 10DLC Registration (Registro de 10DLC).
• Para el límite, elija Rechazo de registro de campaña 10DLC o empresa.
7. En Use case description (Descripción del caso de uso), ingrese el ID de la campaña 10DLC
rechazada.

205
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

8. En Contact options (Opciones de contacto), en Preferred contact language (Idioma de contacto


preferido), elija el idioma que prefiera utilizar para comunicarse con el equipo de AWS Support.
9. En Contact method (Método de contacto), elija el método preferido de contacto para comunicarse con
el equipo de AWS Support.
10. Elija Submit (Enviar).

El equipo de AWS Support le informará sobre los motivos por los que se ha rechazado el registro de su
campaña 10DLC en su caso de AWS Support.

Números de teléfono gratuitos


Un número gratuito es un número de 10 dígitos que comienza con uno de los siguientes códigos de área:
800, 888, 877, 866, 855, 844 u 833. Puede utilizar números gratuitos para enviar mensajes transaccionales
solamente.

Para comprar números gratuitos, utilice la consola de Amazon Pinpoint. No es necesario registrar las
plantillas de mensajes. Para obtener más información, consulte Solicitud de un número en la Guía del
usuario de Amazon Pinpoint.

En este momento, Amazon Pinpoint admite números gratuitos para mensajes de voz y SMS, pero Amazon
SNS solo admite mensajes SMS.

Pautas sobre el uso de números gratuitos

Cuando utilice un número gratuito como número de origen, siga estas pautas:

• No utilice direcciones URL abreviadas creadas a partir de acortadores de URL de terceros, ya que es
más probable que estos mensajes se filtren como spam.

Si necesita usar una URL acortada, considere usar un número 10DLC (p. 191) o un código
corto (p. 207). Si va a utilizar códigos cortos y 10DLC, debe registrar su plantilla de mensaje, en la que
puede especificar una URL abreviada.
• Tenga en cuenta que las respuestas de exclusión (STOP) y de registro (UNSTOP) de las palabras clave
se establecen a nivel del operador. No puede modificar estas palabras clave ni otras palabras clave, ni
los mensajes que se envían cuando los usuarios responden con STOP y UNSTOP.
• No envíe el mismo contenido de mensaje o uno similar con varios números de teléfono gratuitos.
Los operadores llaman a esta práctica snowshoeing o grupo de números y se dedican a filtrar estos
mensajes.
• Dado que los números gratuitos están sujetos al filtrado de contenido, asegúrese de que los mensajes
no contengan ninguno de los siguientes tipos de contenido restringido:

Categoría Ejemplos

Servicios financieros de alto riesgo • Préstamos de pago


• Préstamos a corto plazo con altos intereses
• Préstamos para automóviles
• Préstamos hipotecarios
• Préstamos escolares
• Cobro de deudas

Condonación de la deuda • Consolidación de la deuda


• Reducción de la deuda
• Programas de reparación de créditos

206
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

Categoría Ejemplos

Esquemas de enriquecimiento rápido • Programas de trabajo desde casa


• Oportunidades de inversión de riesgo
• Esquemas de marketing pirámide o multinivel

Sustancias prohibidas o controladas • Cannabis

Phishing • Intenta que los usuarios revelen información


personal o información de inicio de sesión en el
sitio web.

S.H.A.F.T. • Sexo
• Odio
• Alcohol
• Armas de fuego
• Tabaco

Códigos cortos
Los códigos cortos son secuencias numéricas más breves que un número de teléfono normal. Por ejemplo,
en los Estados Unidos y Canadá, los números de teléfono estándar (códigos largos) contienen 11 dígitos,
mientras que los códigos cortos contienen cinco o seis dígitos. Amazon SNS admite códigos cortos
dedicados.

Códigos cortos dedicados

Si envía un gran volumen de mensajes SMS a destinatarios en los Estados Unidos o Canadá, puede
adquirir un código corto dedicado. A diferencia de los códigos cortos de un grupo compartido, los
dedicados están reservadas para su uso exclusivo.

El uso de un código corto fácil de recordar puede ayudar a generar confianza. Si tiene que enviar
información confidencial (por ejemplo, contraseñas de uso único), es conveniente hacerlo mediante un
código corto para que el cliente pueda determinar rápidamente si un mensaje procede realmente de usted.

Durante una campaña de adquisición de nuevos clientes, puede invitarles a enviar una palabra clave
a su código corto (por ejemplo: “Envía FÚTBOL al 10987 para recibir noticias e información”). Los
códigos cortos son más fáciles de recordar que los largos y también resultan más fáciles de escribir en el
dispositivo. Al reducir la cantidad de dificultades que los clientes deben salvar al inscribirse en un programa
de marketing, puede aumentar la eficacia de sus campañas.

Dado que los operadores de telefonía móvil deben aprobar los nuevos códigos cortos antes de activarlos,
es menos probable que marquen como correo no deseado los mensajes enviados desde ellos.

Cuando se usan códigos cortos dedicados para enviar mensajes SMS, es posible enviar un mayor
volumen de mensajes por período de 24 horas que con otros tipos de identidades de origen. Es decir, la
cuota de envío es muy superior. También es posible enviar un volumen mucho mayor de mensajes por
segundo. Es decir, dispondrá de una tasa de envío mucho mayor.

Importante

La adquisición de códigos cortos entraña costos adicionales. Además, su implementación puede requerir
mucho tiempo. Por ejemplo, en los Estados Unidos, por cada código corto es preciso abonar una tarifa
de creación inicial de 650.00 USD más un cargo recurrente de 995.00 USD al mes. El código corto puede
tardar entre 8 y 12 semanas en estar activo en todas las redes de telefonía móvil. Para encontrar el precio

207
Amazon Simple Notification
Service Guía para desarrolladores
Identidades de origen

y el tiempo de aprovisionamiento para otro país o región, complete el procedimiento descrito en Solicitud
de códigos cortos dedicados para mensajería por SMS con Amazon SNS (p. 210).

Códigos largos de persona a persona (P2P)


Important

A partir del 1 de junio de 2021, los proveedores de telecomunicaciones estadounidenses ya


no admiten el uso de códigos largos de persona a persona (P2P) para las comunicaciones de
aplicación a persona (A2P) a destinos de Estados Unidos. En su lugar, debe utilizar otro tipo de
ID de origen para estos mensajes. Para obtener más información, consulte Requisitos especiales
para enviar mensajes SMS a destinos en Estados Unidos (p. 264).

Los códigos largos P2P son números de teléfono que usan el formato numérico del país o la región en
la que se encuentran los destinatarios. Los códigos largos P2P también se denominan números largos
o números móviles virtuales. Por ejemplo, en los Estados Unidos y Canadá, los códigos largos P2P
contienen 11 dígitos: el número 1 (el código de país), un código de área de tres dígitos y un número de
teléfono de siete dígitos.

Para obtener más información acerca de cómo solicitar códigos largos P2P, consulte Solicitud de números
10DLC, números gratuitos y códigos largos P2P para mensajes SMS con Amazon SNS (p. 213).

Los códigos largos P2P dedicados están reservados para su uso en la cuenta de Amazon SNS
exclusivamente, no se comparten con otros usuarios. Si usa códigos largos P2P dedicados, puede
especificar qué código largo P2P desea usar al enviar cada mensaje. Si envía varios mensajes al mismo
cliente, puede asegurarse de que cada mensaje aparezca como enviado desde el mismo número de
teléfono. Por este motivo, los códigos largos P2P dedicados pueden resultar útiles para establecer su
marca o identidad.

Los códigos largos P2P no son compatibles con las comunicaciones A2P a destinos de Estados Unidos.

Si envía varios cientos de mensajes al día mediante un código largo P2P dedicado, los operadores de
telefonía móvil podrían identificar su número como remitente de correo no deseado. Si el código largo P2P
se marca por este motivo, es posible que sus mensajes no se entreguen a los destinatarios.

Los códigos largos P2P, además, presentan poco rendimiento. Las tarifas máximas de envío varían según
el país. Póngase en contacto con la asistencia de AWS para obtener más información al respecto. Si tiene
previsto enviar grandes volúmenes de mensajes SMS o desea enviarlos con una velocidad superior a un
solo mensaje por segundo, debe adquirir un código corto dedicado.

Algunos operadores no le permiten usar códigos largos P2P para enviar mensajes SMS A2P, incluso
en los Estados Unidos. Un SMS A2P es un mensaje que se envía al dispositivo móvil de un cliente
cuando este ha facilitado su número de móvil a una aplicación. Los mensajes A2P son conversaciones
unidireccionales, como los mensajes de marketing, las contraseñas de uso único o los recordatorios
de citas. Si tiene previsto enviar mensajes A2P, debe adquirir un código corto dedicado (si sus clientes
se encuentran en los Estados Unidos o Canadá) o bien usar un ID de remitente (si sus destinatarios se
encuentran en un país o región donde se admiten los ID de remitente).

Comparación de números de producto en EE. UU.


En esta tabla, se muestra la comparación la asistencia de los tipos de números de teléfono de EE. UU.

Característica del Código corto Número de 10DLC


producto teléfono gratuito

Formato de 5 a 6 dígitos Número de Número de


número 10 dígitos 10 dígitos

208
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

Característica del Código corto Número de 10DLC


producto teléfono gratuito

Canal de SMS SMS SMS


asistencia

Tipo de tráfico Promocional y Transactional Promocional y


SMS transaccional transaccional

Necesita una Sí No Sí
investigación

Tiempo de 12 semanas¹ De inmediato 1 semana


aprovisionamiento
estimado

Rendimiento de 100 partes de 3 partes de Varía en función


SMS (cantidad de mensajes por mensajes por de su registro de
mensajes SMS por segundo; mayor segundo 10DLC. Admite
segundo)² rendimiento hasta 100 partes
disponible por un de mensajes por
cargo adicional. segundo.

Palabras clave Opt-in, opt-out, STOP, UNSTOP. Opt-in, opt-out,


necesarias and HELP Son administradas and HELP
por la red. No
puede cambiar
los mensajes de
exclusión y de
rechazo.

¹ La estimación de aprovisionamiento no incluye el tiempo de aprobación.

² Para obtener más información sobre el tamaño máximo de los mensajes SMS, consulte Publicación en un
teléfono móvil (p. 225).

Solicitud de asistencia para mensajería SMS con


Amazon SNS
En su cuenta de AWS, no podrá acceder a algunas opciones de SMS con Amazon SNS hasta que se
comunique con AWS Support. Abra un caso en el centro de AWS Support para solicitar cualquiera de los
siguientes:

• Un aumento en su umbral de gasto mensual de SMS

De forma predeterminada, el umbral de gasto mensual es de 1,00 USD. El umbral de gasto determina
el volumen de mensajes que puede enviar con Amazon SNS. Puede solicitar un umbral de gasto con el
que se obtenga el volumen mensual de mensajes esperado para su caso de uso de SMS.
• Una salida desde el entorno de pruebas de SMS (p. 188) para que pueda enviar mensajes SMS sin
restricciones. Para obtener más información, consulte Salida del entorno de pruebas de SMS (p. 189).
• Un número de origen (p. 191) dedicado
• Un ID de remitente dedicado

Un ID de remitente es un ID personalizado que se muestra como remitente en el dispositivo del


destinatario. Por ejemplo, puede utilizar la marca de su negocio para facilitar el reconocimiento del

209
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

origen del mensaje. La compatibilidad con los ID de remitente varía según el país o la región. Para
obtener más información, consulte Regiones y países admitidos (p. 251).

Al crear su caso en el Centro de AWS Support, asegúrese de toda la información obligatoria para el tipo
de solicitud que está enviando. De lo contrario, AWS Support debe comunicarse con usted para obtener
esta información antes de continuar. Al enviar un caso detallado, contribuye a garantizar que su caso se
gestione sin retrasos. Para conocer los detalles para determinados tipos de solicitudes de SMS, consulte
los siguientes temas.

Temas
• Solicitud de códigos cortos dedicados para mensajería por SMS con Amazon SNS (p. 210)
• Solicitud de números 10DLC, números gratuitos y códigos largos P2P para mensajes SMS con
Amazon SNS (p. 213)
• Solicitud de ID de remitente para mensajería SMS con Amazon SNS (p. 213)
• Solicitud de aumento de la cuota de gasto mensual de SMS para Amazon SNS (p. 216)

Solicitud de códigos cortos dedicados para mensajería por SMS


con Amazon SNS
Un código corto es un número que puede utilizar para enviar grandes cantidades de mensajes SMS. A
menudo se utiliza para mensajería de aplicación a persona (A2P), autenticación de dos factores (2FA) y
marketing. Un código corto normalmente contiene entre tres y siete dígitos, según el país o la región a la
que pertenezca.

Solo puede utilizar códigos cortos para enviar mensajes a destinatarios del mismo país al que pertenece el
código corto. Si para su caso de uso necesita utilizar códigos cortos en más de un país, tendrá que solicitar
un código corto independiente para cada país en el que se encuentren sus destinatarios.

Para obtener más información acerca de los precios de código corto, consulte Precios de Amazon SNS.
Important

Si es la primera vez que utiliza la mensajería SMS con Amazon SNS, solicite un umbral de gasto
de SMS mensual que satisfaga las demandas previstas de su caso de uso de SMS. De forma
predeterminada, el umbral de gasto mensual es de 1,00 USD. Puede solicitar ampliar el umbral
de gasto en el mismo caso de soporte que incluye su solicitud de un código corto. O bien, puede
utilizar un caso independiente. Para obtener más información, consulte Solicitud de aumento de la
cuota de gasto mensual de SMS para Amazon SNS (p. 216).
Además, si solicita un código corto especial para enviar mensajes que contengan o puedan
contener información médica protegida (PHI), debe identificar este propósito en el campo Case
description (Descripción del caso) cuando abra una incidencia de soporte, tal como se detalla a
continuación.

Paso 1: Abrir un caso de soporte


Abrir una incidencia en AWS Support completando los pasos siguientes.

Para solicitar un código corto dedicado

1. Vaya al Centro de asistencia de AWS.


2. Elija Create case (Crear caso).
3. En Regarding (Relativo a), elija Service Limit Increase (Aumento del límite de servicio).
4. En Limit Type (Tipo de límite), elija SNS Text Messaging (Mensajería de texto SNS).

210
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

5. Para Resource Type (Tipo de recurso), elija Dedicated SMS Short Codes (Códigos cortos SMS
dedicados).
6. En Limit (Límite), seleccione la opción que más se parezca a su caso de uso.
7. En New limit value (Nuevo valor del límite), especifique la cantidad de códigos cortos que quiere
reservar (por lo general, este valor es 1).
8. En Use Case Description (Descripción del caso de uso), resuma el caso de uso y cómo se suscribirán
los destinatarios a los mensajes que se envíen con el código corto y proporcione la siguiente
información:

Información de la empresa:

• Nombre de la empresa.
• Dirección postal de la empresa.
• Nombre y número de teléfono del contacto principal para su solicitud.
• Dirección de correo electrónico y número de asistencia gratuito de su empresa.
• ID fiscal de la empresa.
• Nombre de su producto o servicio.

Proceso de inscripción del usuario:

• Página web de la empresa o el sitio web donde se inscriben los clientes para recibir mensajes desde
su código corto.
• Cómo se inscribirán los usuarios para recibir mensajes desde su código corto. Especifique una o
más de las siguientes opciones:
• Text messages.
• Website.
• Mobile app.
• Other. En caso de que sea otra, indíquelo.
• El texto de la opción para suscribirse a los mensajes en su sitio web, aplicación o de otro modo.
• La secuencia de mensajes que tiene previsto utilizar para la confirmación doble. Proporcione toda
esta información:
1. El mensaje SMS que tiene previsto enviar cuando un usuario se inscriba. Este mensaje solicita el
consentimiento del usuario para los mensajes recurrentes. Por ejemplo: ExampleCorp: responda
SÍ para recibir alertas de transacciones de la cuenta. Podrían aplicarse tarifas de mensajes y
datos.
2. La respuesta de suscripción que espera del usuario. Normalmente es una palabra clave, como
SÍ.
3. El mensaje de confirmación que desea enviar cuando los clientes envíen esta palabra clave a su
código corto. Por ejemplo: Se ha registrado para recibir alertas de su cuenta de ExampleCorp.
Podrían aplicarse tarifas de mensajes y datos. Envíe el texto STOP para cancelar o AYUDA para
obtener información.

El objetivo de los mensajes:

• El objetivo de los mensajes que tiene previsto enviar con su código corto. Especifique una de las
siguientes opciones:
• Promotions and marketing.
• Location-based services.
• Notifications.
• Information on demand. 211
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

• Group chat.
• Two-factor authentication (2FA).
• Polling and surveys.
• Sweepstakes or contests.
• Other. En caso de que sea otra, indíquelo.
• Si tiene previsto utilizar el código corto para enviar mensajes promocionales o de marketing para
una empresa que no sea la suya.
• Si tiene pensado usar su código corto para enviar mensajes que contengan o puedan contener
información médica protegida (PHI), tal como se define en la Ley de Portabilidad y Responsabilidad
de Seguros Médicos (HIPAA) y la legislación y regulaciones asociadas.

Contenido de los mensajes:

• El mensaje que tiene previsto enviar cuando los clientes se suscriban para recibir sus mensajes
enviándole una palabra clave específica. Tenga cuidado cuando especifique esta palabra clave
y este mensaje: se puede tardar varias semanas en cambiar este mensaje. Al crear el código
corto, registramos la palabra clave y el mensaje en los operadores de telefonía móvil del país en
los que va a utilizar el código corto. El mensaje podría ser como este: Bienvenido a las alertas de
ProductName. Se aplican tarifas de mensajes y de datos. 2 mensajes por mes. Responda AYUDA
para obtener ayuda, STOP para cancelar.
• La respuesta que desea enviar cuando los clientes respondan a sus mensajes con la palabra clave
AYUDA. Este mensaje debe incluir la información de contacto de atención al cliente. Por ejemplo:
Alertas de ProductName: ayuda en [Link]/help o al (800) 555-0199. Se aplican
tarifas de mensajes y de datos. 2 mensajes por mes. Responda STOP para cancelar.
• La respuesta que desea enviar cuando los clientes respondan a sus mensajes con la palabra clave
STOP. Este mensaje tiene que confirmar que el usuario dejará de recibir mensajes de usted. Por
ejemplo: Ha cancelado su suscripción a las alertas de ProductName. No recibirá más mensajes.
Responda AYUDA para obtener ayuda o llame al (800) 555-0199.
• El texto que tiene previsto enviar como recordatorio periódico de que el usuario está suscrito a sus
mensajes. Por ejemplo: Recordatorio: está suscrito a las alertas de su cuenta de ExampleCorp.
Podrían aplicarse tarifas de mensajes y datos. Envíe el texto STOP para cancelar o AYUDA para
obtener información.
• Un ejemplo de cada tipo de mensaje que tiene previsto enviar con el código corto. Proporcione al
menos tres ejemplos. Si tiene previsto enviar más de tres tipos de mensajes, proporcione ejemplos
de todos ellos.

Important

Debemos proporcionar a los operadores de telefonía móvil toda la información indicada


anteriormente para aprovisionar códigos cortos. No podremos procesar su solicitud hasta que
no nos proporcione toda esta información.
9. En Contact options (Opciones de contacto), elija en Preferred contact language (Idioma de contacto
preferido) si prefiere recibir las comunicaciones de este caso en English (Inglés) o Japanese
(Japonés).
10. Cuando haya terminado, elija Submit (Enviar).

Una vez que recibamos su solicitud, proporcionaremos una respuesta inicial en un plazo de 24 horas.
Es posible que nos pongamos en contacto con usted para solicitar información adicional. Si podemos
proporcionarle un código corto, le enviaremos información sobre los costos asociados con la obtención de
un código corto en el país o la región que haya especificado en la solicitud. También le proporcionaremos
una estimación de la cantidad de tiempo que se necesita para aprovisionar un código corto en su país o
región. Se suele tardar varias semanas en realizar el aprovisionamiento de un código corto, aunque este

212
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

retraso puede ser mucho más corto o más mucho más largo, dependiendo del país o la región donde se
solicite el código corto.
Note

Las tarifas asociadas al uso de códigos cortos comenzarán a aplicarse justo después de que
iniciemos su solicitud de código corto con los operadores. Usted es el responsable de pagar estos
cargos, incluso aunque el código corto no se haya aprovisionado por completo.

Para evitar que nuestros sistemas sean utilizados para enviar contenido no solicitado o malicioso, tenemos
que considerar cada solicitud detenidamente. Es posible que no podamos garantizar su solicitud si su caso
de uso no está en consonancia con nuestras políticas.

Pasos siguientes
Ha registrado un código corto con operadores inalámbricos y ha revisado la configuración en la consola
de Amazon SNS. Ahora puede utilizar Amazon SNS para enviar mensajes SMS con su código corto como
número de origen.

Solicitud de números 10DLC, números gratuitos y códigos largos


P2P para mensajes SMS con Amazon SNS
Important

A partir del 1 de junio de 2021, los proveedores de telecomunicaciones estadounidenses ya


no admiten el uso de códigos largos de persona a persona (P2P) para las comunicaciones de
aplicación a persona (A2P) a destinos de Estados Unidos. En su lugar, debe utilizar otro tipo de
ID de origen para estos mensajes. Para obtener más información, consulte Requisitos especiales
para enviar mensajes SMS a destinos en Estados Unidos (p. 264).

Para solicitar números 10DLC (p. 191), números de teléfono gratuitos (p. 206) y códigos largos
P2P (p. 208), utilice la consola de Amazon Pinpoint. Para obtener instrucciones detalladas, consulte
Solicitud de un número en la Guía del usuario de Amazon Pinpoint.

La mensajería SMS de Amazon SNS está disponible en regiones en las que Amazon Pinpoint no es
compatible en este momento. En estos casos, abra la consola de Amazon Pinpoint en la región EE. UU.
Este (Norte de Virginia) para registrar su empresa y campaña de 10DLC, pero no solicite un número
10DLC. En su lugar, abra un caso en el centro de AWS Support para solicitar un número 10DLC en la
región de AWS en la que utiliza o piensa utilizar Amazon SNS para enviar mensajes SMS. Para obtener
información sobre las regiones donde está disponible Amazon Pinpoint, consulte Cuotas y puntos de
enlace de Amazon Pinpointen la referencia general de AWS.
Note

Si es la primera vez que utiliza la mensajería SMS con Amazon SNS, también debe solicitar un
umbral de gasto de SMS mensual que satisfaga las demandas previstas de su caso de uso de
SMS. De forma predeterminada, el umbral de gasto mensual es de 1,00 USD. Para obtener más
información, consulte Solicitud de aumento de la cuota de gasto mensual de SMS para Amazon
SNS (p. 216).

Solicitud de ID de remitente para mensajería SMS con Amazon


SNS
Important

Si es la primera vez que utiliza la mensajería SMS con Amazon SNS, solicite un umbral de gasto
de SMS mensual que satisfaga las demandas previstas de su caso de uso de SMS. De forma

213
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

predeterminada, el umbral de gasto mensual es de 1,00 USD. Puede solicitar ampliar el umbral
de gasto en el mismo caso de soporte que incluye su solicitud de un ID de remitente. O bien, si lo
prefiere, puede abrir un caso independiente. Para obtener más información, consulte Solicitud de
aumento de la cuota de gasto mensual de SMS para Amazon SNS (p. 216).

En la mensajería SMS, un ID de remitente es un nombre que aparece como remitente del mensaje en
los dispositivos de los destinatarios. Los ID de remitente son una forma útil de identificarse ante los
destinatarios de sus mensajes.

La compatibilidad con los ID de remitente varía según el país. Por ejemplo, los operadores de Estados
Unidos no admiten ningún tipo de ID de remitente, pero los operadores de la India requieren que los
remitentes utilicen los ID de remitente. Para obtener una lista completa de los países donde se admite el
uso de los ID de remitente, consulte Regiones y países admitidos (p. 251).
Important

En algunos países es obligatorio registrar los ID de remitente antes de utilizarlos para enviar
mensajes. En función del país, este proceso de registro puede tardar varias semanas. Los países
en que es obligatorio el registro previo de los ID de remitente se indican en la tabla de la página
Supported Countries (Países admitidos) (p. 251).
Si tiene asistencia empresarial y está registrando varias plantillas en varias cuentas, siga los
pasos que se indican a continuación y trabaje con su gerente técnico de cuenta para asegurarse
de que su experiencia de incorporación se coordine.

Si está enviando mensajes a destinatarios de un país donde se admiten los ID de remitente y en ese país
no es obligatorio registrar los ID de remitente, no tiene que realizar ningún paso adicional. Puede comenzar
a enviar mensajes que incluyan valores de ID de remitente inmediatamente.

Solo tiene que completar los procedimientos de esta página si tiene previsto enviar mensajes a un país en
el que sea obligatorio el registro de los ID de remitente.

Paso 1: Abrir un caso de SMS de Amazon SNS


Si tiene previsto enviar mensajes a destinatarios de un país donde es obligatorio el uso de los ID de
remitente, puede solicitar un ID de remitente creando un caso en el Centro de soporte de AWS.
Note

Si tiene previsto enviar mensajes a destinatarios de un país en el que los ID de remitente están
permitidos pero no son obligatorios, no es necesario que abra un caso en el Centro de soporte.
Puede comenzar a enviar mensajes que utilicen los ID de remitente inmediatamente.

Para solicitar un ID de remitente, realice el siguiente procedimiento:

1. Inicie sesión en la AWS Management Console en [Link]


2. En el menú Support (Soporte), elija Support Center (Centro de soporte).
3. En la pestaña My support cases (Mis casos de soporte), elija Create case (Crear caso).
4. Seleccione Service limit increase (Aumento del límite de servicio).
5. En Case classification (Clasificación del caso), realice el siguiente procedimiento:

a. En Quota type (Tipo de cuota), elija Pinpoint SMS (SMS de Pinpoint).


b. En Provide a link to the site or app which will be sending SMS messages (Proporcionar un enlace
al sitio o aplicación que enviará los mensajes SMS), identifique el sitio web o la aplicación donde
se inscribirán los miembros del público para recibir sus mensajes SMS.
c. En What type of messages do you plan to send (Tipo de mensaje que tiene previsto enviar), elija
el tipo de mensaje que tiene previsto enviar con su ID de remitente:

214
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

• Contraseñas de un solo uso: mensajes que proporcionan contraseñas que sus clientes utilizan
para autenticarse con su sitio web o aplicación.
• Promocional: mensajes no importantes que promocionan su empresa o servicio, tales como
anuncios u ofertas especiales.
• Transaccional: mensajes informativos importantes que admiten transacciones del cliente, tales
como confirmaciones de pedido o alertas de transacción. Los mensajes de transacciones no
pueden incluir contenido promocional o de marketing.
d. En Which countries do you plan to send messages to (Países a los que tiene previsto enviar
mensajes), especifique los países en los que desea registrar un ID de remitente. La posibilidad
de utilizar los ID de remitente y los requisitos para registrarlos varían en función del país. Para
obtener más información, consulte Regiones y países admitidos (p. 251).

Si la lista de países supera el número de caracteres permitido por este cuadro de texto, puede
incluir la lista de países en la sección Case description (Descripción del caso).
6. En Requests (Solicitudes), realice el siguiente procedimiento:

a. En Resource type (Tipo de recurso), elija General Quotas (Cuotas generales).


b. En Quota (Cuota), elija SenderID Registration (Registro del ID de remitente).
c. En New quota value (Nuevo valor de cuota), escriba la cantidad de ID de remitente que está
solicitando. Normalmente, este valor es 1.
7. En Case description (Descripción de caso), para Use case description (Descripción de caso de uso),
proporcione la siguiente información:

• El ID de remitente que desea registrar.


• La plantilla de que tiene previsto utilizar para sus mensajes SMS.
• El número de mensajes que tiene previsto enviar a cada destinatario al mes.
• Información sobre cómo optan los clientes por recibir mensajes de usted.
• El nombre de su empresa u organización.
• La dirección asociada a su empresa u organización.
• El país en el que se encuentra su empresa u organización.
• Un número de teléfono de su empresa u organización.
• La URL del sitio web de su empresa u organización.

Una vez que recibamos su solicitud, proporcionaremos una respuesta inicial en un plazo de 24 horas. Es
posible que nos pongamos en contacto con usted para solicitar información adicional. Si podemos ofrecerle
un ID de remitente, le enviaremos una estimación del tiempo necesario para realizar el aprovisionamiento.

Para evitar que nuestros sistemas sean utilizados para enviar contenido no solicitado o malicioso, tenemos
que considerar cada solicitud detenidamente. Es posible que no podamos garantizar su solicitud si su caso
de uso no está en consonancia con nuestras políticas.

Paso 2: Actualizar la configuración de SMS en la consola de Amazon SNS


Cuando completemos el proceso de obtención de su ID de remitente, responderemos a su caso. Cuando
reciba esta notificación, complete los pasos de esta sección para configurar Amazon SNS de modo que
utilice su ID de remitente como ID de remitente predeterminado para todos los mensajes enviados con
su cuenta. De forma alternativa, puede optar por especificar qué ID de remitente se utiliza al publicar el
mensaje.

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación, elija Mobile (Móvil), Text messaging (SMS) (Mensajería de texto (SMS)).
3. En la página Mensajería de texto a través del móvil (SMS), en la sección Preferencias de mensajería
de texto, elija Editar.

215
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

4. En la página Editar preferencias de mensajería de texto, en la sección Detalles, haga lo siguiente:


5. En Default sender ID (ID de remitente predeterminado), introduzca el ID de remitente proporcionado
que se utilizará como predeterminado para todos los mensajes de su cuenta.
6. Elija Save changes.

Pasos siguientes
Ha registrado un ID de remitente y ha actualizado la configuración en la consola de Amazon SNS. Ahora
puede utilizar Amazon SNS para enviar mensajes SMS con su ID de remitente. Los destinatarios de SMS
en los países admitidos verán su ID de remitente como el remitente del mensaje en sus dispositivos. Si se
utiliza un ID de remitente diferente al publicar mensajes, se anulará el ID predeterminado configurado aquí.

Solicitud de aumento de la cuota de gasto mensual de SMS para


Amazon SNS
Amazon SNS proporciona cuotas de gastos para ayudarlo a administrar el costo máximo por mes en el
que se incurre al enviar SMS a través de su cuenta. La cuota de gasto limita el riesgo en caso de ataque
malicioso e impide que la aplicación ascendente envíe más mensajes de los esperados. Puede configurar
Amazon SNS para que deje de publicar mensajes SMS cuando determine que el envío de un mensaje
SMS generará un costo que superará la cuota de gasto del mes actual.

Para garantizar que sus operaciones no se vean afectadas, le recomendamos solicitar una cuota de
gasto lo suficientemente alta como para admitir sus cargas de trabajo de producción. Para obtener más
información, consulte Paso 1: Abrir un caso de SMS de Amazon SNS (p. 216). Una vez que haya
recibido la cuota, podrá administrar su riesgo aplicando la cuota completa o un valor menor, como se
describe en Paso 2: Actualizar la configuración de SMS (p. 217). Si aplica un valor menor, podrá
controlar el gasto mensual con la opción de aumentarlo si resultara necesario.
Important

Como Amazon SNS es un sistema distribuido, deja de enviar mensajes SMS en cuestión de


minutos si se supera la cuota de gasto. Durante este período, si sigue enviando mensajes SMS,
podría incurrir en costos que superen su cuota.

Establecemos la cuota de gasto para todas las cuentas nuevas en 1,00 USD al mes. Esta cuota está
pensada para probar las capacidades de envío de mensajes de Amazon SNS. Para solicitar un aumento
de la cuota de gasto de SMS para la cuenta, abra un caso de aumento de la cuota en el Centro de soporte
de AWS.

Paso 1: Abrir un caso de SMS de Amazon SNS


Para solicitar un aumento de la cuota de gasto mensual, abra un caso de aumento de la cuota en el Centro
de soporte de AWS.
Note

Algunos de los campos en el formulario de solicitud se marcan como "optional" (opcional). Sin
embargo, AWS Support requiere toda la información mencionada en los pasos siguientes con el
fin de procesar su solicitud. Si no proporciona toda la información necesaria, puede experimentar
retrasos en el procesamiento de su solicitud.

Para solicitar un aumento de la cuota de gasto

1. Vaya al Centro de asistencia de AWS.


2. Elija Create case (Crear caso).

216
Amazon Simple Notification
Service Guía para desarrolladores
Solicitud de soporte de SMS

3. Elija Service limit increase (Aumento del límite de servicio) y, a continuación, en Case classification
(Clasificación de casos), siga los siguientes pasos:
4. En Limit (Límite), elija SNS Text Messaging (Mensajería de texto SNS).
5. En Link to site or app which will be sending SMS - optional (Enlace al sitio o la aplicación que enviará
los SMS - opcional), introduzca la URL de su sitio web o aplicación.
6. En Type of messages - optional (Tipo de mensajes: opcional), elija One Time Password (Contraseña
de un solo uso), Promotional (Promocionales) o Transactional (Transaccionales), en función de lo que
vaya a enviar.
7. En Targeted Countries - optional (Países de destino: opcional), elija General Limits (Límites
generales).
8. En Requests (Solicitudes), en Request 1 (Solicitud 1), haga lo siguiente:
9. Para Resource Type (Tipo de recurso), elija General Limits (Límites generales).
10. En New limit (Límite nuevo), introduzca el límite de gasto necesario que calculó anteriormente.
11. En Case description (Descripción del caso), en la descripción del caso de uso, introduzca la
descripción que escribió anteriormente.
12. Expanda Contact options (Opciones de contacto) y, a continuación, elija su idioma de contacto
preferido.
13. Elija Submit (Enviar).
14. Cuando haya terminado, elija Submit (Enviar).

El equipo de AWS Support proporcionará una respuesta inicial a su solicitud antes de 24 horas.

Para evitar que nuestros sistemas sean utilizados para enviar contenido no solicitado o malicioso,
consideramos cada solicitud con detenimiento. Si podemos, accederemos a su solicitud dentro de ese
plazo de 24 horas. Sin embargo, si necesitamos que nos brinde más información, puede que la solicitud
tarde más tiempo en concederse.

Si su caso de uso no se ajusta a nuestras políticas, es posible que no podamos atender su solicitud.

Paso 2: Actualizar la configuración de SMS en la consola de Amazon SNS


Cuando le avisemos del aumento de la cuota de gasto mensual, tendrá que ajustar la cuota de gasto de su
cuenta en la consola de Amazon SNS.
Important

Importante: Si se salta este paso, el límite de gasto de SMS no aumentará.

Para ajustar la cuota de gasto en la consola

1. Abra la consola de Amazon SNS.


2. Abra el menú de navegación de la izquierda, expanda Mobile (Móvil) y, a continuación, elija Text
messaging (SMS) (Mensajería de texto (SMS)).
3. En la página Mobile text messaging (SMS) (Mensajería de texto a través del móvil (SMS)), junto a Text
messaging preferences (Preferencias de mensajería de texto), elija Edit (Editar).
4. En la página Editar preferencias de mensajería de texto, en Detalles, ingre el nuevo límite de gasto de
SMS para el límite de gasto de cuenta.
Note

Es posible que reciba una advertencia de que el valor ingresado es mayor que el límite de
gasto predeterminado. Puede omitirla.

217
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de las preferencias de SMS

5. Elija Save changes.


Note

Si aparece un error de “parámetro no válido”, compruebe el contacto de la Asistencia de


AWS y confirme que ha introducido el nuevo límite de gasto de SMS correcto. Si el problema
persiste, abra un caso en el Centro de asistencia de AWS.

Configuración de las preferencias de mensajería SMS


Utilice Amazon SNS para especificar las preferencias de mensajería SMS. Por ejemplo, puede especificar
si desea optimizar las entregas por costo o fiabilidad, el límite de gasto mensual, cómo se registran las
entregas y si desea suscribirse a informes de uso de SMS diarios.

Estas preferencias se aplican en todos los mensajes SMS que envía desde su cuenta, pero puede anular
algunas de ellas cuando envía un mensaje individual. Para obtener más información, consulte Publicación
en un teléfono móvil (p. 225).

Temas
• Configuración de las preferencias de mensajería SMS mediante la AWS Management
Console (p. 218)
• Configuración de las preferencias (SDK de AWS) (p. 219)

Configuración de las preferencias de mensajería SMS mediante


la AWS Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. Elija una región que admita la mensajería SMS (p. 251).
3. En el panel de navegación, elija Mobile (Móvil), Text messaging (SMS) (Mensajería de texto (SMS)).
4. En la página Mensajería de texto a través del móvil (SMS), en la sección Preferencias de mensajería
de texto, elija Editar.
5. En la página Editar preferencias de mensajería de texto, en la sección Detalles, haga lo siguiente:

a. En Default message type (Tipo predeterminado de mensaje), seleccione uno de los siguientes:

• Promocional (predeterminado): mensajes no importantes (por ejemplo, marketing). Amazon


SNS optimiza la entrega de mensajes para conseguir el costo más bajo.
• Transactional: mensajes de importancia que admiten transacciones del cliente, como claves
de acceso de un solo uso para la autenticación multifactor. Amazon SNS optimiza el envío de
mensajes para conseguir la máxima reputación.

Para obtener información sobre los precios de los mensajes promocionales y transaccionales,
consulte la página relacionada con los precios globales de SMS.
b. (Opcional) En Account spend limit (Límite de gasto de la cuenta), escriba el importe (en USD) que
desea gastar en mensajes SMS cada mes natural.
Important

• De forma predeterminada, la cuota de gasto se establece en 1,00 USD. Si desea


aumentar la cuota de servicio, envíe una solicitud.
• Si el importe establecido en la consola supera la cuota del servicio, Amazon SNS deja
de publicar mensajes SMS.

218
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de las preferencias de SMS

• Como Amazon SNS es un sistema distribuido, deja de enviar mensajes SMS en


cuestión de minutos en cuanto se ha excedido la cuota de gasto. Durante este
intervalo, si sigue enviando mensajes SMS, podría incurrir en costos que superen la
cuota.
6. (Opcional) En Default sender ID (ID de remitente predeterminado), escriba un ID personalizado, como
la marca de su negocio, que se muestra como el remitente en el dispositivo receptor.
Note

La compatibilidad con los ID de remitente varía según el país.


7. (Opcional) Ingrese el nombre del nombre del bucket de Amazon S3 para informes de uso.
Note

La política de bucket de S3 debe conceder acceso de escritura a Amazon SNS.


8. Elija Save changes.

Configuración de las preferencias (SDK de AWS)


Para establecer sus preferencias de SMS mediante un SDK de AWS, utilice la acción de dicho SDK
que corresponda a la solicitud SetSMSAttributes de la API de Amazon SNS. Con esta solicitud,
debe asignar valores a los diferentes atributos de SMS, como la cuota de gasto mensual o el tipo
de SMS predeterminado (transaccional o promocional). Para todos los atributos de SMS, consulte
SetSMSAttributes en la Referencia de la API de Amazon Simple Notification Service.

En los siguientes ejemplos de código, se muestra cómo establecer la configuración predeterminada para
enviar mensajes SMS mediante Amazon SNS.

C++

SDK para C++

Cómo utilizar Amazon SNS para establecer el atributo DefaultSMSType.

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String sms_type = argv[1];

Aws::SNS::Model::SetSMSAttributesRequest ssmst_req;
ssmst_req.AddAttributes("DefaultSMSType", sms_type);

auto ssmst_out = [Link](ssmst_req);

if (ssmst_out.IsSuccess())
{
std::cout << "SMS Type set successfully " << std::endl;
}
else
{
std::cout << "Error while setting SMS Type: '" <<
ssmst_out.GetError().GetMessage()
<< "'" << std::endl;
}
}

Aws::ShutdownAPI(options);

219
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de las preferencias de SMS

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for C++.

Java

SDK para Java 2.x

public static void setSNSAttributes( SnsClient snsClient, HashMap<String,


String> attributes) {

try {
SetSmsAttributesRequest request = [Link]()
.attributes(attributes)
.build();

SetSmsAttributesResponse result = [Link](request);


[Link]("Set default Attributes to " + attributes + ".
Status was " + [Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SetSMSAttributesCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
attributes: {
/* required */
DefaultSMSType: "Transactional" /* highest reliability */,
//'DefaultSMSType': 'Promotional' /* lowest cost */
},

220
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

};

const run = async () => {


try {
const data = await [Link](new SetSMSAttributesCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for JavaScript.

PHP

SDK para PHP

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

try {
$result = $SnSclient->SetSMSAttributes([
'attributes' => [
'DefaultSMSType' => 'Transactional',
],
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for PHP.

Envío de mensajes SMS


En esta sección, se describe cómo enviar mensajes SMS.

Temas
• Publicación de un tema (p. 222)

221
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

• Publicación en un teléfono móvil (p. 225)

Publicación de un tema
Puede publicar un único mensaje SMS en muchos números de teléfono a la vez mediante la suscripción
de dichos números de teléfono a un tema de Amazon SNS. Un tema de SNS es un canal de comunicación
al que puede agregar suscriptores y publicar mensajes para todos ellos. Un suscriptor recibe todos los
mensajes que se publiquen en el tema hasta que usted cancele la suscripción o el suscriptor cancele la
recepción de mensajes SMS de su cuenta de AWS.

Temas
• Envío de un mensaje a un tema (consola) (p. 222)
• Envío de un mensaje a un tema (SDK de AWS) (p. 224)

Envío de un mensaje a un tema (consola)

Para crear un tema

Ejecute los pasos siguientes si todavía no tiene un tema al que quiera enviar mensajes SMS.

1. Inicie sesión en la consola de Amazon SNS.


2. En el menú de la consola, elija una región que admita la mensajería SMS de AWS (p. 251).
3. En el panel de navegación, elija Topics (Temas).
4. En la página Temas, elija Crear tema.
5. En la página Crear tema, en Detalles, haga lo siguiente:

a. En Type (Tipo), seleccione Standard (Estándar).


b. En Nombre, ingrese un nombre para el tema.
c. (Opcional) En Nombre de visualización, ingrese un prefijo personalizado para los mensajes
SMS. Cuando envía un mensaje al tema, Amazon SNS anexa delante el nombre de visualización
seguido de un corchete angular de cierre (>) y un espacio. Los nombres de visualización no
distinguen entre mayúsculas y minúsculas, y Amazon SNS convierte los nombres de visualización
en caracteres en mayúsculas. Por ejemplo, si el nombre de visualización de un tema es MyTopic
y el mensaje es Hello World!, el mensaje aparecerá de la siguiente manera:

MYTOPIC> Hello World!

6. Elija Create new topic. El nombre del tema y el nombre de recurso de Amazon (ARN) aparecen en la
página Temas.

Para crear una suscripción de SMS, siga estos pasos:

Puede utilizar las suscripciones para enviar un mensaje SMS a varios destinatarios al publicar el mensaje
una sola vez en su tema.
Note

Cuando comience a utilizar Amazon SNS para enviar mensajes SMS, su cuenta de AWS se
encuentra en el entorno de pruebas de SMS. El entorno de pruebas de SMS proporciona un
entorno seguro para que pruebe las características de Amazon SNS sin arriesgar su reputación
como remitente de SMS. Mientras su cuenta se encuentre en el entorno de pruebas de SMS,
puede utilizar todas las características de Amazon SNS, pero solo puede enviar mensajes SMS a

222
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

números de teléfono de destino verificados. Para obtener más información, consulte Entorno de
pruebas de SMS (p. 188).

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación, seleccione Subscriptions.
3. En la página Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).
4. En la página Crear suscripción, en Detalles, haga lo siguiente:

a. En ARN de tema, ingrese o elija el nombre de recurso de Amazon (ARN) del tema al que desea
enviar mensajes SMS.
b. En Protocolo, elija SMS.
c. En Punto de enlace, ingrese el número de teléfono al que desea suscribirse al tema.
5. Elija Create subscription (Crear suscripción). La información de la suscripción aparece en la página
Suscripciones.

Para agregar más números de teléfono, repita estos pasos. También puede agregar otros tipos de
suscripciones, como el correo electrónico.

Para enviar un mensaje

Cuando publica un mensaje en un tema, Amazon SNS intenta entregar dicho mensaje a todos los números
de teléfono que están suscritos al tema.

1. En Consola de Amazon SNS, en la página Temas, elija el nombre del tema al que desea enviar
mensajes SMS.
2. En la página de detalles del tema, seleccione Publish message (Publicar mensaje).
3. En la página Publicar mensaje en el tema, en Detalles del mensaje, haga lo siguiente:

a. En Asunto, deje el campo en blanco a menos que el tema contenga suscripciones de correo
electrónico y quiera publicar tanto en las suscripciones de correo electrónico como en las de SMS.
Amazon SNS utiliza el asunto que ingresa como línea de asunto del correo electrónico.
b. (Opcional) En Período de vida (TLL), ingrese un número de segundos que Amazon SNS tiene
para enviar su mensaje SMS a los suscriptores de terminales de aplicaciones móviles.
4. En Cuerpo del mensaje, haga lo siguiente:

a. En Estructura del mensaje, elija Carga idéntica para todos los protocolos de entrega para enviar el
mismo mensaje a todos los tipos de protocolo suscritos al tema. O bien, elija Carga personalizada
para cada protocolo de entrega para personalizar el mensaje para suscriptores de diferentes tipos
de protocolo. Por ejemplo, puede escribir un mensaje predeterminado para los suscriptores de
números de teléfono y un mensaje personalizado para los suscriptores de correo electrónico.
b. En Cuerpo del mensaje para enviar al punto de enlace, ingrese su mensaje o sus mensajes
personalizados por protocolo de entrega.

Si su tema tiene un nombre de visualización, Amazon SNS lo agrega al mensaje, lo que aumenta
la longitud del mensaje. La longitud del nombre de visualización es el número de caracteres del
nombre más dos caracteres para el corchete angular de cierre (>) y el espacio que Amazon SNS
agrega.

Para obtener información acerca de las cuotas de tamaño de los mensajes SMS, consulte
Publicación en un teléfono móvil (p. 225).
5. (Opcional) En Atributos de mensajes, agregue metadatos de mensajes como marcas de tiempo, firmas
e ID.
6. Elija Publish message (Publicar mensaje). Amazon SNS envía el mensaje SMS y muestra un mensaje
de confirmación.

223
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

Envío de un mensaje a un tema (SDK de AWS)


Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

En el siguiente ejemplo de código, se muestra cómo:

• Cree un tema de Amazon SNS.


• Suscriba los números de teléfono al tema.
• Publique mensajes SMS en el tema para que todos los números de teléfono suscritos reciban el mensaje
a la vez.

Java

SDK para Java 1.x

Cree un tema y devuelva su ARN.

public static String createSNSTopic(AmazonSNSClient snsClient) {


CreateTopicRequest createTopic = new CreateTopicRequest("mySNSTopic");
CreateTopicResult result = [Link](createTopic);
[Link]("Create topic request: " +
[Link](createTopic));
[Link]("Create topic result: " + result);
return [Link]();
}

Suscriba un punto de enlace a un tema.

public static void subscribeToTopic(AmazonSNSClient snsClient, String topicArn,


String protocol, String endpoint) {
SubscribeRequest subscribe = new SubscribeRequest(topicArn, protocol,
endpoint);
SubscribeResult subscribeResult = [Link](subscribe);
[Link]("Subscribe request: " +
[Link](subscribe));
[Link]("Subscribe result: " + subscribeResult);
}

Establezca atributos en el mensaje, como el ID del remitente, el precio máximo y su tipo. Los
atributos de mensaje son opcionales.

public static void addMessageAttributes(Map<String, MessageAttributeValue>


smsAttributes) {
[Link]("[Link]", new MessageAttributeValue()
.withStringValue("mySenderID") //The sender ID shown on the device.
.withDataType("String"));
[Link]("[Link]", new MessageAttributeValue()
.withStringValue("0.50") //Sets the max price to 0.50 USD.
.withDataType("Number"));
[Link]("[Link]", new MessageAttributeValue()
.withStringValue("Promotional") //Sets the type to promotional.
.withDataType("String"));
}

Publique un mensaje en un tema. El mensaje se envía a cada suscriptor.

224
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

public static void sendSMSMessageToTopic(AmazonSNSClient snsClient, String


topicArn,
String message, Map<String, MessageAttributeValue> smsAttributes) {
PublishResult result = [Link](new PublishRequest()
.withTopicArn(topicArn)
.withMessage(message)
.withMessageAttributes(smsAttributes));
[Link](result);
}

Llame a las funciones anteriores para crear un tema, suscribir un número de teléfono, establecer
atributos de mensaje y publicar un mensaje en el tema.

public static void main(String[] args) {


AmazonSNSClient snsClient = new AmazonSNSClient();

String topicArn = createSNSTopic(snsClient);


String phoneNumber = "+1XXX5550100";
// Specify a protocol of "sms" when subscribing a phone number.
subscribeToTopic(snsClient, topicArn, "sms", phoneNumber);

String message = "My SMS message";


Map<String, MessageAttributeValue> smsAttributes =
new HashMap<String, MessageAttributeValue>();
addMessageAttributes(smsAttributes)
sendSMSMessageToTopic(snsClient, topicArn, message, smsAttributes);
}

• Encuentre instrucciones y más código en GitHub.

Publicación en un teléfono móvil


Puede utilizar Amazon SNS para enviar mensajes SMS de forma directa a un teléfono móvil sin suscribir el
número de teléfono a un tema de Amazon SNS.
Note

Suscribir números de teléfono a un tema es útil si quiere enviar un mensaje a varios números de
teléfono a la vez. Para obtener instrucciones sobre cómo publicar un mensaje SMS en un tema,
consulte Publicación de un tema (p. 222).

Cuando se envía un mensaje, se puede controlar si el mensaje se optimiza en función del costo o de la
fiabilidad de la entrega. También puede especificar un ID de remitente o número de origen (p. 190).
Si envía el mensaje mediante programación con la API de Amazon SNS o los SDK de AWS, puede
especificar un precio máximo para la entrega de mensajes.

Cada mensaje SMS puede contener hasta 140 bytes y la cuota de caracteres depende del esquema de
codificación. Por ejemplo, un mensaje SMS puede contener:

• 160 caracteres GSM


• 140 caracteres ASCII
• 70 caracteres UCS-2

Si publica un mensaje que exceda la cuota de tamaño, Amazon SNS lo envía como varios mensajes, cada
uno de los cuales respetará la cuota. Los mensajes no se dividen en mitad de una palabra, sino en el
espacio entre palabras. La cuota de tamaño total de una acción de publicación SMS es 1600 bytes.

225
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

Al enviar un mensaje SMS, especifique el número de teléfono mediante el formato E.164, una estructura
de numeración de teléfono estándar utilizada para las telecomunicaciones internacionales. Los números
de teléfono que siguen este formato pueden tener un máximo de 15 dígitos junto con el prefijo de un signo
más (+) y el código del país. Por ejemplo, un número de teléfono de los EE. UU. en formato E.164 se
muestra como +1XXX5550100.

Temas
• Envío de un mensaje (consola) (p. 226)
• Envío de un mensaje (SDK de AWS) (p. 227)

Envío de un mensaje (consola)


1. Inicie sesión en la consola de Amazon SNS.
2. En el menú de la consola, elija una región que admita la mensajería SMS de AWS (p. 251).
3. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
4. En la página Mensajería de texto móvil (SMS), elija Publicar mensaje de texto.
5. En la página Publicar mensaje SMS, para el tipo de mensaje., elija una de las siguientes opciones:

• Promotional: mensajes que no son de importancia, como mensajes de marketing.


• Transactional: mensajes de importancia que admiten transacciones del cliente, como claves de
acceso de un solo uso para la autenticación multifactor.

Note

Esta opción de nivel de mensaje anula el tipo de mensaje predeterminado de nivel de cuenta.
Puede establecer un tipo de mensaje predeterminado a nivel de cuenta desde la sección
Preferencias de mensajes de texto de la página Mensajería de texto móvil (SMS).

Para obtener información sobre los mensajes promocionales y transaccionales, consulte Precios de
SMS en todo el mundo.
6. En Número de teléfono de destino, ingrese el número de teléfono al que desea enviar el mensaje.
7. En Mensaje, ingrese el mensaje que va a enviar.
8. (Opcional) En Identidades de origen, especifique cómo identificarse ante sus destinatarios:

• Para especificar un ID de remitente, ingrese un ID personalizado que contenga 3 a 11 caracteres


alfanuméricos, incluida al menos una letra y sin espacios. El ID de remitente se muestra como el
remitente del mensaje en el dispositivo receptor. Por ejemplo, puede utilizar la marca de su negocio
para facilitar el reconocimiento del origen del mensaje.

La compatibilidad con los ID de remitente varía según el país o la región. Por ejemplo, los mensajes
que se entregan a números de teléfono de los EE. UU. no mostrarán el ID de remitente. En
el caso de los países y regiones que admiten el ID de remitente, consulte Regiones y países
admitidos (p. 251).

Si no especifica un ID de remitente, se mostrará una de las siguientes características como


identidad de origen:
• En los países que admiten códigos largos, se muestra el código largo.
• En los países en los que solo se admiten los ID de remitente, aparece AVISO.

Este ID de remitente de nivel de mensaje anula el ID de remitente predeterminado, que se establece


en la página Text messaging preferences (Preferencias de la mensajería de texto).
• Para especificar un número de origen, ingrese una cadena de 5 a 14 números que se mostrará
como número de teléfono del remitente en el dispositivo del receptor. Esta cadena debe coincidir

226
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

con un número de origen que esté configurado en su Cuenta de AWS para el país de destino. El
número de origen puede ser un número 10DLC, número gratuito, código largo persona a persona
o códigos cortos. Para obtener más información, consulte Identidades de origen de los mensajes
SMS (p. 190).

Si no especifica un número de origen, Amazon SNS selecciona un número de origen que se utilizará
para el mensaje de texto SMS, en función de la configuración de su Cuenta de AWS.
9. Si envía mensajes SMS a destinatarios en India, expanda Atributos específicos del país y especifique
los atributos siguientes:

• ID de la identidad: ID entidad o ID de entidad principal (PE) para enviar mensajes SMS a


destinatarios en la India. Este ID es una cadena única de 1 a 50 caracteres que la Autoridad
Reguladora de las Telecomunicaciones de la India (TRAI) proporciona para identificar la entidad que
ha registrado en la TRAI.
• ID de plantilla: ID de plantilla para enviar mensajes SMS a destinatarios en la India. Este ID es una
cadena única de 1 a 50 caracteres que proporciona la TRAI para identificar la plantilla que registró
en la TRAI. El ID de plantilla debe estar asociado al ID de remitente que especificó para el mensaje.

Para obtener más información sobre cómo enviar mensajes SMS a destinatarios en la India, consulte
Requisitos especiales para enviar mensajes SMS a destinatarios en la India (p. 264).
10. Elija Publish message (Publicar mensaje).

Tip

Para enviar mensajes SMS desde un número de origen, también puede elegir números de origen
en el panel de navegación de la consola de Amazon SNS. Elija un número de origen que incluya
SMS en la columna Capacidades y, a continuación, elija Publicar mensajes de texto.

Envío de un mensaje (SDK de AWS)


Para enviar un mensaje SMS mediante uno de los SDK de AWS, utilice la operación de la API de dicho
SDK que corresponda a la solicitud Publish de la API de Amazon SNS. Con esta solicitud, puede
enviar un mensaje SMS directamente a un número de teléfono. También puede utilizar el parámetro
MessageAttributes para establecer valores para los siguientes nombres de atributo:

[Link]

Un ID personalizado que contiene entre 3 y 11 caracteres alfanuméricos o guiones (-), entre ellos al
menos una letra, y ningún espacio. El ID de remitente aparece como el remitente del mensaje en el
dispositivo receptor. Por ejemplo, puede utilizar la marca de su negocio para facilitar el reconocimiento
del origen del mensaje.

La compatibilidad con los ID de remitente varía según el país o la región. Por ejemplo, los mensajes
que se entregan a números de teléfono de los EE. UU. no muestra el ID de remitente. Para obtener
una lista de los países y regiones que admiten el ID de remitente, consulte Regiones y países
admitidos (p. 251).

Si no especifica un ID de remitente, aparece un código largo (p. 208) como ID de remitente en los
países o regiones admitidos. Para los países o regiones que requieren un ID de remitente alfabético,
aparece AVISO como ID de remitente.

Este atributo de nivel de mensaje anula el atributo de nivel de cuenta DefaultSenderID, que se
puede establecer mediante la solicitud SetSMSAttributes.
[Link]

Una cadena personalizada de 5 a 14 números, que puede incluir un signo más inicial opcional (+).
Esta cadena de números aparece como el número de teléfono del remitente en el dispositivo receptor.

227
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

La cadena debe coincidir con un número de origen configurado en su cuenta de AWS para el país de
destino. El número de origen puede ser un número 10DLC, número gratuito, código largo persona a
persona (P2) o código corto. Para obtener más información, consulte Números de origen (p. 191).

Si no especifica un número de origen, Amazon SNS elige un número de origen basado en la


configuración de su cuenta de AWS.
[Link]

El precio máximo en USD que estás dispuesto a gastar para enviar el mensaje SMS. Si Amazon SNS
determina que el envío del mensaje supondría un costo superior a su precio máximo, no lo envía.

Este atributo no tiene efecto si los costos de los SMS del mes hasta la fecha ya han superado
la cuota establecida para el atributo MonthlySpendLimit. Puede establecer el atributo
MonthlySpendLimit con la solicitud SetSMSAttributes.

Si envía el mensaje a un tema de Amazon SNS, el precio máximo se aplica a cada entrega de
mensaje a cada número de teléfono que esté suscrito al tema.
[Link]

El tipo de mensaje que envía:


• Promotional (predeterminado): mensajes que no son de importancia, como mensajes de
marketing.
• Transactional: mensajes de importancia que admiten transacciones del cliente, como claves de
acceso de un solo uso para la autenticación multifactor.

Este atributo de nivel de mensaje anula el atributo de nivel de cuenta DefaultSMSType, que se
puede establecer mediante la solicitud SetSMSAttributes.
[Link]

Este atributo solo es necesario para enviar mensajes SMS a destinatarios en la India.

Se trata del ID entidad o ID de entidad principal (PE) para enviar mensajes SMS a destinatarios
en la India. Este ID es una cadena única de 1 a 50 caracteres que la Autoridad Reguladora de las
Telecomunicaciones de la India (TRAI) proporciona para identificar la entidad que ha registrado en la
TRAI.
[Link]

Este atributo solo es necesario para enviar mensajes SMS a destinatarios en la India.

Se trata de la plantilla para enviar mensajes SMS a destinatarios en la India. Este ID es una cadena
única de 1 a 50 caracteres que proporciona la TRAI para identificar la plantilla que registró en la TRAI.
El ID de plantilla debe estar asociado al ID de remitente que especificó para el mensaje.

Envío de un mensaje

En los siguientes ejemplos de código, se muestra cómo publicar mensajes SMS mediante Amazon SNS.

C++

SDK para C++

/**
* Publish SMS: use Amazon SNS to send an SMS text message to a phone number.
* Note: This requires additional AWS configuration prior to running example.
*
* NOTE: When you start using Amazon SNS to send SMS messages, your AWS account is
in the SMS sandbox and you can only

228
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

* use verified destination phone numbers. See [Link]


latest/dg/[Link].
* NOTE: If destination is in the US, you also have an additional restriction that
you have use a dedicated
* origination ID (phone number). You can request an origination number using
Amazon Pinpoint for a fee.
* See [Link]
origination-numbers-with-amazon-sns/
* for more information.
*
* <phone_number_value> input parameter uses E.164 format.
* For example, in United States, this input value should be of the form:
+12223334444
*/
int main(int argc, char ** argv)
{
if (argc != 3)
{
std::cout << "Usage: publish_sms <message_value> <phone_number_value> " <<
std::endl;
return 1;
}

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String message = argv[1];
Aws::String phone_number = argv[2];

Aws::SNS::Model::PublishRequest psms_req;
psms_req.SetMessage(message);
psms_req.SetPhoneNumber(phone_number);

auto psms_out = [Link](psms_req);

if (psms_out.IsSuccess())
{
std::cout << "Message published successfully " <<
psms_out.GetResult().GetMessageId()
<< std::endl;
}
else
{
std::cout << "Error while publishing message " <<
psms_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);
return 0;
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for C++.

Java

SDK para Java 2.x

229
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

public static void pubTextSMS(SnsClient snsClient, String message, String


phoneNumber) {
try {
PublishRequest request = [Link]()
.message(message)
.phoneNumber(phoneNumber)
.build();

PublishResponse result = [Link](request);


[Link]([Link]() + " Message sent. Status was " +
[Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Java 2.x.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun pubTextSMS(messageVal: String?, phoneNumberVal: String?) {

val request = PublishRequest {


message = messageVal
phoneNumber = phoneNumberVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
println("${[Link]} message sent.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish en la Referencia de la API de AWS SDK para
Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

230
Amazon Simple Notification
Service Guía para desarrolladores
Envío de mensajes SMS

/**
* Sends a a text message (SMS message) directly to a phone number using Amazon
SNS.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';


$phone = '+1XXX5550100';

try {
$result = $SnSclient->publish([
'Message' => $message,
'PhoneNumber' => $phone,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def publish_text_message(self, phone_number, message):


"""
Publishes a text message directly to a phone number without need for a
subscription.

:param phone_number: The phone number that receives the message. This must
be
in E.164 format. For example, a United States phone
number might be +12065550101.
:param message: The message to send.
:return: The ID of the message.
"""
try:
response = self.sns_resource.[Link](

231
Amazon Simple Notification
Service Guía para desarrolladores
Monitorización de la actividad de SMS

PhoneNumber=phone_number, Message=message)
message_id = response['MessageId']
[Link]("Published message to %s.", phone_number)
except ClientError:
[Link]("Couldn't publish message to %s.", phone_number)
raise
else:
return message_id

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Python (Boto3).

Monitorización de la actividad de SMS


Mediante el monitoreo de la actividad de SMS, puede realizar un seguimiento de los números de teléfono
de destino, las entregas realizadas correctamente o que han producido un error, los motivos del error, los
costos y otra información. Con Amazon SNS, se pueden consultar las estadísticas en la consola mediante
el envío de información a Amazon CloudWatch y de informes de uso de SMS diarios a un bucket de
Amazon S3 que especifique.

Temas
• Visualización de las estadísticas de entrega de SMS (p. 232)
• Visualización de métricas y registros de Amazon CloudWatch para entregas de SMS (p. 232)
• Visualización de informes de uso de SMS diarios (p. 235)

Visualización de las estadísticas de entrega de SMS


Puede utilizar la consola de Amazon SNS para ver estadísticas de sus entregas de SMS recientes.

1. Inicie sesión en la consola de Amazon SNS.


2. En el menú de la consola, establezca el selector de regiones en una región que admita la mensajería
SMS (p. 251).
3. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
4. En la página Text messaging (SMS) (Mensajería de texto (SMS)), en la sección Account stats
(Estadísticas de la cuenta), vea los gráficos de las entregas de mensajes SMS transaccionales y
promocionales. Cada gráfico muestra los siguientes datos de los últimos 15 días:

• Tasa de entrega (porcentaje de entregas correctas)


• Envíos (número de intentos de entrega)
• Errores (número de entregas erróneas)

En esta página, también puede seleccionar el botón Uso para ir al bucket de Amazon S3 en el que
almacena los informes de uso diarios. Para obtener más información, consulte Visualización de informes
de uso de SMS diarios (p. 235).

Visualización de métricas y registros de Amazon CloudWatch


para entregas de SMS
Puede utilizar Amazon CloudWatch y Amazon CloudWatch Logs para monitorear las entregas de mensajes
SMS.

232
Amazon Simple Notification
Service Guía para desarrolladores
Monitorización de la actividad de SMS

Temas
• Visualización de métricas de Amazon CloudWatch (p. 233)
• Visualización de CloudWatch Logs (p. 233)
• Registro de ejemplo para una entrega de SMS correcta (p. 234)
• Registro de ejemplo para una entrega de SMS errónea (p. 234)
• Motivos de error de entrega de SMS (p. 234)

Visualización de métricas de Amazon CloudWatch


Amazon SNS recopila de manera automática las métricas de las entregas de mensajes SMS y las inserta
en Amazon CloudWatch. Puede utilizar CloudWatch para monitorear estas métricas y crear alarmas para
recibir una alerta cuando una métrica traspase un umbral. Por ejemplo, puede monitorear las métricas de
CloudWatch para informarse de su tasa de entrega de SMS y sus cargos por SMS del mes hasta la fecha.

Para obtener más información sobre el monitoreo de métricas de CloudWatch, la configuración de alarmas
de CloudWatch y los tipos de métricas disponibles, consulte Monitoreo de los temas de Amazon SNS
mediante Amazon CloudWatch (p. 444).

Visualización de CloudWatch Logs


Puede recopilar información sobre las entregas exitosas y no exitosas de mensajes SMS al habilitar a
Amazon SNS para que escriba en Amazon CloudWatch Logs. Por cada mensaje SMS que envíe, Amazon
SNS escribirá un registro en el que se incluya el precio del mensaje, su estado (correcto o error), el motivo
del error (si el mensaje generó un error), el tiempo de permanencia del mensaje y otra información.

Si quiere habilitar y ver los CloudWatch Logs para sus mensajes SMS, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el menú de la consola, establezca el selector de regiones en una región que admita la mensajería
SMS (p. 251).
3. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
4. En la página Mensajería de texto a través del móvil (SMS), en la sección Preferencias de mensajería
de texto, elija Editar.
5. En la siguiente página, expanda la sección Registro de estado de entrega.
6. En Tasa de muestreo correcto, especifique el porcentaje de entregas de SMS correctas para las que
Amazon SNS escribirá registros en CloudWatch Logs. Por ejemplo:

• Por ejemplo, para escribir registros únicamente para las entregas erróneas, establezca este valor en
0.
• Para escribir logs para el 10% de las entregas de correctas, establézcalo en 10.

Si no especifica ningún porcentaje, Amazon SNS escribirá registros para todas las entregas correctas.
7. Para proporcionar los permisos obligatorios, realice una de las siguientes acciones:

• Para crear un nuevo rol de servicio, elija Crear nueva función de servicio y, a continuación, Crear
nuevos roles. En la página siguiente, elija Permitir para dar acceso de escritura a Amazon SNS a los
recursos de su cuenta.
• Para utilizar una función de servicio existente, haga clic en Usar función de servicio existente y, a
continuación, pegue el nombre de ARN en el cuadro Rol de IAM para entregas exitosas y fallidas.

Mediante la función de servicio que especifique, se debe permitir el acceso de escritura a los
recursos de su cuenta. Para obtener más información sobre la creación de roles de IAM, consulte
Creación de un rol para un servicio de AWS (consola) en la Guía del usuario de IAM.

233
Amazon Simple Notification
Service Guía para desarrolladores
Monitorización de la actividad de SMS

8. Elija Save changes.


9. De vuelta en la página Mensajería de texto móvil (SMS)), vaya a la sección Registros de estado de
entrega para ver los registros disponibles.
Note

Según el operador del número de teléfono de destino, los registros de entrega pueden tardar
hasta 72 horas en aparecer en la consola de Amazon SNS.

Registro de ejemplo para una entrega de SMS correcta


El log de estado de una entrega de SMS correcta será similar al ejemplo siguiente:

{
"notification": {
"messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf",
"timestamp": "2016-06-28 [Link].558"
},
"delivery": {
"phoneCarrier": "My Phone Carrier",
"mnc": 270,
"numberOfMessageParts": 1,
"destination": "+1XXX5550100",
"priceInUSD": 0.00645,
"smsType": "Transactional",
"mcc": 310,
"providerResponse": "Message has been accepted by phone carrier",
"dwellTimeMs": 599,
"dwellTimeMsUntilDeviceAck": 1344
},
"status": "SUCCESS"
}

Registro de ejemplo para una entrega de SMS errónea


El log de estado de una entrega de SMS errónea será similar al ejemplo siguiente:

{
"notification": {
"messageId": "1077257a-92f3-5ca3-bc97-6a915b310625",
"timestamp": "2016-06-28 [Link].559"
},
"delivery": {
"mnc": 0,
"numberOfMessageParts": 1,
"destination": "+1XXX5550100",
"priceInUSD": 0.00645,
"smsType": "Transactional",
"mcc": 0,
"providerResponse": "Unknown error attempting to reach phone",
"dwellTimeMs": 1420,
"dwellTimeMsUntilDeviceAck": 1692
},
"status": "FAILURE"
}

Motivos de error de entrega de SMS


El motivo de un error se proporciona con el atributo providerResponse. Es posible que los mensajes
SMS no se puedan entregar por los motivos siguientes:

234
Amazon Simple Notification
Service Guía para desarrolladores
Monitorización de la actividad de SMS

• El operador de telefonía lo bloquea por considerarlo spam.


• El destino está en una lista bloqueada
• Número de teléfono no válido.
• Cuerpo de mensaje no válido.
• El operador de telefonía ha bloqueado este mensaje.
• El operador de telefonía no está disponible o no es posible ponerse en contacto con él.
• El teléfono ha bloqueado los SMS.
• El teléfono está en una lista bloqueada
• El teléfono no está disponible o no es posible ponerse en contacto con él.
• Se ha cancelado la suscripción del número de teléfono.
• Esta entrega superaría el precio máximo.
• Error desconocido al intentar ponerse en contacto con el teléfono

Visualización de informes de uso de SMS diarios


Puede monitorear sus entregas de SMS si se suscribe a los informes de uso diarios desde Amazon SNS.
Todos los días que envía, como mínimo, un SMS, Amazon SNS entrega un informe de uso en formato
CSV al bucket de Amazon S3 especificado. El informe de uso del SMS tarda 24 horas en estar disponible
en el bucket de S3.

Temas
• Información del informe de uso diario (p. 235)
• Suscripción a informes de uso diario (p. 235)

Información del informe de uso diario


El informe de uso contiene la siguiente información de cada mensaje SMS que envíe desde su cuenta.

Tenga en cuenta que el informe no incluye los mensajes que se envían a los destinatarios que han
desactivado la recepción de mensajes.

• Hora de publicación del mensaje (en UTC)


• ID de mensaje
• Número de teléfono de destino.
• Tipo de mensaje.
• Estado de entrega.
• Precio del mensaje (en USD).
• Número de parte (un mensaje se divide en varias partes si es demasiado largo para un único mensaje).
• Número total de partes.

Note

Si Amazon SNS no recibió el número de parte, establecemos su valor en cero.

Suscripción a informes de uso diario


Para suscribirse a informes de uso diario, debe crear un bucket de Amazon S3 con los permisos
pertinentes.

235
Amazon Simple Notification
Service Guía para desarrolladores
Monitorización de la actividad de SMS

Si quiere crear un bucket de Amazon S3 para sus informes de uso diario, siga estos pasos:

1. Desde la Cuenta de AWS que envía mensajes SMS, inicie sesión en la consola de Amazon S3.
2. Seleccione la opción Create Bucket (Crear bucket).
3. En Bucket Name (Nombre del bucket), le recomendamos que escriba un nombre único para su cuenta
y su organización. Por ejemplo, use el patrón <my-bucket-prefix>-<account_id>-<org-id>.

Para obtener información sobre las convenciones y restricciones de los nombres de bucket, consulte
Reglas para la nomenclatura de bucket en la Guía del usuario de Amazon Simple Storage Service.
4. Seleccione Create (Crear).
5. En la tabla Todos los buckets, elija el bucket.
6. En la pestaña Permisos, elija Política de bucket.
7. En la ventana Editor de políticas de bucket, indique una política que permita al principal del servicio
de Amazon SNS escribir en el bucket. Para ver un ejemplo, consulte Ejemplo de política de
bucket (p. 236).

Si utiliza la política de ejemplo, recuerde reemplazar my-s3-bucket por el nombre del bucket que
eligiera en el paso 3.
8. Seleccione Save.

Para suscribirse a los informes de uso diario

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
3. En la página Mensajería de texto (SMS), en la sección Preferencias de mensajería de texto, elija
Editar.

4. En la página Edit text messaging preferences (Editar preferencias de mensajería de texto), en la


sección Details (Detalles), especifique el Amazon S3 bucket name for usage reports (Nombre del
bucket de Amazon S3 para los informes de uso).

5. Elija Save changes.

Ejemplo de política de bucket

Con la siguiente política, la entidad principal del servicio de Amazon SNS puede ejecutar las acciones
s3:PutObject, s3:GetBucketLocation y s3:ListBucket.

AWS proporciona herramientas para todos los servicios con entidades principales de servicio a las que
se les ha concedido acceso a los recursos de su cuenta. Cuando la entidad principal de una declaración
de política de bucket de Amazon S3 es una entidad principal de servicio de AWS, puede utilizar las
claves de condición global aws:SourceArn o aws:SourceAccount para protegerse contra el problema

236
Amazon Simple Notification
Service Guía para desarrolladores
Monitorización de la actividad de SMS

del suplente confuso. Para limitar la región y la cuenta desde las que el bucket puede recibir informes
de uso diarios, utilice aws:SourceArn tal como se muestra en el siguiente ejemplo. Si no desea
limitar las regiones que pueden generar estos informes, utilice aws:SourceAccount para establecer
límites en función de qué cuenta esté generando los informes. Si no conoce el ARN del recurso, utilice
aws:SourceAccount.

Utilice el siguiente ejemplo que incluye protección contra suplente confuso cuando cree un bucket de
Amazon S3 para recibir informes de uso diario de SMS desde Amazon SNS.

{
"Version": "2008-10-17",
"Statement": [{
"Sid": "AllowPutObject",
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s[Link]my-s3-bucket/*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account_id"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:sns:region:account_id:*"
}
}
},
{
"Sid": "AllowGetBucketLocation",
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s[Link]my-s3-bucket",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account_id"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:sns:region:account_id:*"
}
}
},
{
"Sid": "AllowListBucket",
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s[Link]my-s3-bucket",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account_id"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:sns:region:account_id:*"
}
}
}
]
}

237
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

Note

Puede publicar informes de uso en buckets de Amazon S3 que sean propiedad de la Cuenta de
AWS que se especifica en el elemento Condition en la política de Amazon S3. Para publicar
informes de uso en un bucket de Amazon S3 propiedad de otra Cuenta de AWS, consulte ¿Cómo
puedo copiar objetos S3 de otra Cuenta de AWS?.

Ejemplo de informe de uso diario


Después de suscribirse a informes de uso diario, cada día Amazon SNS pone un archivo CSV con datos
de uso en la siguiente ubicación:

<my-s3-bucket>/SMSUsageReports/<region>/YYYY/MM/DD/[Link]

Cada archivo puede contener hasta 50 000 registros. Si los registros de un día superan esta cuota,
Amazon SNS agregará varios archivos.

A continuación se muestra un informe de ejemplo:

PublishTimeUTC,MessageId,DestinationPhoneNumber,MessageType,DeliveryStatus,PriceInUSD,PartNumber,TotalP
2016-05-10T[Link].476Z,96a298ac-1458-4825-
a7eb-7330e0720b72,1XXX5550100,Promotional,Message has been accepted by phone
carrier,0.90084,0,1
2016-05-10T[Link].561Z,1e29d394-
d7f4-4dc9-996e-26412032c344,1XXX5550100,Promotional,Message has been accepted by phone
carrier,0.34322,0,1
2016-05-10T[Link].769Z,98ba941c-afc7-4c51-
ba2c-56c6570a6c08,1XXX5550100,Transactional,Message has been accepted by phone
carrier,0.27815,0,1

Administración de números de teléfono y


suscripciones a SMS
Con Amazon SNS, se ofrecen varias opciones para administrar quién recibe mensajes SMS desde su
cuenta. Con una frecuencia limitada, puede reactivar números de teléfono en los que se ha desactivado
la recepción de mensajes SMS desde su cuenta. Para dejar de enviar mensajes a suscripciones a SMS,
puede eliminar las suscripciones o los temas que se publican en ellos.

Temas
• Desactivación de la recepción de mensajes SMS (p. 238)
• Administración de números de teléfono y suscripciones (consola) (p. 239)
• Administración de números de teléfono y suscripciones (SDK de AWS) (p. 240)

Desactivación de la recepción de mensajes SMS


Cuando la legislación y la normativa locales vigentes así lo exijan (como, por ejemplo, en los EE. UU.
y Canadá), los destinatarios de SMS podrán utilizar sus dispositivos para desactivar su suscripción
respondiendo al mensaje con cualquiera de las palabras siguientes:

• ARRET (francés)
• CANCEL
• END
• OPT-OUT
• OPTOUT

238
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

• QUIT
• REMOVE
• STOP
• TD
• UNSUBSCRIBE

Para desactivar la suscripción, el destinatario debe responder al mismo número de origen (p. 191) que
Amazon SNS utilizó para entregar el mensaje. Una vez desactivada la suscripción, el destinatario ya no
recibirá mensajes SMS desde su Cuenta de AWS, a menos que reactive el número de teléfono.

Si el número de teléfono está suscrito a un tema de Amazon SNS, la desactivación de la suscripción no la


eliminará, pero los mensajes SMS no se entregarán a dicha suscripción a menos que reactive el número
de teléfono.

Administración de números de teléfono y suscripciones (consola)


Puede utilizar la consola de Amazon SNS para controlar qué números de teléfono recibirán mensajes SMS
desde su cuenta.

Reactivación de un número de teléfono que se ha desactivado


Puede visualizar qué números de teléfono han desactivado la recepción de mensajes SMS desde su
cuenta y puede reactivarlos para reanudar el envío de mensajes.

Puede reactivar un número de teléfono solo una vez cada 30 días.

1. Inicie sesión en la consola de Amazon SNS.


2. En el menú de la consola, establezca el selector de regiones en una región que admita la mensajería
SMS (p. 251).
3. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
4. En la página Text messaging (SMS) (Mensajería de texto (SMS)), elija View opted out phone numbers
(Ver los números de teléfono que han cancelado la suscripción). La página Opted out phone numbers
(Números de teléfono que han cancelado la suscripción) mostrará los números de teléfono que
cumplen esta condición.
5. Seleccione la casilla del número de teléfono que desea volver a dar de alta y, a continuación, elija Opt
in (Dar de alta). El número de teléfono ya no estará desactivado y recibirá los mensajes SMS que le
envíe.

Eliminación de una suscripción a SMS


Elimine una suscripción a SMS para detener el envío de mensajes SMS a ese número de teléfono cuando
publique en sus temas.

1. En el panel de navegación, seleccione Subscriptions (Suscripciones).


2. Seleccione las casillas de verificación correspondientes a las suscripciones que desee eliminar. A
continuación, elija Actions (Acciones) y después Delete Subscriptions (Eliminar suscripciones).
3. En la ventana Delete (Eliminar), elija Delete (Eliminar). Amazon SNS elimina la suscripción y muestra
un mensaje de confirmación.

Eliminación de un tema
Elimine un tema cuando ya no quiera publicar mensajes en sus puntos de enlace suscritos.

1. En el panel de navegación, elija Topics (Temas).

239
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

2. Seleccione las casillas de verificación correspondientes a los temas que desee eliminar. A
continuación, elija Actions (Acciones) y después Delete Topics (Eliminar temas).
3. En la ventana Delete (Eliminar), elija Delete (Eliminar). Amazon SNS elimina el tema y muestra un
mensaje de confirmación.

Administración de números de teléfono y suscripciones (SDK de


AWS)
Puede utilizar los SDK de AWS para realizar solicitudes por programa a Amazon SNS y determinar qué
números de teléfono pueden recibir mensajes SMS desde su cuenta.

Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

Visualización de todos los números de teléfono desactivados


Para ver todos los números de teléfono desactivados, envíe una solicitud ListPhoneNumbersOptedOut
a través de la API de Amazon SNS.

En los siguientes ejemplos de código, se muestra cómo publicar números de teléfono que han optado por
no recibir mensajes de Amazon SNS.

Java

SDK para Java 2.x

public static void listOpts( SnsClient snsClient) {

try {

ListPhoneNumbersOptedOutRequest request =
[Link]().build();
ListPhoneNumbersOptedOutResponse result =
[Link](request);
[Link]("Status is " + [Link]().statusCode()
+ "\n\nPhone Numbers: \n\n" + [Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListPhoneNumbersOptedOut en la Referencia de la API
de AWS SDK for Java 2.x.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

240
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

/**
* Returns a list of phone numbers that are opted out of receiving SMS messages
from your AWS SNS account.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

try {
$result = $SnSclient->listPhoneNumbersOptedOut([
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte ListPhoneNumbersOptedOut en la Referencia de la API
de AWS SDK for PHP.

Comprobación de la desactivación de un número de teléfono


Para verificar si un número de teléfono está desactivado, envíe una solicitud
CheckIfPhoneNumberIsOptedOut con la API de Amazon SNS.

En los siguientes ejemplos de código, se muestra cómo verificar si un número de teléfono ha optado por no
recibir mensajes de Amazon SNS.

.NET

AWS SDK for .NET

/// <summary>
/// Checks to see if the supplied phone number has been opted out.
/// </summary>
/// <param name="client">The initialized Amazon SNS Client object used
/// to check if the phone number has been opted out.</param>
/// <param name="phoneNumber">A string representing the phone number
/// to check.</param>
public static async Task
CheckIfOptedOutAsync(IAmazonSimpleNotificationService client, string phoneNumber)
{
var request = new CheckIfPhoneNumberIsOptedOutRequest
{
PhoneNumber = phoneNumber,
};

try
{

241
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

var response = await


[Link](request);

if ([Link] == [Link])
{
string optOutStatus = [Link] ? "opted out" : "not
opted out.";
[Link]($"The phone number: {phoneNumber} is
{optOutStatus}");
}
}
catch (AuthorizationErrorException ex)
{
[Link]($"{[Link]}");
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for .NET.

Java

SDK para Java 2.x

public static void checkPhone(SnsClient snsClient, String phoneNumber) {

try {
CheckIfPhoneNumberIsOptedOutRequest request =
[Link]()
.phoneNumber(phoneNumber)
.build();

CheckIfPhoneNumberIsOptedOutResponse result =
[Link](request);

[Link]([Link]() + "Phone Number " + phoneNumber


+ " has Opted Out of receiving sns messages." +
"\n\nStatus was " + [Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";

242
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

// Set the AWS Region.


const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { phoneNumber: "353861230764" }; //PHONE_NUMBER, in the E.164 phone
number structure

const run = async () => {


try {
const data = await [Link](
new CheckIfPhoneNumberIsOptedOutCommand(params)
);
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for JavaScript.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Indicates whether the phone number owner has opted out of receiving SMS messages
from your AWS SNS account.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

243
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

$phone = '+1XXX5550100';

try {
$result = $SnSclient->checkIfPhoneNumberIsOptedOut([
'phoneNumber' => $phone,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for PHP.

Reactivación de un número de teléfono que se ha desactivado


Para reactivar un número de teléfono, envíe una solicitud OptInPhoneNumber con la API de Amazon
SNS.

Puede reactivar un número de teléfono solo una vez cada 30 días.

Eliminación de una suscripción a SMS


Para eliminar una suscripción a SMS desde un tema de Amazon SNS, obtenga el ARN de la suscripción al
presentar una solicitud ListSubscriptions con la API de Amazon SNS. A continuación, pase el ARN a
una solicitud Unsubscribe.

En los siguientes ejemplos de código, se muestra cómo eliminar una suscripción de Amazon SNS.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String subscription_arn = argv[1];

Aws::SNS::Model::UnsubscribeRequest s_req;
s_req.SetSubscriptionArn(subscription_arn);

auto s_out = [Link](s_req);

if (s_out.IsSuccess())
{
std::cout << "Unsubscribed successfully " << std::endl;
}
else
{
std::cout << "Error while unsubscribing " << s_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);

244
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for C++.

Java

SDK para Java 2.x

public static void unSub(SnsClient snsClient, String subscriptionArn) {

try {
UnsubscribeRequest request = [Link]()
.subscriptionArn(subscriptionArn)
.build();

UnsubscribeResponse result = [Link](request);

[Link]("\n\nStatus was " +


[Link]().statusCode()
+ "\n\nSubscription was removed for " + [Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {UnsubscribeCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { SubscriptionArn: "TOPIC_SUBSCRIPTION_ARN" }; //
TOPIC_SUBSCRIPTION_ARN

const run = async () => {

245
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

try {
const data = await [Link](new UnsubscribeCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun unSub(subscriptionArnVal: String) {

val request = UnsubscribeRequest {


subscriptionArn = subscriptionArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("Subscription was removed for ${[Link]}")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Deletes a subscription to an Amazon SNS topic.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html

246
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
$result = $SnSclient->unsubscribe([
'SubscriptionArn' => $subscription,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def delete_subscription(subscription):
"""
Unsubscribes and deletes a subscription.
"""
try:
[Link]()
[Link]("Deleted subscription %s.", [Link])
except ClientError:
[Link]("Couldn't delete subscription %s.", [Link])
raise

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
API de AWS SDK for Python (Boto3).

Eliminación de un tema
Para eliminar un tema y todas sus suscripciones, obtenga el ARN del tema al presentar una solicitud
ListTopics con la API de Amazon SNS y, a continuación, pase el ARN a la solicitud DeleteTopic.

247
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

En los siguientes ejemplos de código, se muestra cómo eliminar un tema de Amazon SNS y todas las
suscripciones a ese tema.

.NET

AWS SDK for .NET

/// <summary>
/// This example deletes an existing Amazon Simple Notification Service
/// (Amazon SNS) topic. The example was created using the AWS SDK for .NET
/// version 3.7 and .NET Core 5.0.
/// </summary>
public class DeleteSNSTopic
{
public static async Task Main()
{
string topicArn = "arn:aws:sns:us-east-2:704825161248:ExampleSNSTopic";
IAmazonSimpleNotificationService client = new
AmazonSimpleNotificationServiceClient();

var response = await [Link](topicArn);


}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::String topic_arn = argv[1];
Aws::SNS::SNSClient sns;

Aws::SNS::Model::DeleteTopicRequest dt_req;
dt_req.SetTopicArn(topic_arn);

auto dt_out = [Link](dt_req);

if (dt_out.IsSuccess())
{
std::cout << "Successfully deleted topic " << topic_arn << std::endl;
}
else
{
std::cout << "Error deleting topic " << topic_arn << ":" <<
dt_out.GetError().GetMessage() << std::endl;
}
}

Aws::ShutdownAPI(options);

248
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for C++.

Java

SDK para Java 2.x

public static void deleteSNSTopic(SnsClient snsClient, String topicArn ) {

try {
DeleteTopicRequest request = [Link]()
.topicArn(topicArn)
.build();

DeleteTopicResponse result = [Link](request);


[Link]("\n\nStatus was " +
[Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Load the AWS SDK for [Link]

// Import required AWS SDK clients and commands for [Link]


import {DeleteTopicCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { TopicArn: "TOPIC_ARN" }; //TOPIC_ARN

const run = async () => {


try {
const data = await [Link](new DeleteTopicCommand(params));
[Link]("Success.", data);

249
Amazon Simple Notification
Service Guía para desarrolladores
Administración de suscripciones de SMS

return data; // For unit tests.


} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for JavaScript.

Kotlin

SDK para Kotlin


Note
Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun deleteSNSTopic(topicArnVal: String) {

val request = DeleteTopicRequest {


topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("$topicArnVal was successfully deleted.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Deletes a SNS topic and all its subscriptions.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',

250
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

'region' => 'us-east-1',


'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->deleteTopic([
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def delete_topic(topic):
"""
Deletes a topic. All subscriptions to the topic are also deleted.
"""
try:
[Link]()
[Link]("Deleted topic %s.", [Link])
except ClientError:
[Link]("Couldn't delete topic %s.", [Link])
raise

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for Python (Boto3).

Regiones y países admitidos


En este momento, Amazon SNS admite la mensajería SMS en las regiones de AWS siguientes:

Nombre de la región Región Punto de enlace Protocolo

US East (Ohio) us-east-2 [Link]- HTTP y HTTPS


[Link]

251
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

Nombre de la región Región Punto de enlace Protocolo

Este de EE. UU. (Norte us-east-1 [Link]- HTTP y HTTPS


de Virginia) [Link]

Oeste de EE. UU. us-west-1 [Link]- HTTP y HTTPS


(Norte de California) [Link]

Oeste de EE. UU. us-west-2 [Link]- HTTP y HTTPS


(Oregón) [Link]

Asia Pacífico (Mumbai) ap-south-1 [Link]- HTTP y HTTPS


[Link]

Asia Pacífico (Singapur) ap-southeast-1 [Link]- HTTP y HTTPS


[Link]

Asia Pacífico (Sídney) ap-southeast-2 [Link]- HTTP y HTTPS


[Link]

Asia Pacífico (Tokio) ap-northeast-1 [Link]- HTTP y HTTPS


[Link]

Canada (Central) ca-central-1 [Link]- HTTP y HTTPS


[Link]

Europe (Frankfurt) eu-central-1 [Link]- HTTP y HTTPS


[Link]

Europe (Ireland) eu-west-1 [Link]- HTTP y HTTPS


[Link]

Europe (London) eu-west-2 [Link]- HTTP y HTTPS


[Link]

Europa (París) eu-west-3 [Link]- HTTP y HTTPS


[Link]

Europe (Stockholm) eu-north-1 [Link]- HTTP y HTTPS


[Link]

Medio Oriente (Baréin) me-south-1 [Link]- HTTP y HTTPS


[Link]

South America (São sa-east-1 [Link]- HTTP y HTTPS


Paulo) [Link]

AWS GovCloud (Oeste us-gov-oeste-1 [Link]-gov- HTTP y HTTPS


de EE. UU.) [Link]

Puede utilizar Amazon SNS para enviar mensajes SMS a los países y regiones siguientes:

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Afganistán AF    

Albania AL Sí  

252
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Argelia DZ    

Andorra AD Sí  

Angola AO Sí  

Anguila AI Sí  

Antigua y Barbuda AG Sí  

Argentina AR    

Armenia AM Sí  

Aruba AW Sí  

Australia AU Sí Sí

Austria AT Sí Sí

Azerbaiyán AZ    

Bahamas BS Sí  

Bahréin BH Sí Sí

Bangladesh BD    

Barbados BB Sí  

Belarús BY Sí
1 (p. 260)  

Bélgica BE   Sí

Belice BZ Sí  

Benín BJ Sí  

Bermudas BM Sí  

Bután BT Sí  

Bolivia BO Sí  

Bosnia y Herzegovina BA Sí  

Botsuana BW Sí  

Brasil BR   Sí

Brunéi BN Sí  

Bulgaria BG Sí  

Burkina Faso BF Sí  

Burundi BI Sí  

Camboya KH Sí  

253
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Camerún CM Sí  

Canadá CA   Sí

Cabo Verde CV Sí  

Islas Caimán KY    

República CF Sí  
Centroafricana

Chad TD Sí  

Chile CL   Sí

China
2 (p. 260) CN   Para obtener asistencia,
comuníquese con
ventas.

Colombia CO    

Comoras KM Sí  

Islas Cook CK Sí  

Costa Rica CR    

Croacia HR   Sí

Chipre CY Sí  

Chequia CZ   Sí

República Democrática CD    
del Congo

Dinamarca DK Sí Sí

Yibuti DJ Sí  

Dominica DM Sí  

República Dominicana DO    

Ecuador EC    

Egipto EG Sí
1 (p. 260)  

El Salvador SV    

Guinea Ecuatorial GQ Sí  

Estonia EE Sí Sí

Etiopía ET    

Islas Faroe FO Sí  

254
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Fiyi FJ Sí  

Finlandia FI Sí Sí

Francia FR Sí Sí

Guayana Francesa GF    

Gabón GA Sí  

Gambia GM Sí  

Georgia GE Sí  

Alemania DE Sí Sí

Ghana GH    

Gibraltar GI Sí  

Grecia GR Sí  

Groenlandia GL Sí  

Granada GD Sí  

Guadalupe GP Sí  

Guam GU    

Guatemala GT   Sí

Guinea GN Sí  

Guinea-Bissau GW Sí  

Guyana GY Sí  

Haití HT Sí  

Honduras HN   Sí

Hong Kong HK Sí Sí

Hungría HU   Sí

Islandia IS Sí  

India IN Sí
3 (p. 260) Sí

Indonesia ID Sí  

Irak IQ    

Irlanda IE Sí Sí

Israel IL Sí Sí

Italia IT Sí Sí

255
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Costa de Marfil CI    

Jamaica JM Sí  

Japón JP   Sí

Jordania JO Sí
1 (p. 260)  

Kazajistán KZ    

Kenia KE    

Kiribati KI    

Kuwait KW Sí
1 (p. 260)  

Kirguistán KG    

Laos LA    

Letonia LV Sí Sí

Líbano LB Sí  

Lesoto LS Sí  

Liberia LR Sí  

Libia LY Sí  

Liechtenstein LI Sí  

Lituania LT Sí Sí

Luxemburgo LU Sí  

Macao MO Sí  

Madagascar MG Sí  

Malawi MW Sí  

Malasia MY   Sí

Maldivas MV Sí  

Malí ML    

Malta MT Sí  

Martinica MQ Sí  

Mauritania MR Sí  

Mauricio MU Sí  

México MX   Sí

256
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Moldavia MD Sí  

Mónaco MC    

Mongolia MN Sí  

Montenegro ME Sí  

Montserrat MS Sí  

Marruecos MA    

Mozambique MZ    

Myanmar MM    

Namibia NA    

Nepal NP    

Países Bajos NL Sí Sí

Antillas holandesas AN Sí  

Nueva Caledonia NC Sí  

Nueva Zelanda NZ   Sí

Nicaragua NI    

Níger NE Sí  

Nigeria NG Sí  

Macedonia del Norte MK Sí  

Noruega NO Sí Sí

Omán OM Sí  

Pakistán PK    

Palaos PW    

Territorios Palestinos PS    

Panamá PA    

Papúa Nueva Guinea PG Sí  

Paraguay PY Sí  

Perú PE    

Filipinas PH Sí
1 (p. 260) Sí

Polonia PL Sí Sí

Portugal PT Sí Sí

257
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Puerto Rico PR   Sí

Qatar QA Sí
1 (p. 260)  

República del Congo CG    

Isla de Reunión RE Sí  

Rumanía RO   Sí

Rusia RU Sí
1 (p. 260) Sí

Ruanda RW Sí  

San Cristóbal y Nieves KN    

Santa Lucía LC    

San Vicente y las VC    


Granadinas

Samoa WS Sí  

Santo Tomé y Príncipe ST Sí  

Arabia Saudí SA Sí
1 (p. 260)  

Senegal SN Sí  

Serbia RS Sí  

Seychelles SC Sí  

Sierra Leona SL Sí  

Singapur SG Sí Sí

Eslovaquia SK Sí Sí

Eslovenia SI Sí Sí

Islas Salomón SB Sí  

Somalia SO Sí  

Sudáfrica ZA   Sí

Corea del Sur KR    

Sudán del Sur SS Sí  

España ES Sí Sí

Sri Lanka LK Sí
1 (p. 260)  

Surinam SR Sí  

Suazilandia SZ Sí  

258
Amazon Simple Notification
Service Guía para desarrolladores
Regiones y países admitidos

País o región Código de ISO Admite los ID de Admite SMS


remitente bidireccionales (solo
Amazon Pinpoint)

Suecia SE Sí Sí

Suiza CH Sí Sí

Taiwán TW   Sí

Tayikistán TJ Sí  

Tanzania TZ    

Tailandia TH Sí
1 (p. 260) Sí

Timor Oriental TL    

Togo TG Sí  

Tonga TO Sí  

Trinidad y Tobago TT Sí  

Túnez TN Sí  

Turquía TR Sí
1 (p. 260) No

Turkmenistán TM Sí  

Islas Turcas y Caicos TC Sí  

Uganda UG Sí  

Ucrania UA Sí Sí

Emiratos Árabes Unidos AE Sí


1 (p. 260)  

Reino Unido GB Sí Sí

Estados Unidos US   Sí

Uruguay UY    

Uzbekistán UZ Sí  

Vanuatu VU Sí  

Venezuela VE    

Vietnam VN Sí
1 (p. 260)  

Islas Vírgenes VG Sí  
Británicas

Islas Vírgenes (EE. UU.) VI Sí  

Yemen YE Sí  

Zambia ZM Sí  

Zimbabue ZW Sí  

259
Amazon Simple Notification
Service Guía para desarrolladores
Prácticas recomendadas de SMS

Notas

1.
Los remitentes deben utilizar un ID de remitente alfabético registrado previamente. Para solicitar un
ID de remitente de AWS Support, presente una solicitud de asistencia. Algunos países exigen que los
remitentes cumplan requisitos específicos o que respeten determinadas restricciones para obtener
la aprobación. En estos casos, es posible que AWS Support se comunique con usted para obtener
información adicional después de que envíe su solicitud de ID de remitente.
2.
Los remitentes deben utilizar una plantilla previamente registrada para cada tipo de mensaje que
piensan enviar. Si un remitente no cumple con este requisito, sus mensajes se bloquearán. Para
registrar una plantilla, envíe una solicitud de asistencia. Algunos países exigen que los remitentes
cumplan otros requisitos específicos o que respeten determinadas restricciones para obtener la
aprobación. En estos casos, AWS Support podría pedirle más información.
3.
Los remitentes deben utilizar un ID de remitente alfabético registrado previamente. Se necesitan otros
pasos de registro. Para obtener más información, consulte Requisitos especiales para enviar mensajes
SMS a destinatarios en la India (p. 264) .

Prácticas recomendadas de SMS


Los usuarios de teléfonos móviles tienden a tener una tolerancia muy baja a los mensajes SMS no
solicitados. Las tasas de respuesta para campañas de SMS no solicitado casi siempre serán bajas y, por
tanto, la rentabilidad de su inversión será mala.

Además, los operadores de teléfono móvil auditan de forma continua a los remitentes de SMS masivos.
Limitan o bloquean los mensajes de números que determinan que están enviando mensajes no solicitados.

El envío de contenido no solicitado también es una infracción de la política de uso aceptable de AWS. El
equipo de Amazon SNS audita con regularidad campañas de SMS y podría limitar o bloquear su capacidad
de enviar mensajes si consta que está enviando mensajes no solicitados.

Por último, en muchos países, regiones y jurisdicciones, existen diversas sanciones por el envío de
mensajes SMS no solicitados. Por ejemplo, en Estados Unidos, la Ley federal de Protección al Usuario
Telefónico (TCPA) establece que los consumidores tienen derecho a una indemnización de entre 500 y
1 500 USD en concepto de daños (pagados por el remitente) por cada mensaje no solicitado que reciban.

Esta sección describe diversas prácticas recomendadas que podrían ayudarle a mejorar la implicación
de los clientes y evitar sanciones costosas. Sin embargo, tenga en cuenta que esta sección no contiene
asesoramiento jurídico. Consulte siempre a un abogado para obtener asesoramiento jurídico.

Temas
• Cumplimiento de leyes y reglamentos (p. 261)
• Obtener permiso (p. 261)
• Auditar sus listas de clientes (p. 262)
• Mantener registros (p. 262)
• Responder correctamente (p. 262)
• Ajustar el envío en función del compromiso (p. 262)
• Enviar en horarios apropiados (p. 263)
• Evitar la fatiga entre canales (p. 263)
• Mantener listas independientes (p. 263)
• Utilizar códigos cortos dedicados (p. 263)

260
Amazon Simple Notification
Service Guía para desarrolladores
Prácticas recomendadas de SMS

Cumplimiento de leyes y reglamentos


Puede enfrentarse a importantes multas y sanciones si infringe las leyes y reglamentos de los lugares en
los que residen sus clientes. Por este motivo, es fundamental que conozca las leyes relacionadas con la
mensajería SMS de cada país o región en los que haga negocios.

La lista siguiente incluye enlaces a las leyes más importantes que se aplican a las comunicaciones SMS en
los principales mercados de todo el mundo.

• Estados Unidos: la Ley Federal de Protección al Usuario Telefónico de 1991, también denominada
TCPA, se aplica a ciertos tipos de mensajes SMS. Para obtener más información, consulte las
normativas y reglamentos en el sitio web de la Comisión Federal de Comunicaciones.
• Reino Unido: las normativas sobre la privacidad y las comunicaciones electrónicas (directiva CE) de
2003, también denominadas PECR, se aplican a ciertos tipos de mensajes SMS. Para obtener más
información, consulte What are PECR? en el sitio web de la oficina del comisionado de información del
Reino Unido.
• Unión Europea: la directiva sobre la privacidad y las comunicaciones electrónicas de 2002, también
denominada directiva ePrivacy, se aplica a algunos tipos de mensajes SMS. Para obtener más
información, consulte el texto completo de la ley en el sitio web [Link].
• Canadá: la ley de lucha contra el spam inalámbrico y de Internet, más comúnmente denominada
Legislación AntiSpam de Canadá o CASL, se aplica a ciertos tipos de mensajes SMS. Para obtener más
información, consulte el texto completo de la ley en el sitio web del parlamento canadiense.
• Japón: el Acta del Reglamento de transmisión de correo electrónico específico puede aplicarse a ciertos
tipos de mensajes SMS. Para obtener más información, consulte el sitio web del ministerio japonés de
asuntos internos y comunicaciones.

Como remitente, estas leyes pueden afectarle incluso si no reside en uno de estos países. Algunas de las
leyes de esta lista se crearon originalmente para abordar el problema de las llamadas telefónicas o del
correo electrónico no solicitados, pero se han interpretado o ampliado también para su aplicación a los
mensajes SMS. Otros países y regiones pueden tener sus propias leyes relacionadas con la transmisión
de mensajes SMS. Consulte a un abogado de cada país o región en la que se encuentren sus clientes
para obtener asesoramiento jurídico.

Obtener permiso
Nunca envíe mensajes a clientes que no hayan solicitado explícitamente recibirlos.

Si los clientes pueden inscribirse para recibir los mensajes mediante un formulario en línea, añada un
CAPTCHA al formulario para evitar que scripts automatizados suscriban a personas sin su consentimiento.

Si recibe una solicitud de alta de SMS, envíe un mensaje al cliente pidiéndole que confirme que desea
recibir mensajes de usted. No envíe a dicho cliente ningún mensaje adicional hasta que confirme su
suscripción. Un mensaje de confirmación de suscripción podría tener un aspecto similar al siguiente:

Text YES to join Example Corp. alerts. 2 msgs/month. Msg & data rates may apply.
Reply HELP for help, STOP to cancel.

Mantenga registros que incluyan la fecha, la hora y el origen de cada solicitud de alta y confirmación. Esto
puede ser útil si un operador o agencia reguladora lo solicita y también puede ayudarle a realizar auditorías
rutinarias de su lista de clientes.

Por último, tenga en cuenta que los mensajes SMS transaccionales, como confirmaciones de pedidos o
contraseñas de un solo uso, normalmente no precisan de consentimiento explícito siempre que informe a
sus clientes que va a enviarles dichos mensajes. Sin embargo, no debe enviar mensajes de marketing a
los clientes que solo le hayan dado permiso para enviarles mensajes transaccionales.

261
Amazon Simple Notification
Service Guía para desarrolladores
Prácticas recomendadas de SMS

Auditar sus listas de clientes


Si envía campañas de SMS recurrentes, audite periódicamente sus listas de clientes. La auditoría de su
lista de clientes garantiza que los únicos clientes que reciben sus mensajes son aquellos interesados en
recibirlos.

Al auditar su lista, envíe a cada cliente que ha solicitado el alta un mensaje que les recuerde que ya están
suscritos y facilíteles información sobre cómo anular la suscripción. Un mensaje de recordatorio podría
tener un aspecto similar al siguiente:

You're subscribed to Example Corp. alerts. Msg & data rates may apply.
Reply HELP for help, STOP to unsubscribe.

Mantener registros
Mantenga registros que muestren cuándo ha solicitado cada cliente que usted le envíe mensajes SMS
y qué mensajes envía a cada cliente. Muchos países y regiones de todo el mundo requieren que los
remitentes de SMS mantengan estos registros de forma que se puedan recuperar fácilmente. Los
operadores de telefonía móvil también podrían pedirle esta información en cualquier momento. La
información exacta que debe proporcionar varía según el país o la región. Para obtener más información
sobre los requisitos de conservación de registros, lea la normativa sobre mensajería SMS de cada país o
región en que se encuentren sus clientes.

En algunas ocasiones, un operador o una agencia reguladora nos solicita que proporcionemos una prueba
de que un cliente aceptó recibir mensajes de usted. En estos casos, AWS Support se pone en contacto
con usted con una lista de la información solicitada por el operador o la agencia. Si no puede proporcionar
la información necesaria, podemos suspender su capacidad de enviar mensajes SMS adicionales.

Responder correctamente
Cuando un destinatario responde a sus mensajes, asegúrese de responder con información útil. Por
ejemplo, cuando un cliente responde a uno de sus mensajes con la palabra clave "AYUDA", envíeles
información sobre el programa al que está suscrito, el número de mensajes que va a enviar cada mes y
las formas en que puede ponerse en contacto con usted para obtener más información. Una respuesta de
AYUDA podría tener un aspecto similar al siguiente:

HELP: Example Corp. alerts: email help@[Link] or call XXX-555-0199. 2 msgs/month.


Msg & data rates may apply. Reply STOP to cancel.

Cuando un cliente respuestas con la palabra clave "STOP", hágale saber que ya no recibirá más
mensajes. Una respuesta STOP podría tener un aspecto similar al siguiente:

STOP: You're unsubscribed from Example Corp. alerts. No more messages will be sent.
Reply HELP, email help@[Link], or call XXX-555-0199 for more info.

Ajustar el envío en función del compromiso


Las prioridades de los clientes pueden cambiar a lo largo del tiempo. Si los clientes dejan de encontrar
útiles sus mensajes, podrían darse de baja de sus mensajes o incluso notificar los mensajes como no
solicitados. Por estas razones, es importante que ajuste sus prácticas de envío en función del compromiso
de los clientes.

Para los clientes que no suelan participar en sus mensajes, debe ajustar la frecuencia de los mismos.
Por ejemplo, si envía mensajes semanales a clientes comprometidos, podría crear un resumen mensual
independiente para los clientes menos comprometidos.

262
Amazon Simple Notification
Service Guía para desarrolladores
Requisitos de SMS para Singapur

Por último, elimine de su lista a aquellos clientes que no muestren ningún compromiso. Este paso evita
que los clientes se sientan frustrados con sus mensajes. También le ahorra dinero y ayuda a proteger su
reputación como remitente.

Enviar en horarios apropiados


Envíe mensajes solo durante el horario laborable diurno normal. Si envía mensajes a la hora de la cena o
a medianoche, hay muchas probabilidades de que sus clientes anulen la suscripción a la lista para evitar
ser molestados. Además, no tiene sentido enviar mensajes SMS cuando los clientes no pueden responder
a ellos de forma inmediata.

Evitar la fatiga entre canales


En sus campañas, si utiliza varios canales de comunicación (como, por ejemplo, correo electrónico, SMS
y mensajes push), no envíe el mismo mensaje en cada canal. Al enviar el mismo mensaje a la vez en más
de un canal, los clientes perciben su comportamiento de envío como molesto en lugar de útil.

Mantener listas independientes


Cuando los clientes se suscriban a un tema, asegúrese de que solo reciban mensajes acerca de ese tema.
No envíe a sus clientes mensajes de temas a los que no se han suscrito.

Utilizar códigos cortos dedicados


Si utiliza códigos cortos, mantenga un código corto independiente para cada marca y cada tipo de
mensaje. Por ejemplo, si su empresa tiene dos marcas, utilice un código corto independiente para
cada una de ellas. Del mismo modo, si se envían mensajes transaccionales y promocionales, utilice un
código corto independiente para cada tipo de mensaje. Para obtener más información acerca de los
códigos cortos, consulte Solicitud de códigos cortos dedicados para mensajería por SMS con Amazon
SNS (p. 210).

Requisitos de SMS para Singapur


Los clientes de Amazon SNS pueden enviar tráfico SMS en Singapur mediante un ID de remitente que
se ha registrado a través del Registro de ID de remitente de SMS de Singapur (SSIR). SSIR se lanzó
en marzo de 2022 a través del Centro de información de red de Singapur (SGNIC), propiedad de la
Autoridad de Desarrollo de Medios de Comunicación de Información (IMDA) de Singapur y permite a las
organizaciones registrar su ID de remitente al enviar SMS a teléfonos móviles en Singapur.

Antes de empezar a utilizar un ID de remitente de Singapur registrado a través de SSIR, debe completar
un proceso de incorporación a través de Amazon para permitir la publicación de su cuenta para el uso de
su ID de remitente registrado antes de iniciar el registro a través de SGNIC. A continuación, se muestran
las instrucciones para incorporar el ID de remitente registrado a Amazon. Si no desea utilizar un ID de
remitente registrado de Singapur, no tiene que realizar ninguna acción y puede continuar enviando los
mensajes a través de Amazon SNS.
Important

Para registrar un ID de remitente con el Centro de Información de Red de Singapur (SGNIC), hay
dos pasos que se deben completar en el siguiente orden.

1. Primero debe trabajar con Amazon para registrar el ID de remitente de Singapur (SG) para la
cuenta. Una vez completado este paso, puede continuar con el siguiente paso.
2. Trabaje con SGNIC para registrar el ID de remitente.

263
Amazon Simple Notification
Service Guía para desarrolladores
Requisitos de SMS para destinos de Estados Unidos

Warning

Si realiza estos pasos fuera de servicio, el servicio bloquea su ID de remitente o impide


que su ID de remitente se conserve en el dispositivo móvil.
Note

Debe enviar un registro de ID de remitente de cada cuenta de AWS individual que necesita para
utilizar el ID de remitente.

Para registrar su ID de remitente de Singapur con Amazon SNS


1. Realice los pasos que se indican en Solicitud de ID de remitente para mensajería SMS con Amazon
SNS (p. 213). En la solicitud, proporcione la siguiente información obligatoria.
• La Región de AWS que usa con Amazon SNS.
• El nombre de la empresa.
• Una estimación del número de mensajes que tiene previsto enviar cada mes.
• Una descripción del caso de uso.
• Información sobre los pasos que deben completar los destinatarios para suscribirse a recibir los
mensajes.
• Confirmación de que recopila y administra las inclusiones y las exclusiones.
2. Rellene el formulario que le ha proporcionado el equipo de Amazon SNS después de completar el paso
anterior.
3. Responda al caso y adjunte el formulario completo para su procesamiento.
4. Amazon le informará en el caso de soporte cuando su ID de remitente se haya registrado correctamente
en la cuenta y le proporcionará la información de enrutamiento necesaria para iniciar el registro a través
de SGNIC.

Requisitos especiales para enviar mensajes SMS a


destinos en Estados Unidos
A partir del 1 de junio de 2021, los proveedores de telecomunicaciones estadounidenses ya no admiten
el uso de códigos largos de persona a persona (P2P) para las comunicaciones de aplicación a persona
(A2P) a destinos de Estados Unidos. En su lugar, debe utilizar uno de los siguientes tipos de números de
origen (p. 191) para enviar mensajes a destinos en Estados Unidos:

• Códigos cortos (p. 207)


• 10-Códigos largos de 10 dígitos (10DLC) (p. 191)
• Números de teléfono gratuitos (p. 206)

Requisitos especiales para enviar mensajes SMS a


destinatarios en la India
De forma predeterminada, cuando envía mensajes a destinatarios de la India, Amazon SNS utiliza
conexiones de operador internacional de larga distancia (ILDO) para transmitir esos mensajes. Cuando los
destinatarios ven un mensaje que se envía a través de una conexión ILDO, parece que se envía desde un
ID numérico aleatorio.

264
Amazon Simple Notification
Service Guía para desarrolladores
Requisitos de SMS para la India

Note

El precio del envío de mensajes mediante rutas locales se muestra en la página Precios de SMS
de Amazon SNS en todo el mundo. El precio de envío de mensajes mediante conexiones ILDO es
más alto que el precio de envío de mensajes a través de rutas locales.

Si prefiere utilizar un ID de remitente alfabético para sus mensajes SMS, debe enviar esos mensajes a
través de rutas locales en lugar de rutas ILDO. Para enviar mensajes mediante rutas locales, primero
debe registrar su caso de uso y las plantillas de los mensajes en la Autoridad Reguladora de las
Telecomunicaciones de la India (TRAI) a través de los portales de la Tecnología de Libro Mayor Distribuido
(DLT). Estos requisitos de registro tienen por objeto reducir la cantidad de mensajes no solicitados que
reciben los consumidores indios y protegerlos de mensajes potencialmente perjudiciales. Este proceso de
registro es administrado por Vodafone India a través de su servicio Vilpower.
Note

No puede usar tanto los ID de remitente numéricos como los ID alfanuméricos en la misma
cuenta. Si utiliza ambos tipos de ID, debe mantener cuentas separadas para cada uno. Para
obtener más pautas de contenido, consulte el sitio web de Vilpower en [Link]

Temas
• Envío de mensajes SMS a la India: información general de tareas (p. 265)
• Paso 1: Registro en la TRAI (p. 265)
• Paso 2: Solicitar un ID de remitente (p. 266)
• Paso 3: Enviar mensajes SMS (p. 266)
• Solución de problemas de mensajes SMS enviados a destinatarios de la India (p. 267)

Envío de mensajes SMS a la India: información general de tareas


Para enviar mensajes SMS a la India, realice las siguientes tareas:

1. Regístrese en la TRAI (p. 265).


2. Solicite un ID de remitente (p. 266).
3. Envío de mensajes SMS (p. 266).

Paso 1: Registro en la TRAI


Para poder enviar mensajes SMS a los destinatarios en India, debe registrar su organización en la
autoridad reguladora de las telecomunicaciones de India (TRAI). Prepárese para proporcionar la siguiente
información durante el proceso de registro:

• El número de cuenta permanente (PAN) de su organización.


• El número de cuenta de deducción fiscal (TAN) de su organización.
• El número de identificación fiscal de bienes y servicios (GSTIN) de su organización.
• El número de identidad corporativa (CIN) de su organización.
• Una carta de autorización que le da la autoridad para registrar su organización.

A continuación, encontrará una lista de muestra de algunos sitios de registro de la tecnología de libro
mayor distribuido (DLT) que puede utilizar para registrar su organización en la TRAI (pueden aplicarse
tarifas). El proceso de registro varía según el sitio. Contacte con sus respectivos equipos de asistencia
para obtener ayuda.

• BSNL DLT

265
Amazon Simple Notification
Service Guía para desarrolladores
Requisitos de SMS para la India

• Jio Trueconnect: registro gratuito.


• Smart Enterprise Solutions: registro gratuito.
• Vilpower: incluye una plantilla que puede descargar y modificar para adaptarla a sus necesidades.
Vilpower cobra un cargo por completar el proceso de registro.

Para registrar su organización en la TRAI, siga estos pasos:


A continuación, se detalla cómo registrar su organización en la TRAI mediante Vilpower.

1. En un navegador web, vaya al sitio web de Vilpower en [Link]


2. Elija Registrarse para crear otra cuenta. Durante el proceso de registro, haga lo siguiente:

• Para el tipo de entidad que se va a registrar, elija As Enterprise (Como empresa).


• En Nombre del vendedor telefónico, utilice Infobip Private Limited - ALL. Cuando se le solicite,
comience a escribir Infobip y, después, elija Infobip Private Limited — ALL en la lista desplegable.
• En Escribir ID de vendedor telefónico, escriba 110200001152.
• Cuando se le pida que proporcione los ID de encabezado, escriba los ID de remitente que desea
registrar.
• Cuando se le pida que proporcione las plantillas de contenido, escriba el contenido del mensaje que
planea enviar a los destinatarios. Incluya una plantilla para cada mensaje que planee enviar.

Note
Amazon Web Services no mantiene los sitios web de los proveedores de registro de DLT. Los
pasos en sus sitios web están sujetos a cambios.

Paso 2: Solicitar un ID de remitente


Para solicitar un ID de remitente en la India, debe presentar una solicitud AWS Support. Realice los
pasos que se indican en Solicitud de ID de remitente (p. 213). En la solicitud, proporcione la siguiente
información obligatoria:

• La región de AWS desde la que el remitente piensa enviar mensajes SMS.


• El nombre de la empresa utilizado durante el proceso de registro de DLT.
• El ID de entidad principal (PEID) que recibió después del registro correcto de entidad de DLT.
• El volumen mensual estimado.
• La explicación de su caso de uso.
• Una descripción del flujo de registro del usuario final.
• La confirmación de que los usuarios finales se recopilan y registran.

Paso 3: Enviar mensajes SMS


Después de registrar su organización en la TRAI (p. 265), puede enviar mensajes SMS a los
destinatarios de la India.

1. Inicie sesión en la consola de Amazon SNS.


2. En el menú de la consola, establezca el selector de regiones en una región que admita la mensajería
SMS (p. 251).
3. En el panel de navegación, elija Text messaging (SMS) (Mensajería de texto (SMS)).
4. En la página Mensajería de texto móvil (SMS), elija Publicar mensaje de texto. Se abre la ventana
Publicar mensajes SMS.

266
Amazon Simple Notification
Service Guía para desarrolladores
Requisitos de SMS para la India

5. En Message type (Tipo de mensaje), seleccione una de las siguientes opciones:

• Promocional: mensajes que no son de importancia, como mensajes de marketing.

Cuando utilice ID de remitente numéricos, elija esta opción.


• Transactional: mensajes de importancia que admiten transacciones del cliente, como claves de
acceso de un solo uso para la autenticación multifactor.

Cuando utilice ID de remitentes alfabéticos o alfanuméricos, elija esta opción.

Esta opción de nivel de mensaje anula el tipo de mensaje predeterminado, que se establece en la
página Text messaging preferences (Preferencias de la mensajería de texto).

Para obtener información sobre los precios de los mensajes promocionales y transaccionales, consulte
la página relacionada con los precios globales de SMS.
6. En Number (Número), escriba el número de teléfono al que desea enviar el mensaje.
7. En Message (Mensaje), escriba el mensaje que va a enviar.

Al agregar contenido a los mensajes SMS, asegúrese de que coincida de forma exacta con el
contenido de la plantilla registrada en DLT. Los operadores bloquean los mensajes SMS si el
contenido del mensaje incluye retornos de caracteres adicionales, espacios, signos de puntuación
o mayúsculas de frase no coincidentes. Las variables de una plantilla pueden tener 30 o menos
caracteres.
8. En la sección Identidades de origen, en ID de remitente, escriba un ID personalizado que contenga de
3 a 11 caracteres.

Los ID de remitente pueden ser numéricos para los mensajes promocionales, o alfabéticos o
alfanuméricos para los mensajes transaccionales. El ID de remitente se muestra como el remitente del
mensaje en el dispositivo receptor.
9. Expanda la sección Atributos específicos del país y especifique los siguientes atributos necesarios
para enviar mensajes SMS a destinatarios de la India:

• ID de la identidad: el ID de la entidad o el ID de la entidad principal (PE) que recibió del organismo


regulador para enviar mensajes SMS a los destinatarios en la India.

Se trata de una cadena personalizada, proporcionada por TRAI, de 1 a 50 caracteres que identifica
de forma exclusiva a la entidad que ha registrado en TRAI.
• ID de plantilla: el ID de la plantilla que recibió del organismo regulador para enviar mensajes SMS a
los destinatarios en la India.

Se trata de una cadena personalizada, proporcionada por TRAI, de 1 a 50 caracteres que identifica
de manera única la plantilla que se registró en TRAI. El ID de la plantilla debe estar asociado al ID
de remitente que especificó en el paso anterior, y con el contenido del mensaje.
10. Elija Publish message (Publicar mensaje).

Para obtener información sobre cómo enviar mensajes SMS a destinatarios de otros países, consulte
Publicación en un teléfono móvil (p. 225).

Solución de problemas de mensajes SMS enviados a


destinatarios de la India
Las siguientes son algunos de los motivos por los que los operadores pueden bloquear los mensajes SMS:

• No se encontró ninguna plantilla que coincida con el contenido enviado.

267
Amazon Simple Notification
Service Guía para desarrolladores
Notificaciones de inserción en móviles

Contenido enviado: <#> 12345 is your OTP to verify mobile number. Your OTP is
valid for 15 minutes -- ABC Pvt. Ltd.

Plantilla coincidente: ninguna

Problema: No hay plantillas de DLT en las que se incluya <#> o {#var#} al principio de la plantilla
registrada en DLT.
• El valor de una variable supera los 30 caracteres.

Contenido enviado: 12345 is your OTP code for ABC (ABC Company - India Private
Limited) - (ABC 123456789). Share with your agent only. - ABC Pvt. Ltd.

Plantilla coincidente: {#var#} is your OTP code for {#var#} ({#var#}) - ({#var#}
{#var#}). Share with your agent only. - ABC Pvt. Ltd.

Problema: El valor de “ABC Company - India Private Limited” en el contenido enviado excede un único
límite {#var#} de 30 caracteres.
• El caso de frase del mensaje no coincide con el caso de frase de la plantilla.

Contenido enviado: 12345 is your OTP code for ABC (ABC Company - India Private
Limited) - (ABC 123456789). Share with your agent only. - ABC Pvt. Ltd.

Plantilla coincidente: {#var#} is your OTP code for {#var#} ({#var#}) - ({#var#}
{#var#}). Share with your agent only. - ABC PVT. LTD.

Problema: El nombre de la empresa anexado a la plantilla de DLT coincidente está en mayúsculas,


mientras que el contenido enviado ha cambiado partes del nombre a minúsculas: “ABC Pvt. Ltd. frente a
“ABC PVT. Ltd.”.

Notificaciones de inserción en móviles


Con Amazon SNS, tiene la posibilidad de enviar mensajes de notificaciones push directamente a
aplicaciones que se encuentran en dispositivos móviles. Los mensajes de notificación de inserción
enviados a un punto de enlace móvil pueden mostrarse en la aplicación móvil como mensajes de alerta,
actualizaciones de la tarjeta de identificación o incluso alertas de sonido.

Temas
• Cómo funcionan las notificaciones de usuario (p. 269)
• Información general del proceso de notificación de usuario (p. 269)
• Configuración de una aplicación móvil (p. 269)
• Envío de notificaciones de inserción en móviles (p. 280)
• Atributos de aplicaciones móviles (p. 283)
• Eventos de aplicaciones móviles (p. 286)
• Acciones de la API de inserción móvil (p. 288)
• Errores de la API de inserción móvil (p. 289)
• Uso del atributo de mensaje de período de vida (TTL) de Amazon SNS para las notificaciones push
móviles (p. 296)
• Regiones compatibles para aplicaciones móviles (p. 298)
• Prácticas recomendadas de notificaciones push en móviles (p. 298)

268
Amazon Simple Notification
Service Guía para desarrolladores
Cómo funcionan las notificaciones de usuario

Cómo funcionan las notificaciones de usuario


Los mensajes de notificaciones de inserción se envían a dispositivos móviles y a escritorios utilizando uno
de los siguientes servicios de notificaciones de inserción compatibles:

• Amazon Device Messaging (ADM)


• Apple Push Notification Service (APNs) para iOS y Mac OS X
• Baidu Cloud Push (Baidu)
• Firebase Cloud Messaging (FCM)
• Servicio de notificaciones push de Microsoft para Windows Phone (MPNS)
• Servicios de notificación push de Windows (WNS)

Los servicios de notificaciones push, como APNs y FCM, mantienen una conexión con cada aplicación
y dispositivo móvil asociado registrado para utilizar el servicio. Cuando una aplicación y un dispositivo
móvil se registran, el servicio de notificaciones push devuelve un token de dispositivo. Amazon SNS
utiliza el token de dispositivo para crear un punto de enlace móvil al que puede enviar mensajes de
notificaciones push directos. Para que Amazon SNS pueda comunicarse con los diferentes servicios de
notificaciones push, debe enviar las credenciales de su servicio de notificaciones push a Amazon SNS
para que las utilice en su nombre. Para obtener más información, consulte Información general del proceso
de notificación de usuario (p. 269) .

Además de enviar mensajes de notificaciones push directos, también puede utilizar Amazon SNS para
enviar mensajes a puntos de enlace móviles suscritos a un tema. El concepto es el mismo que para la
suscripción a un tema de otros tipos de puntos de enlace, como Amazon SQS, HTTP/S, correo electrónico
y SMS, tal y como se describe en ¿Qué es Amazon SNS? (p. 1). La diferencia radica en que Amazon SNS
se comunica mediante servicios de notificaciones push para que los puntos de enlace móviles suscritos
reciban los mensajes de notificaciones push enviados al tema.

Información general del proceso de notificación de


usuario
1. Obtenga las credenciales y el token de dispositivo (p. 270) para las plataformas móviles que desea
admitir.
2. Utilice las credenciales para crear un objeto de aplicación de plataforma
(PlatformApplicationArn) mediante Amazon SNS. Para obtener más información, consulte
Creación de un punto de enlace de plataforma (p. 271) .
3. Utilice las credenciales obtenidas para solicitar un token para su aplicación móvil y el dispositivo a las
plataformas móviles. El token que reciba representa su aplicación móvil y el dispositivo.
4. Utilice el token de dispositivo y PlatformApplicationArn para crear un objeto de punto de enlace
de plataforma (EndpointArn) mediante Amazon SNS. Para obtener más información, consulte
Creación de un punto de enlace de plataforma (p. 271) .
5. Utilice el EndpointArn para publicar un mensaje en una aplicación de un dispositivo móvil (p. 269).
Para obtener más información, consulte Publicación de un dispositivo móvil (p. 280) y la API Publicar
en la Referencia de la API de Amazon Simple Notification Service.

Configuración de una aplicación móvil


En esta sección, se describe cómo utilizar la AWS Management Console con la información descrita
en Requisitos previos para las notificaciones de usuario de Amazon SNS (p. 270) para configurar
aplicaciones móviles.

269
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

Temas
• Requisitos previos para las notificaciones de usuario de Amazon SNS (p. 270)
• Creación de una aplicación de plataforma (p. 271)
• Creación de un punto de enlace de plataforma (p. 271)
• Adición de tokens de dispositivo o ID de registro (p. 276)
• Métodos de autenticación de Apple (p. 279)

Requisitos previos para las notificaciones de usuario de Amazon


SNS
Para empezar a utilizar las notificaciones de inserción en móviles de Amazon SNS, necesita:

• Un conjunto de credenciales para conectarse a uno de los servicios de notificaciones push compatibles:
ADM, APNs, Baidu, FCM, MPNS o WNS.
• Un token de dispositivo o ID de registro para la aplicación y el dispositivo móviles.
• Amazon SNS configurado para enviar mensajes de notificaciones de inserción a los puntos de enlace
móviles.
• Una aplicación móvil que esté registrada y configurada para utilizar uno de los servicios de notificaciones
de inserción compatibles.

Para registrar su aplicación a un servicio de notificaciones push, tiene que seguir varios pasos. Amazon
SNS necesita parte de la información que proporciona al servicio de notificaciones push para poder
enviar mensajes de notificaciones push al punto de enlace móvil. En general, necesita las credenciales
necesarias para establecer una conexión con el servicio de notificaciones de inserción, un token de
dispositivo o ID de registro (que represente el dispositivo y la aplicación móviles) que haya recibido del
servicio de notificaciones de inserción y la aplicación móvil registrada en el servicio de notificaciones de
inserción.

La forma exacta que las credenciales adoptan varía según la plataforma móvil, pero, en todos los casos,
estas credenciales se deben enviar mientras se establece conexión con la plataforma. Se genera un
conjunto de credenciales para cada aplicación móvil, que debe utilizarse para enviar un mensaje a
cualquier instancia de dicha aplicación.

Los nombres específicos variarán según el servicio de notificaciones de inserción que se utilice. Por
ejemplo, cuando utilice APNs como servicio de notificaciones push, necesitará un token de dispositivo.
O bien, cuando utilice FCM, el token de dispositivo equivalente se denomina ID de registro. El token de
dispositivo o el ID de registro es una cadena que el sistema operativo del dispositivo móvil envía a la
aplicación. Sirve para identificar de forma exclusiva una instancia de una aplicación móvil que se ejecuta
en un determinado dispositivo móvil y puede considerarse un identificador único de este par concreto de
aplicación y dispositivo.

Amazon SNS almacena las credenciales (además de otras configuraciones) como recurso de aplicación
de una plataforma. Los tokens de dispositivo (también aquí con algunos parámetros adicionales) se
representan como objetos denominados puntos de enlace de la plataforma. Cada punto de enlace de la
plataforma pertenece a una aplicación de plataforma específica y es posible comunicarse con cada uno de
ellos usando las credenciales que se almacenan en su correspondiente aplicación de plataforma.

En las secciones siguientes se incluyen los requisitos previos de cada uno de los servicios de
notificaciones push compatibles. Una vez que haya obtenido la información sobre los requisitos previos,
puede enviar un mensaje de notificaciones push mediante la AWS Management Console o las API de
notificaciones push móviles de Amazon SNS. Para obtener más información, consulte Información general
del proceso de notificación de usuario (p. 269).

270
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

Creación de una aplicación de plataforma


Para que Amazon SNS envíe mensajes de notificaciones a puntos de conexión móviles, ya sea
directamente o mediante suscripciones a un tema, primero debe crear una aplicación de plataforma.
Después de registrar la aplicación en AWS, el siguiente paso consiste en crear un punto de conexión para
la aplicación y el dispositivo móvil. Amazon SNS utilizará el punto de conexión para enviar mensajes de
notificación a la aplicación y al dispositivo.

Para crear una aplicación de plataforma, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación de la izquierda, elija Mobile (Móvil) y, a continuación, Push notifications
(Notificaciones push).
3. En la sección Platform applications (Aplicaciones de plataforma), elija Create platform application
(Crear aplicación de plataforma).

Para obtener la lista de las regiones de AWS en las que puede crear aplicaciones móviles, consulte
Regiones compatibles para aplicaciones móviles (p. 298).
4. En el cuadro Application name (Nombre de la aplicación), ingrese un nombre que represente a la
aplicación.

Los nombres de las aplicaciones tienen que estar formados únicamente por letras ASCII mayúsculas
y minúsculas, números, guiones bajos, guiones y puntos. Los nombres también deben tener entre 1 y
256 caracteres de longitud.
5. En Push notification platform (Plataforma de notificación push), elija la plataforma en la que esté
registrada la aplicación y, a continuación, ingrese las credenciales adecuadas.
Note

Si utiliza una de las plataformas Apple Push Notification Service (APNs), puede elegir entre
autenticación basada en token o en certificado (p. 279), y luego elegir Choose file (Elegir
archivo) para cargar el archivo .p8 o .p12 file (exportado desde Keychain Access) en Amazon
SNS.
6. Elija Create platform application (Crear aplicación de plataforma).

Esto registrará la aplicación en Amazon SNS, lo que creará un objeto de aplicación de plataforma para
la plataforma seleccionada y devolverá un PlatformApplicationArn correspondiente.

Creación de un punto de enlace de plataforma


Cuando una aplicación y un dispositivo móvil se registran en un servicio de notificaciones push, dicho
servicio devuelve un token de dispositivo. Amazon SNS utiliza el token de dispositivo para crear un
punto de enlace móvil al que puede enviar mensajes de notificaciones push directos. Para obtener más
información, consulte Requisitos previos para las notificaciones de usuario de Amazon SNS (p. 270) y
Información general del proceso de notificación de usuario (p. 269).

En esta sección, se describe el procedimiento recomendado para crear un punto de enlace de plataforma.

Temas
• Creación de un punto de enlace de plataforma (p. 272)
• Pseudocódigo (p. 272)
• AWSEjemplo de SDK de (p. 273)
• Troubleshooting (p. 275)

271
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

Creación de un punto de enlace de plataforma


Para insertar notificaciones push en una aplicación con Amazon SNS, primero debe registrarse el token
de dispositivo de la aplicación en Amazon SNS llamando a la acción de creación del punto de enlace de
plataforma. Esta acción toma el nombre de recurso de Amazon (ARN) de la aplicación de plataforma y el
token de dispositivo como parámetros y devuelve el ARN del punto de enlace de plataforma creado.

La acción de creación de punto de enlace de plataforma hace lo siguiente:

• Si el punto de enlace de plataforma ya existe, no lo vuelva a crear. Devuelva al intermediario el ARN del
punto de enlace de plataforma existente.
• Si ya existe el punto de enlace de plataforma con el mismo token de dispositivo pero diferentes
opciones, no lo vuelva a crear. Envíe una excepción al intermediario.
• Si el punto de enlace de plataforma no existe, créelo. Devuelva al intermediario el ARN del punto de
enlace de plataforma que acaba de crear.

No debe llamar a la acción de creación de un punto de enlace de plataforma inmediatamente cada vez
que se inicie una aplicación; este enfoque no siempre proporciona un punto de enlace que funcione.
Esto puede ocurrir, por ejemplo, cuando una aplicación se desinstala y se vuelve a instalar en el mismo
dispositivo, y su punto de enlace que ya existe, pero está deshabilitado. Un proceso de registro correcto
debe realizar las operaciones siguientes:

1. Asegurarse de que exista un punto de enlace de plataforma para esta combinación de aplicación y
dispositivo.
2. Asegurarse de que el token de dispositivo del punto de enlace de plataforma es el último token de
dispositivo válido.
3. Asegurarse de que el punto de enlace de plataforma esté habilitado y listo para ser utilizado.

Pseudocódigo
El siguiente pseudocódigo describe una práctica recomendada para crear un punto de enlace de
plataforma que funcione, sea actual y esté habilitado en una amplia variedad de condiciones de partida.
Este enfoque funciona tanto si se trata de la primera vez que la aplicación se registra o no, como si el
punto de enlace de plataforma de esta aplicación ya existe, o si el punto de enlace de plataforma está
habilitado, tiene el token de dispositivo correcto, etc. Es seguro llamarlo varias veces seguidas, ya que no
creará puntos de enlace de plataforma duplicados ni cambiará un punto de enlace de plataforma si ya está
actualizado y activado.

retrieve the latest device token from the mobile operating system
if (the platform endpoint ARN is not stored)
# this is a first-time registration
call create platform endpoint
store the returned platform endpoint ARN
endif

call get endpoint attributes on the platform endpoint ARN

if (while getting the attributes a not-found exception is thrown)


# the platform endpoint was deleted
call create platform endpoint with the latest device token
store the returned platform endpoint ARN
else
if (the device token in the endpoint does not match the latest one) or
(get endpoint attributes shows the endpoint as disabled)
call set endpoint attributes to set the latest device token and then enable the
platform endpoint
endif

272
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

endif

Este enfoque se puede utilizar siempre que la aplicación quiera registrarse o volver a registrarse. También
se puede utilizar para notificar a Amazon SNS un cambio en el token del dispositivo. En este caso, solo
tiene que llamar a la acción con el valor de token del último dispositivo. Tenga en cuenta los elementos
siguientes de este enfoque:

• Hay dos casos en los que puede llamar a la acción de crear un punto de enlace de plataforma. Puede
llamarse justo al principio, cuando la aplicación no conoce su propio ARN de punto de enlace de
plataforma, como es el caso durante un primer registro. También se puede llamar si la llamada inicial de
acción de obtención de los atributos del punto de enlace genera un error con una excepción del tipo no
se ha encontrado, como ocurriría si la aplicación conoce su ARN de punto de enlace, pero este se ha
eliminado.
• Se llama a la acción de obtención de los atributos del punto de enlace para verificar el estado del punto
de enlace de plataforma, aunque dicho punto de enlace se acabe de crear. Esto ocurre cuando el punto
de enlace de plataforma ya existe, pero está deshabilitado. En este caso, la acción de creación del punto
de enlace de plataforma se realiza correctamente, pero no habilita el punto de enlace de plataforma,
por lo que debe comprobar el estado del punto de enlace de plataforma antes de devolver el resultado
correcto.

AWSEjemplo de SDK de
En los siguientes ejemplos, se muestra cómo implementar el pseudocódigo anterior mediante los clientes
de Amazon SNS que proporcionan los SDK de AWS.

Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

Java

SDK para Java 1.x

class RegistrationExample {

AmazonSNSClient client = new AmazonSNSClient(); //provide credentials here


String arnStorage = null;

public void registerWithSNS() {

String endpointArn = retrieveEndpointArn();


String token = "Retrieved from the mobile operating system";

boolean updateNeeded = false;


boolean createNeeded = (null == endpointArn);

if (createNeeded) {
// No platform endpoint ARN is stored; need to call createEndpoint.
endpointArn = createEndpoint();
createNeeded = false;
}

[Link]("Retrieving platform endpoint data...");


// Look up the platform endpoint and make sure the data in it is current, even
if
// it was just created.
try {
GetEndpointAttributesRequest geaReq =

273
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

new GetEndpointAttributesRequest()
.withEndpointArn(endpointArn);
GetEndpointAttributesResult geaRes =
[Link](geaReq);

updateNeeded = ![Link]().get("Token").equals(token)
|| ![Link]().get("Enabled").equalsIgnoreCase("true");

} catch (NotFoundException nfe) {


// We had a stored ARN, but the platform endpoint associated with it
// disappeared. Recreate it.
createNeeded = true;
}

if (createNeeded) {
createEndpoint(token);
}

[Link]("updateNeeded = " + updateNeeded);

if (updateNeeded) {
// The platform endpoint is out of sync with the current data;
// update the token and enable it.
[Link]("Updating platform endpoint " + endpointArn);
Map attribs = new HashMap();
[Link]("Token", token);
[Link]("Enabled", "true");
SetEndpointAttributesRequest saeReq =
new SetEndpointAttributesRequest()
.withEndpointArn(endpointArn)
.withAttributes(attribs);
[Link](saeReq);
}
}

/**
* @return never null
* */
private String createEndpoint(String token) {

String endpointArn = null;


try {
[Link]("Creating platform endpoint with token " + token);
CreatePlatformEndpointRequest cpeReq =
new CreatePlatformEndpointRequest()
.withPlatformApplicationArn(applicationArn)
.withToken(token);
CreatePlatformEndpointResult cpeRes = client
.createPlatformEndpoint(cpeReq);
endpointArn = [Link]();
} catch (InvalidParameterException ipe) {
String message = [Link]();
[Link]("Exception message: " + message);
Pattern p = Pattern
.compile(".*Endpoint (arn:aws:sns[^ ]+) already exists " +
"with the same [Tt]oken.*");
Matcher m = [Link](message);
if ([Link]()) {
// The platform endpoint already exists for this token, but with additional
// custom data that createEndpoint doesn't want to overwrite. Use the
// existing platform endpoint.
endpointArn = [Link](1);
} else {
// Rethrow the exception, because the input is actually bad.
throw ipe;
}

274
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

}
storeEndpointArn(endpointArn);
return endpointArn;
}

/**
* @return the ARN the app was registered under previously, or null if no
* platform endpoint ARN is stored.
*/
private String retrieveEndpointArn() {
// Retrieve the platform endpoint ARN from permanent storage,
// or return null if null is stored.
return arnStorage;
}

/**
* Stores the platform endpoint ARN in permanent storage for lookup next time.
* */
private void storeEndpointArn(String endpointArn) {
// Write the platform endpoint ARN to permanent storage.
arnStorage = endpointArn;
}
}

• Encuentre instrucciones y más código en GitHub.

Para obtener más información, consulte Acciones de la API de inserción móvil (p. 288).

Troubleshooting
Llamar repetidamente a la acción de creación de un punto de enlace de plataforma con un token
de dispositivo obsoleto

En especial para los puntos de enlace de FCM, puede que piense que es mejor almacenar el primer
token de dispositivo generado por la aplicación y llamar a la creación de punto de enlace de plataforma
con dicho token de dispositivo cada vez que se inicia la aplicación. Esto puede parecer correcto, dado
que la aplicación no tiene que administrar el estado del token de dispositivo y Amazon SNS actualizará
automáticamente el token de dispositivo a su valor más reciente. Sin embargo, esta solución presenta una
serie de problemas graves:

• Amazon SNS depende de los comentarios de FCM para actualizar los tokens de dispositivo vencidos
en tokens de dispositivo nuevos. FCM retiene información en tokens de dispositivo antiguos durante
un tiempo, aunque no de forma indefinida. Cuando FCM se olvide de la conexión entre el token de
dispositivo antiguo y el nuevo, Amazon SNS ya no podrá actualizar el token de dispositivo almacenado
en el punto de enlace de plataforma a su valor correcto; en su lugar, desactivará el punto de enlace de
plataforma.
• La aplicación de plataforma contendrá varios puntos de enlace de plataforma correspondientes al mismo
token de dispositivo.
• Amazon SNS impone una cuota a la cantidad de puntos de enlace de plataforma que se pueden crear
empezando por el mismo token de dispositivo. Al final, la creación de los nuevos puntos de enlace
generará un error con la excepción de parámetro no válido y el siguiente mensaje de error: "This
endpoint is already registered with a different token".

Reactivación de un punto de enlace de plataforma asociado a un token de dispositivo no válido

Cuando una plataforma móvil (como APNs o FCM) informa a Amazon SNS que el token de dispositivo
utilizado en la solicitud de publicación no es válido, Amazon SNS desactiva el punto de enlace de

275
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

plataforma asociado a ese token de dispositivo. A continuación, Amazon SNS rechaza las publicaciones
posteriores que se efectúen en ese token de dispositivo. Aunque le parezca que es mejor volver a
activar el punto de enlace de plataforma y seguir publicando, en la mayoría de los casos esta solución no
funciona: los mensajes que se publican no se entregan y el punto de enlace de plataforma se vuelve a
desactivar poco después.

Esto se debe a que el token de dispositivo asociado al punto de enlace de plataforma en realidad no
es válido. Las entregas que se le hacen no pueden realizarse correctamente, puesto que el token ya
no corresponde a ninguna aplicación instalada. La próxima vez que se publique en ella, la plataforma
móvil volverá a informar a Amazon SNS que el token de dispositivo no es válido y Amazon SNS volverá a
desactivar el punto de enlace de plataforma.

Para volver a habilitar un punto de enlace de plataforma desactivado, debe asociarlo a un token de
dispositivo válido (con una llamada de acción de definición de los atributos del punto de enlace) y después
habilitarlo. Solo entonces las entregas a dicho punto de enlace de plataforma se realizarán correctamente.
La única vez en que volver a habilitar un punto de enlace de plataforma sin actualizar su token de
dispositivo funcione será cuando un token de dispositivo que no era válido y estaba asociado a dicho punto
de enlace vuelva a ser válido. Esto puede ocurrir, por ejemplo, cuando se desinstala una aplicación y se
vuelve a instalar en el mismo dispositivo móvil y recibe el mismo token de dispositivo. El enfoque que
acabamos de presentar realiza esta operación asegurándose de volver a habilitar un punto de enlace de
plataforma solo después de comprobar que el token de dispositivo que tiene asociado es el más actual
disponible.

Adición de tokens de dispositivo o ID de registro


La primera vez que registre una aplicación y un dispositivo móvil en un servicio de notificaciones, como
Apple Push Notification Service (APNs) y Firebase Cloud Messaging (FCM), el servicio de notificaciones
devuelve un token de dispositivo o un ID de registro. Cuando se agregan los tokens de dispositivo o los
ID de registro a Amazon SNS, estos se utilizan con la API PlatformApplicationArn con el fin de
crear un punto de enlace para la aplicación y el dispositivo. Cuando Amazon SNS crea el punto de enlace,
se devuelve un EndpointArn. El EndpointArn es cómo Amazon SNS sabe a qué aplicación y a qué
dispositivo móvil enviar el mensaje de notificación.

Puede agregar tokens de dispositivo e ID de registro a Amazon SNS con los métodos siguientes:

• Añadiendo manualmente un token único a AWS con la AWS Management Console.


• Migrando los tokens existentes de un archivo CSV a AWS con la AWS Management Console.
• Cargando varios tokens utilizando la API CreatePlatformEndpoint.
• Registrando tokens de dispositivos que instalarán sus aplicaciones en el futuro.

Para añadir manualmente un token de dispositivo o ID de registro

1. Inicie sesión en la consola de Amazon SNS.


2. Elija Apps (Aplicaciones), elija la aplicación y, a continuación, Add Endpoints (Añadir puntos de
enlace).
3. En el cuadro Endpoint Token (Token de punto de enlace), escriba el ID de token o el ID de registro,
según el servicio de notificaciones. Por ejemplo, con ADM y FCM, debe ingresar el ID de registro.
4. (Opcional) En el cuadro Datos de usuario, ingrese información arbitraria para asociarla al punto de
enlace. Amazon SNS no utiliza estos datos. Los datos deben estar en formato UTF-8 y tener menos
de 2 KB.
5. Por último, elija Add Endpoints (Añadir puntos de enlace).

Ahora, con el punto de enlace creado, puede enviar mensajes directamente a un dispositivo móvil o
enviar mensajes a dispositivos móviles que estén suscritos a un tema.

276
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

Para migrar los tokens existentes de un archivo CSV a AWS

Puede migrar los tokens existentes contenidos en un archivo CSV. El archivo CSV no debe tener más de 2
MB. Cuando migre varios tokens, se recomienda utilizar la API CreatePlatformEndpoint. Cada uno de
los tokens del archivo CSV debe ir seguido de una nueva línea. Por ejemplo, el archivo CSV ha de tener un
aspecto similar al siguiente:

[Link]-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz01,"User data
with spaces requires quotes"
[Link]-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--
KMTlmMWxwRkxMaDNST2luZz04,"Data,with,commas,requires,quotes"
[Link]-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz02,"Quoted data
requires ""escaped"" quotes"
[Link]-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz03,"{""key"":
""json is allowed"", ""value"":""endpoint"", ""number"": 1}"
[Link]-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--
KMTlmMWxwRkxMaDNST2luZz05,SimpleDataNoQuotes
[Link]-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz06,"The following
line has no user data"
[Link]-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz07
APBTKzPGlCyT6E6oOfpdwLpcRNxQp5vCPFiFeru9oZylc22HvZSwQTDgmmw9WdNlXMerUPxmpX0w1,"Different
token style"

1. Inicie sesión en la consola de Amazon SNS.


2. Elija Apps (Aplicaciones), elija la aplicación y, a continuación, Add Endpoints (Añadir puntos de
enlace).
3. Elija Migrar los tokens existentes a AWS. A continuación, seleccione Elegir un archivo, elija el archivo
CSV y, por último, haga clic en Agregar puntos de enlace.

Para cargar varios tokens utilizando la API CreatePlatformEndpoint.

A continuación, en los pasos siguientes se muestra cómo utilizar la aplicación Java de muestra (paquete
bulkupload) proporcionada por AWS para cargar varios tokens (tokens de dispositivo o ID de registro) en
Amazon SNS. Puede utilizar esta aplicación de muestra como ayuda para comenzar a cargar sus tokens.
Note

Los siguientes pasos utilizan el IDE de Eclipse Java. En los pasos, se presupone que ha instalado
el AWS SDK for Java y dispone de credenciales de seguridad de AWS para su Cuenta de AWS.
Para obtener más información, consulte AWS SDK for Java. Para obtener más información sobre
las credenciales, consulte ¿Cómo obtengo credenciales de seguridad? en la Referencia general
de AWS.

1. Descargue y descomprima el archivo [Link].


2. Cree un proyecto de Java nuevo en Eclipse.
3. Importe la carpeta SNSSamples al directorio superior del proyecto de Java que acaba de crear. En
Eclipse, haga clic con el botón derecho en el nombre del proyecto de Java y, a continuación, elija
Import (Importar), expanda General, elija File System (Sistema de archivos) y Next (Siguiente), vaya a
la carpeta SNSSamples, elija OK (Aceptar) y, a continuación, Finish (Finalizar).
4. Descargue una copia de la biblioteca OpenCSV y añádala a la ruta de compilación del paquete
bulkupload.
5. Abra el archivo [Link] incluido en el paquete bulkupload.
6. Añada lo siguiente a [Link]:

• El ApplicationArn al que desea añadir puntos de enlace.


• La ruta completa de la ubicación del archivo CSV que contiene los tokens.

277
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

• Los nombres de archivos CSV (como [Link] o [Link]) que deben crearse
para registrar los tokens que Amazon SNS analiza de forma correcta y los que no funcionan.
• (Opcional) Los caracteres para especificar el delimitador y citar en el archivo CSV que contiene los
tokens.
• (Opcional) El número de subprocesos que deben utilizarse para crear puntos de enlace de forma
simultánea. El valor predeterminado es 1 subproceso.

El [Link] finalizado ha de tener un aspecto similar al siguiente:

applicationarn:arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp
csvfilenam[Link]\\mytokendirectory\\[Link]
goodfilenam[Link]\\mylogfiles\\[Link]
badfilenam[Link]\\mylogfiles\\[Link]
delimiterchar:'
quotechar:"
numofthreads:5

7. Ejecute la aplicación [Link] para cargar los tokens en Amazon


SNS.

En este ejemplo, los puntos de enlace que se han creado para los tokens que se han cargado
de forma correcta en Amazon SNS se registran en [Link], mientras que los tokens
incorrectos se registran en [Link]. Además, debe ver los logs STD OUT escritos en la
consola de Eclipse, que tiene contenido similar al siguiente:

<1>[SUCCESS] The endpoint was created with Arn arn:aws:sns:us-west-2:111122223333:app/


FCM/fcmpushapp/165j2214-051z-3176-b586-138o3d420071
<2>[ERROR: MALFORMED CSV FILE] Null token found in /mytokendirectory/[Link]

Para registrar tokens de dispositivos que instalarán sus aplicaciones en el futuro

Puede utilizar una de las dos opciones siguientes:

• Utilice el servicio de Amazon Cognito: la aplicación móvil necesitará credenciales para crear puntos
de enlace asociados a la aplicación de plataforma de Amazon SNS. Le recomendamos que utilice
credenciales temporales que venzan al cabo de un periodo de tiempo. Para la mayoría de las
situaciones, le recomendamos que utilice Amazon Cognito para crear credenciales de seguridad
temporales. Para obtener más información, consulte la Guía para desarrolladores de Amazon Cognito.
Si desea recibir una notificación cada vez que se inscriba una aplicación en Amazon SNS, puede
registrarse para recibir un evento de Amazon SNS que le proporcionará el ARN del punto de enlace
nuevo. También puede utilizar la API ListEndpointByPlatformApplication para obtener la lista
completa de puntos de enlace registrados en Amazon SNS.
• Utilice un servidor proxy: si la infraestructura de la aplicación ya está configurada para que las
aplicaciones móviles llamen y se registren en cada instalación, puede seguir utilizando esta
configuración. Su servidor se comportará como un proxy y transmitirá el token de dispositivo a las
notificaciones push móviles de Amazon SNS, así como los datos de usuario que desee almacenar.
Para ello, el servidor proxy se conectará a AWS con sus credenciales de y usará la llamada a la API
CreatePlatformEndpoint para cargar la información de token. Se devuelve el nombre de recurso de
Amazon (ARN) del punto de enlace que acaba de crear, que su servidor puede almacenar para realizar
posteriores llamadas de publicación a Amazon SNS.

278
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una aplicación móvil

Métodos de autenticación de Apple


Puede autorizar a Amazon SNS a enviar notificaciones push a su aplicación de iOS o macOS
proporcionando información que le identifique como desarrollador de esa aplicación. Para autenticarse,
proporcione una clave o un certificado al crear una aplicación de plataforma; ambas cosas puede
obtenerlas en su cuenta de Apple Developer.

Clave de firma de token

Clave de firma privada que Amazon SNS utiliza para firmar tokens de autenticación de Apple Push
Notification Service (APNs).

Si se proporciona una clave de firma, Amazon SNS utiliza un token para autenticarse con APNs para
cada notificación push que se envíe. Con la clave de firma, se pueden enviar notificaciones push a
entornos de producción y entornos aislados de APNs.

La clave de firma no caduca, y se puede utilizar la misma clave de firma para varias aplicaciones. Para
obtener más información, consulte Communicate with APNs using authentication tokens (Comunicarse
con APNs mediante tokens de autenticación) en la sección Developer Account Help (Ayuda de la
cuenta de desarrollador) del sitio web de Apple.
Certificado

Certificado TLS que Amazon SNS utiliza para autenticarse con APNs cuando se envían notificaciones
push. Puede obtener este certificado en su cuenta de Apple Developer.

Los certificados caducan al cabo de un año. Cuando eso sucede, se debe crear un nuevo certificado
y proporcionárselo a Amazon SNS. Para obtener más información, consulte Establishing a Certificate-
Based Connection to APNs (Establecimiento de una conexión basada en certificado con APNs) en el
sitio web de Apple Developer.

Para administrar la configuración de APNs mediante la Consola de administración de AWS

1. Inicie sesión en la consola de Amazon SNS.


2. En Mobile (Móvil), elijaPush notifications (Notificaciones push).
3. En Application (Aplicación), seleccione la aplicación cuya configuración de APNs desee editar y, a
continuación, elija Edit (Editar).
4. En la página Edit (Editar), para Authentication type (Tipo de autenticación), elija Token (Token) o
Certificate (Certificado).
5. En función del tipo de autenticación que elija, haga una de estas cosas:
• Si elige Token (Token), proporcione la siguiente información de su cuenta de Apple Developer.
Amazon SNS requiere esta información para crear tokens de autenticación.

• Signing key (Clave de firma): clave de firma del token de autenticación de su cuenta de Apple
Developer, que se descarga como un archivo .p8. Apple permite descargar la clave de firma
solo una vez.
• Signing key ID (ID de clave de firma): ID que está asignado a la clave de firma. Amazon SNS
requiere esta información para crear tokens de autenticación. Para buscar este valor en su
cuenta de Apple Developer, elija Certificates, IDs & Profiles (Certificados, ID y perfiles), y luego
la clave en la sección Keys (Claves).
• Team identifier (Identificador de equipo): ID que está asignado al equipo de su cuenta de Apple
Developer. Puede encontrar este valor en la página Membresía.
• Bundle identifier (Identificador de paquete): ID que está asignado a su aplicación de iOS. Para
buscar este valor, elija Certificates, IDs & Profiles (Certificados, ID y perfiles), luego App IDs (ID
de aplicación) en la sección Identifiers (Identificadores) y, por último, la aplicación.
• Si elige Certificate (Certificado), proporcione la siguiente información:

279
Amazon Simple Notification
Service Guía para desarrolladores
Envío de notificaciones de inserción en móviles

• SSL certificate (Certificado SSL): archivo .p12 del certificado TLS. Puede exportar este archivo
desde Keychain Access después de descargar e instalar el certificado desde su cuenta de
Apple Developer.
• Certificate password (Contraseña de certificado): si ha asignado una contraseña al certificado,
especifíquela aquí.
6. Cuando termine de realizar los cambios, seleccione Save changes (Guardar cambios).

Envío de notificaciones de inserción en móviles


En esta sección, se describe cómo enviar un mensaje de notificaciones push móviles.

Temas
• Publicación de un tema (p. 280)
• Publicación de un dispositivo móvil (p. 280)
• Publicación de la carga útil específica de la plataforma (p. 280)

Publicación de un tema
También puede utilizar Amazon SNS para enviar mensajes a puntos de enlace móviles suscritos a un
tema. El concepto es el mismo que para la suscripción a un tema de otros tipos de puntos de enlace, como
Amazon SQS, HTTP/S, correo electrónico y SMS, tal y como se describe en ¿Qué es Amazon SNS? (p. 1).
La diferencia es que Amazon SNS se comunica a través de servicios de notificación, tales como Apple
Push Notification Service (APNS) y Google Firebase Cloud Messaging (FCM). Mediante los servicios de
notificaciones, los puntos de enlace móviles suscritos reciben las notificaciones enviadas al tema.

Publicación de un dispositivo móvil


Puede enviar mensajes de notificaciones push de Amazon SNS directamente a un punto de enlace que
represente una aplicación en un dispositivo móvil.

Para enviar un mensaje directo

1. Inicie sesión en la consola de Amazon SNS.


2. En el panel de navegación, elija Mobile (Móvil), Push notifications (Notificaciones push).
3. En la página Mobile push notifications (Notificaciones push para móvil), en la sección Platform
applications (Aplicaciones de plataforma), elija el nombre de la aplicación, como, por ejemplo,
MiAplicación.
4. En la página MiAplicación, en la sección Endpoints (Puntos de enlace), elija un punto de enlace y
después elija Publish message (Publicar mensaje).
5. En la página Publish message to endpoint (Publicar mensaje en punto de enlace), escriba el mensaje
que aparecerá en la aplicación del dispositivo móvil y, a continuación, elija Publish message (Publicar
mensaje).

Amazon SNS envía el mensaje de notificación al servicio de notificaciones de la plataforma que, a su


vez, envía el mensaje a la aplicación.

Publicación de la carga útil específica de la plataforma


Puede utilizar la AWS Management Console o las API de Amazon SNS para enviar mensajes
personalizados con cargas específicas de la plataforma a dispositivos móviles. Para obtener más

280
Amazon Simple Notification
Service Guía para desarrolladores
Envío de notificaciones de inserción en móviles

información acerca del uso de las API de Amazon SNS, consulte Acciones de la API de inserción
móvil (p. 288) y el archivo [Link] en [Link].

Envío de mensajes con formato JSON


Cuando envíe cargas específicas de la plataforma, los datos deben tener un formato de cadenas de pares
de clave-valor JSON, con las comillas incluidas entre caracteres de escape.

En los siguientes ejemplos, se muestra un mensaje personalizado para la plataforma de FCM.

{
"GCM":"{ \"notification\": { \"body\": \"Sample message for Android endpoints\", \"title
\":\"TitleTest\" } }"
}

Envío de mensajes específicos de la plataforma


Además de enviar datos personalizados como pares de clave-valor, puede enviar pares de clave-valor
específicos de la plataforma.

En el siguiente ejemplo, se muestra la inclusión de los parámetros de time_to_live y collapse_key


después de los pares clave-valor de datos personalizados en el parámetro data de FCM.

{
"GCM":"{
\"notification\":
{ \"body\": \"Sample message for Android endpoints\", \"title\":\"TitleTest\" },
\"data\":
{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}"
}
}

Para obtener una lista de los pares de clave-valor admitidos en cada uno de los servicios de notificaciones
push admitidos en Amazon SNS, consulte lo siguiente:

• Referencia de la clave de carga en la documentación de APNs


• Protocolo HTTP de Firebase Cloud Messaging en la documentación de FCM
• Enviar un mensaje en la documentación de ADM

Envío de mensajes a una aplicación en varias plataformas


Para enviar un mensaje a una aplicación instalada en dispositivos de varias plataformas, como FCM y
APNs, primero debe suscribir los puntos de enlace móviles a un tema de Amazon SNS y, a continuación,
publicar el mensaje en el tema.

En el siguiente ejemplo, se muestra un mensaje que debe enviarse a puntos de enlace móviles suscritos
en APNs, FCM y ADM:

{
"default": "This is the default message which must be present when publishing a message
to a topic. The default message will only be used if a message is not present for
one of the notification platforms.",
"APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"[Link]
\"} }",
"GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":
\"[Link]\"}}",
"ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":
\"[Link]\"}}"
}

281
Amazon Simple Notification
Service Guía para desarrolladores
Envío de notificaciones de inserción en móviles

Envío de mensajes a APNs como alertas o notificaciones en segundo plano


Amazon SNS puede enviar mensajes a APNs como notificaciones alert o background (para obtener
más información, consulte Inserción de actualizaciones en segundo plano en su aplicación en la
documentación de APNs).

• Mediante una notificación de APNs alert, se informa al usuario al mostrar un mensaje de alerta,
reproducir un sonido o agregar una insignia al icono de la aplicación.
• Se activa una notificación de APNs background o esta indica a la aplicación que actúe en función del
contenido de la notificación, sin informar al usuario.

Especificación de valores de encabezado APNs personalizada


Se recomienda especificar valores personalizados para el [Link].PUSH_TYPE atributo
de mensaje reservado (p. 79) mediante la acción de la API Publish de Amazon SNS, SDK de AWS o la
AWS CLI. En el siguiente ejemplo de la CLI content-available se establece como 1 y background
como apns-push-type para el tema especificado.

aws sns publish \


--endpoint-url [Link] \
--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-
bc89-012d-3e45-6fg7h890123i \
--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \
--message-attributes '{ \
"[Link]":
{"DataType":"String","StringValue":"[Link]"}, \
"[Link].PUSH_TYPE":{"DataType":"String","StringValue":"background"} \
"[Link]":{"DataType":"String","StringValue":"10"}}', \
--message-structure json

Inferencia del encabezado de tipo de push de APNs desde la carga


Si no establece el encabezado de APNs apns-push-type, Amazon SNS establece el encabezado en
alert o background según la clave content-available en el diccionario de aps de su configuración
de carga de APNs con formato JSON.
Note

Amazon SNS se puede inferir solo en encabezados alert o background, aunque el


encabezado apns-push-type se puede establecer en otros valores.

• apns-push-type toma el valor alert


• Si el diccionario aps contiene content-available defina en 1 y una o varias claves que activan las
interacciones del usuario.
• Si el diccionario aps contiene content-available defina en 0 o si la clave content-available
está ausente.
• Si el valor de la clave content-available no es un entero o un booleano.
• apns-push-type toma el valor background
• Si en el diccionario de aps solo se encuentra content-available establecida en 1 y no hay otras
claves que desencadenen interacciones del usuario.
Important

Si Amazon SNS envía un objeto de configuración sin procesar para APNs como notificación
solo en segundo plano, debe incluir el content-available definido en 1 en el diccionario
de aps. Aunque puede incluir claves personalizadas, el diccionario de aps no debe contener
ninguna clave que desencadene las interacciones del usuario (por ejemplo, alertas, insignias
o sonidos).

282
Amazon Simple Notification
Service Guía para desarrolladores
Atributos de aplicaciones móviles

A continuación se muestra un ejemplo de objeto de configuración sin procesar.

{
"APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}"
}

En este ejemplo, Amazon SNS establece el encabezado de APNs de apns-push-type en background


para el mensaje. Cuando Amazon SNS detecta que en el diccionario de apn se encuentra la clave de
content-available definida en 1, pero no hay ninguna otra clave que pueda desencadenar las
interacciones del usuario, establece el encabezado en background.

Atributos de aplicaciones móviles


Con Amazon Simple Notification Service (Amazon SNS), se puede registrar el estado de entrega de los
mensajes de notificaciones push. Después de configurar los atributos de las aplicaciones, se envían
entradas de registro a CloudWatch Logs para los mensajes enviados desde Amazon SNS a puntos de
enlace móviles. El log del estado de entrega de los mensajes aporta información operativa de mejor
calidad, como la siguiente:

• Saber si Amazon SNS ha entregado un mensaje de notificación push al servicio de notificaciones push.
• Identificar la respuesta enviada por el servicio de notificaciones push a Amazon SNS.
• Determinar el tiempo de permanencia del mensaje (el tiempo entre la marca temporal de publicación y
justo antes de entregarlo a un servicio de notificaciones push)

Con el fin de configurar los atributos de las aplicaciones para el estado de entrega de los mensajes,
puede utilizar la AWS Management Console, los kits de desarrollo de software (SDK) de AWS o la API de
consultas.

Temas
• Configuración de los atributos del estado de entrega de los mensajes mediante la AWS Management
Console (p. 283)
• Ejemplos de CloudWatch Logs del estado de entrega de los mensajes de Amazon SNS (p. 284)
• Configuración de atributos del estado de entrega de mensajes con los SDK de AWS (p. 285)
• Códigos de respuesta de la plataforma (p. 285)

Configuración de los atributos del estado de entrega de los


mensajes mediante la AWS Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Móvil y, a continuación, Notificaciones push.
3. Desde la sección Aplicaciones de plataforma, elija la aplicación en la que se encuentran los puntos de
enlace para los que desea recibir CloudWatch Logs.
4. Elija Application Actions (Acciones de la aplicación) y después Delivery Status (Estado de entrega).
5. En el cuadro de diálogo Delivery Status (Estado de entrega), elija Create IAM Roles (Crear roles de
IAM).

Se lo redirigirá a la consola de IAM.


6. Elija Permitir para conceder a Amazon SNS acceso de escritura para utilizar CloudWatch Logs en su
nombre.
7. Ahora, vuelva al cuadro de diálogo Estado de entrega e ingrese un número en el campo Porcentaje
de resultados correctos de la muestra (0-100) a fin de indicar el porcentaje de mensajes enviados de
forma correcta para los que desea recibir CloudWatch Logs.

283
Amazon Simple Notification
Service Guía para desarrolladores
Atributos de aplicaciones móviles

Note

Una vez que haya configurado los atributos de las aplicaciones para el estado de entrega
de los mensajes, todas las entregas de mensajes que hayan resultado erróneas generarán
CloudWatch Logs.
8. Por último, elija Save Configuration (Guardar configuración). Ahora podrá ver y analizar los
CloudWatch Logs en los que se encuentra el estado de entrega de los mensajes. Para obtener más
información sobre el uso de CloudWatch, consulte la documentación de CloudWatch.

Ejemplos de CloudWatch Logs del estado de entrega de los


mensajes de Amazon SNS
Una vez que haya configurado los atributos del estado de entrega de los mensajes para el punto de enlace
de una aplicación, se generarán CloudWatch Logs. A continuación, se muestran registros de ejemplo en
formato JSON:

SUCCESS

{
"status": "SUCCESS",
"notification": {
"timestamp": "2015-01-26 [Link].54",
"messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a"
},
"delivery": {
"statusCode": 200,
"dwellTimeMs": 65,
"token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-
IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-
wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw",
"attempts": 1,
"providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,
\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd
\"}]}",
"destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/
c23e42de-3699-3639-84dd-65f84474629d"
}
}

FAILURE

{
"status": "FAILURE",
"notification": {
"timestamp": "2015-01-26 [Link].678",
"messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f"
},
"delivery": {
"statusCode": 8,
"dwellTimeMs": 1451,
"token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73",
"attempts": 1,
"providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1,
cause=null)",
"destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/
APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944"
}
}

284
Amazon Simple Notification
Service Guía para desarrolladores
Atributos de aplicaciones móviles

Para obtener una lista de códigos de respuesta del servicio de notificaciones push, consulte Códigos de
respuesta de la plataforma (p. 285).

Configuración de atributos del estado de entrega de mensajes


con los SDK de AWS
Con los SDK de AWS, se ofrecen API en varios lenguajes para utilizar atributos de estado de entrega de
mensajes con Amazon SNS.

El ejemplo de Java siguiente muestra cómo utilizar la API SetPlatformApplicationAttributes


para configurar atributos de las aplicaciones para el estado de entrega de los mensajes de notificaciones
de inserción. Puede utilizar los atributos siguientes para el estado de entrega de los mensajes:
SuccessFeedbackRoleArn, FailureFeedbackRoleArn y SuccessFeedbackSampleRate.
Gracias a los atributos SuccessFeedbackRoleArn y FailureFeedbackRoleArn, se puede
conceder a Amazon SNS acceso de escritura para utilizar CloudWatch Logs en su nombre. El atributo
SuccessFeedbackSampleRate permite especificar el porcentaje de la frecuencia de muestreo (0-100)
de los mensajes entregados correctamente. Una vez configurado el atributo FailureFeedbackRoleArn,
todas las entregas de mensajes erróneas generarán CloudWatch Logs.

SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new


SetPlatformApplicationAttributesRequest();
Map<String, String> attributes = new HashMap<>();
[Link]("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
[Link]("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
[Link]("SuccessFeedbackSampleRate", "5");
[Link](attributes);
[Link]("arn:aws:sns:us-
west-2:111122223333:app/FCM/FCMPushApp");
[Link](setPlatformApplicationAttributesRequest);

Para obtener más información sobre el SDK para Java, consulte Introducción a AWS SDK for Java.

Códigos de respuesta de la plataforma


A continuación se incluye una lista de enlaces de códigos de respuesta del servicio de notificaciones push:

Servicio de notificaciones de inserción Códigos de respuesta

Amazon Device Messaging (ADM) Consulte Formato de respuesta en la


documentación de ADM.

Apple Push Notification Service (APNs) Consulte Respuesta HTTP/2 de APN en


Comunicación con APN en la Guía de
programación de notificaciones locales y remotas.

Firebase Cloud Messaging (FCM) Consulte Códigos de respuesta de errores de


mensajes descendentes en la documentación de
Firebase Cloud Messaging.

Servicio de notificaciones push de Microsoft para Consulte Push Notification Service Response
Windows Phone (MPNS) Codes for Windows Phone 8 en la documentación
de desarrollo de Windows 8.

Servicios de notificación push de Windows (WNS) Consulte "Response codes" en Push Notification
Service Request and Response Headers (Windows
Runtime Apps) en la documentación de desarrollo
de Windows 8.

285
Amazon Simple Notification
Service Guía para desarrolladores
Eventos de aplicaciones móviles

Eventos de aplicaciones móviles


Con Amazon SNS, se proporciona compatibilidad con la activación de notificaciones cuando se producen
determinados eventos de aplicaciones. Después puede ejecutar algunas acciones por programación en
dicho evento. Su aplicación debe ser compatible con un servicio de notificaciones push como Apple Push
Notification Service (APNs), Firebase Cloud Messaging (FCM) y Windows Push Notification Services
(WNS). Defina las notificaciones de eventos de aplicaciones mediante la consola de Amazon SNS, la AWS
CLI o los SDK de AWS.

Temas
• Eventos de aplicaciones disponibles (p. 286)
• Envío de notificaciones de inserción en móviles (p. 286)

Eventos de aplicaciones disponibles


Las notificaciones de eventos de aplicaciones hacen un seguimiento de cuándo se crean, eliminan
o actualizan los puntos de enlace individuales de la plataforma, así como los errores de entrega. A
continuación se muestran los nombres de los atributos para los eventos de la aplicación.

Nombre de atributo Desencadenador de la notificación

EventEndpointCreated Se añade a la aplicación un nuevo punto de enlace de la plataforma.

EventEndpointDeleted Se elimina cualquier punto de enlace de la plataforma asociado a la


aplicación.

EventEndpointUpdated Se cambia cualquiera de los atributos de los puntos de enlace de la


plataforma asociados a la aplicación.

EventDeliveryFailure Una entrega a cualquiera de los puntos de enlace de la plataforma


asociados a la aplicación encuentra un error permanente.
Note

Para realizar un seguimiento de los errores de entrega en el


lado de la aplicación de la plataforma, suscríbase a los eventos
de estado de entrega de los mensajes para la aplicación. Para
obtener más información, consulte Uso de los atributos de la
aplicaciones de Amazon SNS para el estado de entrega de los
mensajes.

Puede asociar cualquier atributo a una aplicación, que podrá recibir estas notificaciones de eventos.

Envío de notificaciones de inserción en móviles


Para enviar notificaciones de eventos de aplicaciones, debe especificar un tema para recibir las
notificaciones de cada tipo de evento. Como Amazon SNS envía las notificaciones, el tema puede
direccionarlas a los puntos de enlace que adoptarán acciones programáticas.
Important

Las aplicaciones de alto volumen crearán un gran número de notificaciones de eventos de


aplicaciones (por ejemplo, decenas de miles), que sobrepasarán los puntos de enlace destinados
a uso humano, como, por ejemplo, números de teléfono, direcciones de correo electrónico y

286
Amazon Simple Notification
Service Guía para desarrolladores
Eventos de aplicaciones móviles

aplicaciones móviles. Tenga en cuenta las siguientes directrices cuando envíe notificaciones de
eventos de aplicaciones a un tema:

• Los temas que reciban notificaciones deben contener solo suscripciones de puntos de enlace
de programación, como puntos de enlace HTTP o HTTPS, colas de Amazon SQS o funciones
de AWS Lambda.
• Para reducir la cantidad de procesamiento que las notificaciones activan, limite las
suscripciones de cada tema a un número reducido (por ejemplo, cinco o menos).

Puede enviar notificaciones de eventos de aplicaciones mediante la consola de Amazon SNS, AWS
Command Line Interface (AWS CLI) o los SDK de AWS.

AWS Management Console


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Mobile (Móvil), Push notifications (Notificaciones push).
3. En la página Mobile push notifications (Notificaciones push en móviles), en la sección Platform
applications (Aplicaciones de la plataforma), seleccione una aplicación y, a continuación, elija Edit
(Editar).
4. Expanda la sección Event notifications (Notificaciones de eventos).
5. Elija Actions (Acciones), Configure events (Configurar eventos).
6. Escriba los ARN de los temas que se van a utilizar para los siguientes eventos:

• Punto de enlace creado


• Punto de enlace eliminado
• Punto de enlace actualizado
• Error de entrega
7. Elija Save changes.

AWS CLI
Ejecute el comando set-platform-application-attributes.

En el siguiente ejemplo, se establece el mismo tema de Amazon SNS para los cuatro eventos de
aplicación:

aws sns set-platform-application-attributes


--platform-application-arn arn:aws:sns:us-east-1:12345EXAMPLE:app/FCM/
MyFCMPlatformApplication
--attributes EventEndpointCreated="arn:aws:sns:us-
east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointDeleted="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointUpdated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventDeliveryFailure="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents"

AWS SDK
Establezca las notificaciones de eventos de aplicación enviando una solicitud de
SetPlatformApplicationAttributes con la API de Amazon SNS mediante un SDK de AWS.

Si desea obtener una lista completa de las guías para desarrolladores de SDK de AWS y ejemplos de
código, incluida ayuda para empezar e información sobre versiones anteriores, consulte Uso de Amazon
SNS con un AWS SDK (p. 6).

287
Amazon Simple Notification
Service Guía para desarrolladores
Acciones de la API de inserción móvil

Acciones de la API de inserción móvil


Para utilizar las API de inserción móvil de Amazon SNS, primero debe cumplir los requisitos previos del
servicio de notificaciones push, como Apple Push Notification Service (APNs) y Firebase Cloud Messaging
(FCM). Para obtener más información acerca de los requisitos previos, consulte Requisitos previos para las
notificaciones de usuario de Amazon SNS (p. 270).

Para enviar un mensaje de notificación de inserción a un dispositivo y una aplicación móvil mediante
las API, primero debe ejecutar la acción CreatePlatformApplication, que devuelve un atributo
PlatformApplicationArn. A continuación, PlatformApplicationArn utiliza el atributo
CreatePlatformEndpoint y obtiene un atributo EndpointArn. Después puede utilizar el atributo
EndpointArn con la acción Publish para enviar un mensaje de notificación a un dispositivo y una
aplicación móvil, o bien puede utilizar el atributo EndpointArn con la acción Subscribe para suscribirse
a un tema. Para obtener más información, consulte Información general del proceso de notificación de
usuario (p. 269).

A continuación, se muestra cómo son las API de inserción móvil de Amazon SNS.

CreatePlatformApplication

Crea un objeto de aplicación de plataforma para uno de los servicios de notificaciones push admitidos,
como APNs o FCM, en el que se pueden registrar dispositivos y aplicaciones móviles. Devuelve un
atributo PlatformApplicationArn, que la acción CreatePlatformEndpoint utiliza.
CreatePlatformEndpoint

Crea un punto de enlace para un dispositivo y una aplicación móvil en uno de los servicios
de notificaciones de inserción admitidos. CreatePlatformEndpoint utiliza el atributo
PlatformApplicationArn que devuelve la acción CreatePlatformApplication. El atributo
EndpointArn, que se devuelve cuando se usa CreatePlatformEndpoint, se utiliza con la acción
Publish para enviar un mensaje de notificación a una aplicación móvil y un dispositivo.
CreateTopic

Crea un tema en el que se pueden publicar mensajes.


DeleteEndpoint

Elimina el punto de enlace de un dispositivo y una aplicación móvil en uno de los servicios de
notificaciones de inserción admitidos.
DeletePlatformApplication

Elimina un objeto de aplicación de plataforma.


DeleteTopic

Elimina un tema y todas sus suscripciones.


GetEndpointAttributes

Recupera los atributos del punto de enlace de un dispositivo y una aplicación móvil.
GetPlatformApplicationAttributes

Recupera los atributos del objeto de aplicación de plataforma.


ListEndpointsByPlatformApplication

Genera una lista de los puntos de enlace y los atributos de los puntos de enlace de los dispositivos y
aplicaciones móviles de un servicio de notificaciones de inserción compatible.
ListPlatformApplications

Genera una lista de objetos de aplicación de plataforma para los servicios de notificaciones de
inserción compatibles.

288
Amazon Simple Notification
Service Guía para desarrolladores
Errores de la API de inserción móvil

Publish

Envía un mensaje de notificación a todos los puntos de enlace suscritos a un tema.


SetEndpointAttributes

Establece los atributos de un punto de enlace de un dispositivo y una aplicación móvil.


SetPlatformApplicationAttributes

Establece los atributos del objeto de aplicación de plataforma.


Subscribe

Prepara la suscripción de un punto de enlace enviando a dicho punto de enlace un mensaje de


confirmación. Para crear en realidad una suscripción, el propietario del punto de enlace debe llamar a
la acción ConfirmSubscription con el token del mensaje de confirmación.
Unsubscribe

Elimina una suscripción.

Errores de la API de inserción móvil


En la siguiente tabla, se muestran los errores que las API de Amazon SNS devuelven para las inserciones
móviles. Para obtener más información sobre las API de Amazon SNS para inserciones móviles, consulte
Acciones de la API de inserción móvil (p. 288).

Error Descripción Código de estado Acción API


HTTPS

Application Name is null El nombre de aplicación 400 CreatePlatformApplication


string solicitado está
establecido en null.

Platform Name is null El nombre de plataforma 400 CreatePlatformApplication


string solicitado está
establecido en null.

Platform Name is invalid Se ha proporcionado un 400 CreatePlatformApplication


valor no válido o fuera
de rango para el nombre
de la plataforma.

APNs — Principal is not Se ha proporcionado 400 CreatePlatformApplication


a valid certificate un certificado no
válido para la entidad
principal de APNs,
que es el certificado
SSL. Para obtener
información, consulte
CreatePlatformApplication
en la Referencia de la
API de Amazon Simple
Notification Service.

APNs — Principal is Se ha proporcionado un 400 CreatePlatformApplication


a valid cert but not in certificado válido que no
a .pem format está en formato .pem
para la entidad principal

289
Amazon Simple Notification
Service Guía para desarrolladores
Errores de la API de inserción móvil

Error Descripción Código de estado Acción API


HTTPS
de APNs, que es el
certificado SSL.

APNs — Principal is an Se ha proporcionado 400 CreatePlatformApplication


expired certificate un certificado vencido
para la entidad principal
de APNs, que es el
certificado SSL.

APNs — Principal is Se ha proporcionado 400 CreatePlatformApplication


not an Apple issued un certificado que no ha
certificate emitido Apple para la
entidad principal APNs,
que es el certificado
SSL.

APNs — Principal is not La entidad principal 400 CreatePlatformApplication


provided de APNs, que es el
certificado SSL, no se
ha proporcionado.

APNs — Credential is La credencial de APNs, 400 CreatePlatformApplication


not provided que es la clave privada,
no se ha proporcionado.
Para obtener
información, consulte
CreatePlatformApplication
en la Referencia de la
API de Amazon Simple
Notification Service.

APNs — Credential La credencial de APNs, 400 CreatePlatformApplication


are not in a valid .pem que es la clave privada,
format no está en formato .pem
válido.

FCM — serverAPIKey is La credencial de CM, 400 CreatePlatformApplication


not provided que es la clave de API,
no se ha proporcionado.
Para obtener
información, consulte
CreatePlatformApplication
en la Referencia de la
API de Amazon Simple
Notification Service.

FCM — serverAPIKey is La credencial de FCM, 400 CreatePlatformApplication


empty que es la clave de API,
está vacía.

FCM — serverAPIKey is La credencial de FCM, 400 CreatePlatformApplication


a null string que es la clave de API,
es nula.

290
Amazon Simple Notification
Service Guía para desarrolladores
Errores de la API de inserción móvil

Error Descripción Código de estado Acción API


HTTPS

FCM — serverAPIKey is La credencial de FCM, 400 CreatePlatformApplication


invalid que es la clave de API,
no es válida.

ADM — clientsecret is La clave secreta de 400 CreatePlatformApplication


not provided cliente requerida no se
ha proporcionado.

ADM — clientsecret is a La cadena requerida 400 CreatePlatformApplication


null string para la clave secreta de
cliente es nula.

ADM — client_secret is La cadena requerida 400 CreatePlatformApplication


empty string para la clave secreta de
cliente está vacía.

ADM — client_secret is La cadena requerida 400 CreatePlatformApplication


not valid para la clave secreta de
cliente no es válida.

ADM — client_id is La cadena requerida 400 CreatePlatformApplication


empty string para el ID de cliente
está vacía.

ADM — clientId is not La cadena requerida 400 CreatePlatformApplication


provided para el ID de cliente no
se ha proporcionado.

ADM — clientid is a null La cadena requerida 400 CreatePlatformApplication


string para el ID de cliente es
nula.

ADM — client_id is not La cadena requerida 400 CreatePlatformApplication


valid para el ID de cliente no
es válida.

EventEndpointCreated EventEndpointCreated 400 CreatePlatformApplication


has invalid ARN format tiene un formato de
ARN no válido.

EventEndpointDeleted EventEndpointDeleted 400 CreatePlatformApplication


has invalid ARN format tiene un formato de
ARN no válido.

EventEndpointUpdated EventEndpointUpdated 400 CreatePlatformApplication


has invalid ARN format tiene un formato de
ARN no válido.

EventDeliveryAttemptFailure
EventDeliveryAttemptFailure
400 CreatePlatformApplication
has invalid ARN format tiene un formato de
ARN no válido.

EventDeliveryFailure EventDeliveryFailure 400 CreatePlatformApplication


has invalid ARN format tiene un formato de
ARN no válido.

291
Amazon Simple Notification
Service Guía para desarrolladores
Errores de la API de inserción móvil

Error Descripción Código de estado Acción API


HTTPS

EventEndpointCreated EventEndpointCreated 400 CreatePlatformApplication


is not an existing Topic no es un tema que
exista.

EventEndpointDeleted is EventEndpointDeleted 400 CreatePlatformApplication


not an existing Topic no es un tema que
exista.

EventEndpointUpdated EventEndpointUpdated 400 CreatePlatformApplication


is not an existing Topic no es un tema que
exista.

EventDeliveryAttemptFailure
EventDeliveryAttemptFailure
400 CreatePlatformApplication
is not an existing Topic no es un tema que
exista.

EventDeliveryFailure is EventDeliveryFailure no 400 CreatePlatformApplication


not an existing Topic es un tema que exista.

Platform ARN is invalid El ARN de la plataforma 400 SetPlatformAttributes


no es válido.

Platform ARN is valid El ARN de la plataforma 400 SetPlatformAttributes


but does not belong to es válido, pero no
the user pertenece al usuario.

APNs — Principal is not Se ha proporcionado 400 SetPlatformAttributes


a valid certificate un certificado no
válido para la entidad
principal de APNs,
que es el certificado
SSL. Para obtener
información, consulte
CreatePlatformApplication
en la Referencia de la
API de Amazon Simple
Notification Service.

APNs — Principal is Se ha proporcionado un 400 SetPlatformAttributes


a valid cert but not in certificado válido que no
a .pem format está en formato .pem
para la entidad principal
de APNs, que es el
certificado SSL.

APNs — Principal is an Se ha proporcionado 400 SetPlatformAttributes


expired certificate un certificado vencido
para la entidad principal
de APNs, que es el
certificado SSL.

292
Amazon Simple Notification
Service Guía para desarrolladores
Errores de la API de inserción móvil

Error Descripción Código de estado Acción API


HTTPS

APNs — Principal is Se ha proporcionado 400 SetPlatformAttributes


not an Apple issued un certificado que no ha
certificate emitido Apple para la
entidad principal APNs,
que es el certificado
SSL.

APNs — Principal is not La entidad principal 400 SetPlatformAttributes


provided de APNs, que es el
certificado SSL, no se
ha proporcionado.

APNs — Credential is La credencial de APNs, 400 SetPlatformAttributes


not provided que es la clave privada,
no se ha proporcionado.
Para obtener
información, consulte
CreatePlatformApplication
en la Referencia de la
API de Amazon Simple
Notification Service.

APNs — Credential La credencial de APNs, 400 SetPlatformAttributes


are not in a valid .pem que es la clave privada,
format no está en formato .pem
válido.

FCM — serverAPIKey is La credencial de CM, 400 SetPlatformAttributes


not provided que es la clave de API,
no se ha proporcionado.
Para obtener
información, consulte
CreatePlatformApplication
en la Referencia de la
API de Amazon Simple
Notification Service.

FCM — serverAPIKey is La credencial de FCM, 400 SetPlatformAttributes


a null string que es la clave de API,
es nula.

ADM — clientId is not La cadena requerida 400 SetPlatformAttributes


provided para el ID de cliente no
se ha proporcionado.

ADM — clientid is a null La cadena requerida 400 SetPlatformAttributes


string para el ID de cliente es
nula.

ADM — clientsecret is La clave secreta de 400 SetPlatformAttributes


not provided cliente requerida no se
ha proporcionado.

293
Amazon Simple Notification
Service Guía para desarrolladores
Errores de la API de inserción móvil

Error Descripción Código de estado Acción API


HTTPS

ADM — clientsecret is a La cadena requerida 400 SetPlatformAttributes


null string para la clave secreta de
cliente es nula.

EventEndpointUpdated EventEndpointUpdated 400 SetPlatformAttributes


has invalid ARN format tiene un formato de
ARN no válido.

EventEndpointDeleted EventEndpointDeleted 400 SetPlatformAttributes


has invalid ARN format tiene un formato de
ARN no válido.

EventEndpointUpdated EventEndpointUpdated 400 SetPlatformAttributes


has invalid ARN format tiene un formato de
ARN no válido.

EventDeliveryAttemptFailure
EventDeliveryAttemptFailure
400 SetPlatformAttributes
has invalid ARN format tiene un formato de
ARN no válido.

EventDeliveryFailure EventDeliveryFailure 400 SetPlatformAttributes


has invalid ARN format tiene un formato de
ARN no válido.

EventEndpointCreated EventEndpointCreated 400 SetPlatformAttributes


is not an existing Topic no es un tema que
exista.

EventEndpointDeleted is EventEndpointDeleted 400 SetPlatformAttributes


not an existing Topic no es un tema que
exista.

EventEndpointUpdated EventEndpointUpdated 400 SetPlatformAttributes


is not an existing Topic no es un tema que
exista.

EventDeliveryAttemptFailure
EventDeliveryAttemptFailure
400 SetPlatformAttributes
is not an existing Topic no es un tema que
exista.

EventDeliveryFailure is EventDeliveryFailure no 400 SetPlatformAttributes


not an existing Topic es un tema que exista.

Platform ARN is invalid El ARN de la plataforma 400 GetPlatformApplicationAttribu


no es válido.

Platform ARN is valid El ARN de la plataforma 403 GetPlatformApplicationAttribu


but does not belong to es válido, pero no
the user pertenece al usuario.

Token specified is El token especificado no 400 ListPlatformApplications


invalid es válido.

Platform ARN is invalid El ARN de la plataforma 400 ListEndpointsByPlatformApplic


no es válido.

294
Amazon Simple Notification
Service Guía para desarrolladores
Errores de la API de inserción móvil

Error Descripción Código de estado Acción API


HTTPS

Platform ARN is valid El ARN de la plataforma 404 ListEndpointsByPlatformApplic


but does not belong to es válido, pero no
the user pertenece al usuario.

Token specified is El token especificado no 400 ListEndpointsByPlatformApplic


invalid es válido.

Platform ARN is invalid El ARN de la plataforma 400 DeletePlatformApplication


no es válido.

Platform ARN is valid El ARN de la plataforma 403 DeletePlatformApplication


but does not belong to es válido, pero no
the user pertenece al usuario.

Platform ARN is invalid El ARN de la plataforma 400 CreatePlatformEndpoint


no es válido.

Platform ARN is valid El ARN de la plataforma 404 CreatePlatformEndpoint


but does not belong to es válido, pero no
the user pertenece al usuario.

Token is not specified El token no se ha 400 CreatePlatformEndpoint


especificado.

Token is not of correct El token no tiene la 400 CreatePlatformEndpoint


length longitud correcta.

Customer User data is Los datos de usuario del 400 CreatePlatformEndpoint


too large cliente no pueden tener
más de 2048 bytes en la
codificación UTF-8.

Endpoint ARN is invalid El ARN del punto de 400 DeleteEndpoint


enlace no es válido.

Endpoint ARN is valid El ARN del punto de 403 DeleteEndpoint


but does not belong to enlace es válido, pero
the user no pertenece al usuario.

Endpoint ARN is invalid El ARN del punto de 400 SetEndpointAttributes


enlace no es válido.

Endpoint ARN is valid El ARN del punto de 403 SetEndpointAttributes


but does not belong to enlace es válido, pero
the user no pertenece al usuario.

Token is not specified El token no se ha 400 SetEndpointAttributes


especificado.

Token is not of correct El token no tiene la 400 SetEndpointAttributes


length longitud correcta.

Customer User data is Los datos de usuario del 400 SetEndpointAttributes


too large cliente no pueden tener
más de 2048 bytes en la
codificación UTF-8.

295
Amazon Simple Notification
Service Guía para desarrolladores
TTL para las inserciones móviles

Error Descripción Código de estado Acción API


HTTPS

Endpoint ARN is invalid El ARN del punto de 400 GetEndpointAttributes


enlace no es válido.

Endpoint ARN is valid El ARN del punto de 403 GetEndpointAttributes


but does not belong to enlace es válido, pero
the user no pertenece al usuario.

Target ARN is invalid El ARN de destino no es 400 Publish


válido.

Target ARN is valid but El ARN de destino 403 Publish


does not belong to the es válido, pero no
user pertenece al usuario.

Message format is El formato del mensaje 400 Publish


invalid no es válido.

Message size is larger El tamaño del mensaje 400 Publish


than supported by es superior al tamaño
protocol/end-service compatible con el
protocolo/servicio final.

Uso del atributo de mensaje de período de vida (TTL)


de Amazon SNS para las notificaciones push móviles
Con Amazon Simple Notification Service (Amazon SNS), se admite la configuración de un atributo de
mensaje de período de vida (TTL) para los mensajes de notificaciones push móviles. Esto se suma a la
capacidad de configuración del TTL dentro del cuerpo del mensaje de Amazon SNS para los servicios de
notificaciones push móviles compatibles con dicha capacidad, como Amazon Device Messaging (ADM) y
Firebase Cloud Messaging (FCM).

El atributo de mensaje TTL se utiliza para especificar metadatos de vencimiento de un mensaje. De


esta manera, se puede especificar de cuánto tiempo dispone el servicio de notificaciones push, como
Apple Push Notification Service (APNs) o FCM, para entregar el mensaje al punto de enlace. Si, por
algún motivo, (por ejemplo, el dispositivo móvil se ha apagado) no se puede entregar el mensaje en el
TTL especificado, se abandonará dicho mensaje y no se realizará ningún otro intento de entrega. Para
especificar el TTL en los atributos de los mensajes, puede utilizar la AWS Management Console, los kit de
desarrollo de software (SDK) de AWS o la API de consultas.

Temas
• Atributos de los mensajes TTL para los servicios de notificaciones de inserción (p. 296)
• Orden de prioridad para determinar el TTL (p. 297)
• Especificación del TTL mediante la AWS Management Console (p. 297)

Atributos de los mensajes TTL para los servicios de


notificaciones de inserción
A continuación, se ofrece una lista de atributos de los mensajes TTL para los servicios de notificaciones
push que puede utilizar para establecer cuando utilice los SDK de AWS o la API de consultas:

296
Amazon Simple Notification
Service Guía para desarrolladores
TTL para las inserciones móviles

Servicio de notificaciones de inserción Atributo de los mensajes TTL

Amazon Device Messaging (ADM) [Link]

Apple Push Notification Service (APNs) [Link]

Apple Push Notification Service Sandbox [Link].APNS_SANDBOX.TTL


(APNs_SANDBOX)

Baidu Cloud Push (Baidu) [Link]

Firebase Cloud Messaging (FCM) [Link]

Servicios de notificación push de Windows (WNS) [Link]

Cada servicio de notificaciones push administra el TTL de forma distinta. Con Amazon SNS, se ofrece
una vista resumida de TTL de todos los servicios de notificaciones push, lo que facilita la especificación
del TTL. Si utiliza la AWS Management Console para especificar el TTL (en segundos), solo tendrá
que ingresar el valor de TTL una vez y Amazon SNS lo calculará para cada uno de los servicios de
notificaciones push seleccionados al publicar el mensaje.

El TTL depende de la hora de publicación. Antes de entregar un mensaje de notificación push a un servicio
de notificaciones push concreto, Amazon SNS calcula el tiempo de permanencia (la marca de tiempo entre
la publicación y el momento previo a la entrega de un servicio de notificaciones push) de la notificación
push y traslada el resto del TTL al servicio de notificaciones push específico. Si TTL es inferior al tiempo de
permanencia, Amazon SNS no intentará publicar.

Si especifica un TTL para un mensaje de notificación push, el valor TTL debe ser un número entero
positivo, a menos que el valor de 0 tenga un significado específico para el servicio de notificaciones push,
como es el caso en APNs y FCM. Si el valor de TTL se establece en 0 y el servicio de notificaciones
push no tiene un significado específico para 0, Amazon SNS eliminará el mensaje. Para obtener más
información sobre el parámetro TTL establecido en 0 cuando utiliza APNs, consulte Tabla A-3 Identificados
de elementos para notificaciones remotas en la documentación API del proveedor binario.

Orden de prioridad para determinar el TTL


La prioridad que Amazon SNS utiliza para determinar el TTL de un mensaje de notificación push sigue el
orden siguiente, en el que el número más bajo tiene la máxima prioridad:

1. TTL del atributo de mensaje


2. TTL del cuerpo del mensaje
3. TTL predeterminado del servicio de notificaciones de inserción (varía según el servicio)
4. TTL predeterminado de Amazon SNS (4 semanas)

Si configura diferentes valores de TTL (uno en los atributos del mensaje y otro en el cuerpo del mensaje)
para el mismo mensaje, Amazon SNS modificará el TTL del cuerpo del mensaje para que coincida con el
TTL especificado en el atributo del mensaje.

Especificación del TTL mediante la AWS Management Console


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Mobile (Móvil), Push notifications (Notificaciones push).
3. En la página Notificaciones push móviles, en la sección Aplicaciones de la plataforma, seleccione una
aplicación y, a continuación, elija Editar.

297
Amazon Simple Notification
Service Guía para desarrolladores
Regiones admitidas

4. En la página MiAplicación, en la sección Puntos de enlace, elija un punto de enlace y, después,


Publicar mensaje.
5. En la sección Message details (Detalles del mensaje), escriba el TTL (los segundos que tiene el
servicio de notificaciones push para entregar el mensaje al punto de enlace).
6. Elija Publish message (Publicar mensaje).

Regiones compatibles para aplicaciones móviles


En este momento, puede crear aplicaciones móviles en las siguientes regiones:

• EE. UU. Este (Norte de Virginia)


• [Link]. Oeste (Norte de California)
• US West (Oregon)
• Asia Pacific (Mumbai)
• Asia Pacific (Seoul)
• Asia Pacífico (Singapur)
• Asia Pacífico (Sídney)
• Asia-Pacífico (Tokio)
• Europa (Fráncfort)
• Europa (Irlanda)
• América del Sur (São Paulo)

Prácticas recomendadas de notificaciones push en


móviles
En esta sección se describen diversas prácticas recomendadas que es posible que le ayuden a mejorar la
implicación de los clientes.

Administración de puntos de conexión


Pueden producirse problemas de entrega en situaciones en las que los tokens de dispositivo cambien
debido a la acción de un usuario en el dispositivo (por ejemplo, se vuelve a instalar una aplicación en el
dispositivo), o actualizaciones de certificados que afectan a los dispositivos que se ejecutan en una versión
iOS determinada. Es una práctica recomendada de Apple para registrarse con APN cada vez que se inicia
la aplicación.

Dado que el token del dispositivo no cambia cada vez que un usuario abre una aplicación, se puede usar
la API de CreatePlatformEndpoint idempotente. Sin embargo, esto puede presentar duplicados para
el mismo dispositivo en los casos en que el token en sí no es válido o si el punto de conexión es válido
pero está desactivado (por ejemplo, una discrepancia de entornos aislados y de producción).

Se puede usar un mecanismo de administración de tokens de dispositivo como el del


pseudocódigo (p. 272).

Registro de estado de entrega


Para monitorear el estado de entrega de notificaciones push, le recomendamos que habilite el registro
del estado de entrega para la aplicación de la plataforma de Amazon SNS. Esto le ayuda a solucionar
los errores de entrega porque los registros contienen códigos de respuesta (p. 285) de un proveedor
devueltos del servicio de plataforma push. Para obtener más información sobre cómo habilitar el registro

298
Amazon Simple Notification
Service Guía para desarrolladores
Notificaciones por correo electrónico

del estado de entrega, consulte ¿Cómo accedo a los registros de entrega de temas de Amazon SNS para
notificaciones push?.

Notificaciones de eventos
Para administrar puntos de conexión de forma impulsada por eventos, puede utilizar la funcionalidad
notificaciones de eventos (p. 287). Esto permite que el tema de Amazon SNS configurado elimine
eventos a los suscriptores, como una función Lambda, para eventos de aplicaciones de plataforma de
creación, eliminación, actualizaciones y errores de entrega de puntos de conexión.

Notificaciones por correo electrónico


En esta página, se describe cómo suscribir una dirección de correo electrónico (p. 299) a un tema de
Amazon SNS mediante la AWS Management Console, AWS SDK for Java, o bien AWS SDK for .NET.
Notas

• No se puede personalizar el cuerpo del mensaje de correo electrónico. La función de entrega de


correo electrónico está diseñada para proporcionar alertas internas del sistema, no mensajes de
marketing.
• El rendimiento de la entrega de correo electrónico se limita de forma controlada de acuerdo con
las cuotas de Amazon SNS.

Important

Para evitar que los destinatarios de la lista de correo cancelen la suscripción a los correos
electrónicos de temas de Amazon SNS, consulte Configurar una suscripción de correo electrónico
que requiera autenticación para cancelar la suscripción en AWS Support.

Para suscribir una dirección de correo electrónico al


tema de Amazon SNS mediante la , siga estos pasos:
AWS Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación izquierdo, elija Subscriptions (Suscripciones).
3. En la página Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).
4. En la página Create subscription (Crear suscripción), en la sección Details (Detalles), haga lo
siguiente:

a. En ARN de tema, elija el nombre de recurso de Amazon (ARN) de un tema.


b. En Protocol (Protocolo), elija Email (Correo electrónico).
c. En Punto de enlace, ingrese su dirección de correo electrónico.
d. (Opcional) Para configurar una política de filtro, expanda la sección Política de filtro de
suscripción. Para obtener más información, consulte Políticas de filtro de suscripciones de
Amazon SNS (p. 84).
e. (Opcional) Para configurar una cola de mensajes fallidos en la suscripción, expanda la sección
Política de reconducción (cola de mensajes fallidos). Para obtener más información, consulte
Colas de mensajes fallidos (DLQ) de Amazon SNS (p. 112).
f. Elija Create subscription (Crear suscripción).

En la consola se crea la suscripción y se abre la página Detalles de la suscripción.

299
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

Debe confirmar la suscripción antes de que se pueda comenzar a recibir mensajes en la dirección de
correo electrónico.

Para confirmar una suscripción, siga estos pasos:

1. Verifique la bandeja de entrada de correo electrónico y elija Confirmar la suscripción en el correo


electrónico de Amazon SNS.
2. En Amazon SNS, se abre su navegador web y se muestra una confirmación de suscripción con su ID
de suscripción.

Para suscribir una dirección de correo electrónico al


tema de Amazon SNS mediante un SDK de AWS, siga
estos pasos:
Para utilizar un SDK de AWS, debe configurarlo con sus credenciales. Para obtener más información,
consulte Archivos de configuración y credenciales compartidos en la Guía de referencia de SDK y
herramientas de AWS.

En los siguientes ejemplos de código, se muestra cómo suscribir una dirección de correo electrónico a un
tema de Amazon SNS.

C++

SDK para C++

/**
* Subscribe an email address endpoint to a topic - demonstrates how to initiate a
subscription to an Amazon SNS topic with delivery
* to an email address.
*
* SNS will send a subscription confirmation email to the email address provided
which you need to confirm to
* receive messages.
*
* <protocol_value> set to "email" provides delivery of message via SMTP (see
[Link] for available
protocols).
* <topic_arn_value> can be obtained from run_list_topics executable and includes
the "arn:" prefix.
*/

int main(int argc, char ** argv)


{
if (argc != 4)
{
std::cout << "Usage: subscribe_email <protocol_value=email> <topic_arn_value>"
" <email_address>" << std::endl;
return 1;
}

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String protocol = argv[1];
Aws::String topic_arn = argv[2];
Aws::String endpoint = argv[3];

300
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

Aws::SNS::Model::SubscribeRequest s_req;
s_req.SetTopicArn(topic_arn);
s_req.SetProtocol(protocol);
s_req.SetEndpoint(endpoint);

auto s_out = [Link](s_req);

if (s_out.IsSuccess())
{
std::cout << "Subscribed successfully " << std::endl;
}
else
{
std::cout << "Error while subscribing " << s_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);
return 0;
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Go.

Java

SDK para Java 2.x

public static void subEmail(SnsClient snsClient, String topicArn, String email)


{

try {
SubscribeRequest request = [Link]()
.protocol("email")
.endpoint(email)
.returnSubscriptionArn(true)
.topicArn(topicArn)
.build();

SubscribeResponse result = [Link](request);


[Link]("Subscription ARN: " + [Link]() +
"\n\n Status is " + [Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

301
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SubscribeCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
Protocol: "email" /* required */,
TopicArn: "TOPIC_ARN", //TOPIC_ARN
Endpoint: "EMAIL_ADDRESS", //EMAIL_ADDRESS
};

const run = async () => {


try {
const data = await [Link](new SubscribeCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

302
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

suspend fun subEmail(topicArnVal: String, email: String) : String {

val request = SubscribeRequest {


protocol = "email"
endpoint = email
returnSubscriptionArn = true
topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
return [Link]()
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Prepares to subscribe an endpoint by sending the endpoint a confirmation
message.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$protocol = 'email';
$endpoint = 'sample@[Link]';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->subscribe([
'Protocol' => $protocol,
'Endpoint' => $endpoint,
'ReturnSubscriptionArn' => true,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

303
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def subscribe(topic, protocol, endpoint):


"""
Subscribes an endpoint to the topic. Some endpoint types, such as email,
must be confirmed before their subscriptions are active. When a
subscription
is not confirmed, its Amazon Resource Number (ARN) is set to
'PendingConfirmation'.

:param topic: The topic to subscribe to.


:param protocol: The protocol of the endpoint, such as 'sms' or 'email'.
:param endpoint: The endpoint that receives messages, such as a phone
number
(in E.164 format) for SMS messages, or an email address
for
email messages.
:return: The newly added subscription.
"""
try:
subscription = [Link](
Protocol=protocol, Endpoint=endpoint, ReturnSubscriptionArn=True)
[Link]("Subscribed %s %s to topic %s.", protocol, endpoint,
[Link])
except ClientError:
[Link](
"Couldn't subscribe %s %s to topic %s.", protocol, endpoint,
[Link])
raise
else:
return subscription

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de API de
AWS SDK for Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def subscription_created?(sns_client, topic_arn, protocol, endpoint)

304
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

sns_client.subscribe(topic_arn: topic_arn, protocol: protocol, endpoint:


endpoint)

rescue StandardError => e


puts "Error while creating the subscription: #{[Link]}"
end

# Full example call:


def run_me

protocol = 'email'
endpoint = 'EMAIL_ADDRESS'
topic_arn = 'TOPIC_ARN'
region = 'REGION'

sns_client = Aws::SNS::[Link](region: region)

puts "Creating the subscription."

if subscription_created?(sns_client, topic_arn, protocol, endpoint)


puts 'The subscriptions was created.'
else
puts 'The subscription was not created. Stopping program.'
exit 1
end
end

run_me if $PROGRAM_NAME == __FILE__

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Ruby.

Rust

SDK para Rust


Note

Esta documentación es para un SDK en versión preliminar. El SDK está sujeto a cambios
y no se debe utilizar en producción.

async fn subscribe_and_publish(
client: &Client,
topic_arn: &str,
email_address: &str,
) -> Result<(), Error> {
println!("Receiving on topic with ARN: `{}`", topic_arn);

let rsp = client


.subscribe()
.topic_arn(topic_arn)
.protocol("email")
.endpoint(email_address)
.send()
.await?;

305
Amazon Simple Notification
Service Guía para desarrolladores
AWS SDK

println!("Added a subscription: {:?}", rsp);

let rsp = client


.publish()
.topic_arn(topic_arn)
.message("hello sns!")
.send()
.await?;

println!("Published message: {:?}", rsp);

Ok(())
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK para Rust.

306
Amazon Simple Notification
Service Guía para desarrolladores

Ejemplos de código de Amazon SNS


con SDK de AWS
Los siguientes ejemplos de código indican cómo utilizar Amazon SNS con un kit de desarrollo de software
(SDK) de AWS.

Los ejemplos se dividen en las categorías siguientes:

Acciones

Fragmentos de código que muestran cómo llamar a funciones de servicio individuales.


Situaciones

Ejemplos de código que muestran cómo llevar a cabo una tarea específica llamando a varias
funciones dentro del mismo servicio.
Ejemplos de servicios combinados

Aplicaciones de ejemplo que funcionan en varios servicios de AWS.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Ejemplos de código
• Acciones de Amazon SNS con SDK de AWS (p. 308)
• Agregar etiquetas a un tema de Amazon SNS mediante un SDK de AWS (p. 309)
• Comprobación de la desactivación de un número de teléfono de Amazon SNS mediante un
SDK de AWS (p. 311)
• Confirmación de que el propietario de un punto de enlace desea recibir mensajes de Amazon
SNS mediante un SDK de AWS (p. 314)
• Creación de un tema de Amazon SNS mediante un SDK de AWS (p. 316)
• Eliminación de una suscripción a Amazon SNS mediante un SDK de AWS (p. 321)
• Eliminación de un tema de Amazon SNS mediante un SDK de AWS (p. 325)
• Cómo obtener las propiedades de un tema de Amazon SNS mediante un SDK de
AWS (p. 329)
• Cómo obtener la configuración para enviar mensajes SMS de Amazon SNS mediante un SDK
de AWS (p. 333)
• Enumeración de números de teléfono desactivados de Amazon SNS mediante un SDK de
AWS (p. 336)
• Enumeración de suscriptores de un tema de Amazon SNS mediante un SDK de
AWS (p. 337)
• Enumeración de temas de Amazon SNS mediante un SDK de AWS (p. 343)
• Publicación de un mensaje SMS en un tema de Amazon SNS mediante un SDK de
AWS (p. 348)
• Publicación en un tema de Amazon SNS mediante un SDK de AWS (p. 352)
• Configuración de una cola de mensajes fallidos para una suscripción de Amazon SNS
mediante un SDK de AWS, siga estos pasos: (p. 358)

307
Amazon Simple Notification
Service Guía para desarrolladores
Acciones

• Configuración de una política de filtrado de Amazon SNS mediante un SDK de


AWS (p. 359)
• Cómo establecer la configuración predeterminada para el envío de mensajes SMS de
Amazon SNS mediante un SDK de AWS (p. 361)
• Cómo establecer los atributos de los temas de Amazon SNS mediante un SDK de
AWS (p. 363)
• Suscripción a una función Lambda para recibir notificaciones de un tema de Amazon SNS
mediante un SDK de AWS (p. 367)
• Suscripción de una aplicación móvil a un tema de Amazon SNS mediante un SDK de
AWS (p. 370)
• Suscripción de un punto de enlace HTTP a un tema de Amazon SNS mediante un SDK de
AWS (p. 372)
• Suscripción de una dirección de correo electrónico a un tema de Amazon SNS mediante un
SDK de AWS (p. 373)
• Escenarios de Amazon SNS con SDK de AWS (p. 379)
• Creación de un punto de enlace de la plataforma para las notificaciones push de Amazon
SNS mediante un SDK de AWS (p. 380)
• Creación y publicación en un tema FIFO de Amazon SNS mediante un SDK de
AWS (p. 382)
• Publicación de mensajes SMS en un tema de Amazon SNS mediante un SDK de
AWS (p. 384)
• Publicación de un mensaje de gran tamaño en Amazon SNS con Amazon S3 mediante un
SDK de AWS (p. 385)
• Ejemplos de servicios combinados de Amazon SNS con SDK de AWS (p. 387)
• Creación de una aplicación para enviar datos a una tabla de DynamoDB (p. 388)
• Creación de una aplicación de publicación y suscripción que traduzca mensajes (p. 389)
• Creación de una aplicación de exploración de Amazon Textract (p. 390)
• Detecte personas y objetos en un vídeo con Amazon Rekognition mediante un SDK de
AWS (p. 391)
• Uso de API Gateway para invocar una función Lambda (p. 392)
• Uso de eventos programados para invocar una función Lambda (p. 393)

Acciones de Amazon SNS con SDK de AWS


En los siguientes ejemplos de código se muestra cómo realizar acciones individuales de Amazon SNS con
los SDK de AWS. Estos fragmentos llaman a la API de Amazon SNS y no están diseñados para ejecutarse
de forma aislada. En cada ejemplo se incluye un enlace a GitHub, con instrucciones de configuración y
ejecución del código en contexto.

Los ejemplos siguientes incluyen solo las acciones que se utilizan con mayor frecuencia. Para ver una lista
completa, consulte la Referencia de la API de Amazon SNS.

Ejemplos
• Agregar etiquetas a un tema de Amazon SNS mediante un SDK de AWS (p. 309)
• Comprobación de la desactivación de un número de teléfono de Amazon SNS mediante un SDK de
AWS (p. 311)
• Confirmación de que el propietario de un punto de enlace desea recibir mensajes de Amazon SNS
mediante un SDK de AWS (p. 314)
• Creación de un tema de Amazon SNS mediante un SDK de AWS (p. 316)

308
Amazon Simple Notification
Service Guía para desarrolladores
Agregar etiquetas a un tema

• Eliminación de una suscripción a Amazon SNS mediante un SDK de AWS (p. 321)
• Eliminación de un tema de Amazon SNS mediante un SDK de AWS (p. 325)
• Cómo obtener las propiedades de un tema de Amazon SNS mediante un SDK de AWS (p. 329)
• Cómo obtener la configuración para enviar mensajes SMS de Amazon SNS mediante un SDK de
AWS (p. 333)
• Enumeración de números de teléfono desactivados de Amazon SNS mediante un SDK de
AWS (p. 336)
• Enumeración de suscriptores de un tema de Amazon SNS mediante un SDK de AWS (p. 337)
• Enumeración de temas de Amazon SNS mediante un SDK de AWS (p. 343)
• Publicación de un mensaje SMS en un tema de Amazon SNS mediante un SDK de AWS (p. 348)
• Publicación en un tema de Amazon SNS mediante un SDK de AWS (p. 352)
• Configuración de una cola de mensajes fallidos para una suscripción de Amazon SNS mediante un
SDK de AWS, siga estos pasos: (p. 358)
• Configuración de una política de filtrado de Amazon SNS mediante un SDK de AWS (p. 359)
• Cómo establecer la configuración predeterminada para el envío de mensajes SMS de Amazon SNS
mediante un SDK de AWS (p. 361)
• Cómo establecer los atributos de los temas de Amazon SNS mediante un SDK de AWS (p. 363)
• Suscripción a una función Lambda para recibir notificaciones de un tema de Amazon SNS mediante un
SDK de AWS (p. 367)
• Suscripción de una aplicación móvil a un tema de Amazon SNS mediante un SDK de AWS (p. 370)
• Suscripción de un punto de enlace HTTP a un tema de Amazon SNS mediante un SDK de
AWS (p. 372)
• Suscripción de una dirección de correo electrónico a un tema de Amazon SNS mediante un SDK de
AWS (p. 373)

Agregar etiquetas a un tema de Amazon SNS


mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo agregar etiquetas a un tema de Amazon SNS.

Java

SDK para Java 2.x

public static void addTopicTags(SnsClient snsClient, String topicArn) {

try {
Tag tag = [Link]()
.key("Team")
.value("Development")
.build();

Tag tag2 = [Link]()


.key("Environment")
.value("Gamma")
.build();

List<Tag> tagList = new ArrayList<>();


[Link](tag);
[Link](tag2);

309
Amazon Simple Notification
Service Guía para desarrolladores
Agregar etiquetas a un tema

TagResourceRequest tagResourceRequest = [Link]()


.resourceArn(topicArn)
.tags(tagList)
.build();

[Link](tagResourceRequest);
[Link]("Tags have been added to "+topicArn);

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte TagResource en la Referencia de la API de AWS SDK
for Java 2.x.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun addTopicTags(topicArn: String) {

val tag = Tag {


key ="Team"
value = "Development"
}

val tag2 = Tag {


key = "Environment"
value = "Gamma"
}

val tagList = mutableListOf<Tag>()


[Link](tag)
[Link](tag2)

val request = TagResourceRequest {


resourceArn=topicArn
tags = tagList
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("Tags have been added to $topicArn")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte TagResource en la Referencia de la API de AWS SDK
para Kotlin.

310
Amazon Simple Notification
Service Guía para desarrolladores
Comprobación de la desactivación de un número de teléfono

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Comprobación de la desactivación de un número de


teléfono de Amazon SNS mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo verificar si un número de teléfono ha optado por no
recibir mensajes de Amazon SNS.

.NET

AWS SDK for .NET

/// <summary>
/// Checks to see if the supplied phone number has been opted out.
/// </summary>
/// <param name="client">The initialized Amazon SNS Client object used
/// to check if the phone number has been opted out.</param>
/// <param name="phoneNumber">A string representing the phone number
/// to check.</param>
public static async Task
CheckIfOptedOutAsync(IAmazonSimpleNotificationService client, string phoneNumber)
{
var request = new CheckIfPhoneNumberIsOptedOutRequest
{
PhoneNumber = phoneNumber,
};

try
{
var response = await
[Link](request);

if ([Link] == [Link])
{
string optOutStatus = [Link] ? "opted out" : "not
opted out.";
[Link]($"The phone number: {phoneNumber} is
{optOutStatus}");
}
}
catch (AuthorizationErrorException ex)
{
[Link]($"{[Link]}");
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for .NET.

Java

SDK para Java 2.x

311
Amazon Simple Notification
Service Guía para desarrolladores
Comprobación de la desactivación de un número de teléfono

public static void checkPhone(SnsClient snsClient, String phoneNumber) {

try {
CheckIfPhoneNumberIsOptedOutRequest request =
[Link]()
.phoneNumber(phoneNumber)
.build();

CheckIfPhoneNumberIsOptedOutResponse result =
[Link](request);

[Link]([Link]() + "Phone Number " + phoneNumber


+ " has Opted Out of receiving sns messages." +
"\n\nStatus was " + [Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { phoneNumber: "353861230764" }; //PHONE_NUMBER, in the E.164 phone
number structure

const run = async () => {


try {
const data = await [Link](
new CheckIfPhoneNumberIsOptedOutCommand(params)
);
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}

312
Amazon Simple Notification
Service Guía para desarrolladores
Comprobación de la desactivación de un número de teléfono

};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for JavaScript.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Indicates whether the phone number owner has opted out of receiving SMS messages
from your AWS SNS account.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$phone = '+1XXX5550100';

try {
$result = $SnSclient->checkIfPhoneNumberIsOptedOut([
'phoneNumber' => $phone,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte CheckIfPhoneNumberIsOptedOut en la Referencia de
la API de AWS SDK for PHP.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

313
Amazon Simple Notification
Service Guía para desarrolladores
Confirmación de que el propietario de un
punto de enlace desea recibir mensajes

Confirmación de que el propietario de un punto de


enlace desea recibir mensajes de Amazon SNS
mediante un SDK de AWS
Los siguientes ejemplos de código indican cómo confirmar que el propietario de un punto de enlace desea
recibir mensajes de Amazon SNS utilizando la validación del token enviado al punto de enlace por una
acción de suscripción anterior.

Java

SDK para Java 2.x

public static void confirmSub(SnsClient snsClient, String subscriptionToken,


String topicArn ) {

try {
ConfirmSubscriptionRequest request =
[Link]()
.token(subscriptionToken)
.topicArn(topicArn)
.build();

ConfirmSubscriptionResponse result =
[Link](request);
[Link]("\n\nStatus was " +
[Link]().statusCode() + "\n\nSubscription Arn: \n\n" +
[Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ConfirmSubscription en la Referencia de la API de
AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]

314
Amazon Simple Notification
Service Guía para desarrolladores
Confirmación de que el propietario de un
punto de enlace desea recibir mensajes
import {ConfirmSubscriptionCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
Token: "TOKEN", // Required. Token sent to the endpoint by an earlier Subscribe
action. */
TopicArn: "TOPIC_ARN", // Required
AuthenticateOnUnsubscribe: "true", // 'true' or 'false'
};

const run = async () => {


try {
const data = await [Link](new ConfirmSubscriptionCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte ConfirmSubscription en la Referencia de la API de
AWS SDK for JavaScript.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Verifies an endpoint owner's intent to receive messages by validating the token
sent to the endpoint by an earlier Subscribe action.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$subscription_token = 'arn:aws:sns:us-east-1:111122223333:MyTopic:123456-
abcd-12ab-1234-12ba3dc1234a';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->subscribe([
'Token' => $subscription_token,
'TopicArn' => $topic,

315
Amazon Simple Notification
Service Guía para desarrolladores
Crear un tema

]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ConfirmSubscription en la Referencia de la API de
AWS SDK for PHP.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Creación de un tema de Amazon SNS mediante un


SDK de AWS
En los siguientes ejemplos de código, se muestra cómo crear un tema de Amazon SNS.

.NET

AWS SDK for .NET

/// <summary>
/// Creates a new SNS topic using the supplied topic name.
/// </summary>
/// <param name="client">The initialized SNS client object used to
/// create the new topic.</param>
/// <param name="topicName">A string representing the topic name.</param>
/// <returns>The Amazon Resource Name (ARN) of the created topic.</returns>
public static async Task<string>
CreateSNSTopicAsync(IAmazonSimpleNotificationService client, string topicName)
{
var request = new CreateTopicRequest
{
Name = topicName,
};

var response = await [Link](request);

return [Link];
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for .NET.

C++

SDK para C++

316
Amazon Simple Notification
Service Guía para desarrolladores
Crear un tema

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::String topic_name = argv[1];
Aws::SNS::SNSClient sns;

Aws::SNS::Model::CreateTopicRequest ct_req;
ct_req.SetName(topic_name);

auto ct_out = [Link](ct_req);

if (ct_out.IsSuccess())
{
std::cout << "Successfully created topic " << topic_name << std::endl;
}
else
{
std::cout << "Error creating topic " << topic_name << ":" <<
ct_out.GetError().GetMessage() << std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Go.

Java

SDK para Java 2.x

public static String createSNSTopic(SnsClient snsClient, String topicName ) {

CreateTopicResponse result = null;


try {
CreateTopicRequest request = [Link]()
.name(topicName)
.build();

result = [Link](request);
return [Link]();
} catch (SnsException e) {

[Link]([Link]().errorMessage());
[Link](1);
}
return "";
}

317
Amazon Simple Notification
Service Guía para desarrolladores
Crear un tema

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {CreateTopicCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { Name: "TOPIC_NAME" }; //TOPIC_NAME

const run = async () => {


try {
const data = await [Link](new CreateTopicCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun createSNSTopic(topicName: String): String {

val request = CreateTopicRequest {


name = topicName

318
Amazon Simple Notification
Service Guía para desarrolladores
Crear un tema

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
return [Link]()
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Create a Simple Notification Service topics in your AWS account at the requested
region.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$topicname = 'myTopic';

try {
$result = $SnSclient->createTopic([
'Name' => $topicname,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for PHP.

Python

SDK para Python (Boto3)

319
Amazon Simple Notification
Service Guía para desarrolladores
Crear un tema

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def create_topic(self, name):


"""
Creates a notification topic.

:param name: The name of the topic to create.


:return: The newly created topic.
"""
try:
topic = self.sns_resource.create_topic(Name=name)
[Link]("Created topic %s with ARN %s.", name, [Link])
except ClientError:
[Link]("Couldn't create topic %s.", name)
raise
else:
return topic

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def topic_created?(sns_client, topic_name)

sns_client.create_topic(name: topic_name)
rescue StandardError => e
puts "Error while creating the topic named '#{topic_name}': #{[Link]}"
end

# Full example call:


def run_me
topic_name = 'TOPIC_NAME'
region = 'REGION'

sns_client = Aws::SNS::[Link](region: region)

puts "Creating the topic '#{topic_name}'..."

if topic_created?(sns_client, topic_name)
puts 'The topic was created.'
else
puts 'The topic was not created. Stopping program.'
exit 1
end
end

run_me if $PROGRAM_NAME == __FILE__

320
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de una suscripción

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK
for Ruby.

Rust

SDK para Rust


Note
Esta documentación es para un SDK en versión preliminar. El SDK está sujeto a cambios
y no se debe utilizar en producción.

async fn make_topic(client: &Client, topic_name: &str) -> Result<(), Error> {


let resp = client.create_topic().name(topic_name).send().await?;

println!(
"Created topic with ARN: {}",
resp.topic_arn().unwrap_or_default()
);

Ok(())
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API del SDK para
Rust de AWS.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Eliminación de una suscripción a Amazon SNS


mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo eliminar una suscripción de Amazon SNS.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String subscription_arn = argv[1];

Aws::SNS::Model::UnsubscribeRequest s_req;
s_req.SetSubscriptionArn(subscription_arn);

auto s_out = [Link](s_req);

321
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de una suscripción

if (s_out.IsSuccess())
{
std::cout << "Unsubscribed successfully " << std::endl;
}
else
{
std::cout << "Error while unsubscribing " << s_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for C++.

Java

SDK para Java 2.x

public static void unSub(SnsClient snsClient, String subscriptionArn) {

try {
UnsubscribeRequest request = [Link]()
.subscriptionArn(subscriptionArn)
.build();

UnsubscribeResponse result = [Link](request);

[Link]("\n\nStatus was " +


[Link]().statusCode()
+ "\n\nSubscription was removed for " + [Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

322
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de una suscripción

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {UnsubscribeCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { SubscriptionArn: "TOPIC_SUBSCRIPTION_ARN" }; //
TOPIC_SUBSCRIPTION_ARN

const run = async () => {


try {
const data = await [Link](new UnsubscribeCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun unSub(subscriptionArnVal: String) {

val request = UnsubscribeRequest {


subscriptionArn = subscriptionArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("Subscription was removed for ${[Link]}")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

323
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de una suscripción

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Deletes a subscription to an Amazon SNS topic.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
$result = $SnSclient->unsubscribe([
'SubscriptionArn' => $subscription,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
la API de AWS SDK for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def delete_subscription(subscription):
"""
Unsubscribes and deletes a subscription.
"""
try:
[Link]()
[Link]("Deleted subscription %s.", [Link])
except ClientError:
[Link]("Couldn't delete subscription %s.", [Link])
raise

324
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de un tema

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Unsubscribe (Cancelar suscripción) en la Referencia de
API de AWS SDK for Python (Boto3).

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Eliminación de un tema de Amazon SNS mediante un


SDK de AWS
En los siguientes ejemplos de código, se muestra cómo eliminar un tema de Amazon SNS y todas las
suscripciones a ese tema.

.NET

AWS SDK for .NET

/// <summary>
/// This example deletes an existing Amazon Simple Notification Service
/// (Amazon SNS) topic. The example was created using the AWS SDK for .NET
/// version 3.7 and .NET Core 5.0.
/// </summary>
public class DeleteSNSTopic
{
public static async Task Main()
{
string topicArn = "arn:aws:sns:us-east-2:704825161248:ExampleSNSTopic";
IAmazonSimpleNotificationService client = new
AmazonSimpleNotificationServiceClient();

var response = await [Link](topicArn);


}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::String topic_arn = argv[1];
Aws::SNS::SNSClient sns;

Aws::SNS::Model::DeleteTopicRequest dt_req;
dt_req.SetTopicArn(topic_arn);

auto dt_out = [Link](dt_req);

325
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de un tema

if (dt_out.IsSuccess())
{
std::cout << "Successfully deleted topic " << topic_arn << std::endl;
}
else
{
std::cout << "Error deleting topic " << topic_arn << ":" <<
dt_out.GetError().GetMessage() << std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for C++.

Java

SDK para Java 2.x

public static void deleteSNSTopic(SnsClient snsClient, String topicArn ) {

try {
DeleteTopicRequest request = [Link]()
.topicArn(topicArn)
.build();

DeleteTopicResponse result = [Link](request);


[Link]("\n\nStatus was " +
[Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

326
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de un tema

Importe el SDK y los módulos de cliente, y llame a la API.

// Load the AWS SDK for [Link]

// Import required AWS SDK clients and commands for [Link]


import {DeleteTopicCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { TopicArn: "TOPIC_ARN" }; //TOPIC_ARN

const run = async () => {


try {
const data = await [Link](new DeleteTopicCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun deleteSNSTopic(topicArnVal: String) {

val request = DeleteTopicRequest {


topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("$topicArnVal was successfully deleted.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

327
Amazon Simple Notification
Service Guía para desarrolladores
Eliminación de un tema

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Deletes a SNS topic and all its subscriptions.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->deleteTopic([
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def delete_topic(topic):
"""
Deletes a topic. All subscriptions to the topic are also deleted.
"""
try:
[Link]()
[Link]("Deleted topic %s.", [Link])
except ClientError:
[Link]("Couldn't delete topic %s.", [Link])
raise

• Encuentre instrucciones y más código en GitHub.

328
Amazon Simple Notification
Service Guía para desarrolladores
Cómo obtener las propiedades de un tema

• Para ver los detalles de la API, consulte DeleteTopic en la Referencia de la API de AWS SDK
for Python (Boto3).

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Cómo obtener las propiedades de un tema de Amazon


SNS mediante un SDK de AWS
Los siguientes ejemplos de código indican cómo obtener las propiedades de un tema de Amazon SNS.

.NET

AWS SDK for .NET

/// <summary>
/// This example shows how to retrieve the attributes of an Amazon Simple
/// Notification Service (Amazon SNS) topic. The example was written using
/// the AWS SDK for .NET 3.7 and .NET Core 5.0.
/// </summary>
public class GetTopicAttributes
{
public static async Task Main()
{
string topicArn = "arn:aws:sns:us-west-2:000000000000:ExampleSNSTopic";
IAmazonSimpleNotificationService client = new
AmazonSimpleNotificationServiceClient();

var attributes = await GetTopicAttributesAsync(client, topicArn);


DisplayTopicAttributes(attributes);
}

/// <summary>
/// Given the ARN of the Amazon SNS topic, this method retrieves the topic
/// attributes.
/// </summary>
/// <param name="client">The initialized Amazon SNS client object used
/// to retrieve the attributes for the Amazon SNS topic.</param>
/// <param name="topicArn">The ARN of the topic for which to retrieve
/// the attributes.</param>
/// <returns>A Dictionary of topic attributes.</returns>
public static async Task<Dictionary<string, string>>
GetTopicAttributesAsync(
IAmazonSimpleNotificationService client,
string topicArn)
{
var response = await [Link](topicArn);

return [Link];
}

/// <summary>
/// This method displays the attributes for an Amazon SNS topic.
/// </summary>
/// <param name="topicAttributes">A Dictionary containing the
/// attributes for an Amazon SNS topic.</param>
public static void DisplayTopicAttributes(Dictionary<string, string>
topicAttributes)

329
Amazon Simple Notification
Service Guía para desarrolladores
Cómo obtener las propiedades de un tema

{
foreach (KeyValuePair<string, string> entry in topicAttributes)
{
[Link]($"{[Link]}: {[Link]}\n");
}
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la APl, consulte GetTopicAttributes en la Referencia de la API de AWS
SDK for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String topic_arn = argv[1];

Aws::SNS::Model::GetTopicAttributesRequest gta_req;
gta_req.SetTopicArn(topic_arn);

auto gta_out = [Link](gta_req);

if (gta_out.IsSuccess())
{
std::cout << "Topic Attributes:" << std::endl;
for (auto const &attribute : gta_out.GetResult().GetAttributes())
{
std::cout << " * " << [Link] << " : " << [Link] <<
std::endl;
}
}
else
{
std::cout << "Error while getting Topic attributes " <<
gta_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la APl, consulte GetTopicAttributes en la Referencia de la API de AWS
SDK for C++.

Java

SDK para Java 2.x

public static void getSNSTopicAttributes(SnsClient snsClient, String topicArn )


{

330
Amazon Simple Notification
Service Guía para desarrolladores
Cómo obtener las propiedades de un tema

try {
GetTopicAttributesRequest request = [Link]()
.topicArn(topicArn)
.build();

GetTopicAttributesResponse result =
[Link](request);
[Link]("\n\nStatus is " +
[Link]().statusCode() + "\n\nAttributes: \n\n" +
[Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la APl, consulte GetTopicAttributes en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {GetTopicAttributesCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { TopicArn: "TOPIC_ARN" }; // TOPIC_ARN

const run = async () => {


try {
const data = await [Link](new GetTopicAttributesCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.

331
Amazon Simple Notification
Service Guía para desarrolladores
Cómo obtener las propiedades de un tema

• Para ver los detalles de la APl, consulte GetTopicAttributes en la Referencia de la API de AWS
SDK for JavaScript.
SDK para JavaScript V2

Importe el SDK y los módulos de cliente, y llame a la API.

// Load the AWS SDK for [Link]


var AWS = require('aws-sdk');
// Set region
[Link]({region: 'REGION'});

// Create promise and SNS service object


var getTopicAttribsPromise = new [Link]({apiVersion:
'2010-03-31'}).getTopicAttributes({TopicArn: 'TOPIC_ARN'}).promise();

// Handle promise's fulfilled/rejected states


[Link](
function(data) {
[Link](data);
}).catch(
function(err) {
[Link](err, [Link]);
});

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la APl, consulte GetTopicAttributes en la Referencia de la API de AWS
SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun getSNSTopicAttributes(topicArnVal: String) {

val request = GetTopicAttributesRequest {


topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
println("${[Link]}")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la APl, consulte GetTopicAttributes en la Referencia de la API de AWS
SDK para Kotlin.

332
Amazon Simple Notification
Service Guía para desarrolladores
Cómo obtener la configuración para enviar mensajes SMS

PHP

SDK para PHP

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->getTopicAttributes([
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la APl, consulte GetTopicAttributes en la Referencia de la API de AWS
SDK for PHP.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Cómo obtener la configuración para enviar mensajes


SMS de Amazon SNS mediante un SDK de AWS
Los siguientes ejemplos de código indican cómo establecer la configuración para el envío de mensajes
SMS de Amazon SNS.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;

Aws::SNS::Model::GetSMSAttributesRequest gsmst_req;
//Set the request to only retrieve the DefaultSMSType setting.
//Without the following line, GetSMSAttributes would retrieve all settings.
gsmst_req.AddAttributes("DefaultSMSType");

auto gsmst_out = [Link](gsmst_req);

if (gsmst_out.IsSuccess())
{
for (auto const& att : gsmst_out.GetResult().GetAttributes())
{
std::cout << [Link] << ": " << [Link] << std::endl;

333
Amazon Simple Notification
Service Guía para desarrolladores
Cómo obtener la configuración para enviar mensajes SMS

}
}
else
{
std::cout << "Error while getting SMS Type: '" <<
gsmst_out.GetError().GetMessage()
<< "'" << std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la APl, consulte GetSMSAttributes en la Referencia de la API de AWS
SDK for C++.

Java

SDK para Java 2.x

public static void getSNSAttrutes(SnsClient snsClient,String topicArn ) {

try {
GetSubscriptionAttributesRequest request =
[Link]()
.subscriptionArn(topicArn)
.build();

// Get the Subscription attributes


GetSubscriptionAttributesResponse res =
[Link](request);
Map<String, String> map = [Link]();

// Iterate through the map


Iterator iter = [Link]().iterator();
while ([Link]()) {
[Link] entry = ([Link]) [Link]();
[Link]("[Key] : " + [Link]() + " [Value] : " +
[Link]());
}

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}

[Link]("\n\nStatus was good");


}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la APl, consulte GetSMSAttributes en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

334
Amazon Simple Notification
Service Guía para desarrolladores
Cómo obtener la configuración para enviar mensajes SMS

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {GetSMSAttributesCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


var params = {
attributes: [
"DefaultSMSType",
"ATTRIBUTE_NAME",
/* more items */
],
};

const run = async () => {


try {
const data = await [Link](new GetSMSAttributesCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la APl, consulte GetSMSAttributes en la Referencia de la API de AWS
SDK for JavaScript.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Get the type of SMS Message sent by default from the AWS SNS service.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([

335
Amazon Simple Notification
Service Guía para desarrolladores
Lista de números de teléfono desactivados

'profile' => 'default',


'region' => 'us-east-1',
'version' => '2010-03-31'
]);

try {
$result = $SnSclient->getSMSAttributes([
'attributes' => ['DefaultSMSType'],
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la APl, consulte GetSMSAttributes en la Referencia de la API de AWS
SDK for PHP.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Enumeración de números de teléfono desactivados de


Amazon SNS mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo publicar números de teléfono que han optado por
no recibir mensajes de Amazon SNS.

Java

SDK para Java 2.x

public static void listOpts( SnsClient snsClient) {

try {

ListPhoneNumbersOptedOutRequest request =
[Link]().build();
ListPhoneNumbersOptedOutResponse result =
[Link](request);
[Link]("Status is " + [Link]().statusCode()
+ "\n\nPhone Numbers: \n\n" + [Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListPhoneNumbersOptedOut en la Referencia de la API
de AWS SDK for Java 2.x.

336
Amazon Simple Notification
Service Guía para desarrolladores
Lista de suscriptores de un tema

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Returns a list of phone numbers that are opted out of receiving SMS messages
from your AWS SNS account.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

try {
$result = $SnSclient->listPhoneNumbersOptedOut([
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte ListPhoneNumbersOptedOut en la Referencia de la API
de AWS SDK for PHP.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Enumeración de suscriptores de un tema de Amazon


SNS mediante un SDK de AWS
Los siguientes ejemplos de código indican cómo obtener la lista de suscriptores de un tema de Amazon
SNS.

.NET

AWS SDK for .NET

/// <summary>
/// This example will retrieve a list of the existing Amazon Simple

337
Amazon Simple Notification
Service Guía para desarrolladores
Lista de suscriptores de un tema

/// Notification Service (Amazon SNS) subscriptions. The example was


/// created using the AWS SDK for .NET 3.7 and .NET Core 5.0.
/// </summary>
public class ListSubscriptions
{
public static async Task Main()
{
IAmazonSimpleNotificationService client = new
AmazonSimpleNotificationServiceClient();

var subscriptions = await GetSubscriptionsListAsync(client);

DisplaySubscriptionList(subscriptions);
}

/// <summary>
/// Gets a list of the existing Amazon SNS subscriptions.
/// </summary>
/// <param name="client">The initialized Amazon SNS client object used
/// to obtain the list of subscriptions.</param>
/// <returns>A List containing information about each subscription.</
returns>
public static async Task<List<Subscription>>
GetSubscriptionsListAsync(IAmazonSimpleNotificationService client)
{
var response = await [Link]();

return [Link];
}

/// <summary>
/// Display a list of Amazon SNS subscription information.
/// </summary>
/// <param name="subscriptionList">A list containing details for existing
/// Amazon SNS subscriptions.</param>
public static void DisplaySubscriptionList(List<Subscription>
subscriptionList)
{
foreach (var subscription in subscriptionList)
{
[Link]($"Owner: {[Link]}");
[Link]($"Subscription ARN:
{[Link]}");
[Link]($"Topic ARN: {[Link]}");
[Link]($"Endpoint: {[Link]}");
[Link]($"Protocol: {[Link]}");
[Link]();
}
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for .NET.

C++

SDK para C++

Aws::SDKOptions options;

338
Amazon Simple Notification
Service Guía para desarrolladores
Lista de suscriptores de un tema

Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;

Aws::SNS::Model::ListSubscriptionsRequest ls_req;

auto ls_out = [Link](ls_req);

if (ls_out.IsSuccess())
{
std::cout << "Subscriptions list:" << std::endl;
for (auto const& subscription : ls_out.GetResult().GetSubscriptions())
{
std::cout << " * " << [Link]() << std::endl;
}
}
else
{
std::cout << "Error listing subscriptions " << ls_out.GetError().GetMessage()
<<
std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for Go.

Java

SDK para Java 2.x

public static void listSNSSubscriptions( SnsClient snsClient) {

try {
ListSubscriptionsRequest request = [Link]()
.build();

ListSubscriptionsResponse result =
[Link](request);
[Link]([Link]());

} catch (SnsException e) {

[Link]([Link]().errorMessage());
[Link](1);
}
}

339
Amazon Simple Notification
Service Guía para desarrolladores
Lista de suscriptores de un tema

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {ListSubscriptionsByTopicCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = { TopicArn: "TOPIC_ARN" }; //TOPIC_ARN

const run = async () => {


try {
const data = await [Link](new ListSubscriptionsByTopicCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun listSNSSubscriptions() {

340
Amazon Simple Notification
Service Guía para desarrolladores
Lista de suscriptores de un tema

SnsClient { region = "us-east-1" }.use { snsClient ->


val response = [Link](ListSubscriptionsRequest{})
[Link]?.forEach { sub ->
println("Sub ARN is ${[Link]}")
println("Sub protocol is ${[Link]}")
}
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Returns a list of Amazon SNS subscriptions in the requested region.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

try {
$result = $SnSclient->listSubscriptions([
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""

341
Amazon Simple Notification
Service Guía para desarrolladores
Lista de suscriptores de un tema

def __init__(self, sns_resource):


"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def list_subscriptions(self, topic=None):


"""
Lists subscriptions for the current account, optionally limited to a
specific topic.

:param topic: When specified, only subscriptions to this topic are


returned.
:return: An iterator that yields the subscriptions.
"""
try:
if topic is None:
subs_iter = self.sns_resource.[Link]()
else:
subs_iter = [Link]()
[Link]("Got subscriptions.")
except ClientError:
[Link]("Couldn't get subscriptions.")
raise
else:
return subs_iter

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def show_subscriptions?(sns_client, topic_arn)


topic = sns_client.topic(topic_arn)
[Link] do |s|
puts [Link]['Endpoint']
end

rescue StandardError => e


puts "Error while sending the message: #{[Link]}"
end

def run_me

topic_arn = 'SNS_TOPIC_ARN'
region = 'REGION'

sns_client = Aws::SNS::[Link](region: region)

puts "Listing subscriptions to the topic."

if show_subscriptions?(sns_client, topic_arn)
else
puts 'There was an error. Stopping program.'
exit 1

342
Amazon Simple Notification
Service Guía para desarrolladores
Enumeración de temas

end
end

run_me if $PROGRAM_NAME == __FILE__

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte ListSubscriptions en la Referencia de la API de AWS
SDK for Ruby.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Enumeración de temas de Amazon SNS mediante un


SDK de AWS
Los siguientes ejemplos de código indican cómo enumerar los temas de Amazon SNS.

.NET

AWS SDK for .NET

public static async Task Main()


{
IAmazonSimpleNotificationService client = new
AmazonSimpleNotificationServiceClient();

await GetTopicListAsync(client);
}

/// <summary>
/// Retrieves the list of Amazon SNS topics in groups of up to 100
/// topics.
/// </summary>
/// <param name="client">The initialized Amazon SNS client object used
/// to retrieve the list of topics.</param>
public static async Task GetTopicListAsync(IAmazonSimpleNotificationService
client)
{
// If there are more than 100 Amazon SNS topics, the call to
// ListTopicsAsync will return a value to pass to the
// method to retrieve the next 100 (or less) topics.
string nextToken = [Link];

do
{
var response = await [Link](nextToken);
DisplayTopicsList([Link]);
nextToken = [Link];
}
while (![Link](nextToken));
}

/// <summary>

343
Amazon Simple Notification
Service Guía para desarrolladores
Enumeración de temas

/// Displays the list of Amazon SNS Topic ARNs.


/// </summary>
/// <param name="topicList">The list of Topic ARNs.</param>
public static void DisplayTopicsList(List<Topic> topicList)
{
foreach (var topic in topicList)
{
[Link]($"{[Link]}");
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK
for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;

Aws::SNS::Model::ListTopicsRequest lt_req;

auto lt_out = [Link](lt_req);

if (lt_out.IsSuccess())
{
std::cout << "Topics list:" << std::endl;
for (auto const &topic : lt_out.GetResult().GetTopics())
{
std::cout << " * " << [Link]() << std::endl;
}
}
else
{
std::cout << "Error listing topics " << lt_out.GetError().GetMessage() <<
std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK for
C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK for
Go.

344
Amazon Simple Notification
Service Guía para desarrolladores
Enumeración de temas

Java

SDK para Java 2.x

public static void listSNSTopics(SnsClient snsClient) {

try {
ListTopicsRequest request = [Link]()
.build();

ListTopicsResponse result = [Link](request);


[Link]("Status was " +
[Link]().statusCode() + "\n\nTopics\n\n" + [Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK for
Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {ListTopicsCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

const run = async () => {


try {
const data = await [Link](new ListTopicsCommand({}));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.

345
Amazon Simple Notification
Service Guía para desarrolladores
Enumeración de temas

• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK for
JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun listSNSTopics() {

SnsClient { region = "us-east-1" }.use { snsClient ->


val response = [Link](ListTopicsRequest { })
[Link]?.forEach { topic ->
println("The topic ARN is ${[Link]}")
}
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListTopics en la referencia de la API de AWS SDK para
Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Returns a list of the requester's topics from your AWS SNS account in the region
specified.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

try {
$result = $SnSclient->listTopics([
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails

346
Amazon Simple Notification
Service Guía para desarrolladores
Enumeración de temas

error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK for
PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def list_topics(self):
"""
Lists topics for the current account.

:return: An iterator that yields the topics.


"""
try:
topics_iter = self.sns_resource.[Link]()
[Link]("Got topics.")
except ClientError:
[Link]("Couldn't get topics.")
raise
else:
return topics_iter

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK for
Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def list_topics?(sns_client)
sns_client.[Link] do |topic|
puts [Link]
rescue StandardError => e
puts "Error while listing the topics: #{[Link]}"
end
end

def run_me

region = 'REGION'
sns_client = Aws::SNS::[Link](region: region)

347
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un mensaje SMS

puts "Listing the topics."

if list_topics?(sns_client)
else
puts 'The bucket was not created. Stopping program.'
exit 1
end
end
run_me if $PROGRAM_NAME == __FILE__

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte ListTopics en la Referencia de la API de AWS SDK for
Ruby.

Rust

SDK para Rust


Note

Esta documentación es para un SDK en versión preliminar. El SDK está sujeto a cambios
y no se debe utilizar en producción.

async fn show_topics(client: &Client) -> Result<(), Error> {


let resp = client.list_topics().send().await?;

println!("Topic ARNs:");

for topic in [Link]().unwrap_or_default() {


println!("{}", topic.topic_arn().unwrap_or_default());
}

Ok(())
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte ListTopics en la referencia de la API SDK para Rust de
AWS.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Publicación de un mensaje SMS en un tema de


Amazon SNS mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo publicar mensajes SMS mediante Amazon SNS.

C++

SDK para C++

348
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un mensaje SMS

/**
* Publish SMS: use Amazon SNS to send an SMS text message to a phone number.
* Note: This requires additional AWS configuration prior to running example.
*
* NOTE: When you start using Amazon SNS to send SMS messages, your AWS account is
in the SMS sandbox and you can only
* use verified destination phone numbers. See [Link]
latest/dg/[Link].
* NOTE: If destination is in the US, you also have an additional restriction that
you have use a dedicated
* origination ID (phone number). You can request an origination number using
Amazon Pinpoint for a fee.
* See [Link]
origination-numbers-with-amazon-sns/
* for more information.
*
* <phone_number_value> input parameter uses E.164 format.
* For example, in United States, this input value should be of the form:
+12223334444
*/
int main(int argc, char ** argv)
{
if (argc != 3)
{
std::cout << "Usage: publish_sms <message_value> <phone_number_value> " <<
std::endl;
return 1;
}

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String message = argv[1];
Aws::String phone_number = argv[2];

Aws::SNS::Model::PublishRequest psms_req;
psms_req.SetMessage(message);
psms_req.SetPhoneNumber(phone_number);

auto psms_out = [Link](psms_req);

if (psms_out.IsSuccess())
{
std::cout << "Message published successfully " <<
psms_out.GetResult().GetMessageId()
<< std::endl;
}
else
{
std::cout << "Error while publishing message " <<
psms_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);
return 0;
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for C++.

349
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un mensaje SMS

Java

SDK para Java 2.x

public static void pubTextSMS(SnsClient snsClient, String message, String


phoneNumber) {
try {
PublishRequest request = [Link]()
.message(message)
.phoneNumber(phoneNumber)
.build();

PublishResponse result = [Link](request);


[Link]([Link]() + " Message sent. Status was " +
[Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Java 2.x.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun pubTextSMS(messageVal: String?, phoneNumberVal: String?) {

val request = PublishRequest {


message = messageVal
phoneNumber = phoneNumberVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
println("${[Link]} message sent.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish en la Referencia de la API de AWS SDK para
Kotlin.

PHP

SDK para PHP

350
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un mensaje SMS

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Sends a a text message (SMS message) directly to a phone number using Amazon
SNS.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';


$phone = '+1XXX5550100';

try {
$result = $SnSclient->publish([
'Message' => $message,
'PhoneNumber' => $phone,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def publish_text_message(self, phone_number, message):


"""
Publishes a text message directly to a phone number without need for a
subscription.

:param phone_number: The phone number that receives the message. This must
be
in E.164 format. For example, a United States phone
number might be +12065550101.

351
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un tema

:param message: The message to send.


:return: The ID of the message.
"""
try:
response = self.sns_resource.[Link](
PhoneNumber=phone_number, Message=message)
message_id = response['MessageId']
[Link]("Published message to %s.", phone_number)
except ClientError:
[Link]("Couldn't publish message to %s.", phone_number)
raise
else:
return message_id

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Python (Boto3).

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Publicación en un tema de Amazon SNS mediante un


SDK de AWS
En los siguientes ejemplos de código, se muestra cómo publicar mensajes en un tema de Amazon SNS.

.NET

AWS SDK for .NET


• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for .NET.

C++

SDK para C++

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String message = argv[1];
Aws::String topic_arn = argv[2];

Aws::SNS::Model::PublishRequest psms_req;
psms_req.SetMessage(message);
psms_req.SetTopicArn(topic_arn);

auto psms_out = [Link](psms_req);

if (psms_out.IsSuccess())
{
std::cout << "Message published successfully " << std::endl;
}
else

352
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un tema

{
std::cout << "Error while publishing message " <<
psms_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Go.

Java

SDK para Java 2.x

public static void pubTopic(SnsClient snsClient, String message, String


topicArn) {

try {
PublishRequest request = [Link]()
.message(message)
.topicArn(topicArn)
.build();

PublishResponse result = [Link](request);


[Link]([Link]() + " Message sent. Status is " +
[Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";

353
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un tema

// Set the AWS Region.


const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {PublishCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


var params = {
Message: "MESSAGE_TEXT", // MESSAGE_TEXT
TopicArn: "TOPIC_ARN", //TOPIC_ARN
};

const run = async () => {


try {
const data = await [Link](new PublishCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun pubTopic(topicArnVal: String, messageVal: String) {

val request = PublishRequest{


message = messageVal
topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
println("${[Link]} message sent.")
}
}

354
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un tema

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish en la Referencia de la API de AWS SDK para
Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Sends a message to an Amazon SNS topic.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';


$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->publish([
'Message' => $message,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for PHP.

Python

SDK para Python (Boto3)

Publique un mensaje con atributos para que una suscripción pueda filtrar en función de los
atributos.

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""

355
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un tema

:param sns_resource: A Boto3 Amazon SNS resource.


"""
self.sns_resource = sns_resource

def publish_message(topic, message, attributes):


"""
Publishes a message, with attributes, to a topic. Subscriptions can be
filtered
based on message attributes so that a subscription receives messages only
when specified attributes are present.

:param topic: The topic to publish to.


:param message: The message to publish.
:param attributes: The key-value attributes to attach to the message.
Values
must be either `str` or `bytes`.
:return: The ID of the message.
"""
try:
att_dict = {}
for key, value in [Link]():
if isinstance(value, str):
att_dict[key] = {'DataType': 'String', 'StringValue': value}
elif isinstance(value, bytes):
att_dict[key] = {'DataType': 'Binary', 'BinaryValue': value}
response = [Link](Message=message, MessageAttributes=att_dict)
message_id = response['MessageId']
[Link](
"Published message with attributes %s to topic %s.", attributes,
[Link])
except ClientError:
[Link]("Couldn't publish message to topic %s.", [Link])
raise
else:
return message_id

Publique un mensaje que toma diferentes formas en función del protocolo del suscriptor.

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def publish_multi_message(
topic, subject, default_message, sms_message, email_message):
"""
Publishes a multi-format message to a topic. A multi-format message takes
different forms based on the protocol of the subscriber. For example,
an SMS subscriber might receive a short, text-only version of the message
while an email subscriber could receive an HTML version of the message.

:param topic: The topic to publish to.


:param subject: The subject of the message.
:param default_message: The default version of the message. This version is
sent to subscribers that have protocols that are
not
otherwise specified in the structured message.
:param sms_message: The version of the message sent to SMS subscribers.
:param email_message: The version of the message sent to email subscribers.
:return: The ID of the message.
"""

356
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un tema

try:
message = {
'default': default_message,
'sms': sms_message,
'email': email_message
}
response = [Link](
Message=[Link](message), Subject=subject,
MessageStructure='json')
message_id = response['MessageId']
[Link]("Published multi-format message to topic %s.", [Link])
except ClientError:
[Link]("Couldn't publish message to topic %s.", [Link])
raise
else:
return message_id

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def message_sent?(sns_client, topic_arn, message)

sns_client.publish(topic_arn: topic_arn, message: message)


rescue StandardError => e
puts "Error while sending the message: #{[Link]}"
end

def run_me

topic_arn = 'SNS_TOPIC_ARN'
region = 'REGION'
message = 'MESSAGE' # The text of the message to send.

sns_client = Aws::SNS::[Link](region: region)

puts "Message sending."

if message_sent?(sns_client, topic_arn, message)


puts 'The message was sent.'
else
puts 'The message was not sent. Stopping program.'
exit 1
end
end

run_me if $PROGRAM_NAME == __FILE__

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.

357
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una cola de
mensajes fallidos para una suscripción
• Para ver los detalles de la API, consulte Publish (Publicar) en la Referencia de la API de AWS
SDK for Ruby.

Rust

SDK para Rust


Note

Esta documentación es para un SDK en versión preliminar. El SDK está sujeto a cambios
y no se debe utilizar en producción.

async fn subscribe_and_publish(
client: &Client,
topic_arn: &str,
email_address: &str,
) -> Result<(), Error> {
println!("Receiving on topic with ARN: `{}`", topic_arn);

let rsp = client


.subscribe()
.topic_arn(topic_arn)
.protocol("email")
.endpoint(email_address)
.send()
.await?;

println!("Added a subscription: {:?}", rsp);

let rsp = client


.publish()
.topic_arn(topic_arn)
.message("hello sns!")
.send()
.await?;

println!("Published message: {:?}", rsp);

Ok(())
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Publish (Publicar) en la referencia de la API SDK para
Rust de AWS.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Configuración de una cola de mensajes fallidos para


una suscripción de Amazon SNS mediante un SDK de
AWS, siga estos pasos:
En el siguiente ejemplo de código, se muestra la configuración de una cola de Amazon SQS como una
cola de mensajes fallidos para una suscripción a Amazon SNS.

358
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una política de filtrado

Java

SDK para Java 1.x

// Specify the ARN of the Amazon SNS subscription.


String subscriptionArn =
"arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-
bc89-012d-3e45-6fg7h890123i";

// Specify the ARN of the Amazon SQS queue to use as a dead-letter queue.
String redrivePolicy =
"{\"deadLetterTargetArn\":\"arn:aws:sqs:us-
east-2:123456789012:MyDeadLetterQueue\"}";

// Set the specified Amazon SQS queue as a dead-letter queue


// of the specified Amazon SNS subscription by setting the RedrivePolicy attribute.
SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest()
.withSubscriptionArn(subscriptionArn)
.withAttributeName("RedrivePolicy")
.withAttributeValue(redrivePolicy);
[Link](request);

• Encuentre instrucciones y más código en GitHub.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Configuración de una política de filtrado de Amazon


SNS mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo establecer una política de filtro de Amazon SNS.

Java

SDK para Java 2.x

public static void usePolicy(SnsClient snsClient, String subscriptionArn) {

try {
SNSMessageFilterPolicy fp = new SNSMessageFilterPolicy();

// Add a filter policy attribute with a single value


[Link]("store", "example_corp");
[Link]("event", "order_placed");

// Add a prefix attribute


[Link]("customer_interests", "bas");

// Add an anything-but attribute


[Link]("customer_interests", "baseball");

// Add a filter policy attribute with a list of values


ArrayList<String> attributeValues = new ArrayList<>();
[Link]("rugby");
[Link]("soccer");

359
Amazon Simple Notification
Service Guía para desarrolladores
Configuración de una política de filtrado

[Link]("hockey");
[Link]("customer_interests", attributeValues);

// Add a numeric attribute


[Link]("price_usd", "=", 0);

// Add a numeric attribute with a range


[Link]("price_usd", ">", 0, "<=", 100);

// Apply the filter policy attributes to an Amazon SNS subscription


[Link](snsClient, subscriptionArn);

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSubscriptionAttributes en la Referencia de la API de
AWS SDK for Java 2.x.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def add_subscription_filter(subscription, attributes):


"""
Adds a filter policy to a subscription. A filter policy is a key and a
list of values that are allowed. When a message is published, it must have
an
attribute that passes the filter or it will not be sent to the
subscription.

:param subscription: The subscription the filter policy is attached to.


:param attributes: A dictionary of key-value pairs that define the filter.
"""
try:
att_policy = {key: [value] for key, value in [Link]()}
subscription.set_attributes(
AttributeName='FilterPolicy',
AttributeValue=[Link](att_policy))
[Link]("Added filter to subscription %s.", [Link])
except ClientError:
[Link](
"Couldn't add filter to subscription %s.", [Link])
raise

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSubscriptionAttributes en la Referencia de la API de
AWS SDK for Python (Boto3).

360
Amazon Simple Notification
Service Guía para desarrolladores
Cómo establecer la configuración
predeterminada para el envío de mensajes SMS
Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Cómo establecer la configuración predeterminada


para el envío de mensajes SMS de Amazon SNS
mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo establecer la configuración predeterminada para
enviar mensajes SMS mediante Amazon SNS.

C++

SDK para C++

Cómo utilizar Amazon SNS para establecer el atributo DefaultSMSType.

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String sms_type = argv[1];

Aws::SNS::Model::SetSMSAttributesRequest ssmst_req;
ssmst_req.AddAttributes("DefaultSMSType", sms_type);

auto ssmst_out = [Link](ssmst_req);

if (ssmst_out.IsSuccess())
{
std::cout << "SMS Type set successfully " << std::endl;
}
else
{
std::cout << "Error while setting SMS Type: '" <<
ssmst_out.GetError().GetMessage()
<< "'" << std::endl;
}
}

Aws::ShutdownAPI(options);

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for C++.

Java

SDK para Java 2.x

public static void setSNSAttributes( SnsClient snsClient, HashMap<String,


String> attributes) {

try {
SetSmsAttributesRequest request = [Link]()

361
Amazon Simple Notification
Service Guía para desarrolladores
Cómo establecer la configuración
predeterminada para el envío de mensajes SMS
.attributes(attributes)
.build();

SetSmsAttributesResponse result = [Link](request);


[Link]("Set default Attributes to " + attributes + ".
Status was " + [Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SetSMSAttributesCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
attributes: {
/* required */
DefaultSMSType: "Transactional" /* highest reliability */,
//'DefaultSMSType': 'Promotional' /* lowest cost */
},
};

const run = async () => {


try {
const data = await [Link](new SetSMSAttributesCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.

362
Amazon Simple Notification
Service Guía para desarrolladores
Cómo establecer los atributos de los temas

• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for JavaScript.

PHP

SDK para PHP

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

try {
$result = $SnSclient->SetSMSAttributes([
'attributes' => [
'DefaultSMSType' => 'Transactional',
],
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for PHP.
• Para ver los detalles de la API, consulte SetSMSAttributes en la Referencia de la API de AWS
SDK for PHP.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Cómo establecer los atributos de los temas de


Amazon SNS mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo crear atributos de temas de Amazon SNS.

Java

SDK para Java 2.x

public static void setTopAttr(SnsClient snsClient, String attribute, String


topicArn, String value) {

try {

SetTopicAttributesRequest request = [Link]()

363
Amazon Simple Notification
Service Guía para desarrolladores
Cómo establecer los atributos de los temas

.attributeName(attribute)
.attributeValue(value)
.topicArn(topicArn)
.build();

SetTopicAttributesResponse result =
[Link](request);
[Link]("\n\nStatus was " +
[Link]().statusCode() + "\n\nTopic " + [Link]()
+ " updated " + [Link]() + " to " +
[Link]());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SetTopicAttributesCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
AttributeName: "ATTRIBUTE_NAME", // ATTRIBUTE_NAME
TopicArn: "TOPIC_ARN", // TOPIC_ARN
AttributeValue: "NEW_ATTRIBUTE_VALUE", //NEW_ATTRIBUTE_VALUE
};

const run = async () => {


try {
const data = await [Link](new SetTopicAttributesCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

364
Amazon Simple Notification
Service Guía para desarrolladores
Cómo establecer los atributos de los temas

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun setTopAttr(attribute: String?, topicArnVal: String?, value: String?) {

val request = SetTopicAttributesRequest {


attributeName = attribute
attributeValue = value
topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


[Link](request)
println("Topic ${[Link]} was updated.")
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Configure the message delivery status attributes for an Amazon SNS Topic.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'

365
Amazon Simple Notification
Service Guía para desarrolladores
Cómo establecer los atributos de los temas

]);
$attribute = 'Policy | DisplayName | DeliveryPolicy';
$value = 'First Topic';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->setTopicAttributes([
'AttributeName' => $attribute,
'AttributeValue' => $value,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for PHP.

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

policy = '{
"Version":"2008-10-17",
"Id":"__default_policy_ID",
"Statement":[{
"Sid":"__default_statement_ID",
"Effect":"Allow",
"Principal":{
"AWS":"*"
},
"Action":["SNS:Publish"],
"Resource":"' + MY_TOPIC_ARN + '",
"Condition":{
"ArnEquals":{
"AWS:SourceArn":"' + MY_RESOURCE_ARN + '"}
}
}]
}'
# Replace us-west-2 with the AWS Region you're using for Amazon SNS.
sns = Aws::SNS::[Link](region: 'REGION')

# Get topic by ARN


topic = [Link]()

# Add policy to topic


topic.set_attributes({
attribute_name: "POLICY_NAME",
attribute_value: policy
})

• Encuentre instrucciones y más código en GitHub.

366
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una función Lambda a un tema

• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.
• Para ver los detalles de la API, consulte SetTopicAttributes en la Referencia de la API de AWS
SDK for Ruby.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Suscripción a una función Lambda para recibir


notificaciones de un tema de Amazon SNS mediante
un SDK de AWS
Los siguientes ejemplos de código indican cómo suscribir una función Lambda para recibir notificaciones
de un tema de Amazon SNS.

C++

SDK para C++

/**
* Subscribe an AWS Lambda endpoint to a topic - demonstrates how to initiate a
subscription to an Amazon SNS topic with delivery
* to an AWS Lambda function.
*
* NOTE: You must first configure AWS Lambda to run this example.
* See [Link]
[Link] for more information.
*
* <protocol_value> set to "lambda" provides delivery of JSON-encoded message to an
AWS Lambda function
* (see [Link] for
available protocols).
* <topic_arn_value> can be obtained from run_list_topics executable and includes
the "arn:" prefix.
* <lambda_function_arn> is the ARN of an AWS Lambda function.
*/

int main(int argc, char ** argv)


{
if (argc != 4)
{
std::cout << "Usage: subscribe_lamda <protocol_value=lambda> <topic_arn_value>"
" <lambda_function_arn>" << std::endl;
return 1;
}

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String protocol = argv[1];
Aws::String topic_arn = argv[2];
Aws::String endpoint = argv[3];

Aws::SNS::Model::SubscribeRequest s_req;
s_req.SetTopicArn(topic_arn);
s_req.SetProtocol(protocol);
s_req.SetEndpoint(endpoint);

367
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una función Lambda a un tema

auto s_out = [Link](s_req);

if (s_out.IsSuccess())
{
std::cout << "Subscribed successfully " << std::endl;
}
else
{
std::cout << "Error while subscribing " << s_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);
return 0;
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for C++.

Java

SDK para Java 2.x

public static String subLambda(SnsClient snsClient, String topicArn, String


lambdaArn) {

try {

SubscribeRequest request = [Link]()


.protocol("lambda")
.endpoint(lambdaArn)
.returnSubscriptionArn(true)
.topicArn(topicArn)
.build();

SubscribeResponse result = [Link](request);


return [Link]();

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
return "";
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

368
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una función Lambda a un tema

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SubscribeCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
Protocol: "lambda" /* required */,
TopicArn: "TOPIC_ARN", //TOPIC_ARN
Endpoint: "LAMBDA_FUNCTION_ARN", //LAMBDA_FUNCTION_ARN
};

const run = async () => {


try {
const data = await [Link](new SubscribeCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun subLambda(topicArnVal: String?, lambdaArn: String?) {

val request = SubscribeRequest {


protocol = "lambda"
endpoint = lambdaArn
returnSubscriptionArn = true
topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)

369
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una aplicación móvil a un tema

println(" The subscription Arn is ${[Link]}")


}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe en la Referencia de la API de AWS SDK
para Kotlin.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Suscripción de una aplicación móvil a un tema de


Amazon SNS mediante un SDK de AWS
Los siguientes ejemplos de código indican cómo suscribir un punto de enlace de una aplicación móvil para
que reciba notificaciones de un tema de Amazon SNS.

C++

SDK para C++

/**
* Subscribe an app endpoint to a topic - demonstrates how to initiate a
subscription to an Amazon SNS topic
* with delivery to a mobile app.
*
* NOTE: You must first create an endpoint by registering an app and device.
* See [Link]
[Link] for more information.
*
* <protocol_value> set to "application" provides delivery of JSON-encoded message
to an EndpointArn
* for a mobile app and device (see [Link]
api/API_Subscribe.html for available protocols).
* <topic_arn_value> can be obtained from run_list_topics executable and includes
the "arn:" prefix.
* <mobile_endpoint_arn> is the EndpointArn of a mobile app and device.
*/
int main(int argc, char ** argv)
{
if (argc != 4)
{
std::cout << "Usage: subscribe_app <protocol_value/application>
<topic_arn_value>"
" <mobile_endpoint_arn>" << std::endl;
return 1;
}

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String protocol = argv[1];
Aws::String topic_arn = argv[2];
Aws::String endpoint = argv[3];

Aws::SNS::Model::SubscribeRequest s_req;

370
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una aplicación móvil a un tema

s_req.SetTopicArn(topic_arn);
s_req.SetProtocol(protocol);
s_req.SetEndpoint(endpoint);

auto s_out = [Link](s_req);

if (s_out.IsSuccess())
{
std::cout << "Subscribed successfully " << std::endl;
}
else
{
std::cout << "Error while subscribing " << s_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);
return 0;
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for C++.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SubscribeCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
Protocol: "application" /* required */,
TopicArn: "TOPIC_ARN", //TOPIC_ARN
Endpoint: "MOBILE_ENDPOINT_ARN", // MOBILE_ENDPOINT_ARN
};

const run = async () => {


try {
const data = await [Link](new SubscribeCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};

371
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de un punto de enlace HTTP a un tema

run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for JavaScript.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Suscripción de un punto de enlace HTTP a un tema de


Amazon SNS mediante un SDK de AWS
Los siguientes ejemplos de código indican cómo suscribir un punto de enlace HTTP o HTTPS para que
reciba notificaciones de un tema de Amazon SNS.

Java

SDK para Java 2.x

public static void subHTTPS(SnsClient snsClient, String topicArn, String url )


{

try {
SubscribeRequest request = [Link]()
.protocol("http")
.endpoint(url)
.returnSubscriptionArn(true)
.topicArn(topicArn)
.build();

SubscribeResponse result = [Link](request);


[Link]("Subscription ARN is " + [Link]() +
"\n\n Status is " + [Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Java 2.x.

PHP

SDK para PHP

require 'vendor/[Link]';

372
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una dirección
de correo electrónico a un tema

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Prepares to subscribe an endpoint by sending the endpoint a confirmation
message.
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$protocol = 'https';
$endpoint = '[Link]
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->subscribe([
'Protocol' => $protocol,
'Endpoint' => $endpoint,
'ReturnSubscriptionArn' => true,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for PHP.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Suscripción de una dirección de correo electrónico a


un tema de Amazon SNS mediante un SDK de AWS
En los siguientes ejemplos de código, se muestra cómo suscribir una dirección de correo electrónico a un
tema de Amazon SNS.

C++

SDK para C++

/**
* Subscribe an email address endpoint to a topic - demonstrates how to initiate a
subscription to an Amazon SNS topic with delivery
* to an email address.

373
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una dirección
de correo electrónico a un tema
*
* SNS will send a subscription confirmation email to the email address provided
which you need to confirm to
* receive messages.
*
* <protocol_value> set to "email" provides delivery of message via SMTP (see
[Link] for available
protocols).
* <topic_arn_value> can be obtained from run_list_topics executable and includes
the "arn:" prefix.
*/

int main(int argc, char ** argv)


{
if (argc != 4)
{
std::cout << "Usage: subscribe_email <protocol_value=email> <topic_arn_value>"
" <email_address>" << std::endl;
return 1;
}

Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::SNS::SNSClient sns;
Aws::String protocol = argv[1];
Aws::String topic_arn = argv[2];
Aws::String endpoint = argv[3];

Aws::SNS::Model::SubscribeRequest s_req;
s_req.SetTopicArn(topic_arn);
s_req.SetProtocol(protocol);
s_req.SetEndpoint(endpoint);

auto s_out = [Link](s_req);

if (s_out.IsSuccess())
{
std::cout << "Subscribed successfully " << std::endl;
}
else
{
std::cout << "Error while subscribing " << s_out.GetError().GetMessage()
<< std::endl;
}
}

Aws::ShutdownAPI(options);
return 0;
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for C++.

Go

SDK para Go V2
• Encuentre instrucciones y más código en GitHub.
• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Go.

374
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una dirección
de correo electrónico a un tema
Java

SDK para Java 2.x

public static void subEmail(SnsClient snsClient, String topicArn, String email)


{

try {
SubscribeRequest request = [Link]()
.protocol("email")
.endpoint(email)
.returnSubscriptionArn(true)
.topicArn(topicArn)
.build();

SubscribeResponse result = [Link](request);


[Link]("Subscription ARN: " + [Link]() +
"\n\n Status is " + [Link]().statusCode());

} catch (SnsException e) {
[Link]([Link]().errorMessage());
[Link](1);
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Java 2.x.

JavaScript

SDK para JavaScript V3

Cree el cliente en un módulo separado y expórtelo.

import { SNSClient } from "@aws-sdk/client-sns";


// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };

Importe el SDK y los módulos de cliente, y llame a la API.

// Import required AWS SDK clients and commands for [Link]


import {SubscribeCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/[Link]";

// Set the parameters


const params = {
Protocol: "email" /* required */,
TopicArn: "TOPIC_ARN", //TOPIC_ARN
Endpoint: "EMAIL_ADDRESS", //EMAIL_ADDRESS
};

const run = async () => {


try {

375
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una dirección
de correo electrónico a un tema
const data = await [Link](new SubscribeCommand(params));
[Link]("Success.", data);
return data; // For unit tests.
} catch (err) {
[Link]("Error", [Link]);
}
};
run();

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for
JavaScript.
• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for JavaScript.

Kotlin

SDK para Kotlin


Note

Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

suspend fun subEmail(topicArnVal: String, email: String) : String {

val request = SubscribeRequest {


protocol = "email"
endpoint = email
returnSubscriptionArn = true
topicArn = topicArnVal
}

SnsClient { region = "us-east-1" }.use { snsClient ->


val result = [Link](request)
return [Link]()
}
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe en la Referencia de la API de AWS SDK
para Kotlin.

PHP

SDK para PHP

require 'vendor/[Link]';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

/**
* Prepares to subscribe an endpoint by sending the endpoint a confirmation
message.

376
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una dirección
de correo electrónico a un tema
*
* This code expects that you have AWS credentials set up per:
* [Link]
guide_credentials.html
*/

$SnSclient = new SnsClient([


'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);

$protocol = 'email';
$endpoint = 'sample@[Link]';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
$result = $SnSclient->subscribe([
'Protocol' => $protocol,
'Endpoint' => $endpoint,
'ReturnSubscriptionArn' => true,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for PHP.

Python

SDK para Python (Boto3)

class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource

def subscribe(topic, protocol, endpoint):


"""
Subscribes an endpoint to the topic. Some endpoint types, such as email,
must be confirmed before their subscriptions are active. When a
subscription
is not confirmed, its Amazon Resource Number (ARN) is set to
'PendingConfirmation'.

:param topic: The topic to subscribe to.


:param protocol: The protocol of the endpoint, such as 'sms' or 'email'.
:param endpoint: The endpoint that receives messages, such as a phone
number
(in E.164 format) for SMS messages, or an email address
for
email messages.
:return: The newly added subscription.

377
Amazon Simple Notification
Service Guía para desarrolladores
Suscripción de una dirección
de correo electrónico a un tema
"""
try:
subscription = [Link](
Protocol=protocol, Endpoint=endpoint, ReturnSubscriptionArn=True)
[Link]("Subscribed %s %s to topic %s.", protocol, endpoint,
[Link])
except ClientError:
[Link](
"Couldn't subscribe %s %s to topic %s.", protocol, endpoint,
[Link])
raise
else:
return subscription

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de API de
AWS SDK for Python (Boto3).

Ruby

SDK para Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk'

def subscription_created?(sns_client, topic_arn, protocol, endpoint)

sns_client.subscribe(topic_arn: topic_arn, protocol: protocol, endpoint:


endpoint)

rescue StandardError => e


puts "Error while creating the subscription: #{[Link]}"
end

# Full example call:


def run_me

protocol = 'email'
endpoint = 'EMAIL_ADDRESS'
topic_arn = 'TOPIC_ARN'
region = 'REGION'

sns_client = Aws::SNS::[Link](region: region)

puts "Creating the subscription."

if subscription_created?(sns_client, topic_arn, protocol, endpoint)


puts 'The subscriptions was created.'
else
puts 'The subscription was not created. Stopping program.'
exit 1
end
end

run_me if $PROGRAM_NAME == __FILE__

• Encuentre instrucciones y más código en GitHub.


• Para obtener más información, consulte la Guía para desarrolladores de AWS SDK for Ruby.

378
Amazon Simple Notification
Service Guía para desarrolladores
Situaciones

• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK for Ruby.

Rust

SDK para Rust


Note

Esta documentación es para un SDK en versión preliminar. El SDK está sujeto a cambios
y no se debe utilizar en producción.

async fn subscribe_and_publish(
client: &Client,
topic_arn: &str,
email_address: &str,
) -> Result<(), Error> {
println!("Receiving on topic with ARN: `{}`", topic_arn);

let rsp = client


.subscribe()
.topic_arn(topic_arn)
.protocol("email")
.endpoint(email_address)
.send()
.await?;

println!("Added a subscription: {:?}", rsp);

let rsp = client


.publish()
.topic_arn(topic_arn)
.message("hello sns!")
.send()
.await?;

println!("Published message: {:?}", rsp);

Ok(())
}

• Encuentre instrucciones y más código en GitHub.


• Para ver los detalles de la API, consulte Subscribe (Suscríbase) en la Referencia de la API de
AWS SDK para Rust.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Escenarios de Amazon SNS con SDK de AWS


Los siguientes ejemplos de código muestran cómo implementar escenarios comunes en Amazon SNS
con los SDK de AWS. Estos escenarios muestran cómo llevar a cabo tareas específicas llamando a varias
funciones dentro de Amazon SNS. En cada escenario se incluye un enlace a GitHub, con instrucciones de
configuración y ejecución del código.

379
Amazon Simple Notification
Service Guía para desarrolladores
Creación de un punto de enlace de la
plataforma para notificaciones push
Ejemplos
• Creación de un punto de enlace de la plataforma para las notificaciones push de Amazon SNS
mediante un SDK de AWS (p. 380)
• Creación y publicación en un tema FIFO de Amazon SNS mediante un SDK de AWS (p. 382)
• Publicación de mensajes SMS en un tema de Amazon SNS mediante un SDK de AWS (p. 384)
• Publicación de un mensaje de gran tamaño en Amazon SNS con Amazon S3 mediante un SDK de
AWS (p. 385)

Creación de un punto de enlace de la plataforma para


las notificaciones push de Amazon SNS mediante un
SDK de AWS
El siguiente ejemplo de código indica cómo crear un punto de enlace de la plataforma para las
notificaciones push de Amazon SNS.

Java

SDK para Java 1.x

class RegistrationExample {

AmazonSNSClient client = new AmazonSNSClient(); //provide credentials here


String arnStorage = null;

public void registerWithSNS() {

String endpointArn = retrieveEndpointArn();


String token = "Retrieved from the mobile operating system";

boolean updateNeeded = false;


boolean createNeeded = (null == endpointArn);

if (createNeeded) {
// No platform endpoint ARN is stored; need to call createEndpoint.
endpointArn = createEndpoint();
createNeeded = false;
}

[Link]("Retrieving platform endpoint data...");


// Look up the platform endpoint and make sure the data in it is current, even
if
// it was just created.
try {
GetEndpointAttributesRequest geaReq =
new GetEndpointAttributesRequest()
.withEndpointArn(endpointArn);
GetEndpointAttributesResult geaRes =
[Link](geaReq);

updateNeeded = ![Link]().get("Token").equals(token)
|| ![Link]().get("Enabled").equalsIgnoreCase("true");

} catch (NotFoundException nfe) {


// We had a stored ARN, but the platform endpoint associated with it
// disappeared. Recreate it.
createNeeded = true;
}

380
Amazon Simple Notification
Service Guía para desarrolladores
Creación de un punto de enlace de la
plataforma para notificaciones push

if (createNeeded) {
createEndpoint(token);
}

[Link]("updateNeeded = " + updateNeeded);

if (updateNeeded) {
// The platform endpoint is out of sync with the current data;
// update the token and enable it.
[Link]("Updating platform endpoint " + endpointArn);
Map attribs = new HashMap();
[Link]("Token", token);
[Link]("Enabled", "true");
SetEndpointAttributesRequest saeReq =
new SetEndpointAttributesRequest()
.withEndpointArn(endpointArn)
.withAttributes(attribs);
[Link](saeReq);
}
}

/**
* @return never null
* */
private String createEndpoint(String token) {

String endpointArn = null;


try {
[Link]("Creating platform endpoint with token " + token);
CreatePlatformEndpointRequest cpeReq =
new CreatePlatformEndpointRequest()
.withPlatformApplicationArn(applicationArn)
.withToken(token);
CreatePlatformEndpointResult cpeRes = client
.createPlatformEndpoint(cpeReq);
endpointArn = [Link]();
} catch (InvalidParameterException ipe) {
String message = [Link]();
[Link]("Exception message: " + message);
Pattern p = Pattern
.compile(".*Endpoint (arn:aws:sns[^ ]+) already exists " +
"with the same [Tt]oken.*");
Matcher m = [Link](message);
if ([Link]()) {
// The platform endpoint already exists for this token, but with additional
// custom data that createEndpoint doesn't want to overwrite. Use the
// existing platform endpoint.
endpointArn = [Link](1);
} else {
// Rethrow the exception, because the input is actually bad.
throw ipe;
}
}
storeEndpointArn(endpointArn);
return endpointArn;
}

/**
* @return the ARN the app was registered under previously, or null if no
* platform endpoint ARN is stored.
*/
private String retrieveEndpointArn() {
// Retrieve the platform endpoint ARN from permanent storage,
// or return null if null is stored.
return arnStorage;

381
Amazon Simple Notification
Service Guía para desarrolladores
Creación y publicación en un tema FIFO

/**
* Stores the platform endpoint ARN in permanent storage for lookup next time.
* */
private void storeEndpointArn(String endpointArn) {
// Write the platform endpoint ARN to permanent storage.
arnStorage = endpointArn;
}
}

• Encuentre instrucciones y más código en GitHub.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Creación y publicación en un tema FIFO de Amazon


SNS mediante un SDK de AWS
El siguiente ejemplo de código indica cómo crear y publicar en un tema FIFO de Amazon SNS.

Java

SDK para Java 1.x

Cree un tema FIFO y colas FIFO. Suscriba las colas al tema.

// Create API clients

AWSCredentialsProvider credentials = getCredentials();

AmazonSNS sns = new AmazonSNSClient(credentials);


AmazonSQS sqs = new AmazonSQSClient(credentials);

// Create FIFO topic

Map<String, String> topicAttributes = new HashMap<String, String>();

[Link]("FifoTopic", "true");
[Link]("ContentBasedDeduplication", "false");

String topicArn = [Link](


new CreateTopicRequest()
.withName("[Link]")
.withAttributes(topicAttributes)
).getTopicArn();

// Create FIFO queues

Map<String, String> queueAttributes = new HashMap<String, String>();

[Link]("FifoQueue", "true");

// Disable content-based deduplication because messages published with the same


body
// might carry different attributes that must be processed independently.
// The price management system uses the message attributes to define whether a
given

382
Amazon Simple Notification
Service Guía para desarrolladores
Creación y publicación en un tema FIFO

// price update applies to the wholesale application or to the retail application.


[Link]("ContentBasedDeduplication", "false");

String wholesaleQueueUrl = [Link](


new CreateQueueRequest()
.withName("[Link]")
.withAttributes(queueAttributes)
).getQueueUrl();

String retailQueueUrl = [Link](


new CreateQueueRequest()
.withName("[Link]")
.withAttributes(queueAttributes)
).getQueueUrl();

// Subscribe FIFO queues to FIFO topic, setting required permissions

String wholesaleSubscriptionArn =
[Link](sns, sqs, topicArn, wholesaleQueueUrl);

String retailSubscriptionArn =
[Link](sns, sqs, topicArn, retailQueueUrl);

Establezca una política de filtro en cada suscripción para que cada aplicación de suscriptor reciba
solo las actualizaciones de precios que necesita.

// Set the Amazon SNS subscription filter policies

SNSMessageFilterPolicy wholesalePolicy = new SNSMessageFilterPolicy();


[Link]("business", "wholesale");
[Link](sns, wholesaleSubscriptionArn);

SNSMessageFilterPolicy retailPolicy = new SNSMessageFilterPolicy();


[Link]("business", "retail");
[Link](sns, retailSubscriptionArn);

Redacte y publique un mensaje que actualice el precio mayorista.

// Publish message to FIFO topic

String subject = "Price Update";


String payload = "{\"product\": 214, \"price\": 79.99}";
String groupId = "PID-214";
String dedupId = [Link]().toString();
String attributeName = "business";
String attributeValue = "wholesale";

Map<String, MessageAttributeValue> attributes = new HashMap<>();

[Link](
attributeName,
new MessageAttributeValue()
.withDataType("String")
.withStringValue(attributeValue));

[Link](
new PublishRequest()
.withTopicArn(topicArn)
.withSubject(subject)
.withMessage(payload)
.withMessageGroupId(groupId);

383
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de mensajes SMS en un tema

.withMessageDeduplicationId(dedupId)
.withMessageAttributes(attributes);

• Encuentre instrucciones y más código en GitHub.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Publicación de mensajes SMS en un tema de Amazon


SNS mediante un SDK de AWS
En el siguiente ejemplo de código, se muestra cómo:

• Cree un tema de Amazon SNS.


• Suscriba los números de teléfono al tema.
• Publique mensajes SMS en el tema para que todos los números de teléfono suscritos reciban el mensaje
a la vez.

Java

SDK para Java 1.x

Cree un tema y devuelva su ARN.

public static String createSNSTopic(AmazonSNSClient snsClient) {


CreateTopicRequest createTopic = new CreateTopicRequest("mySNSTopic");
CreateTopicResult result = [Link](createTopic);
[Link]("Create topic request: " +
[Link](createTopic));
[Link]("Create topic result: " + result);
return [Link]();
}

Suscriba un punto de enlace a un tema.

public static void subscribeToTopic(AmazonSNSClient snsClient, String topicArn,


String protocol, String endpoint) {
SubscribeRequest subscribe = new SubscribeRequest(topicArn, protocol,
endpoint);
SubscribeResult subscribeResult = [Link](subscribe);
[Link]("Subscribe request: " +
[Link](subscribe));
[Link]("Subscribe result: " + subscribeResult);
}

Establezca atributos en el mensaje, como el ID del remitente, el precio máximo y su tipo. Los
atributos de mensaje son opcionales.

public static void addMessageAttributes(Map<String, MessageAttributeValue>


smsAttributes) {

384
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un mensaje de gran tamaño

[Link]("[Link]", new MessageAttributeValue()


.withStringValue("mySenderID") //The sender ID shown on the device.
.withDataType("String"));
[Link]("[Link]", new MessageAttributeValue()
.withStringValue("0.50") //Sets the max price to 0.50 USD.
.withDataType("Number"));
[Link]("[Link]", new MessageAttributeValue()
.withStringValue("Promotional") //Sets the type to promotional.
.withDataType("String"));
}

Publique un mensaje en un tema. El mensaje se envía a cada suscriptor.

public static void sendSMSMessageToTopic(AmazonSNSClient snsClient, String


topicArn,
String message, Map<String, MessageAttributeValue> smsAttributes) {
PublishResult result = [Link](new PublishRequest()
.withTopicArn(topicArn)
.withMessage(message)
.withMessageAttributes(smsAttributes));
[Link](result);
}

Llame a las funciones anteriores para crear un tema, suscribir un número de teléfono, establecer
atributos de mensaje y publicar un mensaje en el tema.

public static void main(String[] args) {


AmazonSNSClient snsClient = new AmazonSNSClient();

String topicArn = createSNSTopic(snsClient);


String phoneNumber = "+1XXX5550100";
// Specify a protocol of "sms" when subscribing a phone number.
subscribeToTopic(snsClient, topicArn, "sms", phoneNumber);

String message = "My SMS message";


Map<String, MessageAttributeValue> smsAttributes =
new HashMap<String, MessageAttributeValue>();
addMessageAttributes(smsAttributes)
sendSMSMessageToTopic(snsClient, topicArn, message, smsAttributes);
}

• Encuentre instrucciones y más código en GitHub.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Publicación de un mensaje de gran tamaño en


Amazon SNS con Amazon S3 mediante un SDK de
AWS
El siguiente ejemplo de código indica cómo publicar un mensaje de gran tamaño en Amazon SNS
utilizando Amazon S3 para almacenar la carga útil del mensaje.

385
Amazon Simple Notification
Service Guía para desarrolladores
Publicación de un mensaje de gran tamaño

Java

SDK para Java 1.x

Para publicar mensajes grandes, utilice la biblioteca de clientes extendidos de Amazon SNS para
Java. El mensaje que envía hace referencia a un objeto de Amazon S3 en el que se incluye el
contenido real del mensaje.

import [Link];
import [Link];
import [Link];
import [Link];
import [Link].s3.AmazonS3;
import [Link].s3.AmazonS3ClientBuilder;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class Example {

public static void main(String[] args) {


final String BUCKET_NAME = "extended-client-bucket";
final String TOPIC_NAME = "extended-client-topic";
final String QUEUE_NAME = "extended-client-queue";
final Regions region = Regions.DEFAULT_REGION;

//Message threshold controls the maximum message size that will be allowed
to be published
//through SNS using the extended client. Payload of messages exceeding this
value will be stored in
//S3. The default value of this parameter is 256 KB which is the maximum
message size in SNS (and SQS).
final int EXTENDED_STORAGE_MESSAGE_SIZE_THRESHOLD = 32;

//Initialize SNS, SQS and S3 clients


final AmazonSNS snsClient =
[Link]().withRegion(region).build();
final AmazonSQS sqsClient =
[Link]().withRegion(region).build();
final AmazonS3 s3Client =
[Link]().withRegion(region).build();

//Create bucket, topic, queue and subscription


[Link](BUCKET_NAME);
final String topicArn = [Link](
new CreateTopicRequest().withName(TOPIC_NAME)
).getTopicArn();
final String queueUrl = [Link](
new CreateQueueRequest().withQueueName(QUEUE_NAME)
).getQueueUrl();
final String subscriptionArn = [Link](
snsClient, sqsClient, topicArn, queueUrl
);

//To read message content stored in S3 transparently through SQS extended


client,

386
Amazon Simple Notification
Service Guía para desarrolladores
Ejemplos de servicios combinados

//set the RawMessageDelivery subscription attribute to TRUE


final SetSubscriptionAttributesRequest subscriptionAttributesRequest = new
SetSubscriptionAttributesRequest();
[Link](subscriptionArn);
[Link]("RawMessageDelivery");
[Link]("TRUE");
[Link](subscriptionAttributesRequest);

//Initialize SNS extended client


//PayloadSizeThreshold triggers message content storage in S3 when the
threshold is exceeded
//To store all messages content in S3, use AlwaysThroughS3 flag
final SNSExtendedClientConfiguration snsExtendedClientConfiguration = new
SNSExtendedClientConfiguration()
.withPayloadSupportEnabled(s3Client, BUCKET_NAME)
.withPayloadSizeThreshold(EXTENDED_STORAGE_MESSAGE_SIZE_THRESHOLD);
final AmazonSNSExtendedClient snsExtendedClient = new
AmazonSNSExtendedClient(snsClient, snsExtendedClientConfiguration);

//Publish message via SNS with storage in S3


final String message = "This message is stored in S3 as it exceeds the
threshold of 32 bytes set above.";
[Link](topicArn, message);

//Initialize SQS extended client


final ExtendedClientConfiguration sqsExtendedClientConfiguration = new
ExtendedClientConfiguration()
.withPayloadSupportEnabled(s3Client, BUCKET_NAME);
final AmazonSQSExtendedClient sqsExtendedClient =
new AmazonSQSExtendedClient(sqsClient,
sqsExtendedClientConfiguration);

//Read the message from the queue


final ReceiveMessageResult result =
[Link](queueUrl);
[Link]("Received message is " +
[Link]().get(0).getBody());
}
}

• Encuentre instrucciones y más código en GitHub.

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Ejemplos de servicios combinados de Amazon SNS


con SDK de AWS
Las siguientes aplicaciones de muestra utilizan los SDK de AWS para combinar Amazon SNS con
otros servicios de AWS. Cada ejemplo incluye un enlace a GitHub, con instrucciones de configuración y
ejecución de la aplicación.

Ejemplos
• Creación de una aplicación para enviar datos a una tabla de DynamoDB (p. 388)
• Creación de una aplicación de publicación y suscripción que traduzca mensajes (p. 389)
• Creación de una aplicación de exploración de Amazon Textract (p. 390)

387
Amazon Simple Notification
Service Guía para desarrolladores
Creación de una aplicación para enviar
datos a una tabla de DynamoDB
• Detecte personas y objetos en un vídeo con Amazon Rekognition mediante un SDK de AWS (p. 391)
• Uso de API Gateway para invocar una función Lambda (p. 392)
• Uso de eventos programados para invocar una función Lambda (p. 393)

Creación de una aplicación para enviar datos a una


tabla de DynamoDB
Los siguientes ejemplos de código indican cómo crear una aplicación que envíe datos a una tabla de
Amazon DynamoDB y que le notifique cuando un usuario actualice la tabla

Java

SDK para Java 2.x

Indica cómo crear una aplicación web dinámica que envíe datos mediante la API Java de Amazon
DynamoDB y un mensaje de texto mediante la API Java de Amazon Simple Notification Service.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• DynamoDB
• Amazon SNS

JavaScript

SDK para JavaScript V3

Este ejemplo indica cómo crear una aplicación que permita a los usuarios enviar datos a una
tabla de Amazon DynamoDB y un mensaje de texto al administrador mediante Amazon Simple
Notification Service (Amazon SNS).

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Este ejemplo también está disponible en la guía para desarrolladores de AWS SDK for JavaScript
v3.

Servicios utilizados en este ejemplo


• DynamoDB
• Amazon SNS

Kotlin

SDK para Kotlin


Note
Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

Muestra cómo crear una aplicación de Android nativa que envíe datos mediante la API de Kotlin
de Amazon DynamoDB y un mensaje de texto mediante la API de Kotlin de Amazon SNS.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

388
Amazon Simple Notification
Service Guía para desarrolladores
Creación de una aplicación de Amazon SNS

Servicios utilizados en este ejemplo


• DynamoDB
• Amazon SNS

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Creación de una aplicación de publicación y


suscripción que traduzca mensajes
Los siguientes ejemplos de código muestran cómo crear una aplicación que cuente con funcionalidad de
suscripción y publicación y traduzca mensajes.

.NET

AWS SDK for .NET

Indica cómo utilizar la API .NET de Amazon Simple Notification Service para crear una aplicación
web con funcionalidad de suscripción y publicación. Además, esta aplicación de ejemplo también
traduce los mensajes.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• Amazon SNS
• Amazon Translate

Java

SDK para Java 2.x

Indica cómo utilizar la API de Java de Amazon Simple Notification Service para crear una
aplicación web con funcionalidad de suscripción y publicación. Además, esta aplicación de
ejemplo también traduce los mensajes.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Para obtener el código fuente completo e instrucciones sobre cómo configurar y ejecutar el
ejemplo que utiliza la API Java Async, consulte el ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• Amazon SNS
• Amazon Translate

Kotlin

SDK para Kotlin


Note
Esta es una documentación preliminar para una característica en versión de vista previa.
Está sujeta a cambios.

389
Amazon Simple Notification
Service Guía para desarrolladores
Creación de una aplicación de
exploración de Amazon Textract
Muestra cómo utilizar la API de Kotlin de Amazon SNS para crear una aplicación que cuente con
funcionalidad de suscripción y publicación. Además, esta aplicación de ejemplo también traduce
los mensajes.

Para ver el código fuente completo y las instrucciones sobre cómo crear una aplicación web,
consulte el ejemplo completo en GitHub.

Para ver el código fuente completo y las instrucciones sobre cómo crear una aplicación Android
nativa, consulte el ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• Amazon SNS
• Amazon Translate

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Creación de una aplicación de exploración de Amazon


Textract
Los siguientes ejemplos de código indican cómo explorar la salida de Amazon Textract mediante una
aplicación interactiva.

JavaScript

SDK para JavaScript V3

Indica cómo utilizar el AWS SDK for JavaScript para crear una aplicación React que utilice
Amazon Textract para extraer datos de la imagen de un documento y presentarlos en una
página web interactiva. Este ejemplo se ejecuta en un navegador web y requiere una identidad
autenticada de Amazon Cognito para las credenciales. Para el almacenamiento utiliza Amazon
Simple Storage Service (Amazon S3) y para las notificaciones consulta una cola de Amazon
Simple Queue Service (Amazon SQS) que está suscrita a un tema de Amazon Simple Notification
Service (Amazon SNS).

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• Amazon Cognito Identity
• Simple Storage Service (Amazon S3)
• Amazon SNS
• Amazon SQS
• Amazon Textract

Python

SDK para Python (Boto3)

Indica cómo utilizar AWS SDK for Python (Boto3) con Amazon Textract para detectar elementos
de texto, formularios y tablas en la imagen de un documento. La imagen de entrada y la salida

390
Amazon Simple Notification
Service Guía para desarrolladores
Detecte personas y objetos en un vídeo

de Amazon Textract aparecen en una aplicación Tkinter que permite explorar los elementos
detectados.
• Envía la imagen de un documento a Amazon Textract y explora el resultado de los elementos
detectados.
• Envía imágenes directamente a Amazon Textract o mediante un bucket de Amazon Simple
Storage Service (Amazon S3).
• Utilice las API asíncronas para iniciar un trabajo que publique una notificación en un tema de
Amazon Simple Notification Service (Amazon SNS) cuando el trabajo se finalice.
• Consulta una cola de Amazon Simple Queue Service (Amazon SQS) en busca de un mensaje
de finalización de trabajo y muestra los resultados.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• Simple Storage Service (Amazon S3)
• Amazon SNS
• Amazon SQS
• Amazon Textract

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

Detecte personas y objetos en un vídeo con Amazon


Rekognition mediante un SDK de AWS
Los siguientes ejemplos de código indican cómo detectar personas y objetos en un vídeo con Amazon
Rekognition.

Python

SDK para Python (Boto3)

Utilice Amazon Rekognition para detectar caras, objetos y personas en vídeos iniciando trabajos
de detección asíncronos. Este ejemplo también configura Amazon Rekognition para que notifique
un tema de Amazon Simple Notification Service (Amazon SNS) cuando se finalicen los trabajos
y suscribe una cola de Amazon Simple Queue Service (Amazon SQS) al tema. Cuando la cola
recibe un mensaje sobre un trabajo, se recupera el trabajo y se muestran los resultados

Este ejemplo se puede ver mejor en GitHub. Para ver el código fuente completo y las
instrucciones de configuración y ejecución, consulte el ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• Amazon Rekognition
• Amazon SNS
• Amazon SQS

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

391
Amazon Simple Notification
Service Guía para desarrolladores
Uso de API Gateway para invocar una función Lambda

Uso de API Gateway para invocar una función


Lambda
Los siguientes ejemplos de código muestran cómo crear una función AWS Lambda invocada por Amazon
API Gateway.

Java

SDK para Java 2.x

Indica cómo crear una función AWS Lambda utilizando la API de tiempo de ejecución de
Java Lambda. Este ejemplo invoca diferentes servicios de AWS para realizar un caso de uso
específico. En este ejemplo se indica cómo crear una función de Lambda invocada por Amazon
API Gateway que escanea una tabla de Amazon DynamoDB en busca de aniversarios laborales y
utiliza Amazon Simple Notification Service (Amazon SNS) para enviar un mensaje de texto a sus
empleados que les felicite en la fecha de su primer aniversario.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• API Gateway
• DynamoDB
• Lambda
• Amazon SNS

JavaScript

SDK para JavaScript V3

Indica cómo crear una función AWS Lambda mediante el uso de la API de tiempo de ejecución
de Lambda JavaScript. Este ejemplo invoca diferentes servicios de AWS para realizar un caso
de uso específico. En este ejemplo se indica cómo crear una función de Lambda invocada por
Amazon API Gateway que escanea una tabla de Amazon DynamoDB en busca de aniversarios
laborales y utiliza Amazon Simple Notification Service (Amazon SNS) para enviar un mensaje de
texto a sus empleados que les felicite en la fecha de su primer aniversario.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Este ejemplo también está disponible en la guía para desarrolladores de AWS SDK for JavaScript
v3.

Servicios utilizados en este ejemplo


• API Gateway
• DynamoDB
• Lambda
• Amazon SNS

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

392
Amazon Simple Notification
Service Guía para desarrolladores
Uso de eventos programados
para invocar una función Lambda

Uso de eventos programados para invocar una


función Lambda
Los siguientes ejemplos de código muestran cómo crear una función AWS Lambda invocada por un evento
programado de Amazon EventBridge.

Java

SDK para Java 2.x

Indica cómo crear un evento programado de Amazon EventBridge que invoque una función AWS
Lambda. Configuración de EventBridge para que utilice una expresión cron para programar la
invocación de la función Lambda. En este ejemplo, creará una función Lambda utilizando la API
de tiempo de ejecución de Lambda Java. Este ejemplo invoca diferentes servicios de AWS para
realizar un caso de uso específico. Este ejemplo indica cómo crear una aplicación que envíe un
mensaje de texto a sus empleados para felicitarles por su primer aniversario.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Servicios utilizados en este ejemplo


• DynamoDB
• EventBridge
• Lambda
• Amazon SNS

JavaScript

SDK para JavaScript V3

Indica cómo crear un evento programado de Amazon EventBridge que invoque una función AWS
Lambda. Configuración de EventBridge para que utilice una expresión cron para programar la
invocación de la función Lambda. En este ejemplo, creará una función Lambda utilizando la API
de tiempo de ejecución de Lambda JavaScript. Este ejemplo invoca diferentes servicios de AWS
para realizar un caso de uso específico. Este ejemplo indica cómo crear una aplicación que envíe
un mensaje de texto a sus empleados para felicitarles por su primer aniversario.

Para ver el código fuente completo y las instrucciones de configuración y ejecución, consulte el
ejemplo completo en GitHub.

Este ejemplo también está disponible en la guía para desarrolladores de AWS SDK for JavaScript
v3.

Servicios utilizados en este ejemplo


• DynamoDB
• EventBridge
• Lambda
• Amazon SNS

Para obtener una lista completa de las guías para desarrolladores del SDK de AWS y ejemplos de código,
consulte Uso de Amazon SNS con un AWS SDK (p. 6). En este tema también se incluye información sobre
cómo comenzar a utilizar el SDK y detalles sobre sus versiones anteriores.

393
Amazon Simple Notification
Service Guía para desarrolladores
Protección de los datos

Seguridad en Amazon SNS


En esta sección, se proporciona información sobre la seguridad, la autenticación y el control de acceso de
Amazon SNS, así como sobre el lenguaje de la política de acceso de Amazon SNS.

Temas
• Protección de los datos (p. 394)
• Identity and Access Management en Amazon SNS (p. 416)
• Registro y monitoreo en Amazon SNS (p. 441)
• Validación de la conformidad de Amazon SNS (p. 449)
• Resiliencia en Amazon SNS (p. 450)
• Seguridad de la infraestructura en Amazon SNS (p. 450)
• Prácticas recomendadas de seguridad para Amazon SNS (p. 451)

Protección de los datos


El modelo de responsabilidad compartida de AWS se aplica a la protección de datos en Amazon Simple
Notification Service. Como se describe en este modelo, AWS es responsable de proteger la infraestructura
global que ejecuta toda la Nube de AWS. Usted es responsable de mantener el control sobre el contenido
alojado en esta infraestructura. Este contenido incluye la configuración de seguridad y las tareas de
administración de los Servicios de AWS que utilice. Para obtener más información sobre la privacidad de
los datos, consulte las Preguntas frecuentes sobre la privacidad de datos. Para obtener información sobre
la protección de datos en Europa, consulte la publicación de blog AWSShared Responsability Model and
GDPR en el Blog de seguridad de AWS.

Con fines de protección de datos, recomendamos proteger las credenciales de Cuenta de AWS y
configurar cuentas de usuario individuales con AWS Identity and Access Management (IAM). De esta
manera, solo se otorgan a cada usuario los permisos necesarios para cumplir con sus obligaciones
laborales. También recomendamos proteger sus datos de las siguientes formas:

• Utilice Multi-Factor Authentication (MFA) con cada cuenta.


• Utilice SSL/TLS para comunicarse con los recursos de AWS. Recomendamos TLS 1.2 o una versión
posterior.
• Configure la API y el registro de actividad del usuario con AWS CloudTrail.
• Utilice las soluciones de cifrado de AWS, junto con todos los controles de seguridad predeterminados
dentro de los servicios de AWS.
• Utilice avanzados servicios de seguridad administrados, como Amazon Macie, que lo ayuden a detectar
y proteger los datos personales almacenados en Amazon S3.
• Si necesita módulos criptográficos validados FIPS 140-2 al acceder a AWS a través de una interfaz de
línea de comandos o una API, utilice un punto de enlace de FIPS. Para obtener más información sobre
los puntos de enlace de FIPS disponibles, consulte Estándar de procesamiento de la información federal
(FIPS) 140-2.

Recomendamos encarecidamente que nunca introduzca información de identificación confidencial, como,


por ejemplo, direcciones de email de sus clientes, en etiquetas o en los campos de formato libre, como el
campo Name (Nombre). Esto incluye cuando trabaja con Amazon SNS u otros servicios de AWS mediante
la consola, la API, AWS CLI o los SDK de AWS. Los datos que ingresa en etiquetas o campos de formato
libre utilizados para los nombres se pueden utilizar para los registros de facturación o diagnóstico. Si
proporciona una URL a un servidor externo, recomendamos encarecidamente que no incluya información
de credenciales en la URL a fin de validar la solicitud para ese servidor.

394
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

En las siguientes secciones, se proporciona más información sobre la protección de datos en Amazon
SNS.

Temas
• Cifrado de datos (p. 395)
• Privacidad del tráfico entre redes (p. 404)

Cifrado de datos
La protección de datos se refiere a salvaguardarlos en tránsito (al desplazarse desde y hacia Amazon
SNS) y en reposo (almacenado en discos en centros de datos Amazon SNS). Puede proteger los datos
en tránsito con una Capa de sockets seguros (SSL, Secure Sockets Layer) o con el cifrado del lado del
cliente. Puede proteger los datos en reposo si solicita a Amazon SNS que cifre los mensajes antes de
guardarlos en el disco en sus centros de datos y, a continuación, que los descifre cuando se reciban los
mensajes.

Temas
• Cifrado en reposo (p. 395)
• Administración de claves (p. 397)
• Habilitación del cifrado del lado del servidor (SSE) para un tema de Amazon SNS (p. 401)
• Habilitación del cifrado del lado del servidor (SSE) para un tema de Amazon SNS con una cola cifrada
de Amazon SQS suscrita (p. 402)

Cifrado en reposo
El cifrado del lado del servidor (SSE) le permite almacenar información confidencial en temas cifrados.
SSE protege el contenido de los mensajes en temas de Amazon SNS mediante claves administradas en
AWS Key Management Service (AWS KMS).

Para obtener información sobre cómo administrar SSE utilizando la AWS Management Console o
AWS SDK for Java (estableciendo el atributo KmsMasterKeyId mediante las acciones CreateTopic
y SetTopicAttributes de la API), consulte Habilitación del cifrado del lado del servidor (SSE)
para un tema de Amazon SNS (p. 401). Para obtener información sobre cómo crear temas cifrados
mediante AWS CloudFormation (al establecer la propiedad KmsMasterKeyId mediante el recurso
AWS::SNS::Topic), consulte la Guía del usuario de AWS CloudFormation.

SSE cifra los mensajes en cuanto Amazon SNS los recibe. Los mensajes se almacenan cifrados y Amazon
SNS los descifra únicamente cuando se envían.
Important
Todas las solicitudes hechas a los temas con SSE habilitado deben usar HTTPS y Signature
Version 4.
Para obtener información acerca de la compatibilidad de otros servicios con temas de cifrado,
consulte la documentación de los servicios.

AWS KMS combina hardware y software seguros de alta disponibilidad para ofrecer un sistema de
administración de claves adaptado a la nube. Cuando utiliza Amazon SNS con AWS KMS, las claves de
datos (p. 396) que cifran los datos de los mensajes también se cifran y almacenan con los datos que
protegen.

A continuación, se describen los beneficios de usar AWS KMS:

• Puede crear y administrar usted mismo claves maestras de clientes (CMK) (p. 396).
• También puede utilizar claves KMS administradas por AWS para Amazon SNS, que son únicas para
cada cuenta y región.

395
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

• 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 Guía para
desarrolladores de AWS Key Management Service.

Temas
• Ámbito de cifrado (p. 396)
• Términos clave (p. 396)

Ámbito de cifrado
SSE cifra el cuerpo de un mensaje en un tema de Amazon SNS.

SSE no cifra lo siguiente:

• Metadatos del tema (atributos y nombre del tema)


• Metadatos del mensaje (asunto, ID de mensaje, marca temporal y atributos)
• Métricas por temas

Note

• Un mensaje se cifra únicamente si se envía con posterioridad a la habilitación del cifrado de un


tema. Amazon SNS no cifra mensajes atrasados.
• Cualquier mensaje cifrado permanece en dicho estado aunque se deshabilite el cifrado de su
tema.

Términos clave
Los siguientes términos clave pueden ayudarle a comprender mejor la funcionalidad de SSE. Para obtener
descripciones detalladas, consulte la Referencia de la API de Amazon Simple Notification Service.

Clave de datos

La clave de cifrado de datos (DEK) es responsable de cifrar el contenido de los mensajes de Amazon
SNS.

Para obtener más información, consulte Claves de datos en la Guía para desarrolladores de AWS Key
Management Service y Cifrado de sobre en la Guía para desarrolladores de AWS Encryption SDK.
ID de clave maestra del cliente

El alias, el ARN de alias, el ID de clave o el ARN de clave de una clave maestra del cliente (CMK)
administrada por AWS o una CMK personalizada ya sea de su cuenta o de otra cuenta. Aunque el
alias de la CMK administrada por AWS para Amazon SNS siempre es alias/aws/sns, el alias de
una CMK personalizada puede ser, por ejemplo, alias/MyAlias. Puede utilizar estas CMK para
proteger los mensajes que se encuentran en los temas de Amazon SNS.
Note

Tenga en cuenta lo siguiente:


• La primera vez que use la AWS Management Console con el fin de especificar la
CMK administrada por AWS en Amazon SNS para un tema, AWS KMS crea la CMK
administrada por AWS en Amazon SNS.
• Como alternativa, la primera vez que utilice la acción Publish sobre un tema con SSE
habilitado, AWS KMS crea la CMK administrada por AWS en Amazon SNS.

396
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

Puede crear varias CMK, definir las políticas que controlan cómo se pueden utilizar y auditar su uso
en la sección Customer managed keys (Claves administradas por el cliente) de la consola de AWS
KMS o la acción CreateKey AWS KMS. Para obtener más información, consulte Claves maestras
del cliente (CMK) y Creación de claves en la Guía para desarrolladores de AWS Key Management
Service. Para obtener más ejemplos de identificadores de CMK, consulte KeyId en la Referencia
de la API de AWS Key Management Service. Para obtener información sobre la búsqueda de
identificadores de CMK, consulte Encontrar el ID y el ARN de la clave en la Guía para desarrolladores
de AWS Key Management Service.
Important

La utilización de conlleva cargos adicionales AWS KMS. Para obtener más información,
consulte Estimación de los costos de AWS KMS (p. 397) y Precios de AWS Key
Management Service.

Administración de claves
En las siguientes secciones se proporciona información sobre cómo trabajar con claves administradas en
AWS Key Management Service (AWS KMS).

Temas
• Estimación de los costos de AWS KMS (p. 397)
• Configuración de los permisos de AWS KMS (p. 398)
• AWS KMSErrores de (p. 400)

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 SNS utiliza su clave maestra del cliente (CMK).
Note

Si bien la siguiente fórmula puede brindarle una muy buena idea de los costos esperados, los
costos reales podrían ser más elevados debido a la naturaleza distribuida de Amazon SNS.

Para calcular el número de solicitudes de la API (R) por tema, utilice la siguiente fórmula:

R = B / D * (2 * P)

B es el período de facturación (en segundos).

D es el período de reutilización de claves de datos (en segundos, Amazon SNS reutiliza una clave de datos
durante un máximo de 5 minutos).

P es el número de entidades principales de publicación que realizan envíos al tema de Amazon SNS.

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 1 publicador y 1 tema
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 es de 5 minutos (300 segundos).
• Hay 1 tema.
• Hay una 1 entidad principal de publicación.

397
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

2,678,400 / 300 * (2 * 1) = 17,856

Ejemplo 2: Cálculo del número de llamadas a la API de AWS KMS con varios publicadores y 2
temas

Este ejemplo presupone lo siguiente:

• El período de facturación va del 1 al 28 de febrero (2 419 200 segundos).


• El periodo de reutilización de la clave de datos es de 5 minutos (300 segundos).
• Hay 2 temas.
• El primer tema tiene 3 entidades principales de publicación.
• El segundo tema tiene 5 entidades principales de publicación.

(2,419,200 / 300 * (2 * 3)) + (2,419,200 / 300 * (2 * 5)) = 129,024

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 los
temas y el cifrado y descifrado de mensajes. Para obtener ejemplos y más información sobre los permisos
de AWS KMS, consulte Permisos de API de AWS KMS: Referencia de recursos y acciones en la Guía para
desarrolladores de AWS Key Management Service.
Note

También puede administrar los permisos para las claves de KMS mediante políticas de IAM. Para
obtener 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 SNS, y recibir
información de este, AWS KMS requiere que se indique explícitamente el ARN completo de las
CMK en regiones específicas de la sección Resource de una política de IAM.

También debe asegurar que las políticas de claves de la CMK (clave maestra de cliente) conceden los
permisos necesarios. Para ello, asigne un nombre a las entidades principales que producen y consumen
mensajes cifrados en Amazon SNS 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 una
política de IAM asignada a las entidades principales que publican mensajes cifrados en Amazon SNS y se
suscriben para recibirlos. Para obtener más información, consulte Administración del acceso a las CMK de
AWS KMS en la Guía para desarrolladores de AWS Key Management Service.

Permitir que un usuario envíe mensajes a un tema con SSE

El publicador debe tener los permisos kms:GenerateDataKey y kms:Decrypt para la clave maestra de
cliente (CMK).

{
"Statement": [{
"Effect": "Allow",
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "arn:aws:kms:us-
east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}, {
"Effect": "Allow",

398
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:123456789012:MyTopic"
}]
}

Habilitar la compatibilidad entre los orígenes de eventos de los servicios de AWS y los temas
cifrados

Varios servicios de AWS publican eventos en los temas de Amazon SNS. Para que estos orígenes
de eventos funcionen con los temas cifrados, 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 Creación de
claves en la Guía para desarrolladores de AWS Key Management Service.
2. Para permitir que el servicio de AWS disponga de los permisos kms:GenerateDataKey* y
kms:Decrypt, añada la siguiente instrucción a la política de la CMK.

{
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": [
"kms:GenerateDataKey*",
"kms:Decrypt"
],
"Resource": "*"
}]
}

Origen del evento Entidad de seguridad de servicio

Amazon CloudWatch [Link]

Amazon CloudWatch Events [Link]

AWS CodeCommit [Link]

AWS CodeStar [Link]

AWS Database Migration Service [Link]

AWS Directory Service [Link]

Amazon DynamoDB [Link]

Amazon S3 Glacier [Link]

Amazon Inspector [Link]

Amazon Redshift [Link]

Amazon Simple Email Service [Link]

Amazon Simple Storage Service [Link]

AWS Snowball [Link]

399
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

Note

Para algunas fuentes de eventos de Amazon SNS, se debe proporcionar un rol de IAM (en
lugar de la entidad principal de servicio) en la política de claves de AWS KMS.

• Amazon EC2 Auto Scaling


• Amazon Elastic Transcoder
• AWS CodePipeline
• AWS Config
• AWS Elastic Beanstalk
• AWS IoT
3. Habilite SSE para su tema (p. 401) mediante su CMK.
4. Proporcione el ARN del tema cifrado al origen de eventos.

AWS KMSErrores de
Al trabajar con Amazon SNS y AWS KMS, es posible que se produzcan errores. En la siguiente lista se
describen 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: 400


KMSDisabledException

La solicitud se rechazó porque la CMK especificada no está habilitada.

Código de estado HTTP: 400


KMSInvalidStateException

La solicitud se rechazó porque el estado del recurso especificado no es válido para esta solicitud. Para
obtener más información, consulte Cómo afecta al estado de la clave el uso de una clave maestra del
cliente en la Guía para desarrolladores de AWS Key Management Service.

Código de estado HTTP: 400


KMSNotFoundException

La solicitud se rechazó porque la entidad o el recurso especificado no se encontraron.

Código de estado HTTP: 400


KMSOptInRequired

El ID de clave de acceso de AWS necesita una suscripción al servicio.

Código de estado HTTP: 403


KMSThrottlingException

La solicitud se denegó debido a una limitación controlada. Para obtener más información sobre la
limitación controlada, consulte Límites en la Guía para desarrolladores de AWS Key Management
Service.

Código de estado HTTP: 400

400
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

Habilitación del cifrado del lado del servidor (SSE) para un tema
de Amazon SNS
Puede habilitar el cifrado del lado del servidor (SSE) para un tema con el fin de proteger sus datos. Para
obtener más información acerca del uso de SSE, consulte Cifrado en reposo (p. 395).
Important

Todas las solicitudes hechas a los temas con SSE habilitado deben usar HTTPS y Signature
Version 4.

En esta página, se muestra cómo habilitar, desactivar y configurar SSE para un tema de Amazon SNS
existente mediante la AWS Management Console.

Con el fin de habilitar el cifrado del lado del servidor (SSE) para un tema de
Amazon SNS mediante la , siga estos pasos: AWS Management Console
1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. En la página Topics (Temas), seleccione un tema y elija Actions (Acciones), Edit (Editar).
4. Expanda la sección Encryption (Cifrado) y haga lo siguiente:

a. Elija Enable encryption (Habilitar cifrado).


b. Especifique la clave maestra del cliente (CMK). Para obtener más información, consulte Términos
clave (p. 396).

Se muestran los valores de Description (Descripción), Account (Cuenta) y CMK ARN (ARN de
CMK) de cada CMK.
Important

Si no es el propietario de la CMK o si ha iniciado sesión con una cuenta que no tiene los
permisos kms:ListAliases y kms:DescribeKey, no podrá ver la información sobre
la CMK en la consola de Amazon SNS.
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 Guía para desarrolladores de AWS Key Management Service.

• De forma predeterminada, se selecciona la CMK administrada por AWS en Amazon SNS alias/
aws/sns (predeterminado).
Note

Tenga en cuenta lo siguiente:


• La primera vez que use la AWS Management Console con el fin de especificar la
CMK administrada por AWS en Amazon SNS para un tema, AWS KMS crea la CMK
administrada por AWS en Amazon SNS.
• Como alternativa, la primera vez que utilice la acción Publish sobre un tema con
SSE habilitado, AWS KMS crea la CMK administrada por AWS en Amazon SNS.
• Para usar una CMK personalizada de su cuenta de AWS, elija el campo Clave maestra del
cliente (CMK) y, a continuación, la CMK personalizada de la lista.
Note

Para obtener instrucciones acerca de cómo crear CMK personalizadas, consulte


Creación de claves en la Guía para desarrolladores de AWS Key Management
Service.

401
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

• Para usar un ARN de CMK personalizado desde su cuenta de AWS o desde otra cuenta de
AWS, ingréselo en el campo Clave maestra del cliente (CMK).
5. Elija Save changes.

SSE está habilitado para su tema y se muestra la página MiTema.

El estado Encryption (Cifrado), la Account (Cuenta) de AWS, la Customer master key (CMK) [Clave
maestra del cliente (CMK)], el CMK ARN (ARN de la CMK) y la Description (Descripción) del tema se
muestran en la pestaña Encryption (Cifrado).

Habilitación del cifrado del lado del servidor (SSE) para un tema
de Amazon SNS con una cola cifrada de Amazon SQS suscrita
Puede habilitar el cifrado del lado del servidor (SSE) para un tema con el fin de proteger sus datos. Para
permitir que Amazon SNS envíe mensajes a colas de Amazon SQS cifradas, la clave maestra del cliente
(CMK) asociada a la cola de Amazon SQS debe tener una instrucción de política que conceda a la entidad
principal de servicio de Amazon SNS acceso a las acciones GenerateDataKey y Decrypt de la API de
AWS KMS. Debido a que las CMK administradas por AWS no admiten modificaciones de políticas, debe
utilizar una CMK personalizada. Para obtener más información acerca del uso de SSE, consulte Cifrado en
reposo (p. 395).

En esta página, se muestra cómo puede habilitar SSE para un tema de Amazon SNS al que se ha suscrito
una cola de Amazon SQS cifrada mediante la AWS Management Console.

Paso 1: Crear una CMK personalizada


1. Inicie sesión en la consola de AWS KMS con un usuario que tenga al menos la política
AWSKeyManagementServicePowerUser.
2. Elija Create a key (Crear clave).
3. En la página Add alias and description (Agregar alias y descripción), escriba un Alias (Alias) para la
clave (por ejemplo, MyCustomCMK) y, a continuación, elija Next (Siguiente).
4. En la página Add tags (Añadir etiquetas), elija Next (Siguiente).
5. En la página Definir permisos de administración de claves, en la sección Administradores de claves,
seleccione un rol de IAM o un usuario de IAM y, a continuación, elija Siguiente.
6. En la página Definir permisos de uso de claves, en la sección Esta cuenta, seleccione un rol de IAM o
un usuario de IAM y, a continuación, elija Siguiente.
7. En la página Review and edit key policy (Revisar y editar política de claves), agregue la instrucción
siguiente a la política de claves y, a continuación, elija Finish (Finalizar).

{
"Sid": "Allow Amazon SNS to use this key",
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*"
}

La nueva CMK personalizada aparecerá en la lista de claves.

402
Amazon Simple Notification
Service Guía para desarrolladores
Cifrado de datos

Paso 2: Crear un tema de Amazon SNS cifrado


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. Elija Create new topic.
4. En la página Create new topic (Crear nuevo tema), en Name (Nombre), escriba un nombre para el
tema (por ejemplo, MyEncryptedTopic) y, a continuación, elija Create topic (Crear tema).
5. Expanda la sección Encryption (Cifrado) y haga lo siguiente:

a. Elija Enable server-side encryption (Habilitar cifrado del lado del servidor).
b. Especifique la clave maestra del cliente (CMK). Para obtener más información, consulte Términos
clave (p. 396).

Se muestran los valores de Description (Descripción), Account (Cuenta) y CMK ARN (ARN de
CMK) de cada CMK.
Important

Si no es el propietario de la CMK o si ha iniciado sesión con una cuenta que no tiene los
permisos kms:ListAliases y kms:DescribeKey, no podrá ver la información sobre
la CMK en la consola de Amazon SNS.
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 Guía para desarrolladores de AWS Key Management Service.
c. En Customer master key (CMK) (Clave maestra del cliente (CMK)), elija la clave MyCustomCMK
que creó antes (p. 402) y, a continuación, seleccione Enable server-side encryption (Habilitar
cifrado del lado del servidor).
6. Elija Save changes.

SSE está habilitado para su tema y se muestra la página MiTema.

El estado Encryption (Cifrado), la Account (Cuenta) de AWS, la Customer master key (CMK) [Clave
maestra del cliente (CMK)], el CMK ARN (ARN de la CMK) y la Description (Descripción) del tema se
muestran en la pestaña Encryption (Cifrado).

El nuevo tema cifrado aparecerá en la lista de temas.

Paso 3: Crear colas de Amazon SQS cifradas y suscribirse a ellas


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), haga lo siguiente:

a. Escriba un nombre en Queue Name (Nombre de cola) (por ejemplo, MyEncryptedQueue1).


b. Seleccione Standard Queue (Cola estándar) y, a continuación, elija Configure Queue (Configurar
cola).
c. Elija Use SSE (Usar SSE).
d. En Clave maestra del cliente (CMK) de AWS KMS, elija la clave MyCustomCMK que creó
antes (p. 402) y, a continuación, seleccione Crear cola.
4. Repita el proceso para crear una segunda cola (por ejemplo, denominada MyEncryptedQueue2).

Las nuevas colas cifradas aparecerán en la lista de colas.


5. En la consola de Amazon SQS, seleccione MyEncryptedQueue1 y MyEncryptedQueue2. A
continuación, elija Acciones de colas, Suscribir colas al tema de SNS.

403
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

6. En el cuadro de diálogo Subscribe to a Topic (Suscribir a un tema), en Choose a Topic (Elegir un


tema) seleccione MyEncryptedTopic y, a continuación, haga clic en Subscribe (Suscribir).

Las suscripciones de las colas cifradas al tema cifrado se muestran en el cuadro de diálogo Topic
Subscription Result (Resultado de suscripción al tema).
7. Seleccione OK (Aceptar).

Paso 4: Publicar un mensaje en el tema cifrado


1. Inicie sesión en la consola de Amazon SNS.
2. En el panel de navegación, elija Topics (Temas).
3. En la lista de temas, seleccione MyEncryptedTopic. A continuación, elija Publish message (Publicar
mensaje).
4. En la página Publish a message (Publicar mensaje) haga lo siguiente:

a. (Opcional) En la sección Message details (Detalles del mensaje), introduzca el Subject (Asunto)
(por ejemplo, Testing message publishing).
b. En la sección Message body (Cuerpo del mensaje), introduzca el cuerpo del mensaje (por
ejemplo, My message body is encrypted at rest.).
c. Elija Publish message (Publicar mensaje).

El mensaje se publica en las colas cifradas suscritas.

Paso 5: Verificar la entrega de mensajes


1. Inicie sesión en la consola de Amazon SQS.
2. En la lista de colas, seleccione MyEncryptedQueue1 y, a continuación, elija Queue Actions (Acciones
de colas), View/Delete Messages (Ver/eliminar mensajes).
3. En la página View/Delete Messages in MyEncryptedQueue1 (Ver/eliminar mensajes en
MyEncryptedQueue1), elija Start polling for messages (Comenzar a sondear mensajes).

Aparecerá el mensaje que envió antes (p. 404).


4. Elija More Details (Más información) para ver el mensaje.
5. Cuando haya finalizado, elija Close (Cerrar).
6. Repita el proceso para MyEncryptedQueue2.

Privacidad del tráfico entre redes


El punto de enlace de Amazon Virtual Private Cloud (Amazon VPC) para Amazon SNS es una entidad
lógica dentro de una VPC que permite la conectividad solo a Amazon SNS. La VPC direcciona las
solicitudes a Amazon SNS y vuelve a direccionar las respuestas a la VPC. En las siguientes secciones se
proporciona información sobre cómo trabajar con puntos de enlace de la VPC y crear políticas de puntos
de enlace de la VPC.

Si utiliza Amazon Virtual Private Cloud (Amazon VPC) para alojar sus recursos de AWS, puede establecer
una conexión entre su VPC y Amazon SNS. Con esta conexión, puede publicar mensajes en sus temas de
Amazon SNS sin enviarlos a través de la infraestructura pública de Internet.

Amazon VPC es un servicio de AWS que puede utilizar para lanzar recursos de AWS en una red virtual
que usted defina. Con una VPC, puede controlar la configuración de la red, como el rango de direcciones
IP, las subredes, las tablas de ruteo y las gateways de red. Para conectar su VPC a Amazon SNS, debe
definir un punto de enlace de la VPC de tipo interfaz. Este tipo de punto de enlace le permite conectar

404
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

la VPC a los servicios de AWS. Con el punto de enlace, se ofrece conectividad escalable de confianza
con Amazon SNS sin necesidad de utilizar una gateway de Internet, una instancia de conversión de las
direcciones de red (instancia NAT) o una conexión de VPN. Para obtener más información, consulte
Puntos de enlace de la VPC de la interfaz en la Guía del usuario de Amazon VPC.

La información de esta sección va dirigida a usuarios de Amazon VPC. Para obtener más información y
empezar a crear una VPC, consulte Introducción a Amazon VPC en la Guía del usuario de Amazon VPC.
Note

No puede suscribir un tema de Amazon SNS a una dirección IP privada con los puntos de enlace
de la VPC.

Temas
• Creación de un punto de enlace de la VPC para Amazon SNS (p. 405)
• Creación de una política de punto de enlace de la VPC para Amazon SNS (p. 406)
• Publicación de un mensaje de Amazon SNS desde Amazon VPC (p. 407)

Creación de un punto de enlace de la VPC para Amazon SNS


Para publicar mensajes en los temas de Amazon SNS desde una Amazon VPC, cree un punto de enlace
de la VPC de tipo interfaz. A continuación, puede publicar mensajes en sus temas a la vez que mantiene el
tráfico dentro de la red que administra con la VPC.

Utilice la siguiente información para crear el punto de enlace y probar la conexión entre su VPC y Amazon
SNS. O, si desea ver un tutorial que le ayude a comenzar desde cero, consulte Publicación de un mensaje
de Amazon SNS desde Amazon VPC (p. 407).

Creación del punto de enlace


Puede crear un punto de enlace de Amazon SNS en la VPC mediante la AWS Management Console, el
AWS CLI, un SDK de AWS, la API de Amazon SNS o AWS CloudFormation.

Para obtener información sobre la creación y configuración de un punto de enlace mediante la consola de
Amazon VPC o la AWS CLI, consulte Creación de un punto de enlace de interfaz en la Guía del usuario de
Amazon VPC.
Note

Al crear el punto de enlace, especifique que Amazon SNS es el servicio al que desea que se
conecte la VPC. En la consola de Amazon VPC, los nombres de los servicios varían en función de
la región que haya elegido. Por ejemplo, si elige EE. UU. Este (Norte de Virginia), el nombre del
servicio es [Link].

Para obtener información sobre la creación y configuración de un punto de enlace mediante AWS
CloudFormation, consulte el recurso AWS::EC2::VPCEndpoint en la Guía del usuario de AWS
CloudFormation.

Comprobación de la conexión entre la VPC y Amazon SNS


Después de crear un punto de enlace para Amazon SNS, puede publicar mensajes desde la VPC en sus
temas de Amazon SNS. Para probar esta conexión, haga lo siguiente:

1. Conéctese a una instancia de Amazon EC2 que resida en la VPC. Para obtener más información
acerca de la conexión, consulte Conexión con la instancia de Linux o Conexión con la instancia de
Windows en la documentación de Amazon EC2.

Por ejemplo, para conectarse a una instancia de Linux mediante un cliente SSH, ejecute el siguiente
comando desde un terminal:

405
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

$ ssh -i [Link] ec2-user@instance-hostname

Donde:

• [Link] es el archivo que contiene el par de claves que Amazon EC2 le proporcionó al
crear la instancia.
• instance-hostname es nombre de host público de la instancia. Para obtener el nombre de host en la
consola de Amazon EC2, elija Instancias, seleccione la instancia y busque el valor de DNS público
(IPv4).
2. Desde su instancia, utilice el comando publish de Amazon SNS con la AWS CLI. Puede enviar un
mensaje sencillo a un tema con el siguiente comando:

$ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"

Donde:

• aws-region es la región de AWS en la que se encuentra el tema.


• sns-topic-arn es el nombre de recurso de Amazon (ARN) del tema. Para obtener el ARN desde la
consola de Amazon SNS, seleccione Temas, busque su tema y busque el valor en la columna ARN.

Si Amazon SNS ha recibido correctamente el mensaje, el terminal imprime un ID de mensaje, como el


siguiente:

{
"MessageId": "6c96dfff-0fdf-5b37-88d7-8cba910a8b64"
}

Creación de una política de punto de enlace de la VPC para


Amazon SNS
Puede crear una política para los puntos de enlace de Amazon VPC correspondiente a Amazon SNS y
especificar lo siguiente:

• La entidad de seguridad 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 Controlar el acceso a servicios con puntos de enlace de la VPC en
la Guía del usuario de Amazon VPC.

En el siguiente ejemplo de política de punto de enlace de la VPC, se especifica que el usuario de MyUser
puede publicar en el tema MyTopic de Amazon SNS.

{
"Statement": [{
"Action": ["sns:Publish"],
"Effect": "Allow",
"Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic",
"Principal": {
"AWS": "arn:aws:iam:123456789012:user/MyUser"
}
}]

406
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

Se deniega lo siguiente:

• Otras acciones de la API de Amazon SNS, como sns:Subscribe y sns:Unsubscribe.


• Otros usuarios y reglas de IAM que intentan utilizar este punto de enlace de la VPC.
• MyUserPublicación de en otro tema de Amazon SNS.

Note

El usuario de IAM puede seguir utilizando otras acciones de la API de Amazon SNS desde fuera
de la VPC.

Publicación de un mensaje de Amazon SNS desde Amazon VPC


En esta sección, se describe cómo publicar en un tema de Amazon SNS a la vez que mantiene los
mensajes seguros en una red privada. Publica un mensaje desde una instancia de Amazon EC2 alojada
en Amazon Virtual Private Cloud (Amazon VPC). El mensaje permanece en la red de AWS sin viajar por la
red pública de Internet. Al publicar mensajes de forma privada desde una VPC, puede mejorar la seguridad
del tráfico entre sus aplicaciones y Amazon SNS. Esta seguridad es importante cuando publica información
personalmente identificable (PII) sobre sus clientes o cuando su aplicación está sujeta a regulaciones del
mercado. Por ejemplo, la publicación de forma privada es útil si tiene un sistema de sanidad que debe
cumplir con la Ley de portabilidad y responsabilidad de los seguros médicos (HIPAA, por sus siglas en
inglés) o un sistema financiero que debe cumplir con el estándar de seguridad de datos del sector de
tarjetas de pago (PCI DSS, por sus siglas en inglés).

Los pasos generales son los siguientes:

• Utilizar una plantilla de AWS CloudFormation para crear de manera automática una red privada temporal
en su Cuenta de AWS.
• Crear un punto de enlace de la VPC que conecte la VPC con Amazon SNS.
• Iniciar sesión en una instancia de Amazon EC2 y publicar un mensaje de forma privada en un tema de
Amazon SNS.
• Verificar que el mensaje se entregó correctamente.
• Eliminar los recursos que creó en este proceso con el fin de que no permanezcan en su Cuenta de AWS.

En el siguiente diagrama, se muestra la red privada que creará en su cuenta de AWS a medida que realice
estos pasos:

407
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

Esta red consta de una VPC que contiene una instancia de Amazon EC2. La instancia se conecta a
Amazon SNS a través de un punto de enlace de la VPC de interfaz. Este tipo de punto de enlace se
conecta a los servicios basados en AWS PrivateLink. Con esta conexión establecida, puede iniciar sesión
en la instancia de Amazon EC2 y publicar mensajes en el tema de Amazon SNS, aunque la red esté
desconectada de la Internet pública. El tema distribuye los mensajes que recibe a dos funciones de AWS
Lambda de suscripción. Estas funciones registran los mensajes que reciben en Amazon CloudWatch Logs.

Se tarda unos 20 minutos en completar estos pasos.

Temas
• Antes de empezar (p. 408)
• Paso 1: Crear un par de claves de Amazon EC2 (p. 408)
• Paso 2: Crear los recursos de AWS (p. 409)
• Paso 3: Confirmar que la instancia de Amazon EC2 carece de acceso a Internet (p. 410)
• Paso 4: Crear un punto de enlace de la VPC para Amazon SNS (p. 411)
• Paso 5: Publicar un mensaje en el tema de Amazon SNS (p. 405)
• Paso 6: Verificar las entregas de mensajes (p. 414)
• Paso 7: limpieza (p. 415)
• Recursos relacionados (p. 416)

Antes de empezar
Antes de empezar, necesita una cuenta de Amazon Web Services (AWS). Al registrarse, su cuenta se
inscribe de manera automática en todos los servicios de AWS, incluidos Amazon SNS y Amazon VPC. Si
todavía no ha creado una cuenta, vaya a [Link] y, a continuación, elija Crear una cuenta
gratuita.

Paso 1: Crear un par de claves de Amazon EC2


Se utiliza un par de claves para iniciar sesión en una instancia de Amazon EC2. Consta de una clave
pública que se utiliza para cifrar la información de inicio de sesión y de una clave privada que se utiliza
para descifrarla. Al crear un par de claves, se descarga una copia de la clave privada. Después, utiliza un
par de claves para iniciar sesión en una instancia de Amazon EC2. Para iniciar sesión, debe especificar el
nombre del par de claves y proporcionar la clave privada.

Para crear el par de claves

1. Inicie sesión en la AWS Management Console y abra la consola de Amazon EC2 en https://
[Link]/ec2/.
2. En el menú de navegación de la izquierda, busque la sección Network & Security (Red y seguridad). A
continuación, elija Key Pairs (Pares de claves).
3. Seleccione Create Key Pair.
4. En la ventana Create Key Pair (Crear par de claves), en Key pair name (Nombre del par de claves),
escriba VPCE-Tutorial-KeyPair. A continuación, elija Create (Crear).

408
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

5. Su navegador descargará el archivo de clave privada automáticamente. Guárdelo en un lugar seguro.


Amazon EC2 asigna la extensión al archivo .pem.
6. (Opcional) Si está usando un cliente SSH en un equipo Mac o Linux para conectarse a su instancia,
utilice el comando chmod para establecer los permisos de su archivo de clave privada de modo que
solo usted pueda leerlo:

a. Abra un terminal y vaya al directorio que contiene la clave privada:

$ cd /filepath_to_private_key/

b. Establezca los permisos mediante el comando siguiente:

$ chmod 400 [Link]

Paso 2: Crear los recursos de AWS


Para configurar la infraestructura, utilice una plantilla de AWS CloudFormation. Una plantilla es un archivo
que sirve como modelo para crear recursos de AWS, como instancias de Amazon EC2 y temas de Amazon
SNS. En GitHub se puede descargar la plantilla de este proceso.

Debe proporcionar la plantilla a AWS CloudFormation, y AWS CloudFormation aprovisiona los recursos
necesarios como una pila en su Cuenta de AWS. Una pila es una colección de recursos que administra
como una única unidad. Cuando finalice estos pasos, podrá utilizar AWS CloudFormation para eliminar
todos los recursos de la pila a la vez. Estos recursos no permanecen en su Cuenta de AWS, a menos que
desee.

En la pila de este proceso, se incluyen los siguientes recursos:

• Una VPC y los recursos de red asociados, incluida una subred, un grupo de seguridad, una gateway de
Internet y una tabla de ruteo.
• Una instancia de Amazon EC2 que se lanza en la subred de la VPC.
• Un tema de Amazon SNS.
• Dos funciones de AWS Lambda. Estas funciones reciben mensajes que se publican en el tema de
Amazon SNS y registran eventos en CloudWatch Logs.
• Métricas y registros de Amazon CloudWatch
• Un rol de IAM con el que la instancia de Amazon EC2 puede utilizar Amazon SNS y otro rol de IAM con
el que las funciones de Lambda pueden escribir en CloudWatch Logs.

Para crear los recursos de AWS

1. Descargue el archivo de plantilla del sitio web de GitHub.


2. Inicie sesión en la consola de AWS CloudFormation.
3. Elija Create Stack.
4. En la página Select Template (Seleccionar plantilla), elija Upload a template to Amazon S3 (Cargar
una plantilla en Amazon S3), elija el archivo y, a continuación, elija Next (Siguiente).
5. En la página Specify Details (Especificar detalles), especifique el nombre de la pila y el de la clave:

a. Para Stack name (Nombre de pila), escriba VPCE-Tutorial-Stack.


b. En KeyName (Nombre de la clave), elija VPCE-Tutorial-KeyPair.
c. En SSHLocation (Ubicación para SSH), mantenga el valor predeterminado [Link]/0.

409
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

d. Elija Next (Siguiente).


6. En la página Options (Opciones), mantenga todos los valores predeterminados y elija Next (Siguiente).
7. En la página Review (Revisar), verifique los detalles de la pila.
8. En Capacidades, confirme que AWS CloudFormation podría crear recursos de IAM con nombres
personalizados.
9. Seleccione Create (Crear).

La consola de AWS CloudFormation abre la página Stacks (Pilas). La pila VPCE-Tutorial-Stack tiene
el estado CREATE_IN_PROGRESS. En unos minutos, después de que se complete el proceso de
creación, el estado cambia a CREATE_COMPLETE.

Tip

Elija el botón Refresh (Actualizar) para ver el estado más reciente de la pila.

Paso 3: Confirmar que la instancia de Amazon EC2 carece de acceso a Internet


La instancia de Amazon EC2 que se lanzó en la VPC en el paso anterior carece de acceso a Internet. No
permite el tráfico saliente y no puede publicar mensajes en Amazon SNS. Verifíquelo iniciando sesión en
la instancia. A continuación, intente conectarse a un punto de enlace público e intentar enviar mensajes a
Amazon SNS.

En esta parte, se produce un error en la publicación. En un paso posterior, después de crear un punto de
enlace de la VPC para Amazon SNS, el intento de publicación finaliza correctamente.

Para conectarse con la instancia de Amazon EC2, siga estos pasos:

1. Abra la consola de Amazon EC2 en [Link]


2. En el menú de navegación de la izquierda, busque la sección Instances (Instancias). A continuación,
elija Instances (Instancias).
3. En la lista de instancias, seleccione VPCE-Tutorial-EC2Instance.
4. Copie el nombre de host que se proporciona en la columna Public DNS (IPv4) (DNS público (IPv4)).

410
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

5. Abra un terminal. Desde el directorio que contiene el par de claves, conéctese a la instancia con el
siguiente comando, en el que instance-hostname es el nombre de host que ha copiado de la
consola de Amazon EC2.

$ ssh -i [Link] ec2-user@instance-hostname

Para verificar que la instancia carece de conectividad a Internet

• En su terminal, intenta conectarse a cualquier punto de enlace público, como [Link]:

$ ping [Link]

Debido a que se produce un error en el intento de conexión, puede cancelar en cualquier momento
(Ctrl + C en Windows o Comando + C en macOS).

Para verificar que la instancia carece de conectividad a Amazon SNS, siga estos pasos:

1. Inicie sesión en la consola de Amazon SNS.


2. En el menú de navegación de la izquierda, elija (Temas).
3. En la página Topics (Temas), copie el nombre de recurso de Amazon (ARN) para el tema VPCE-
Tutorial-Topic.
4. En su terminal, intente publicar un mensaje en el tema:

$ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"

Debido a que se produce un error en el intento de publicación, puede cancelar en cualquier momento.

Paso 4: Crear un punto de enlace de la VPC para Amazon SNS


Para conectar la VPC a Amazon SNS, debe definir un punto de enlace de la VPC de tipo interfaz. Después
de agregar el punto de enlace, puede iniciar sesión en la instancia de Amazon EC2 de la VPC y, desde
ahí, puede utilizar la API de Amazon SNS. Puede publicar mensajes en el tema, que se publican de forma
privada. Se mantienen en la red de AWS y no viajan por la red pública de Internet.
Note

Tenga en cuenta que la instancia aún carece de acceso a otros servicios y puntos de enlace de
AWS en Internet.

Para crear el punto de enlace

1. Abra la consola de Amazon VPC en [Link]


2. En el menú de navegación de la izquierda, elija Endpoints (Puntos de enlace).
3. Elija Create Endpoint.
4. En la página Crear punto de enlace, en Categoría de servicio, mantenga la opción predeterminada
Servicios de AWS.

411
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

5. En Nombre de servicio, seleccione el nombre de servicio de Amazon SNS.

Los nombres de los servicios varían en función de la región que haya elegido. Por ejemplo, si elige
EE. UU. Este (Norte de Virginia), el nombre del servicio es [Link].
6. En VPC, elija la VPC denominada VPCE-Tutorial-VPC.

7. En Subnets (Subredes), seleccione la subred que tiene VPCE-Tutorial-Subnet en el ID de subred.

8. En Enable Private DNS Name (Habilitar nombre de DNS privado), seleccione Enable for this endpoint
(Habilitar para este punto de enlace).
9. En Security group (Grupo de seguridad), elija Select security group (Seleccionar grupo de seguridad) y
seleccione VPCE-Tutorial-SecurityGroup.

412
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

10. Elija Create endpoint. En la consola de Amazon VPC, se confirma que se creó un punto de enlace de
la VPC.

11. Seleccione la opción Close.

En la consola de Amazon VPC, se abre la página Puntos de enlace. El nuevo punto de enlace tiene el
estado pending (pendiente). En unos minutos, después de que se complete el proceso de creación, el
estado cambia a available (disponible).

Paso 5: Publicar un mensaje en el tema de Amazon SNS


Ahora que la VPC incluye un punto de enlace para Amazon SNS, puede iniciar sesión en la instancia de
Amazon EC2 y publicar mensajes en el tema.

Para publicar un mensaje

1. Si el terminal ya no está conectado a la instancia de Amazon EC2, conéctese de nuevo:

$ ssh -i [Link] ec2-user@instance-hostname

2. Ejecute el mismo comando que usó anteriormente para publicar un mensaje en el tema de Amazon
SNS. Esta vez, el intento de publicación se realiza correctamente y Amazon SNS devuelve un ID de
mensaje:

$ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"

413
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

{
"MessageId": "5b111270-d169-5be6-9042-410dfc9e86de"
}

Paso 6: Verificar las entregas de mensajes


Cuando el tema de Amazon SNS recibe un mensaje, envía el mensaje a las dos funciones de Lambda de
la suscripción. Cuando estas funciones reciben el mensaje, registran el evento en CloudWatch Logs. Para
verificar que el envío de mensajes se realizó correctamente, compruebe que las funciones se invocaron y
compruebe que se actualizó CloudWatch Logs.

Para verificar que se invocaron las funciones Lambda, siga estos pasos:

1. Abra la consola de AWS Lambda en [Link]


2. En la página Functions (Funciones), elija VPCE-Tutorial-Lambda-1.
3. Elija Monitoring (Monitorización).
4. Consulte el gráfico Invocation count (Número de invocaciones). En este gráfico, se muestra la cantidad
de veces que se ha ejecutado la función Lambda.

El número de invocaciones coincide con el número de veces que ha publicado un mensaje en el tema.

Para verificar que se actualizó CloudWatch Logs, siga estos pasos:

1. Abra la consola de CloudWatch en [Link]


2. En el menú de navegación de la izquierda, elija Logs (Registros).
3. Compruebe que las funciones Lambda hayan escrito los registros:

414
Amazon Simple Notification
Service Guía para desarrolladores
Privacidad del tráfico entre redes

a. Elija el grupo de registros /aws/lambda/VPCE-Tutorial-Lambda-1/.


b. Elija el flujo de registros.
c. Compruebe que el registro incluye la entrada From SNS: Hello.

d. Elija Log Groups (Grupos de registros) en la parte superior de la consola para volver a la página
Log Groups (Grupos de registros). A continuación, repita los pasos anteriores para el grupo de
registros /aws/lambda/VPCE-Tutorial-Lambda-2/.

¡Enhorabuena! Al agregar un punto de enlace para Amazon SNS a una VPC, pudo publicar un mensaje en
un tema desde de la red que administra la VPC. El mensaje se publicó de forma privada sin exponerse a la
red pública de Internet.

Paso 7: limpieza
A menos que desee retener los recursos que creó, puede eliminarlos ahora. Si elimina los recursos de
AWS que ya no utiliza, evitará gastos innecesarios en su Cuenta de AWS.

En primer lugar, elimine el punto de enlace de la VPC mediante la consola de Amazon VPC.
A continuación, elimine los demás recursos que creó eliminando la pila en la consola de AWS
CloudFormation. Cuando se elimina una pila, AWS CloudFormation elimina los recursos de la pila de su
Cuenta de AWS.

Para eliminar su punto de enlace de la VPC

1. Abra la consola de Amazon VPC en [Link]


2. En el menú de navegación de la izquierda, elija Endpoints (Puntos de enlace).
3. Seleccione el punto de enlace que ha creado.
4. Elija Actions (Acciones) y, a continuación, elija Delete Endpoint (Eliminar punto de enlace).
5. En la ventana Delete Endpoint (Eliminar punto de enlace), elija Yes, Delete (Sí, eliminar).

415
Amazon Simple Notification
Service Guía para desarrolladores
Identity and Access Management

El estado del punto de enlace cambia a deleting (eliminando). Cuando finaliza la eliminación, el punto
de enlace se quita de la página.

Para eliminar la pila de AWS CloudFormation

1. Abra la consola de AWS CloudFormation en [Link]


2. Seleccione la pila VPCE-Tutorial-Stack.
3. Elija Actions (Acciones) y, a continuación, elija Delete Stack (Eliminar pila).
4. En la ventana Delete Stack (Eliminar pila), elija Yes, Delete (Sí, eliminar).

El estado de la pila cambia a DELETE_IN_PROGRESS. Cuando finaliza la eliminación, la pila se quita


de la página.

Recursos relacionados
Para obtener más información, consulte los recursos siguientes.

• AWSBlog de seguridad: Securing messages published to Amazon SNS with AWS PrivateLink
• Qué es Amazon VPC?
• Puntos de enlace de la VPC de
• Qué es Amazon EC2?
• AWS CloudFormation Conceptos de

Identity and Access Management en Amazon SNS


Si quiere acceder a Amazon SNS, se necesitan credenciales que AWS puede utilizar para autenticar las
solicitudes. Estas credenciales deben tener permisos de acceso a los recursos de AWS, como los temas
y los mensajes de Amazon SNS. En las secciones, se presenta información detallada acerca de cómo
puede utilizar AWS Identity and Access Management (IAM) y Amazon SNS para proteger sus recursos al
controlar quién puede obtener acceso a ellos.

Temas
• Autenticación (p. 416)
• Control de acceso (p. 417)
• Información general sobre la administración de acceso en Amazon SNS (p. 418)
• Uso de políticas basadas en identidades con Amazon SNS (p. 433)
• Uso de credenciales de seguridad temporales con Amazon SNS (p. 439)
• Permisos de la API de Amazon SNS: referencia de recursos y acciones (p. 439)

Autenticación
Puede obtener acceso a AWS con los siguientes tipos de identidades:

• Usuario raíz de Cuenta de AWS: cuando se crea una Cuenta de AWS por primera vez, se comienza con
una única identidad de inicio de sesión que tiene acceso completo a todos los recursos y Servicios de
AWS de la cuenta. Esta identidad recibe el nombre de usuario raíz de la Cuenta de AWS y se accede
a ella iniciando sesión con el email y la contraseña que utilizó para crear la cuenta. Recomendamos
encarecidamente que no utilice el usuario raíz en sus tareas cotidianas, ni siquiera en las tareas
administrativas. En lugar de ello, es mejor ceñirse a la práctica recomendada de utilizar el usuario final

416
Amazon Simple Notification
Service Guía para desarrolladores
Control de acceso

exclusivamente para crear al primer usuario de IAM. A continuación, guarde las credenciales del usuario
raíz en un lugar seguro y utilícelas tan solo para algunas tareas de administración de cuentas y servicios.
• Usuario de IAM: un usuario de IAM es una identidad dentro de su Cuenta de AWS que tiene permisos
personalizados específicos (por ejemplo, permisos para crear un tema en Amazon SNS). Puede usar
una contraseña y un nombre de usuario de IAM para iniciar sesión en páginas web de AWS seguras,
como AWS Management Console, Foros de debate de AWS o el Centro de AWS Support.

Además de un nombre de usuario y una contraseña, también puede generar claves de acceso para cada
usuario. Puede utilizar estas claves cuando acceda a los Servicios de AWS mediante programación,
ya sea a través de uno de los varios SDK o mediante la AWS Command Line Interface (CLI). El SDK
y las herramientas de CLI utilizan claves de acceso para firmar criptográficamente una solicitud. Si
no utiliza las herramientas de AWS debe firmar usted mismo la solicitud. Amazon SNS es compatible
con Signature Version 4, un protocolo para autenticar solicitudes de API de entrada. Para obtener más
información sobre cómo autenticar solicitudes, consulte Proceso de firma de Signature Version 4 en la
Referencia general de AWS.
• IAM role (Rol de IAM): un rol de IAM es una identidad de IAM que puede crear en la cuenta y que tiene
permisos específicos. Un rol de IAM es similar a un usuario de IAM en que se trata de una identidad
de AWS con políticas de permisos que determinan lo que la identidad puede hacer y lo que no en
AWS. No obstante, en lugar de asociarse exclusivamente a una persona, la intención es que cualquier
usuario pueda asumir un rol que necesite. Además, un rol no tiene asociadas credenciales a largo
plazo estándar, como una contraseña o claves de acceso. En su lugar, cuando se asume un rol,
este proporciona credenciales de seguridad temporales para la sesión de rol. Los roles de IAM con
credenciales temporales son ú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 compañía o de un proveedor
de identidades web. A estas identidades se les llama usuarios federados. AWS asigna una función a
un usuario federado cuando se solicita acceso a través de un proveedor de identidad. Para obtener
más información acerca de los usuarios federados, consulte Usuarios federados y roles en la Guía del
usuario de IAM.
• Acceso a Servicio de AWS: un rol de servicio es un rol de IAM que un servicio asume para realizar
acciones en su nombre. Un administrador de IAM puede crear, modificar y eliminar un rol de servicio
desde IAM. Para obtener más información, consulte Creación de roles 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 que le permita administrar
credenciales temporales para las aplicaciones que se ejecutan en una instancia de EC2 y realizan
solicitudes a la AWS CLI o a la API de AWS. Es preferible hacerlo de este modo a almacenar claves
de acceso en la instancia de EC2. Para asignar un rol de AWS a una instancia de EC2 y ponerla a
disposición de todas las aplicaciones, cree un perfil de instancia adjuntado a la instancia. Un perfil de
instancia contiene el rol y permite a los programas que se ejecutan en la instancia de EC2 obtener
credenciales temporales. Para obtener más información, consulte Uso de un rol de IAM para conceder
permisos a aplicaciones que se ejecutan en instancias Amazon EC2 en la Guía del usuario de IAM.

Control de acceso
Amazon SNS dispone de su propio sistema de permisos basado en recursos que utiliza políticas escritas
en 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 SNS que con las
políticas de IAM.
Note
Es importante entender que todas las Cuentas de AWS pueden delegar sus permisos a los
usuarios de sus cuentas. El acceso entre cuentas permite compartir el acceso a los recursos de
AWS sin necesidad de administrar usuarios adicionales. Para obtener información sobre el uso
del acceso entre cuentas, consulte Habilitación del acceso entre cuentas en la Guía del usuario de
IAM.

417
Amazon Simple Notification
Service Guía para desarrolladores
Información general

Información general sobre la administración de acceso


en Amazon SNS
En esta sección, se describen los conceptos básicos que necesita conocer a fin de utilizar el lenguaje de
la política de acceso para escribir políticas. También describe el proceso general de funcionamiento del
control de acceso con el lenguaje de la política de acceso, así como el modo de evaluación de las políticas.

Temas
• Cuándo se utiliza el control de acceso (p. 418)
• Conceptos clave (p. 418)
• Información general sobre la arquitectura (p. 421)
• Uso del lenguaje de la política de acceso (p. 422)
• Lógica de evaluación (p. 423)
• Ejemplos de casos de control de acceso con Amazon SNS (p. 427)

Cuándo se utiliza el control de acceso


Tiene una gran flexibilidad en cuanto al modo de conceder o denegar el acceso a un recurso. Sin embargo,
los casos de uso típicos son bastante sencillos:

• Desea conceder a otra Cuenta de AWS un determinado tipo de acción de tema (p. ej., Publicar). Para
obtener más información, consulte Conceda a Cuenta de AWS acceso a un tema (p. 428) .
• Desea limitar las suscripciones a su tema únicamente al protocolo HTTPS. Para obtener más
información, consulte Limitar las suscripciones a HTTPS (p. 428) .
• Desea permitir que Amazon SNS publique mensajes en su cola de Amazon SQS. Para obtener más
información, consulte Publique en una cola de Amazon SQS. (p. 429) .

Conceptos clave
En las siguientes secciones, se describen los conceptos que necesita comprender para utilizar el lenguaje
de la política de acceso. Se presentan en un orden lógico, con los primeros términos que necesita conocer
en la parte superior de la lista.

Temas
• Permiso (p. 419)
• Statement (p. 419)
• Política (p. 419)
• Emisor (p. 419)
• Entidad principal (p. 419)
• Acción (p. 420)
• Recurso (p. 420)
• Condiciones y claves (p. 420)
• Solicitante (p. 420)
• Evaluación (p. 420)
• Efecto (p. 420)
• Denegación predeterminada (p. 421)
• Permitir (p. 421)
• Denegación explícita (p. 421)

418
Amazon Simple Notification
Service Guía para desarrolladores
Información general

Permiso
Un permiso es el mecanismo por el que se concede o se deniega algún tipo de acceso a un recurso
concreto. Los permisos tienen básicamente esta forma: "A tiene/no tiene permiso para ejecutar B en C
donde D se aplica". Por ejemplo, Jane (A) tiene permiso para publicar (B) en TopicA (C), siempre y cuando
utilice el protocolo HTTP (D). Cuando Jane publica en TopicA, el servicio comprueba si Jane tiene permiso
y si la solicitud cumple las condiciones establecidas en el permiso.

Statement
Una instrucción es la descripción formal de un único permiso, escrita en el lenguaje de la política de
acceso. Una instrucción se escribe siempre como parte de un documento contenedor más amplio conocido
como política (consulte el concepto siguiente).

Política
Una política es un documento (escrito en el lenguaje de la política de acceso) que actúa como contenedor
de una o varias instrucciones. Por ejemplo, una política puede tener dos instrucciones: una que indique
que Jane se puede suscribir mediante el protocolo de correo electrónico y otra que afirme que Bob no
puede publicar en el Tema A. Tal y como se muestra en la figura siguiente, un escenario equivalente
sería tener dos políticas; una que indique que Jane se puede suscribir mediante el protocolo de correo
electrónico y otra que indique que Bob no puede publicar en el Tema A.

Solo se permiten caracteres ASCII en los documentos de política. Puede utilizar aws:SourceAccount y
aws:SourceOwner para solucionar el escenario en el que necesita conectar otros ARN de servicios de
AWS que contienen caracteres que no son ASCII. Vea la diferencia entre aws:SourceAccount frente a
aws:SourceOwner (p. 431).

Emisor
El emisor es la persona que escribe una política para conceder los permisos para un recurso. El emisor
(por definición) siempre es el propietario de los recursos. AWS no permite a los usuarios de servicios de
AWS crear políticas para recursos que no sean propios. Si John es el propietario de los recursos, AWS
autentica la identidad de John cuando este envía la política que ha escrito con el fin de conceder los
permisos para dicho recurso.

Entidad principal
El principal es la persona o las personas que reciben el permiso en la política. El principal es A en la
instrucción “A tiene permiso para hacer B en C, donde D se aplica”. En una política puede configurar el
principal en "anyone" (es decir, puede especificar un comodín para representar a todas las personas).
Puede hacerlo, por ejemplo, si no desea restringir el acceso en función de la identidad real del solicitante,
sino de alguna otra característica identificatoria, como la dirección IP del solicitante.

419
Amazon Simple Notification
Service Guía para desarrolladores
Información general

Acción
La acción es la actividad para cuya ejecución se le da permiso al principal. La acción es B en la
declaración “A tiene permiso para hacer B a C cuando D sea de aplicación”. Por lo general, la acción no
es más que la operación de la solicitud a AWS. Por ejemplo, Jane envía una solicitud a Amazon SNS con
Action=Subscribe. Puede especificar una o varias acciones en una política.

Recurso
El recurso es el objeto al que el principal solicita acceso. El recurso es C en la instrucción “A tiene permiso
para hacer B en C, donde D se aplica”.

Condiciones y claves
Las condiciones consisten en cualquier restricción o detalle sobre el permiso. La condición es D en la
declaración “A tiene permiso para hacer B a C cuando D sea de aplicación”. La parte de la política que
especifica las condiciones puede ser la más detallada y compleja de todas las partes. Las condiciones
típicas están relacionadas con los siguientes elementos:

• Fecha y hora (por ejemplo, la solicitud debe llegar antes de un día determinado).
• Dirección IP (por ejemplo, la dirección IP del solicitante debe formar parte de un determinado intervalo
de CIDR).

Una clave es la característica específica que es la base de la restricción del acceso. Por ejemplo, la fecha
y la hora de la solicitud.

Las condiciones y las claves se utilizan conjuntamente para expresar la restricción. La forma más sencilla
de entender cómo implementar una restricción es utilizando un ejemplo: si desea restringir un acceso
antes del 30 de mayo de 2010, utilice la condición denominada DateLessThan. Utiliza la clave llamada
aws:CurrentTime y la configura en el valor 2010-05-30T[Link]Z. AWS define las condiciones
y las claves que puede utilizar. El propio servicio de AWS, (por ejemplo, Amazon SQS o Amazon SNS),
también podría definir claves específicas del servicio. Para obtener más información, consulte Permisos de
la API de Amazon SNS: referencia de recursos y acciones (p. 439) .

Solicitante
El solicitante es la persona que envía una solicitud a un servicio de AWS y solicita acceso a un recurso
concreto. El solicitante envía una solicitud a AWS en la que básicamente se lee: “¿Se me permitirá hacer B
en C, donde D se aplica?”

Evaluación
La evaluación es el proceso que el servicio de AWS utiliza para determinar si una solicitud entrante debe
denegarse o permitirse en función de las políticas aplicables. Para obtener más información acerca de la
lógica de evaluación, consulte Lógica de evaluación (p. 423).

Efecto
El efecto es el resultado que desea que devuelva una instrucción de política al evaluarla. Debe especificar
este valor cuando escriba las instrucciones de una política, y los valores posibles son deny (denegar) y
allow (permitir).

Por ejemplo, puede escribir una política que tenga una instrucción que deniegue todas las solicitudes que
procedan de la Antártida (efecto = denegar, dado que la solicitud utiliza una dirección IP asignada a la
Antártida). O bien puede escribir una política que tenga una instrucción que permita todas las solicitudes
que no procedan de la Antártida (efecto = permitir, dado que la solicitud no proviene de la Antártida).
Aunque parece que las dos instrucciones hagan lo mismo, en la lógica del lenguaje de la política de
acceso, son diferentes. Para obtener más información, consulte Lógica de evaluación (p. 423) .

420
Amazon Simple Notification
Service Guía para desarrolladores
Información general

Aunque solo se pueden especificar dos valores para el efecto, allow (permitir) o deny (denegar),
pueden obtenerse tres resultados diferentes en el momento de la evaluación de la política: denegación
predeterminada, permitir o denegación explícita. Para obtener más información, consulte los conceptos
siguientes y Lógica de evaluación (p. 423).

Denegación predeterminada
Una denegación predeterminada es el resultado predeterminado de una política a falta de una instrucción
de "permitir" o de una denegación explícita.

Permitir
Permitir es el resultado de una instrucción que tenga effect=allow, suponiendo que se cumplan todas las
condiciones indicadas. Ejemplo: permitir las solicitudes si se reciben antes de las 13:00 horas del 30 de
abril de 2010. Permitir anula todas las denegaciones predeterminadas, aunque nunca una denegación
explícita.

Denegación explícita
Una denegación explícita es el resultado de una instrucción que tenga effect=deny, suponiendo que
se cumplan todas las condiciones indicadas. Ejemplo: denegar todas las solicitudes si proceden de la
Antártida. Cualquier solicitud que proceda de la Antártida siempre se denegará, independientemente de lo
que cualquier otra política pueda permitir.

Información general sobre la arquitectura


En la figura y la tabla siguientes se describen los componentes principales que interactúan para
proporcionar control sobre el acceso a los recursos.

1 Usted, el propietario del recurso.

421
Amazon Simple Notification
Service Guía para desarrolladores
Información general

2 Sus recursos (contenidos en el servicio de AWS; por ejemplo, colas de Amazon SQS).

3 Sus políticas.

Normalmente tiene una política por recurso, aunque puede tener varias. El mismo servicio de
AWS proporciona una API que utiliza para cargar y administrar sus políticas.

4 Los solicitantes y sus solicitudes entrantes en el servicio de AWS.

5 El código de evaluación del lenguaje de la política de acceso.

Es el conjunto de código del servicio de AWS que evalúa las solicitudes entrantes en relación
con las políticas aplicables y determina si se permite al solicitante obtener acceso al recurso.
Para obtener más información acerca de cómo toma la decisión el servicio, consulte Lógica de
evaluación (p. 423).

Uso del lenguaje de la política de acceso


En la figura y la tabla siguiente, se describe el proceso general de cómo funciona el control de acceso con
el lenguaje de la política de acceso.

Proceso para utilizar el control de acceso con el lenguaje de la política de acceso

1 Escribe una política para su recurso.

Por ejemplo, puede escribir una política para especificar permisos para sus temas de Amazon
SNS.

2 Carga su política en AWS.

El mismo servicio de AWS proporciona una API que puede utilizar para cargar sus políticas.
Por ejemplo, utilice la acción SetTopicAttributes de Amazon SNS con el fin de cargar una
política para un tema de Amazon SNS concreto.

3 Alguien envía una solicitud para utilizar su recurso.

Por ejemplo, un usuario envía una solicitud a Amazon SNS para utilizar uno de sus temas.

4 El servicio de AWS determina qué políticas se aplican a la solicitud.

Por ejemplo, Amazon SNS busca en todas las políticas de Amazon SNS disponibles y determina
cuáles son aplicables (en función de cuál es el recurso, quién es el solicitante, etcétera).

422
Amazon Simple Notification
Service Guía para desarrolladores
Información general

5 El servicio de AWS evalúa las políticas.

Por ejemplo, Amazon SNS evalúa las políticas y determina si se permite al solicitante utilizar su
tema o no. Para obtener más información acerca de la lógica de decisión, consulte Lógica de
evaluación (p. 423).

6 El servicio de AWS deniega la solicitud o sigue procesándola.

Por ejemplo, según el resultado de la evaluación de la política, el servicio devuelve al solicitante


un error del tipo acceso denegado o continúa procesando la solicitud.

Lógica de evaluación
El objetivo en el momento de la evaluación es decidir si una determinada solicitud debe autorizarse o
denegarse. La lógica de evaluación sigue varias reglas básicas:

• De forma predeterminada, todas las solicitudes para utilizar su recurso procedentes de cualquier
persona que no sea usted se deniegan
• Una instrucción "permitir" anula todas las denegaciones predeterminadas.
• Una denegación explícita invalida cualquier instrucción "permitir"
• El orden en que se evalúan las políticas no es importante

El siguiente diagrama de flujo y el debate describen con más detalle cómo se toma la decisión.

423
Amazon Simple Notification
Service Guía para desarrolladores
Información general

1 La decisión comienza con una denegación predeterminada.

2 El código de aplicación evalúa todas las políticas aplicables a la solicitud (en función del recurso,
el principal, la acción y las condiciones).

El orden en que el código de aplicación evalúa las políticas no es importante.

3 En todas estas políticas, el código de aplicación buscará una instrucción de denegación explícita
que se aplique a la solicitud.

Aunque solo detecte una, el código de cumplimiento devolverá una decisión de "denegación"
y el proceso finalizará (es una denegación explícita; para obtener más información, consulte
Denegación explícita (p. 421)).

4 Si no se encuentra ninguna denegación explicita, el código de cumplimiento buscará una


instrucción "permitir" que se aplique a la solicitud.

Si encuentra alguna, el código de aplicación devolverá una decisión de "permitir" y el proceso se


llevará a cabo (el servicio seguirá procesando la solicitud).

424
Amazon Simple Notification
Service Guía para desarrolladores
Información general

5 Si no se detecta ninguna instrucción de "permitir", la decisión final será "denegar" (dado


que no había ninguna denegación explícita ni ninguna instrucción de "permitir", se trata
de una denegación predeterminada). Para obtener más información, consulte Denegación
predeterminada (p. 421).

Interacción entre denegaciones explícitas y predeterminadas


En una denegación predeterminada se deniega una política si esta no se aplica directamente a la
solicitud. Por ejemplo, si un usuario solicita utilizar Amazon SNS, pero la política sobre el tema no se
refiere a la Cuenta de AWS del usuario en absoluto, dicha política dará como resultado una denegación
predeterminada.

También se deniega una política en una denegación predeterminada si no se cumple una condición de
una instrucción. Si se cumplen todas las condiciones de la instrucción, la política dará como resultado una
instrucción "permitir" o una denegación explícita, en función del valor del elemento Effect en la política. Las
políticas no especifican qué es lo que se debe hacer si no se cumple una condición, por lo que el resultado
predeterminado en ese caso es una denegación predeterminada.

Por ejemplo, supongamos que desea evitar las solicitudes que procedan de la Antártida. Puede escribir
una política (denominada Policy A1) que permita una solicitud solo si no procede de la Antártida. El
siguiente diagrama ilustra esta política.

Si alguien envía una solicitud desde los Estados Unidos, dicha condición se cumple (la solicitud no procede
de la Antártida). Por lo tanto, la solicitud se permite. Pero, si alguien envía una solicitud desde la Antártida,
la condición no se cumple y, por lo tanto, la política genera una denegación predeterminada.

Puede convertir el resultado en una denegación explícita reescribiendo la política (denominada Policy
A2) como se indica en el siguiente diagrama. Aquí la política deniega de forma explícita una solicitud si
procede de la Antártida.

425
Amazon Simple Notification
Service Guía para desarrolladores
Información general

Si alguien envía una solicitud desde la Antártida, la condición se cumple y, por lo tanto, el resultado de la
política es una denegación explícita.

La diferencia entre una denegación predeterminada y una denegación explícita es importante, ya que
una denegación predeterminada se puede anular mediante una instrucción "permitir", mientras que una
denegación explícita, no. Por ejemplo, supongamos que hay otra política que permite las solicitudes que
llegan el 1 de junio de 2010. ¿Cómo afecta esta política al resultado general cuando se asocia a la política
que restringe el acceso desde la Antártida? Vamos a comparar el resultado general cuando se asocia la
política basada en la fecha (denominada Policy B) a las políticas anteriores A1 y A2. En el escenario 1 se
asocia Policy A1 a Policy B y, en el escenario 2, se asocia Policy A2 a Policy B. La figura y la discusión
siguientes muestran el resultado que se obtiene cuando llega una solicitud procedente de la Antártida el 1
de junio de 2010.

426
Amazon Simple Notification
Service Guía para desarrolladores
Información general

En el escenario 1, Policy A1 devuelve una denegación predeterminada, tal y como se ha descrito


anteriormente en esta sección. Policy B devuelve "permitir", ya que la política (por definición) permite las
solicitudes que entran el 1 de junio de 2010. El resultado "permitir" de la Policy B anula la denegación
predeterminada de la Policy A1 y, por dicho motivo, la solicitud se permite.

En el escenario 2, la Policy A2 devuelve una denegación explícita, tal y como se ha descrito anteriormente
en esta sección. De nuevo, la Policy B da como resultado "permitir". La denegación explícita de Policy A2
anula el resultado "permitir" de Policy B y, por dicho motivo, la solicitud se deniega.

Ejemplos de casos de control de acceso con Amazon SNS


Temas
• Conceda a Cuenta de AWS acceso a un tema (p. 428)
• Limitar las suscripciones a HTTPS (p. 428)
• Publique en una cola de Amazon SQS. (p. 429)

427
Amazon Simple Notification
Service Guía para desarrolladores
Información general

• Permitir que las notificaciones de eventos de Amazon S3 publiquen en un tema (p. 430)
• Permitir que Amazon SES publique en un tema propiedad de otra cuenta (p. 430)
• aws:SourceAccount frente a aws:SourceOwner (p. 431)
• Permitir que las cuentas de una organización de AWS Organizations publiquen en un tema de una
cuenta diferente (p. 432)
• Permitir que cualquier alarma de CloudWatch publique en un tema de una cuenta diferente (p. 432)
• Restringir las publicaciones en un tema de Amazon SNS únicamente desde un punto de enlace de la
VPC específico (p. 433)

En esta sección, se ofrecen algunos ejemplos de casos de uso habituales de control de acceso.

Conceda a Cuenta de AWS acceso a un tema


Supongamos que tiene un tema en el sistema de Amazon SNS. En el caso más sencillo, desea permitir
que una o varias Cuentas de AWS tengan acceso a una acción de tema específica (por ejemplo, Publicar).

Para ello, utilice la acción de API de Amazon SNS AddPermission. Toma un tema, una lista de ID de
Cuenta de AWS, una lista de acciones y una etiqueta, y crea de manera automática una nueva instrucción
en la política de control de acceso del tema. En este caso, no escribe una política usted mismo, ya que
Amazon SNS genera de manera automática la nueva instrucción de política. Puede eliminar la instrucción
más tarde, llamando a RemovePermission con su etiqueta.

Por ejemplo, si ha llamado a AddPermission en el tema arn:aws:sns:us-east-2:444455556666:MyTopic,


con el ID de Cuenta de AWS 1111-2222-3333, la acción Publish y la etiqueta grant-1234-publish,
Amazon SNS podría generar e insertar la siguiente instrucción de política de control de acceso:

{
"Statement": [{
"Sid": "grant-1234-publish",
"Effect": "Allow",
"Principal": {
"AWS": "111122223333"
},
"Action": ["sns:Publish"],
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic"
}]
}

Una vez que se agrega esta instrucción, el usuario con la Cuenta de AWS 1111-2222-3333 puede publicar
mensajes en el tema.

Limitar las suscripciones a HTTPS


En el ejemplo siguiente, limite el protocolo de entrega de notificaciones a HTTPS.

Debe saber cómo escribir su propia política para el tema, porque no puede especificar una restricción de
protocolo al conceder a alguien acceso al tema con la acción AddPermission de Amazon SNS. En este
caso deberá escribir su propia política y luego utilizar la acción SetTopicAttributes para establecer el
atributo Policy del tema en su nueva política.

En el siguiente ejemplo de política completa, se concede al ID de Cuenta de AWS 1111-2222-3333 la


capacidad para suscribirse a notificaciones desde un tema.

{
"Statement": [{
"Sid": "Statement1",

428
Amazon Simple Notification
Service Guía para desarrolladores
Información general

"Effect": "Allow",
"Principal": {
"AWS": "111122223333"
},
"Action": ["sns:Subscribe"],
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
"Condition": {
"StringEquals": {
"sns:Protocol": "https"
}
}
}]
}

Publique en una cola de Amazon SQS.


En este caso de uso, desea publicar mensajes desde su tema en su cola de Amazon SQS. Al igual que
Amazon SNS, Amazon SQS utiliza el lenguaje de políticas de control de acceso de Amazon. Con el fin
de permitir que Amazon SNS envíe mensajes, tendrá que utilizar la acción SetQueueAttributes de
Amazon SQS para establecer una política en la cola.

Además, deberá saber cómo escribir su propia política, ya que la acción AddPermission de Amazon
SQS no crea instrucciones de política con las condiciones.
Note

Tenga en cuenta que el ejemplo que se presenta a continuación es una política de Amazon SQS
(que controla el acceso a la cola) y no una política de Amazon SNS (que controla el acceso al
tema). Las acciones son acciones de Amazon SQS y el recurso es el nombre de recurso de
Amazon (ARN) de la cola. Puede determinar el ARN de la cola recuperando el atributo QueueArn
de la cola con la acción GetQueueAttributes.

{
"Statement": [{
"Sid": "Allow-SNS-SendMessage",
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": ["sqs:SendMessage"],
"Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic"
}
}
}]
}

Esta política utiliza la condición aws:SourceArn para restringir el acceso a la cola en función del origen
del mensaje que se envíe a esta. Puede utilizar este tipo de política para permitir que Amazon SNS envíe
mensajes a la cola únicamente si los mensajes proceden de uno de sus propios temas. En este caso, debe
especificar uno de sus temas, cuyo ARN sea arn:aws:sns:us-east-2:444455556666:MyTopic.

La política anterior es un ejemplo de la política de Amazon SQS que puede escribir y agregar a una cola
específica. Otorgaría acceso a Amazon SNS y a otros servicios de AWS. Amazon SNS otorga una política
predeterminada para todos los temas que recién creados. La política predeterminada concede a todos
los demás servicios de AWS acceso al tema. En esta política predeterminada, se utiliza una condición
aws:SourceArn para garantizar el acceso de los servicios de AWS al tema únicamente en nombre de los
recursos de AWS de su propiedad.

429
Amazon Simple Notification
Service Guía para desarrolladores
Información general

Permitir que las notificaciones de eventos de Amazon S3 publiquen en un tema


En este caso, desea configurar la política de un tema para que el bucket de Amazon S3 de otra Cuenta
de AWS pueda publicar en su tema. Para obtener más información sobre la publicación de notificaciones
desde Amazon S3, vaya a Configuración de notificaciones de eventos de buckets.

En este ejemplo se presupone que ha escrito su propia política y luego ha utilizado la acción
SetTopicAttributes para establecer el atributo Policy del tema en su nueva política.

En la instrucción del siguiente ejemplo, se utiliza la condición SourceAccount para asegurarse de que
solo la cuenta del propietario de Amazon S3 pueda tener acceso al tema. En este ejemplo, el propietario
del tema es 111122223333 y el propietario de Amazon S3 es 444455556666. En el ejemplo, se establece
que cualquier bucket de Amazon S3 propiedad de 444455556666 tiene permiso para publicar en MiTema.

{
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "444455556666"
}
}
}]
}

Al publicar eventos en Amazon SNS, los siguientes servicios son compatibles con aws:SourceAccount:

• Amazon API Gateway


• Amazon CloudWatch
• Amazon DevOps Guru
• Amazon DynamoDB
• Amazon ElastiCache
• Amazon GameLift
• API de SMS y voz de Amazon Pinpoint
• Amazon RDS
• Amazon Redshift
• Amazon Simple Storage Service
• Amazon S3 Glacier
• Amazon SES
• AWS CodeCommit
• AWS Directory Service
• AWS Lambda
• AWS Systems Manager Incident Manager

Permitir que Amazon SES publique en un tema propiedad de otra cuenta


Puede permitir que otro servicio de AWS publique en un tema que es propiedad de otra Cuenta de AWS.
Supongamos que ha iniciado sesión en la cuenta 111122223333, ha abierto Amazon SES y ha creado

430
Amazon Simple Notification
Service Guía para desarrolladores
Información general

un correo electrónico. Para publicar notificaciones sobre este correo electrónico en un tema de Amazon
SNS que posee la cuenta 444455556666, debe crear una política como la siguiente. Para ello, debe
proporcionar información sobre la entidad principal (el otro servicio) y la propiedad de cada recurso. En la
instrucción Resource, se proporciona el tema ARN, que incluye el ID de cuenta del propietario del tema,
444455556666. En la instrucción "aws:SourceOwner": "111122223333", se especifica que su cuenta
es propietaria del correo electrónico.

{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"Service": "[Link]"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
"Condition": {
"StringEquals": {
"aws:SourceOwner": "111122223333"
}
}
}
]
}

Al publicar eventos en Amazon SNS, los siguientes servicios son compatibles con aws:SourceOwner:

• Amazon API Gateway


• Amazon CloudWatch
• Amazon DevOps Guru
• Amazon DynamoDB
• Amazon ElastiCache
• Amazon GameLift
• API de SMS y voz de Amazon Pinpoint
• Amazon RDS
• Amazon Redshift
• Amazon Simple Storage Service
• Amazon S3 Glacier
• Amazon SES
• AWS CodeCommit
• AWS Directory Service
• AWS Lambda
• AWS Systems Manager Incident Manager

aws:SourceAccount frente a aws:SourceOwner


Cuando publican en un tema de Amazon SNS, algunos servicios de AWS establecen las claves de
condición aws:SourceAccount y aws:SourceOwner. Cuando se admite, el valor será el ID de cuenta
de AWS 12 dígitos en cuyo nombre publica los datos el servicio. Algunos servicios admiten uno, y otros
apoyan el otro.

431
Amazon Simple Notification
Service Guía para desarrolladores
Información general

• Consulte Permitir que las notificaciones de eventos de Amazon S3 publiquen en un tema (p. 430) para
saber cómo las notificaciones de Amazon S3 utilizan aws:SourceAccount y una lista de los servicios
de AWS que admiten esa condición.
• Consulte Permitir que Amazon SES publique en un tema propiedad de otra cuenta (p. 430) para saber
cómo Amazon SES utiliza aws:SourceOwner y una lista de los servicios de AWS que admiten esa
condición.

Permitir que las cuentas de una organización de AWS Organizations publiquen en


un tema de una cuenta diferente
Con el servicio de AWS Organizations, puede administrar de forma centralizada la facturación, controlar el
acceso y la seguridad, y compartir recursos entre sus Cuentas de AWS.

Puede encontrar su ID de organización en la consola de organizaciones. Para obtener más información,


consulte Ver detalles de una organización desde la cuenta de administración.

En este ejemplo, cualquier Cuenta de AWS de la organización myOrgId puede publicar en el tema
MyTopic de Amazon SNS de la cuenta 444455556666. La política comprueba el valor del ID de
organización mediante la clave de condición global aws:PrincipalOrgID.

{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "myOrgId"
}
}
}
]
}

Permitir que cualquier alarma de CloudWatch publique en un tema de una cuenta


diferente
En este caso, cualquier alarma de CloudWatch de la cuenta 111122223333 puede publicar en un tema de
Amazon SNS de la cuenta 444455556666.

{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*"
}
}
}

432
Amazon Simple Notification
Service Guía para desarrolladores
Uso de políticas basadas en identidades

]
}

Restringir las publicaciones en un tema de Amazon SNS únicamente desde un


punto de enlace de la VPC específico
En este caso, el tema de la cuenta 444455556666 puede publicar únicamente desde el punto de enlace de
la VPC con el ID vpce-1ab2c34d.

{
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1ab2c34d"
}
}
}]
}

Uso de políticas basadas en identidades con Amazon


SNS
Temas
• Uso en conjunto de políticas y roles de IAM y Amazon SNS (p. 433)
• Formato de ARN de recursos de Amazon SNS (p. 436)
• Acciones de API de Amazon SNS (p. 437)
• Claves de política de Amazon SNS (p. 437)
• Ejemplos de políticas para Amazon SNS (p. 437)

Amazon Simple Notification Service se integra con AWS Identity and Access Management (IAM) para
que pueda especificar qué acciones de Amazon SNS puede realizar un usuario en su Cuenta de AWS
con recursos de Amazon SNS. Puede especificar un tema determinado de la política. Por ejemplo, puede
utilizar variables cuando crea una política de IAM a fin de conceder permiso a determinados usuarios de
su organización para utilizar la acción Publish en temas específicos de su Cuenta de AWS. Para obtener
más información, consulte Variables de las políticas en la Guía del usuario de IAM.
Important

El uso de Amazon SNS con IAM no cambia la forma de utilizar Amazon SNS. No hay cambios en
las acciones de Amazon SNS ni acciones nuevas de Amazon SNS relacionados con los usuarios
y el control de acceso.

Para ver ejemplos de políticas que abarcan acciones y recursos de Amazon SNS, consulte Ejemplos de
políticas para Amazon SNS (p. 437).

Uso en conjunto de políticas y roles de IAM y Amazon SNS


Las políticas de IAM se utilizan para restringir el acceso de los usuarios a acciones y temas de Amazon
SNS. Una política de IAM puede restringir el acceso únicamente a los usuarios de su cuenta de AWS y
denegárselo a los usuarios de otras Cuentas de AWS.

433
Amazon Simple Notification
Service Guía para desarrolladores
Uso de políticas basadas en identidades

Puede utilizar una política de Amazon SNS con un tema determinado para restringir quién puede trabajar
en ese tema (por ejemplo, quién puede publicar mensajes en el tema, quién puede suscribirse al tema,
etcétera). Las políticas de Amazon SNS pueden conceder acceso a otras Cuentas de AWS o a usuarios
dentro de su propiaCuenta de AWS.

Con el fin de otorgar a sus usuarios permisos para sus temas de Amazon SNS, puede utilizar políticas de
IAM, políticas de Amazon SNS o ambas. La mayoría de las veces, puede conseguir los mismos resultados
con ambas. Por ejemplo, en el siguiente diagrama se muestra una política de IAM y una política de
Amazon SNS equivalentes. Con la política de IAM, se permite la acción Subscribe de Amazon SNS para
el tema denominado topic_xyz de su cuenta de AWS. La política de IAM está asociada a los usuarios Bob
y Susan (lo que significa que Bob y Susan tienen los permisos indicados en la política). Con la política
de Amazon SNS, también se les concede a Bob y Susan permiso para obtener acceso a Subscribe en
relación con topic_xyz.

Note

En el ejemplo anterior se muestran políticas sencillas sin condiciones. Puede especificar una
condición determinada en cualquiera de las dos políticas y obtener el mismo resultado.

Hay una diferencia entre las políticas de Amazon SNS e IAM de AWS: con el sistema de políticas de
Amazon SNS, se pueden conceder permisos a otras Cuentas de AWS, mientras que en la política de IAM
no.

Basándose en sus necesidades, decida el uso que quiere hacer de ambos sistemas para administrar los
permisos. Los siguientes ejemplos muestran cómo funcionan conjuntamente los dos sistemas de política.

Example 1

En este ejemplo, se aplica a Bob tanto una política de IAM como una política de Amazon SNS. Con la
política de IAM, se le concede el permiso para Subscribe en cualquier tema de la Cuenta de AWS,
mientras que en la política de Amazon SNS se le concede el permiso para utilizar Publish en un tema
específico (topic_xyz). El siguiente diagrama ilustra este concepto.

434
Amazon Simple Notification
Service Guía para desarrolladores
Uso de políticas basadas en identidades

Si Bob quiere enviar una solicitud de suscripción a cualquier tema de la cuenta de AWS, la política de IAM
permitirá la acción. Si Bob quiere enviar una solicitud para publicar un mensaje en topic_xyz, la política de
Amazon SNS permitirá la acción.

Example 2

En este ejemplo, nos basamos en el ejemplo 1 (en el que se aplican dos políticas a Bob). Supongamos
que Bob publica mensajes en topic_xyz que no debería haber publicado y usted decide quitarle por
completo su capacidad para publicar en temas. Para ello, lo más fácil es agregar una política de IAM
que le deniegue acceso a la acción Publish en todos los temas. Esta tercera política anula la política
de Amazon SNS que anteriormente le daba permiso para publicar en topic_xyz, ya que una denegación
explícita siempre anula una instrucción “permitir” (para obtener más información sobre la lógica de
evaluación de políticas, consulte Lógica de evaluación (p. 423)). El siguiente diagrama ilustra este
concepto.

435
Amazon Simple Notification
Service Guía para desarrolladores
Uso de políticas basadas en identidades

Para ver ejemplos de políticas que abarcan acciones y recursos de Amazon SNS, consulte Ejemplos de
políticas para Amazon SNS (p. 437). Para obtener más información sobre la escritura de las políticas de
Amazon SNS, consulte la documentación técnica de Amazon SNS.

Formato de ARN de recursos de Amazon SNS


Para Amazon SNS, los temas son el único tipo de recurso que puede especificar en una política. A
continuación se muestra el formato de nombre de recurso de Amazon (ARN) para los temas.

arn:aws:sns:region:account_ID:topic_name

Para obtener más información sobre los ARN, vaya a ARN en la Guía del usuario de IAM.

Example

A continuación, se muestra el ARN de un tema denominado MiTema de la región us-east-2, que pertenece
a Cuenta de AWS 123456789012.

arn:aws:sns:us-east-2:123456789012:MyTopic

Example

Si tuviera un tema denominado MiTema en cada una de las diferentes regiones que Amazon SNS admite,
podría especificar los temas con el siguiente ARN.

arn:aws:sns:*:123456789012:MyTopic

Puede utilizar los caracteres comodín * e ? en el nombre del tema. Por ejemplo, el ejemplo siguiente podría
hacer referencia a todos los temas creados por Bob a los que ha puesto el prefijo bob_.

436
Amazon Simple Notification
Service Guía para desarrolladores
Uso de políticas basadas en identidades

arn:aws:sns:*:123456789012:bob_*

Para facilitarle su tarea, cuando crea un tema, Amazon SNS devuelve el ARN del tema en la respuesta.

Acciones de API de Amazon SNS


En una política de IAM, puede especificar cualquier acción que Amazon SNS ofrezca. Sin embargo, las
acciones ConfirmSubscription y Unsubscribe no requieren autenticación, lo que significa que,
incluso si especifica dichas acciones en una política, IAM no restringirá el acceso de los usuarios a estas
acciones.

Cada acción que especifique en una política debe ir prefijada con la cadena en minúsculas sns:. Para
especificar todas las acciones de Amazon SNS, utilizaría, por ejemplo, sns:*. Para obtener una lista de
las acciones, vaya a la Referencia de la API de Amazon Simple Notification Service.

Claves de política de Amazon SNS


Amazon SNS implementa las siguientes claves de política en todo AWS, además de algunas claves
específicas del servicio.

Para obtener una lista de las claves de condición que admite cada Servicio de AWS, consulte Acciones,
recursos y claves de condición para Servicios de AWS en la Guía del usuario de IAM. Para obtener una
lista de claves de condición que pueden utilizarse en múltiples Servicios de AWS, consulte Claves de
contexto de condición global de AWS en la Guía del usuario de IAM.

Amazon SNS utiliza las siguientes claves específicas de servicio. Utilice estas claves en políticas que
restringen el acceso a solicitudes Subscribe.

• sns:Endpoint: la URL, la dirección de correo electrónico o el ARN de una solicitud Subscribe o una
suscripción confirmada anteriormente. Utilícela con las condiciones de la cadena (consulte Ejemplos
de políticas para Amazon SNS (p. 437)) para restringir el acceso a puntos de enlace específicos (por
ejemplo, *@[Link]).
• sns:Protocol: el valor protocol de una solicitud Subscribe o de una suscripción confirmada
anteriormente. Utilícela con las condiciones de la cadena (consulte Ejemplos de políticas para Amazon
SNS (p. 437)) para restringir la publicación en protocolos de entrega (por ejemplo, https).

Ejemplos de políticas para Amazon SNS


En esta sección, se muestran varias políticas sencillas para controlar el acceso de los usuarios a Amazon
SNS.
Note

En el futuro, Amazon SNS podría agregar nuevas acciones que deberán, lógicamente, incluirse en
una de las políticas siguientes, en función de los objetivos indicados en esta.

Example 1: Permitir a un grupo crear y administrar temas

En este ejemplo, creamos una política que concede acceso a CreateTopic, ListTopics,
SetTopicAttributes y DeleteTopic.

{
"Statement": [{
"Effect": "Allow",

437
Amazon Simple Notification
Service Guía para desarrolladores
Uso de políticas basadas en identidades

"Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes",


"sns:DeleteTopic"],
"Resource": "*"
}]
}

Example 2: Permitir que el grupo de TI publique mensajes en un tema determinado

En este ejemplo, creamos un grupo de TI y asignamos una política que concede acceso a Publish en el
tema de interés específico.

{
"Statement": [{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:*:123456789012:MyTopic"
}]
}

Example 3: Conceder a los usuarios de la Cuenta de AWS capacidad para suscribirse a temas

En este ejemplo, creamos una política que concede acceso a la acción Subscribe, con condiciones de
coincidencia de la cadena para las claves de política sns:Protocol y sns:Endpoint.

{
"Statement": [{
"Effect": "Allow",
"Action": ["sns:Subscribe"],
"Resource": "*",
"Condition": {
"StringLike": {
"SNS:Endpoint": "*@[Link]"
},
"StringEquals": {
"sns:Protocol": "email"
}
}
}]
}

Example 4: Permitir a un socio publicar mensajes en un tema determinado

Puede utilizar una política de Amazon SNS o una política de IAM para permitir a un socio publicar en
un tema concreto. Si el socio tiene una Cuenta de AWS, puede que sea más fácil utilizar una política de
Amazon SNS. Sin embargo, cualquier usuario de la empresa del socio que posea las credenciales de
seguridad de AWS puede publicar mensajes en el tema. En este ejemplo se presupone que quiere limitar
el acceso a una determinada persona (o aplicación). Para ello, debe tratar al socio como un usuario de su
propia compañía y utilizar una política de IAM en vez de una política de Amazon SNS.

En este ejemplo, creamos un grupo denominado WidgetCo que representa a la compañía del socio;
creamos un usuario para la persona (o la aplicación) específica en la compañía de la empresa que
necesita el acceso y, a continuación, incluimos el usuario en el grupo.

Después asociamos una política que concede al grupo el acceso Publish para el tema específico
denominado WidgetPartnerTopic.

También queremos evitar que el grupo WidgetCo ejecute cualquier otra acción en los temas, por lo que
agregamos una instrucción que deniega el permiso para ejecutar cualquier acción de Amazon SNS que
no sea Publish en los temas que no sean WidgetPartnerTopic. Este paso es necesario solo si existe una

438
Amazon Simple Notification
Service Guía para desarrolladores
Uso de credenciales temporales

política amplia en cualquier otra parte del sistema que concede a los usuarios un acceso amplio a Amazon
SNS.

{
"Statement": [{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic"
},
{
"Effect": "Deny",
"NotAction": "sns:Publish",
"NotResource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic"
}
]
}

Uso de credenciales de seguridad temporales con


Amazon SNS
Además de crear usuarios de IAM con sus propias credenciales de seguridad, IAM también le permite
otorgar credenciales de seguridad temporales a cualquier usuario, para que este obtenga acceso a sus
servicios y recursos de AWS. Puede administrar usuarios que tengan Cuentas de AWS; dichos usuarios
son usuarios de IAM. También puede administrar usuarios de su sistema que no tengan Cuentas de AWS;
dichos usuarios reciben el nombre de usuarios federados. Además, los “usuarios” pueden ser aplicaciones
que se crean para obtener acceso a sus recursos de AWS.

Puede utilizar estas credenciales de seguridad temporales para realizar solicitudes a Amazon SNS. Las
bibliotecas de la API computan el valor de firma necesario con esas credenciales para autenticar su
solicitud. Si envía las solicitudes con las credenciales vencidas, Amazon SNS deniega la solicitud.

Para obtener más información sobre la compatibilidad de IAM con las credenciales de seguridad
temporales, vaya a Concesión de acceso temporal a sus recursos de AWS en Uso de IAM.

Example Uso de credenciales de seguridad temporales para autenticar una solicitud de Amazon
SNS

En el siguiente ejemplo, se muestra cómo obtener credenciales de seguridad temporales para autenticar
una solicitud de Amazon SNS.

[Link]
?Name=My-Topic
&Action=CreateTopic
&Signature=gfzIF53exFVdpSNb8AiwN3Lv%2FNYXh6S%2Br3yySK70oX4%3D
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&Timestamp=2010-03-31T12%3A00%3A00.000Z
&SecurityToken=SecurityTokenValue
&AWSAccessKeyId=Access Key ID provided by AWS Security Token Service

Permisos de la API de Amazon SNS: referencia de


recursos y acciones
En la siguiente lista, se proporciona información específica sobre la implementación por parte de Amazon
SNS del control de acceso:

439
Amazon Simple Notification
Service Guía para desarrolladores
Referencia de permisos de la API

• Cada política debe cubrir únicamente un único tema (a la hora de escribir una política, no incluya
instrucciones que abarquen diferentes temas).
• Cada política debe tener un Id de política único.
• Cada instrucción de una política debe tener un sid de instrucción exclusivo.

Cuotas de política
En la siguiente tabla se muestran las cuotas máximas para una instrucción de política.

Nombre Cuota máxima

Bytes 30 kb

Instrucciones 100

Entidades principales De 1 a 200 (0 no es válido).

Recurso 1 (0 no es válido. El valor debe coincidir con el ARN del


tema de la política).

Acciones de políticas de Amazon SNS válidas


Amazon SNS es compatible con las acciones que se muestran en la siguiente tabla.

Acción Descripción

sns:AddPermission Da permiso para añadir permisos a la política del tema.

sns:DeleteTopic Da permiso para eliminar un tema.

sns:GetTopicAttributes Da permiso para recibir todos los atributos del tema.

sns:ListSubscriptionsByTopic Da permiso para recuperar todas las suscripciones a un determinado


tema.

sns:Publish Concede permiso para publicar y publicar por lotes en un tema o


punto de conexión. Para obtener más información, consulte Publish
y PublishBatch en la Referencia de la API de Amazon Simple
Notification Service.

sns:RemovePermission Da permiso para eliminar cualquier permiso de la política del tema.

sns:SetTopicAttributes Da permiso para establecer los atributos de un tema.

sns:Subscribe Da permiso para suscribirse a un tema.

Claves específicas del servicio


Amazon SNS utiliza las siguientes claves específicas de servicio. Puede utilizarlas en políticas que
restrinjan el acceso a solicitudes Subscribe.

• sns:Endpoint: la URL, la dirección de correo electrónico o el ARN de una solicitud Subscribe o una
suscripción confirmada anteriormente. Utilícela con las condiciones de la cadena (consulte Ejemplos

440
Amazon Simple Notification
Service Guía para desarrolladores
Registro y monitoreo

de políticas para Amazon SNS (p. 437)) para restringir el acceso a puntos de enlace específicos (por
ejemplo, *@[Link]).
• sns:Protocol: el valor protocol de una solicitud Subscribe o de una suscripción confirmada
anteriormente. Utilícela con las condiciones de la cadena (consulte Ejemplos de políticas para Amazon
SNS (p. 437)) para restringir la publicación en protocolos de entrega (por ejemplo, https).

Important
Cuando utiliza una política para controlar el acceso por sns:Endpoint, debe ser consciente de que
los problemas de DNS podrían afectar posteriormente a la resolución de nombres del punto de
enlace.

Registro y monitoreo en Amazon SNS


En esta sección, se proporciona información sobre el registro y el monitoreo de temas de Amazon SNS.

Temas
• Registro de llamadas a la API de Amazon SNS mediante CloudTrail (p. 441)
• Monitoreo de los temas de Amazon SNS mediante Amazon CloudWatch (p. 444)

Registro de llamadas a la API de Amazon SNS


mediante CloudTrail
Amazon SNS se integra a AWS CloudTrail, un servicio que proporciona un registro de las medidas
adoptadas por un usuario, un rol o un servicio de AWS en Amazon SNS. CloudTrail captura las llamadas
a la API de Amazon SNS como eventos. Las llamadas capturadas incluyen las llamadas desde la consola
de Amazon SNS y las llamadas desde el código a las operaciones de la API de Amazon SNS. Si crea
un registro de seguimiento, puede habilitar la entrega continua de eventos de CloudTrail a un bucket de
Amazon S3, incluidos los eventos de Amazon SNS. Si no configura un registro de seguimiento, puede ver
los eventos más recientes de la consola de CloudTrail en el Event history (Historial de eventos). Mediante
la información recopilada por CloudTrail, puede determinar la solicitud que se realizó a Amazon SNS, la
dirección IP desde la que se realizó, quién la realizó y cuándo, y otros detalles.

Para obtener más información acerca de CloudTrail, incluso cómo configurarlo y habilitarlo, consulte la
Guía del usuario de AWS CloudTrail.

Información de Amazon SNS en CloudTrail


CloudTrail se habilita en su Cuenta de AWS cuando la crea. Cuando se produce una actividad de eventos
compatible en Amazon SNS, la actividad se registra en un evento de CloudTrail junto con otros eventos de
servicios de AWS en Historial de eventos. Puede ver, buscar y descargar los últimos eventos de la Cuenta
de AWS. Para obtener más información, consulte Ver eventos con el historial de eventos de CloudTrail.

Para mantener un registro continuo de los eventos de la Cuenta de AWS, incluidos los eventos de Amazon
SNS, cree un registro de seguimiento. Un registro de seguimiento permite a CloudTrail enviar archivos de
registro a un bucket de Amazon S3. De forma predeterminada, cuando se crea un registro de seguimiento
en la consola, el registro de seguimiento se aplica a todas las regiones de AWS. El registro de seguimiento
registra los eventos de todas las regiones de la partición de AWS y envía los archivos de registro al bucket
de Amazon S3 especificado. También es posible configurar otros servicios de AWS para analizar en
profundidad y actuar en función de los datos de eventos recopilados en los registros de CloudTrail. Para
obtener más información, consulte los siguientes temas:

• Introducción a la creación de registros de seguimiento

441
Amazon Simple Notification
Service Guía para desarrolladores
Registro de llamadas a la API mediante CloudTrail

• Consulte Servicios e integraciones compatibles con CloudTrail


• Configuración de notificaciones de Amazon SNS para CloudTrail
• Recibir archivos de registro de CloudTrail de varias regiones y Recibir archivos de registro de CloudTrail
de varias cuentas

Amazon SNS admite el registro de las siguientes acciones como eventos en archivos de registros de
CloudTrail:

• AddPermission
• CheckIfPhoneNumberIsOptedOut
• ConfirmSubscription
• CreatePlatformApplication
• CreatePlatformEndpoint
• CreateSMSSandboxPhoneNumber
• CreateTopic
• DeleteEndpoint
• DeletePlatformApplication
• DeleteSMSSandboxPhoneNumber
• DeleteTopic
• GetEndpointAttributes
• GetPlatformApplicationAttributes
• GetSMSAttributes
• GetSMSSandboxAccountStatus
• GetSubscriptionAttributes
• GetTopicAttributes
• ListEndpointsByPlatformApplication
• ListOriginationNumbers
• ListPhoneNumbersOptedOut
• ListPlatformApplications
• ListSMSSandboxPhoneNumbers
• ListSubscriptions
• ListSubscriptionsByTopic
• ListTagsForResource
• ListTopics
• OptInPhoneNumber
• RemovePermission
• SetEndpointAttributes
• SetPlatformApplicationAttributes
• SetSMSAttributes
• SetSubscriptionAttributes
• SetTopicAttributes
• Subscribe
• TagResource
• Unsubscribe
• UntagResource
• VerifySMSSandboxPhoneNumber

442
Amazon Simple Notification
Service Guía para desarrolladores
Registro de llamadas a la API mediante CloudTrail

Note
Si no ha iniciado sesión en Amazon Web Services (modo sin autenticar) y se invocan las acciones
ConfirmSubscription o Unsubscribe, no se registrarán en CloudTrail. Por ejemplo, al elegir el
vínculo proporcionado en una notificación por correo electrónico para confirmar la suscripción
pendiente en un tema, se invoca la acción ConfirmSubscription en modo sin autenticar. En
este ejemplo, la acción ConfirmSubscription no se registra en CloudTrail.

Cada entrada de registro o evento contiene información sobre quién generó la solicitud. La información de
identidad del usuario le ayuda a determinar lo siguiente:

• Si la solicitud se realizó con credenciales de usuario AWS Identity and Access Management (IAM) o
credenciales de usuario raíz.
• Si la solicitud se realizó con credenciales de seguridad temporales de un rol o fue un usuario federado.
• Si la solicitud la realizó otro servicio de AWS.

Para obtener más información, consulte el Elemento userIdentity de CloudTrail.

Ejemplo: entradas del archivo de registros de Amazon SNS


Un registro de seguimiento es una configuración que permite la entrega de eventos como archivos de
registros en un bucket de Amazon S3 que especifique. Los archivos log de CloudTrail pueden contener
una o varias entradas de log. Un evento representa una única solicitud de cualquier origen e incluye
información acerca de la acción solicitada, la fecha y la hora de la acción, los parámetros de la solicitud,
etcétera. Los archivos de registro de CloudTrail no rastrean el orden en la pila de las llamadas públicas a la
API, por lo que estas no aparecen en ningún orden específico.

En el ejemplo siguiente, se muestra una entrada de registro de CloudTrail que ilustra las acciones
ListTopics, CreateTopic y DeleteTopic.

{
"Records": [
{
"eventVersion": "1.02",
"userIdentity": {
"type":"IAMUser",
"userName":"Bob"
"principalId": "EX_PRINCIPAL_ID",
"arn": "arn:aws:iam::123456789012:user/Bob",
"accountId": "123456789012",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE"
},
"eventTime": "2014-09-30T[Link]Z",
"eventSource": "[Link]",
"eventName": "ListTopics",
"awsRegion": "us-west-2",
"sourceIPAddress": "[Link]",
"userAgent": "aws-sdk-java/unknown-version",
"requestParameters": {
"nextToken": "ABCDEF1234567890EXAMPLE=="
},
"responseElements": null,
"requestID": "example1-b9bb-50fa-abdb-80f274981d60",
"eventID": "example0-09a3-47d6-a810-c5f9fd2534fe",
"eventType": "AwsApiCall",
"recipientAccountId": "123456789012"
},
{
"eventVersion": "1.02",
"userIdentity": {
"type":"IAMUser",

443
Amazon Simple Notification
Service Guía para desarrolladores
Monitoreo de los temas mediante Amazon CloudWatch

"userName":"Bob"
"principalId": "EX_PRINCIPAL_ID",
"arn": "arn:aws:iam::123456789012:user/Bob",
"accountId": "123456789012",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE"
},
"eventTime": "2014-09-30T[Link]Z",
"eventSource": "[Link]",
"eventName": "CreateTopic",
"awsRegion": "us-west-2",
"sourceIPAddress": "[Link]",
"userAgent": "aws-sdk-java/unknown-version",
"requestParameters": {
"name": "hello"
},
"responseElements": {
"topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic"
},
"requestID": "example7-5cd3-5323-8a00-f1889011fee9",
"eventID": "examplec-4f2f-4625-8378-130ac89660b1",
"eventType": "AwsApiCall",
"recipientAccountId": "123456789012"
},
{
"eventVersion": "1.02",
"userIdentity": {
"type":"IAMUser",
"userName":"Bob"
"principalId": "EX_PRINCIPAL_ID",
"arn": "arn:aws:iam::123456789012:user/Bob",
"accountId": "123456789012",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE"
},
"eventTime": "2014-09-30T[Link]Z",
"eventSource": "[Link]",
"eventName": "DeleteTopic",
"awsRegion": "us-west-2",
"sourceIPAddress": "[Link]",
"userAgent": "aws-sdk-java/unknown-version",
"requestParameters": {
"topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic"
},
"responseElements": null,
"requestID": "example5-4faa-51d5-aab2-803a8294388d",
"eventID": "example8-6443-4b4d-abfd-1b867280d964",
"eventType": "AwsApiCall",
"recipientAccountId": "123456789012"
},
]
}

Monitoreo de los temas de Amazon SNS mediante


Amazon CloudWatch
Amazon SNS y Amazon CloudWatch están integrados, por lo que puede recopilar, ver y analizar métricas
de todas las notificaciones de Amazon SNS activas. Una vez que haya configurado CloudWatch para
Amazon SNS, podrá obtener más información del rendimiento de sus temas, notificaciones de inserción y
entregas de SMS de Amazon SNS. Por ejemplo, puede configurar una alarma que le envíe una notificación
por correo electrónico si se llega a un umbral especificado en una métrica de Amazon SNS, como
NumberOfNotificationsFailed. Para ver una lista de todas las métricas que Amazon SNS envía
a CloudWatch, consulte Métricas de Amazon SNS (p. 446). Para obtener más información sobre las
notificaciones push de Amazon SNS, consulte Notificaciones de inserción en móviles (p. 268).

444
Amazon Simple Notification
Service Guía para desarrolladores
Monitoreo de los temas mediante Amazon CloudWatch

Note

Las métricas que configure con CloudWatch para sus temas de Amazon SNS se recopilan e
insertan de manera automática en CloudWatch en intervalos de 1 minuto. Estas métricas se
recopilan en todos los temas que cumplen las directrices de CloudWatch para considerarse
activos. CloudWatch considera que un tema se mantiene activo durante seis horas desde la última
actividad (por ejemplo, cualquier llamada a la API) que ha tenido lugar en el tema.
No se aplica ningún cargo por las métricas de Amazon SNS que se muestran en CloudWatch; se
ofrecen como parte del servicio de Amazon SNS.

Vea las métricas de CloudWatch para Amazon SNS


Puede monitorear las métricas de Amazon SNS mediante la consola de CloudWatch, la interfaz de línea
de comandos (CLI) propia de CloudWatch o mediante programación con la API de CloudWatch. Los
procedimientos siguientes muestran cómo aceptar las métricas mediante la AWS Management Console.

Para ver las métricas a través de la consola de CloudWatch

1. Inicie sesión en la consola de CloudWatch.


2. En el panel de navegación, elija Metrics.
3. En la pestaña All metrics (Todas las métricas), elija SNS y, a continuación, elija una de las
dimensiones siguientes:

• Country, SMS Type (País, tipo de SMS


• PhoneNumber
• Topic Metrics (Métricas del tema
• Metrics with no dimensions (Métricas sin dimensiones
4. Para ver más detalles, elija un elemento específico. Por ejemplo, si elige Métricas de tema y, a
continuación, elige NumberOfMessagesPublished, se muestra la cantidad promedio de mensajes
de Amazon SNS publicados durante un período de un minuto a lo largo del intervalo de tiempo de 6
horas.

Establezca las alarmas de CloudWatch para las métricas de


Amazon SNS
Con CloudWatch, también puede establecer alarmas cuando se llega al umbral de una métrica. Por
ejemplo, puede establecer una alarma para la métrica NumberOfNotificationsFailed, de forma que cuando
se llegue al número especificado durante el periodo de muestra, se envíe una notificación por correo
electrónico para informarle del evento.

Para establecer alarmas utilizando la consola de CloudWatch

1. Inicie sesión en la AWS Management Console y abra la consola de CloudWatch en https://


[Link]/cloudwatch/.
2. Elija Alarms (Alarmas) y, a continuación, seleccione el botón Create Alarm (Crear alarma). Esto
lanzará el asistente Create Alarm (Crear alarma).
3. Desplácese por las métricas de Amazon SNS para localizar la métrica en la que desea colocar una
alarma. Seleccione la métrica para crear una alarma y elija Continue (Continuar).
4. Rellene los valores Name (Nombre), Description (Descripción), Threshold (Umbral) y Time (Fecha y
hora) de la métrica y elija Continue (Continuar).
5. Elija Alarm (Alarma) como estado de alarma. Si quiere que CloudWatch le envíe un correo electrónico
cuando se llegue al estado de alarma, seleccione un tema de Amazon SNS ya existente o haga clic en
Crear nuevo tema de correo electrónico. Si elige Create New Email Topic (Crear nuevo tema de correo

445
Amazon Simple Notification
Service Guía para desarrolladores
Monitoreo de los temas mediante Amazon CloudWatch

electrónico), puede definir el nombre y las direcciones de correo electrónico de un tema nuevo. Esta
lista se guardará y aparecerá en el cuadro desplegable para futuras alarmas. Elija Continue.
Note

Si utiliza Crear nuevo tema de correo electrónico para crear un tema nuevo de Amazon
SNS, deberá verificar las direcciones de correo electrónico para que puedan recibir las
notificaciones. Los correos electrónicos solo se envían cuando la alarma entra en estado de
alarma. Si este cambio en el estado de la alarma se produce antes de que se verifiquen las
direcciones de correo electrónico, no recibirá una notificación.
6. En este momento, el asistente Create Alarm (Crear alarma) le da la oportunidad de revisar la alarma
que está a punto de crear. Si necesita hacer algún cambio, puede utilizar los enlaces Edit (Editar) de la
derecha. Cuando esté satisfecho, elija Create Alarm (Crear alarma).

Para obtener más información sobre el uso de CloudWatch y las alarmas, consulte la documentación de
CloudWatch.

Métricas de Amazon SNS


Amazon SNS envía las siguientes métricas a CloudWatch.

Métrica Descripción

NumberOfMessagesPublished La cantidad de mensajes publicados en los temas de


Amazon SNS.

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum

NumberOfNotificationsDelivered La cantidad de mensajes entregados de forma correcta


desde los temas de Amazon SNS a los puntos de enlace
suscritos.

Para que un intento de entrega se lleve a cabo


correctamente, la suscripción del punto de enlace debe
aceptar el mensaje. En una suscripción, se acepta un
mensaje si a.) carece de una política de filtro o b.) su
política de filtro incluye atributos que coinciden con
los asignados al mensaje. Si la suscripción rechaza el
mensaje, el intento de entrega no se tiene en cuenta
para esta métrica.

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum

NumberOfNotificationsFailed La cantidad mensajes que Amazon SNS no pudo


entregar.

En el caso de Amazon SQS, correo electrónico, SMS


o puntos de enlace push móviles, la métrica aumenta

446
Amazon Simple Notification
Service Guía para desarrolladores
Monitoreo de los temas mediante Amazon CloudWatch

Métrica Descripción
en 1 cuando Amazon SNS deja de intentar la entrega de
mensajes. En los puntos de enlace HTTP o HTTPS, la
métrica incluye todos los intentos de entrega erróneos,
incluidos los intentos repetidos que siguen al intento
inicial. Para todos los demás puntos de enlace, el
recuento aumenta en 1 cuando no se logra entregar el
mensaje (independientemente del número de intentos).

Esta métrica no incluye los mensajes que han rechazado


las políticas de filtro de suscripciones.

Puede controlar el número de reintentos para los


puntos de enlace HTTP. Para obtener más información,
consulte Reintento de entrega de mensajes de Amazon
SNS (p. 108).

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum, Average

NumberOfNotificationsFilteredOut El número de mensajes que han rechazado las políticas


de filtro de suscripciones. Una política de filtro rechaza
un mensaje si los atributos de este no coinciden con los
atributos de la política.

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum, Average

NumberOfNotificationsFilteredOut- La cantidad de mensajes que han rechazado las políticas


InvalidAttributes de filtro de suscripciones debido a que los atributos de
los mensajes no son válidos, por ejemplo, porque el
atributo JSON tiene un formato incorrecto.

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum, Average

NumberOfNotificationsFilteredOut- El número de mensajes que han rechazado las políticas


NoMessageAttributes de filtro de suscripciones debido a que los mensajes no
tienen atributos.

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum, Average

447
Amazon Simple Notification
Service Guía para desarrolladores
Monitoreo de los temas mediante Amazon CloudWatch

Métrica Descripción

NumberOfNotificationsRedrivenToDlq Número de mensajes que se han movido a una cola de


mensajes fallidos.

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum, Average

Número de mensajes que no se pudieron mover a una


NumberOfNotificationsFailedToRedriveToDlq
cola de mensajes fallidos.

Unidades: recuento

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Sum, Average

PublishSize El tamaño de los mensajes publicados.

Unidades: bytes

Las dimensiones válidas: Application, PhoneNumber,


Platform y TopicName

Estadísticas válidas: Minimum, Maximum, Average y


Count

SMSMonthToDateSpentUSD Los cargos que se han acumulado desde el principio del


mes actual por enviar mensajes SMS.

Puede configurar una alarma para esta métrica para


saber el momento en el que los cargos acumulados en el
mes hasta la fecha se acercan a las cuotas de gasto de
los SMS mensuales de su cuenta. Cuando Amazon SNS
determina que el envío de un mensaje SMS generaría un
costo que supera esta cuota, deja de publicar mensajes
SMS en cuestión de minutos.

Para obtener información acerca de la configuración


de su cuota de gasto mensual de SMS o acerca de
cómo solicitar un aumento de la cuota de gasto en AWS,
consulte Configuración de las preferencias de mensajería
SMS (p. 218).

Unidades: USD

Dimensiones válidas: PhoneNumber

Estadísticas válidas: máximo

448
Amazon Simple Notification
Service Guía para desarrolladores
Validación de la conformidad

Métrica Descripción

SMSSuccessRate El número de entregas de mensajes SMS realizadas


correctamente.

Unidades: recuento

Dimensiones válidas: PhoneNumber

Estadísticas válidas: Sum, Average, Data Samples

Dimensiones de las métricas de Amazon SNS


Amazon Simple Notification Service envía las siguientes dimensiones a CloudWatch.

Dimensión Descripción

Application Filtra por objetos de aplicación, que representan una aplicación y el


dispositivo registrados en uno de los servicios de notificaciones push
admitidos, como APNs y FCM.

Application,Platform Filtra por objetos de aplicación y plataforma, donde los objetos de


plataforma están destinados a los servicios de notificaciones push
admitidos, como APNs y FCM.

Country Filtra por el país o la región de destino de un mensaje SMS. El país o


la región se representa mediante su código alpha-2 ISO 3166-1.

PhoneNumber Filtra el número de teléfono cuando publica SMS de forma directa en


un número de teléfono (sin tema).

Platform Filtra por objetos de plataforma para los servicios de notificaciones


push, como APNs y FCM.

TopicName Filtra por nombres de temas de Amazon SNS.

SMSType Filtra por el tipo de mensaje de un mensaje SMS. Puede ser


promotional o transactional.

Validación de la conformidad de Amazon SNS


Los auditores terceros evalúan la seguridad y la conformidad de Amazon SNS como parte de varias
programas de conformidad de AWS, incluida la Ley de Portabilidad y Responsabilidad de Seguros Médicos
(HIPAA) de los EE. UU.

Para obtener una lista de los 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ás
información, consulte Descarga de informes en AWS Artifact.

Su responsabilidad de conformidad al utilizar Amazon SNS se determina en función de la sensibilidad de


los datos, los objetivos de conformidad de su empresa y la legislación y los reglamentos correspondientes.
AWS proporciona los siguientes recursos para ayudar con la conformidad:

449
Amazon Simple Notification
Service Guía para desarrolladores
Resiliencia

• Guías de inicio rápido de seguridad y conformidad: estas guías de implementación tratan


consideraciones sobre arquitectura y ofrecen pasos para implementar los entornos de referencia
centrados en la seguridad y la conformidad en AWS.
• Documento técnico sobre arquitectura para seguridad y conformidad de HIPAA : en este documento
técnico, se describe 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 y
ubicación.
• Evaluación de recursos con reglas en la Guía para desarrolladores de AWS Config: el servicio AWS
Config evalúa en qué medida las configuraciones de sus recursos cumplen las prácticas internas, las
directrices del sector y las normativas.
• AWS Security Hub: este servicio de AWS proporciona una vista integral de su estado de seguridad en
AWS que lo ayuda a verificar la conformidad con los estándares y las prácticas recomendadas del sector
de seguridad.

Resiliencia en Amazon SNS


La infraestructura global de AWS se compone de regiones y zonas de disponibilidad de AWS. AWS
Las regiones proporcionan varias zonas de disponibilidad físicamente independientes y aisladas que
se encuentran conectadas mediante redes con un alto nivel de rendimiento y redundancia, además de
baja latencia. Con las zonas de disponibilidad, puede diseñar y utilizar aplicaciones y bases de datos
que realizan una conmutación por error automática entre las zonas sin interrupciones. Las zonas de
disponibilidad tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las infraestructuras
tradicionales de centros de datos únicos o múltiples. Para obtener más información sobre zonas de
disponibilidad y las regiones de AWS, consulte Infraestructura global de AWS.

Seguridad de la infraestructura en Amazon SNS


Al tratarse de un servicio administrado, Amazon SNS recibe la protección de los procedimientos de
seguridad de red globales de AWS descritos en el documento técnico Amazon Web Services: Información
general de procesos de seguridad.

Utilice las acciones de la API de AWS para acceder a Amazon SNS a través de la 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 con conjuntos de cifrado con
confidencialidad directa total (PFS) tales como Ephemeral Diffie-Hellman (DHE) o Elliptic Curve Ephemeral
Diffie-Hellman (ECDHE).

Debe firmar las solicitudes mediante un ID de clave de acceso y una clave de acceso secreta asociada
a una entidad principal de IAM. También puede utilizar AWS Security Token Service (AWS STS) para
generar credenciales de seguridad temporales para firmar solicitudes.

Puede llamar a estas acciones de la API desde cualquier ubicación de red, pero Amazon SNS admite
políticas de acceso basadas en recursos, que pueden incluir restricciones en función de la dirección IP
de la fuente. También puede utilizar políticas de Amazon SNS para controlar el acceso desde puntos de
enlace específicos de Amazon VPC o VPC específicas. Esto aísla con eficacia el acceso de red a una cola
de Amazon SNS determinada únicamente desde la VPC específica de la red de AWS. Para obtener más
información, consulte Restringir las publicaciones en un tema de Amazon SNS únicamente desde un punto
de enlace de la VPC específico (p. 433).

450
Amazon Simple Notification
Service Guía para desarrolladores
Prácticas recomendadas

Prácticas recomendadas de seguridad para


Amazon SNS
En AWS, se proporcionan muchas características de seguridad para Amazon SNS. Revise estas
características de seguridad en el contexto de su propia política de seguridad.
Note

Las instrucciones para estas características de seguridad se aplican a los casos de uso comunes
y a las implementaciones. Le sugerimos que revise estas prácticas recomendadas en el contexto
de su caso de uso, arquitectura y modelo de amenaza concretos.

Prácticas recomendadas preventivas


A continuación, se indican las prácticas recomendadas de seguridad preventiva para Amazon SNS.

Temas
• Asegúrese de que los temas no sean accesibles de forma pública (p. 451)
• Implementación del acceso a los privilegios mínimos (p. 451)
• Uso de roles de IAM para aplicaciones y servicios de AWS que requieren acceso a Amazon
SNS (p. 452)
• Implementación del cifrado en el servidor (p. 452)
• Aplicación del cifrado de los datos en tránsito (p. 452)
• Considere el uso de puntos de enlace de la VPC para obtener acceso a Amazon SNS (p. 453)
• Asegúrese de que las suscripciones no están configuradas para entregar en puntos de enlace HTTP
sin procesar (p. 453)

Asegúrese de que los temas no sean accesibles de forma pública


A menos que requiera explícitamente que alguien en Internet pueda leer o escribir en su tema de Amazon
SNS, debe asegurarse de que no se pueda acceder a este de manera pública (accesible para todos o para
ningún usuario 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ínimos


Cuando concede permisos, decide quién los recibe, para qué temas son los permisos y las acciones
específicas de la API que desea permitir en estos temas. La aplicación del principio de privilegios mínimos
es importante para reducir los riesgos de seguridad. También ayuda a reducir el efecto negativo de los
errores o intenciones maliciosas.

Siga el consejo de seguridad estándar de concesión del privilegio mínimo. Es decir, conceda solo los
permisos necesarios para realizar una tarea específica. Puede implementar los privilegios mínimos
mediante una combinación de políticas de seguridad relacionadas con el acceso de los usuarios.

Amazon SNS utiliza el modelo de editor-suscriptor, que requiere tres tipos de acceso a la cuenta de
usuario:

• Administradores: acceso a la creación, modificación y eliminación de temas. Los administradores


también controlan las políticas de temas.

451
Amazon Simple Notification
Service Guía para desarrolladores
Prácticas recomendadas preventivas

• Publicadores: acceso al envío de mensajes a los temas.


• Suscriptores: acceso a la suscripción a los temas.

Para obtener más información, consulte las siguientes secciones:

• Identity and Access Management en Amazon SNS (p. 416)


• Permisos de la API de Amazon SNS: referencia de recursos y acciones (p. 439)

Uso de roles de IAM para aplicaciones y servicios de AWS que


requieren acceso a Amazon SNS
Para que aplicaciones o servicios de AWS, como Amazon EC2, obtengan acceso a temas de Amazon
SNS, deben utilizar credenciales de AWS válidas en sus solicitudes a la API de AWS. Como estas
credenciales no rotan automáticamente, no debe almacenar credenciales de AWS directamente en la
aplicación ni en la instancia EC2.

Debe utilizar un rol de IAM para administrar de manera temporal credenciales para las aplicaciones o
los servicios que necesiten acceder a Amazon SNS. 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 de AWS como AWS Lambda. En vez de ello, el rol proporciona permisos temporales que las
aplicaciones pueden utilizar al realizar llamadas a otros recursos de AWS.

Para obtener más información, consulte Roles de IAM y Situaciones habituales con los roles: usuarios,
aplicaciones y servicios en la Guía del usuario de IAM.

Implementación del cifrado en el servidor


Para mitigar los problemas de fuga de datos, utilice el cifrado en reposo para cifrar sus mensajes mediante
una clave almacenada en una ubicación distinta de la ubicación en la que se almacenan los mensajes.
Con el cifrado del lado del servidor (SSE), se proporciona cifrado de datos en reposo. Amazon SNS cifra
sus datos a nivel de mensaje cuando los almacena y descifra los mensajes para usted cuando accede
a ellos. SSE utiliza claves administradas en AWS Key Management Service. Siempre que autentique su
solicitud y tenga permisos de acceso, no existe diferencia alguna entre obtener acceso a los temas cifrados
y sin cifrar.

Para obtener más información, consulte Cifrado en reposo (p. 395) y Administración de claves (p. 397).

Aplicación del cifrado de los datos en tránsito


Es posible, pero no se recomienda, publicar mensajes que no están cifrados durante el tránsito mediante
HTTP. Sin embargo, no puede usar HTTP al publicar en un tema de SNS cifrado.

AWS recomienda que utilice HTTPS en lugar de HTTP. Cuando utiliza HTTPS, los mensajes se cifran de
manera automática durante el tránsito, incluso si el tema de SNS no está cifrado. Sin HTTPS, un atacante
basado en red puede espiar el tráfico de la red o manipularlo, con un ataque como MTM (man-in-the-
middle).

Para imponer solo conexiones cifradas a través de HTTPS, agregue la condición aws:SecureTransport
en la política de IAM adjunta a temas de SNS no cifrados. De esta manera, los publicadores utilizan
HTTPS en lugar de HTTP. Puede utilizar la política de ejemplo siguiente como guía:

{
"Id": "ExamplePolicy",
"Version": "2012-10-17",
"Statement": [

452
Amazon Simple Notification
Service Guía para desarrolladores
Prácticas recomendadas preventivas

{
"Sid": "AllowPublishThroughSSLOnly",
"Action": "SNS:Publish",
"Effect": "Deny",
"Resource": [
"arn:aws:sns:us-east-1:1234567890:test-topic"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
},
"Principal": "*"
}
]
}

Considere el uso de puntos de enlace de la VPC para obtener


acceso a Amazon SNS
Si tiene temas con los que debe poder interactuar pero que no deben estar expuestos a Internet, utilice los
puntos 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 temas para controlar el acceso a los temas desde determinados puntos de
enlace de Amazon VPC específicos o desde VPC específicas.

Los puntos de enlace de la VPC de Amazon SNS brindan dos maneras de controlar el acceso a los
mensajes:

• Puede controlar qué solicitudes, usuarios o grupos obtienen acceso a través de un punto de enlace de la
VPC específico.
• Puede controlar qué VPC o puntos de enlace de la VPC tienen acceso a su tema con una política de
temas.

Para obtener más información, consulte Creación del punto de enlace (p. 405) y Creación de una política
de punto de enlace de la VPC para Amazon SNS (p. 406).

Asegúrese de que las suscripciones no están configuradas para


entregar en puntos de enlace HTTP sin procesar
Evite configurar suscripciones para entregarlas a puntos de enlace HTTP sin procesar. Siempre tiene
suscripciones que se entregan a un nombre de dominio de punto de enlace. Por ejemplo, una suscripción
configurada para entregar a un punto de enlace [Link] debe cambiarse a http://
[Link]/my-path.

453
Amazon Simple Notification
Service Guía para desarrolladores
Solución de problemas de temas mediante X-Ray

Solución de problemas de temas de


Amazon SNS
En esta sección, se proporciona información acerca de la solución de problemas de temas de Amazon
SNS.

Solución de problemas de temas de Amazon SNS


mediante AWS X-Ray
AWS X-Ray recopila datos sobre las solicitudes que atiende su aplicación y le permite ver y filtrar datos
para identificar posibles problemas y oportunidades de optimización. En cada solicitud rastreada enviada
a su aplicación, puede ver información detallada sobre la solicitud, la respuesta y las llamadas que su
aplicación realiza a recursos de AWS, microservicios, bases de datos y API web de HTTP posteriores.

Puede utilizar X-Ray con Amazon SNS para rastrear y analizar los mensajes que pasan por su aplicación.
Puede usar la AWS Management Console para ver el mapa de conexiones entre Amazon SNS y otros
servicios que utiliza su aplicación. También puede utilizar la consola para ver métricas como la latencia
media y las tasas de errores. Para obtener más información, consulte Amazon SNS y AWS X-Ray en la
Guía para desarrolladores de AWS X-Ray.

454
Amazon Simple Notification
Service Guía para desarrolladores

Historial de revisión
En la siguiente tabla, se describen los cambios recientes en la Guía para desarrolladores de Amazon
Simple Notification Service.

update-history-change update-history-description update-history-date

Los nuevos remitentes de Con el entorno de pruebas de 1 de junio de 2021


mensajes SMS se colocan en el SMS, evitará fraudes y abusos,
entorno de pruebas de SMS y protegerá su reputación como
remitente. Mientras su cuenta
de AWS se encuentra en el
entorno de pruebas de SMS,
puede enviar mensajes SMS solo
a números de teléfono de destino
verificados.

Nuevos atributos para enviar Dos nuevos atributos, ID de la 22 de abril de 2021


mensajes SMS a destinatarios de identidad e ID de plantilla, son
la India necesarios para enviar mensajes
SMS a destinatarios de la India.

Actualizaciones de operadores Se dispone de nuevo operador, 7 de abril de 2021


de filtrado de mensajes cidr, para las subredes y
direcciones IP de fuente de
mensajes coincidentes. Ahora
también puede comprobar
la ausencia de una clave de
atributo y usar un prefijo con el
operador de anything-but
para hacer coincidir las cadenas
de atributos.

Asistencia final para códigos A partir del 1 de junio de 16 de febrero de 2021
largos P2P a destinos de EE. UU 2021, los proveedores
de telecomunicaciones
estadounidenses ya no admiten
el uso de códigos largos de
persona a persona (P2P) para
las comunicaciones de aplicación
a persona (A2P) a destinos de
Estados Unidos. En su lugar,
puede usar códigos cortos,
números gratuitos o un nuevo
tipo de número de fuente llamado
10DLC.

Asistencia de métricas de La métrica de 1 minuto de 28 de enero de 2021


Amazon CloudWatch de 1 minuto CloudWatch de Amazon SNS
ya está disponible en todas las
regiones de AWS.

Asistencia de los puntos de Puede suscribir los flujos 12 de enero de 2021


enlace de Amazon Kinesis Data de entrega de Kinesis Data
Firehose Firehose a los temas SNS. De

455
Amazon Simple Notification
Service Guía para desarrolladores

esta manera, puede enviar


notificaciones a puntos de
conexión de archivo y análisis,
como buckets de Amazon Simple
Storage Service (Amazon S3),
tablas de Amazon Redshift,
Amazon OpenSearch Service
(OpenSearch Service) y otros.

Se dispone de números de Puede utilizar números de origen 23 de octubre de 2020


origen al enviar mensajes de texto
(SMS).

Asistencia para temas de Para integrar aplicaciones 22 de octubre de 2020


Amazon SNS FIFO distribuidas que requieren
coherencia de datos en tiempo
casi real, puede utilizar temas de
primera entrada, primera salida
(FIFO) de Amazon SNS con
colas FIFO de Amazon SQS.

Se dispone de la biblioteca de Puede utilizar esta biblioteca para 25 de agosto de 2020


clientes extendidos de Amazon publicar mensajes de Amazon
SNS para Java SNS grandes.

Se dispone de SSE en las Se dispone del cifrado del lado 20 de enero de 2020
regiones de China del servidor (SSE) de Amazon
SNS en las regiones de China.

Asistencia con el uso de DLQ Para capturar los mensajes que 14 de noviembre de 2019
para capturar mensajes que no no se pueden entregar, puede
se pueden entregar utilizar una cola de mensajes
fallidos (DLQ) de Amazon SQS
con una suscripción a Amazon
SNS.

Asistencia con la especificación Puede especificar un valor 18 de octubre de 2019


de valores de encabezado APNs de encabezado de APNs
personalizados personalizado.

Asistencia para el campo de Puede utilizar el campo de 10 de septiembre de 2019


encabezado 'apns-push-type' encabezado apns-push-type
de APNs para las notificaciones móviles
enviadas a través de APNs.

Asistencia para la solución de Puede utilizar X-Ray para 24 de julio de 2019


problemas de temas mediante solucionar los problemas de los
AWS X-Ray mensajes que pasan por los
temas SNS.

Soporte para la coincidencia de Para verificar si un mensaje 5 de julio de 2019


claves de atributos mediante el entrante tiene un atributo cuya
operador “exists” clave figura en la política de
filtrado, puede utilizar el operador
de exists.

456
Amazon Simple Notification
Service Guía para desarrolladores

Soporta la coincidencia Además de varias cadenas, 5 de julio de 2019


“anything-but” de varios valores Amazon SNS permite la
numéricos coincidencia “anything-but” de
varios valores numéricos.

Las notas de la versión de Siga el título de esta página 22 de junio de 2019


Amazon SNS están disponibles (Historial de documentos) y elija
como una fuente RSS RSS.

457
Amazon Simple Notification
Service Guía para desarrolladores

AWSGlosario
Contiene la más recienteAWSterminología, consulte laAWSGlosarioen laAWSReferencia general de.

458

También podría gustarte