View a markdown version of this page

Création d'une rubrique Amazon SNS - Amazon Simple Notification Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Création d'une rubrique Amazon SNS

Une rubrique Amazon SNS est un point d'accès logique qui joue le rôle de canal de communication. Une rubrique vous permet de regrouper plusieurs points de terminaison (tels qu' AWS Lambda Amazon SQS ou une adresse e-mail). HTTP/S

Pour diffuser les messages d'un système producteur de messages (par exemple, un site web d'e-commerce) qui utilise plusieurs autres services ayant besoin de ses messages (par exemple, les systèmes d'enregistrement et de distribution de commandes), vous pouvez créer une rubrique pour votre système producteur.

La tâche Amazon SNS la plus importante et la plus courante consiste à créer une rubrique. Cette page montre comment utiliser le Console de gestion AWS AWS SDK pour Java, le et le AWS SDK pour .NET pour créer une rubrique.

Lors de la création, vous choisissez un type de rubrique (standard ou FIFO) et vous nommez la rubrique. Après avoir créé une rubrique, vous ne pouvez pas modifier son type ou son nom. Tous les autres choix de configuration sont facultatifs lors de la création d'une rubrique et vous pouvez les modifier ultérieurement.

Important

N'ajoutez pas de données d'identification personnelle (PII) ou d'autres données confidentielles ou sensibles dans les noms de rubriques. Les noms des rubriques sont accessibles aux autres Amazon Web Services, y compris CloudWatch aux journaux. Les noms de rubriques ne sont pas destinées à être utilisées pour des données privées ou sensibles.

Pour créer un sujet à l'aide du Console de gestion AWS

La création d'un sujet dans Amazon SNS jette les bases de la distribution des messages, en vous permettant de publier des messages qui peuvent être diffusés à plusieurs abonnés. Cette étape est essentielle pour configurer le type, les paramètres de chiffrement et les politiques d'accès de la rubrique, afin de garantir que la rubrique répond aux exigences opérationnelles, de conformité et de sécurité de l'organisation.

  1. Connectez-vous à la console Amazon SNS.

  2. Effectuez l’une des actions suivantes :

    • Si aucune rubrique n'a jamais été créée dans votre rubrique Compte AWS précédente, lisez la description d'Amazon SNS sur la page d'accueil.

    • Si des sujets ont déjà été créés sous votre Compte AWS nom, dans le panneau de navigation, sélectionnez Rubriques.

  3. Sur la page Rubriques, choisissez Créer une rubrique.

  4. Sur la page Créer une rubrique, dans la section Détails, procédez comme suit :

    1. Pour Type, choisissez un type de rubrique (Standard ou FIFO).

    2. Entrez un Nom pour la rubrique. Pour une rubrique FIFO, ajoutez .fifo à la fin du nom.

    3. (Facultatif) Entrez un Nom d'affichage pour votre rubrique.

      Important

      Lorsque vous vous abonnez à un terminal de messagerie, le nombre de caractères combiné pour le nom d'affichage de la rubrique Amazon SNS et l'adresse e-mail d'envoi (par exemple, no-reply@sns.amazonaws.com) ne doit pas dépasser 320 UTF-8 caractères. Vous pouvez utiliser un outil d'encodage tiers pour vérifier la longueur de l'adresse d'envoi avant de configurer un nom d'affichage pour votre rubrique Amazon SNS.

      Note

      Pour les abonnements par e-mail et email-json, le nom d'affichage de la rubrique est utilisé comme nom d'expéditeur uniquement pour les messages de notification réguliers. Les e-mails de confirmation d'abonnement et de désabonnement utilisent toujours « AWS  Notifications » comme nom d'expéditeur, quel que soit le paramètre de nom d'affichage de la rubrique.

    4. (Facultatif) Pour une rubrique FIFO, vous pouvez choisir déduplication des messages basée sur le contenu pour activer la déduplication des messages par défaut. Pour plus d’informations, consultez Déduplication des messages Amazon SNS pour les rubriques FIFO.

  5. (Facultatif) Pour accepter des messages supérieurs à 256 Ko, définissez la taille maximale des messages sur une valeur maximale de 1 024 Ko. Pour plus d’informations, consultez Publier des messages volumineux avec Amazon SNS.

  6. (Facultatif) Développez la section Chiffrement et effectuez les opérations suivantes. Pour plus d’informations, consultez Sécurisation des données Amazon SNS grâce au chiffrement côté serveur.

    1. Choisissez Activer le chiffrement.

    2. Spécifiez la AWS KMS clé. Pour plus d’informations, consultez Termes clés.

      Pour chaque type de KMS, les champs Description, Account (Compte) et KMS ARN (ARN KMS) s'affichent.

      Important

      Si vous n'êtes pas le propriétaire de la clé KMS, ou si vous vous connectez avec un compte n'ayant pas les autorisations kms:ListAliases et kms:DescribeKey, vous ne pouvez pas afficher les informations relatives à la KMS sur la console Amazon SNS.

      Demandez au propriétaire de la KMS de vous accorder ces autorisations. Pour plus d'informations, consultez Autorisations d'API AWS KMS  : référence des actions et ressources dans le Guide du développeur AWS Key Management Service .

      • Le KMS AWS géré pour Amazon SNS (par défaut) alias/aws /sns est sélectionné par défaut.

        Note

        Gardez à l’esprit les points suivants :

        • La première fois que vous utilisez le Console de gestion AWS pour spécifier le KMS AWS géré pour Amazon SNS pour une rubrique, vous AWS KMS créez le KMS AWS géré pour Amazon SNS.

        • Sinon, la première fois que vous utilisez l'Publishaction sur un sujet avec SSE activé, vous AWS KMS créez le KMS AWS géré pour Amazon SNS.

      • Pour utiliser un KMS personnalisé depuis votre AWS compte, choisissez le champ clé KMS, puis choisissez le KMS personnalisé dans la liste.

        Note

        Pour obtenir des instructions pour la création de KMS personnalisées, consultez la section Création de clés dans le Guide du développeur AWS Key Management Service .

      • Pour utiliser un ARN KMS personnalisé depuis votre AWS compte ou depuis un autre AWS compte, saisissez-le dans le champ clé KMS.

  7. (Facultatif) Par défaut, seul le propriétaire de la rubrique peut publier dans la rubrique ou s'abonner à la rubrique. Pour configurer des autorisations d'accès supplémentaires, développez la section Politique d'accès. Pour plus d’informations, consultez Gestion des identités et des accès dans Amazon SNS et Cas d'exemple pour le contrôle d'accès Amazon SNS.

    Note

    Lorsque vous créez une rubrique à l'aide de la console, la politique par défaut utilise la clé de condition aws:SourceOwner. Cette clé est similaire à aws:SourceAccount.

  8. (Facultatif) Pour configurer la façon dont Amazon SNS réessaie les tentatives infructueuses de remise des messages, développez la section Politique de nouvelle tentative de remise ()HTTP/S. Pour plus d’informations, consultez Nouvelle tentative de distribution des messages Amazon SNS.

  9. (Facultatif) Pour configurer la manière dont Amazon SNS enregistre la remise des messages CloudWatch, développez la section Journalisation de l'état de livraison. Pour plus d’informations, consultez Statut de distribution de message Amazon SNS.

  10. (Facultatif) Pour ajouter des balises de métadonnées à la rubrique, développez la section Balises, saisissez une clé et une valeur (facultatif) et choisissez Ajouter une balise. Pour plus d’informations, consultez Identification des rubriques Amazon SNS.

  11. Choisissez Créer une rubrique.

    Le sujet est créé et la MyTopic page s'affiche.

    Le nom, l'ARN, (facultatif) le nom d'affichage et l'ID de AWS compte du propriétaire du sujet sont affichés dans la section Détails.

  12. Copiez l'ARN de rubrique dans le Presse-papiers, par exemple :

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

Pour créer un sujet à l'aide d'un AWS Kit SDK

Pour utiliser un AWS SDK, vous devez le configurer à l'aide de vos informations d'identification. Pour plus d'informations, consultez Les fichiers de configuration et d'informations d'identification partagés dans le AWS Guide de référence des kits SDK et des outils.

Les exemples de code suivants illustrent comment utiliser CreateTopic.

.NET
SDK pour .NET
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

Créez une rubrique avec un nom spécifique.

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. /// </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; } }

Créez une nouvelle rubrique avec un nom et des attributs FIFO et de déduplication spécifiques.

/// <summary> /// Create a new topic with a name and specific FIFO and de-duplication attributes. /// </summary> /// <param name="topicName">The name for the topic.</param> /// <param name="useFifoTopic">True to use a FIFO topic.</param> /// <param name="useContentBasedDeduplication">True to use content-based de-duplication.</param> /// <returns>The ARN of the new topic.</returns> public async Task<string> CreateTopicWithName(string topicName, bool useFifoTopic, bool useContentBasedDeduplication) { var createTopicRequest = new CreateTopicRequest() { Name = topicName, }; if (useFifoTopic) { // Update the name if it is not correct for a FIFO topic. if (!topicName.EndsWith(".fifo")) { createTopicRequest.Name = topicName + ".fifo"; } // Add the attributes from the method parameters. createTopicRequest.Attributes = new Dictionary<string, string> { { "FifoTopic", "true" } }; if (useContentBasedDeduplication) { createTopicRequest.Attributes.Add("ContentBasedDeduplication", "true"); } } var createResponse = await _amazonSNSClient.CreateTopicAsync(createTopicRequest); return createResponse.TopicArn; }
  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence de AWS SDK pour .NET l'API.

C++
SDK pour C++
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

//! Create an Amazon Simple Notification Service (Amazon SNS) topic. /*! \param topicName: An Amazon SNS topic name. \param topicARNResult: String to return the Amazon Resource Name (ARN) for the topic. \param clientConfiguration: AWS client configuration. \return bool: Function succeeded. */ bool AwsDoc::SNS::createTopic(const Aws::String &topicName, Aws::String &topicARNResult, const Aws::Client::ClientConfiguration &clientConfiguration) { Aws::SNS::SNSClient snsClient(clientConfiguration); Aws::SNS::Model::CreateTopicRequest request; request.SetName(topicName); const Aws::SNS::Model::CreateTopicOutcome outcome = snsClient.CreateTopic(request); if (outcome.IsSuccess()) { topicARNResult = outcome.GetResult().GetTopicArn(); std::cout << "Successfully created an Amazon SNS topic " << topicName << " with topic ARN '" << topicARNResult << "'." << std::endl; } else { std::cerr << "Error creating topic " << topicName << ":" << outcome.GetError().GetMessage() << std::endl; topicARNResult.clear(); } return outcome.IsSuccess(); }
  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence de AWS SDK pour C++ l'API.

CLI
AWS CLI

Pour créer une rubrique SNS

L’exemple create-topic suivant crée une rubrique SNS nommée my-topic.

aws sns create-topic \ --name my-topic

Sortie :

{ "ResponseMetadata": { "RequestId": "1469e8d7-1642-564e-b85d-a19b4b341f83" }, "TopicArn": "arn:aws:sns:us-west-2:123456789012:my-topic" }

Pour plus d'informations, consultez la section Utilisation de l'interface de ligne de AWS commande avec Amazon SQS et Amazon SNS dans le Guide de l'utilisateur de l'interface de ligne de AWS commande.

  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence des AWS CLI commandes.

Go
Kit SDK pour Go V2
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

import ( "context" "encoding/json" "log" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/sns" "github.com/aws/aws-sdk-go-v2/service/sns/types" ) // SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions // used in the examples. type SnsActions struct { SnsClient *sns.Client } // CreateTopic creates an Amazon SNS topic with the specified name. You can optionally // specify that the topic is created as a FIFO topic and whether it uses content-based // deduplication instead of ID-based deduplication. func (actor SnsActions) CreateTopic(ctx context.Context, topicName string, isFifoTopic bool, contentBasedDeduplication bool) (string, error) { var topicArn string topicAttributes := map[string]string{} if isFifoTopic { topicAttributes["FifoTopic"] = "true" } if contentBasedDeduplication { topicAttributes["ContentBasedDeduplication"] = "true" } topic, err := actor.SnsClient.CreateTopic(ctx, &sns.CreateTopicInput{ Name: aws.String(topicName), Attributes: topicAttributes, }) if err != nil { log.Printf("Couldn't create topic %v. Here's why: %v\n", topicName, err) } else { topicArn = *topic.TopicArn } return topicArn, err }
  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence de AWS SDK pour Go l'API.

Java
SDK pour Java 2.x
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.CreateTopicRequest; import software.amazon.awssdk.services.sns.model.CreateTopicResponse; import software.amazon.awssdk.services.sns.model.SnsException; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class CreateTopic { public static void main(String[] args) { final String usage = """ Usage: <topicName> Where: topicName - The name of the topic to create (for example, mytopic). """; if (args.length != 1) { System.out.println(usage); System.exit(1); } String topicName = args[0]; System.out.println("Creating a topic with name: " + topicName); SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); String arnVal = createSNSTopic(snsClient, topicName); System.out.println("The topic ARN is" + arnVal); snsClient.close(); } public static String createSNSTopic(SnsClient snsClient, String topicName) { CreateTopicResponse result; 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 ""; } }
  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence de AWS SDK for Java 2.x l'API.

JavaScript
SDK pour JavaScript (v3)
Note

Il y en a plus à ce sujet GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le référentiel d’exemples de code AWS.

Créez le client dans un module séparé et exportez-le.

import { SNSClient } from "@aws-sdk/client-sns"; // The AWS Region can be provided here using the `region` property. If you leave it blank // the SDK will default to the region set in your AWS config. export const snsClient = new SNSClient({});

Importez le kit SDK et les modules client et appelez l’API.

import { CreateTopicCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; /** * @param {string} topicName - The name of the topic to create. */ export const createTopic = async (topicName = "TOPIC_NAME") => { const response = await snsClient.send( new CreateTopicCommand({ Name: topicName }), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '087b8ad2-4593-50c4-a496-d7e90b82cf3e', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // }, // TopicArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:TOPIC_NAME' // } return response; };
Kotlin
SDK pour Kotlin
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

suspend fun createSNSTopic(topicName: String): String { val request = CreateTopicRequest { name = topicName } SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient -> val result = snsClient.createTopic(request) return result.topicArn.toString() } }
  • Pour plus de détails sur l'API, consultez CreateTopic le AWS SDK pour la référence de l'API Kotlin.

PHP
Kit SDK pour PHP
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient; /** * 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
Kit SDK for Python (Boto3)
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

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
class SnsWrapper: """Wrapper class for managing Amazon SNS operations.""" def __init__(self, sns_client: Any) -> None: """ Initialize the SnsWrapper. :param sns_client: A Boto3 Amazon SNS client. """ self.sns_client = sns_client @classmethod def from_client(cls) -> 'SnsWrapper': """ Create an SnsWrapper instance using a default boto3 client. :return: An instance of this class. """ sns_client = boto3.client('sns') return cls(sns_client) def create_topic( self, topic_name: str, is_fifo: bool = False, content_based_deduplication: bool = False ) -> str: """ Create an SNS topic. :param topic_name: The name of the topic to create. :param is_fifo: Whether to create a FIFO topic. :param content_based_deduplication: Whether to use content-based deduplication for FIFO topics. :return: The ARN of the created topic. :raises ClientError: If the topic creation fails. """ try: # Add .fifo suffix for FIFO topics if is_fifo and not topic_name.endswith('.fifo'): topic_name += '.fifo' attributes = {} if is_fifo: attributes['FifoTopic'] = 'true' if content_based_deduplication: attributes['ContentBasedDeduplication'] = 'true' response = self.sns_client.create_topic( Name=topic_name, Attributes=attributes ) topic_arn = response['TopicArn'] logger.info(f"Created topic: {topic_name} with ARN: {topic_arn}") return topic_arn except ClientError as e: error_code = e.response.get('Error', {}).get('Code', 'Unknown') logger.error(f"Error creating topic {topic_name}: {error_code} - {e}") raise
  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence de l'API AWS SDK pour Python (Boto3).

Ruby
Kit SDK pour Ruby
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

# This class demonstrates how to create an Amazon Simple Notification Service (SNS) topic. class SNSTopicCreator # Initializes an SNS client. # # Utilizes the default AWS configuration for region and credentials. def initialize @sns_client = Aws::SNS::Client.new end # Attempts to create an SNS topic with the specified name. # # @param topic_name [String] The name of the SNS topic to create. # @return [Boolean] true if the topic was successfully created, false otherwise. def create_topic(topic_name) @sns_client.create_topic(name: topic_name) puts "The topic '#{topic_name}' was successfully created." true rescue Aws::SNS::Errors::ServiceError => e # Handles SNS service errors gracefully. puts "Error while creating the topic named '#{topic_name}': #{e.message}" false end end # Example usage: if $PROGRAM_NAME == __FILE__ topic_name = 'YourTopicName' # Replace with your topic name sns_topic_creator = SNSTopicCreator.new puts "Creating the topic '#{topic_name}'..." unless sns_topic_creator.create_topic(topic_name) puts 'The topic was not created. Stopping program.' exit 1 end end
Rust
SDK pour Rust
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

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(()) }
  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence de l'API AWS SDK pour Rust.

SAP ABAP
Kit SDK pour SAP ABAP
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

TRY. oo_result = lo_sns->createtopic( iv_name = iv_topic_name ). " oo_result is returned for testing purposes. " MESSAGE 'SNS topic created' TYPE 'I'. CATCH /aws1/cx_snstopiclimitexcdex. MESSAGE 'Unable to create more topics. You have reached the maximum number of topics allowed.' TYPE 'E'. ENDTRY.
  • Pour plus de détails sur l'API, consultez CreateTopic le AWS SDK pour la référence de l'API SAP ABAP.

Swift
Kit SDK pour Swift
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

import AWSSNS let config = try await SNSClient.SNSClientConfiguration(region: region) let snsClient = SNSClient(config: config) let output = try await snsClient.createTopic( input: CreateTopicInput(name: name) ) guard let arn = output.topicArn else { print("No topic ARN returned by Amazon SNS.") return }
  • Pour plus de détails sur l'API, consultez CreateTopic la section Référence de l'API AWS SDK for Swift.