Creación de un tema de Amazon SNS - Amazon Simple Notification Service

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.

importante

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.

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.

    • 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:

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

    2. Ingrese un nombre para el nuevo tema. En el caso de un tema FIFO, agregue .fifo al final del nombre.

    3. (Opcional) Ingrese un nombre para mostrar para el tema.

    4. (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 .

  5. (Opcional) Expanda la sección Encryption (Cifrado) y haga lo siguiente. Para obtener más información, consulte Cifrado en reposo .

    1. Elija Enable encryption (Habilitar cifrado).

    2. Especifique la clave de AWS KMS. Para obtener más información, consulte Términos clave .

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

      importante

      Si no es el propietario de la KMS 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 KMS en la consola de Amazon SNS.

      Pida al propietario de la KMS 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 KMS administrada por AWS en Amazon SNS alias/aws/sns (predeterminado).

        nota

        Tenga en cuenta lo siguiente:

        • La primera vez que use la AWS Management Console con el fin de especificar la KMS administrada por AWS en Amazon SNS para un tema, AWS KMS crea la KMS 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 KMS administrada por AWS en Amazon SNS.

      • Para usar una KMS personalizada de la cuenta de AWS, elija el campo AWS KMS key (clave ) y, a continuación, elija la KMS personalizada de la lista.

        nota

        Para obtener instrucciones acerca de cómo crear KMS 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 la cuenta de AWS o desde otra cuenta de AWS, ingréselo en el campo AWS KMS key (clave de AWS KMS).

  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 y Ejemplos de casos de control de acceso con Amazon SNS.

    nota

    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 .

  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 .

  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 .

  10. Elija Create new topic (Crear nuevo tema).

    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
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

using System; using System.Threading.Tasks; using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; /// <summary> /// This example shows how to use Amazon Simple Notification Service /// (Amazon SNS) to add a new Amazon SNS topic. The example was created /// using the AWS SDK for .NET version 3.7 and .NET Core 5.0. /// </summary> public class CreateSNSTopic { public static async Task Main() { string topicName = "ExampleSNSTopic"; IAmazonSimpleNotificationService client = new AmazonSimpleNotificationServiceClient(); var topicArn = await CreateSNSTopicAsync(client, topicName); Console.WriteLine($"New topic ARN: {topicArn}"); } /// <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 client.CreateTopicAsync(request); return response.TopicArn; } }
  • Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK for .NET.

C++
SDK para C++
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

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 = sns.CreateTopic(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);
  • 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
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte 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
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

public static String createSNSTopic(SnsClient snsClient, String topicName ) { CreateTopicResponse result = null; try { CreateTopicRequest request = CreateTopicRequest.builder() .name(topicName) .build(); result = snsClient.createTopic(request); return result.topicArn(); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
  • 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
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

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 Node.js import {CreateTopicCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters const params = { Name: "TOPIC_NAME" }; //TOPIC_NAME const run = async () => { try { const data = await snsClient.send(new CreateTopicCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();
Kotlin
SDK para Kotlin
nota

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

sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

suspend fun createSNSTopic(topicName: String): String { val request = CreateTopicRequest { name = topicName } SnsClient { region = "us-east-1" }.use { snsClient -> val result = snsClient.createTopic(request) return result.topicArn.toString() } }
  • Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API de AWS SDK para Kotlin.

PHP
SDK para PHP
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

require 'vendor/autoload.php'; 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: * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/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()); }
Python
SDK para Python (Boto3)
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

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) logger.info("Created topic %s with ARN %s.", name, topic.arn) except ClientError: logger.exception("Couldn't create topic %s.", name) raise else: return topic
  • 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
sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

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}': #{e.message}" end # Full example call: def run_me topic_name = 'TOPIC_NAME' region = 'REGION' sns_client = Aws::SNS::Client.new(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__
Rust
SDK para Rust
nota

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.

sugerencia

Para obtener información sobre cómo configurar y ejecutar este ejemplo, consulte GitHub.

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(()) }
  • Para ver los detalles de la API, consulte CreateTopic en la Referencia de la API del SDK para Rust de AWS.