Publication de messages Amazon SNS - Amazon Simple Notification Service

Publication de messages Amazon SNS

Une fois que vous avez créé une rubrique Amazon SNS et y avez abonné un point de terminaison, vous pouvez y publier des messages. Lorsqu'un message est publié, Amazon SNS tente de le remettre aux points de terminaison abonnés.

Pour publier des messages dans une rubrique Amazon SNS à l'aide de la AWS Management Console

  1. Connectez-vous à la console Amazon SNS.

  2. Dans le panneau de navigation de gauche, choisissez Rubriques.

  3. Sur la page Rubriques, sélectionnez une rubrique, puis choisissez Publier un message.

    La console ouvre la fenêtre Publier un message sur une rubrique.

  4. Dans la section Détails de base, procédez comme suit :

    1. (Facultatif) Saisissez un message dans le champ Objet.

    2. Pour une rubrique FIFO, saisissez une valeur d'ID de groupe de messages. Les messages du même groupe de messages sont remis dans l'ordre dans lequel ils sont publiés.

    3. Pour une rubrique FIFO, saisissez un ID de déduplication de message. Cet ID est facultatif si vous avez activé l'option Déduplication des messages basée sur le contenu pour la rubrique.

    4. (Facultatif) Pour notifications push mobile, saisissez une valeur de Durée de vie (TTL) en secondes. Il s'agit du temps laissé à un service de notification push – tel qu'Apple Push Notification Service (APNs) ou Firebase Cloud Messaging (FCM) – pour diffuser le message au point de terminaison.

  5. Dans la section Message body (Corps du messages), effectuez l'une des actions suivantes :

    1. Choisissez Charge utile identique pour tous les protocoles de livraison, puis saisissez un message.

    2. Choisissez Charge utile personnalisée pour chaque protocole de distribution, puis utilisez un objet JSON pour définir le message à envoyer à chaque protocole.

      Pour plus d'informations, consultez Publication avec une charge utile spécifique à la plateforme.

  6. Dans la section Attributs du message, ajoutez tous les attributs que vous souhaitez qu'Amazon SNS associe à l'attribut d'abonnement FilterPolicy afin de déterminer si le point de terminaison abonné est intéressé par le message publié.

    1. Pour Type, choisissez un type d'attribut, tel que String.Array.

      Note

      Pour le type d'attribut String.Array, placez le tableau entre crochets ([]). Dans le tableau, placez les chaînes entre guillemets. Vous n'avez pas besoin de guillemets pour les chiffres ou les mots-clés true, false et null.

    2. Saisissez un attribut Nom, comme customer_interests.

    3. Saisissez un attribut Valeur, comme ["soccer", "rugby", "hockey"].

    Si le type d'attribut est String, String.Array ou Number, Amazon SNS évalue l'attribut de message par rapport à une politique de filtrage de l'abonnement, le cas échéant, avant d'envoyer le message à cet abonnement.

    Pour plus d'informations, consultez Attributs de message Amazon SNS.

  7. Choisissez Publier le message.

    Le message est publié dans la rubrique et la console ouvre la page Détails de la rubrique.

Pour publier un message dans une rubrique à l'aide d'un kit SDK AWS

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

Les exemples de code suivants montrent comment publier des messages dans une rubrique Amazon SNS.

.NET
AWS SDK for .NET
Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

  • Pour de plus amples informations sur l’API, consultez Publier dans AWS SDK for .NET Référence de l’API.

C++
Kit SDK pour C++
Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

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 = sns.Publish(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);
  • Pour de plus amples informations sur l’API, consultez Publier dans AWS SDK for C++ Référence de l’API.

Go
Kit SDK for Go V2
Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

  • Pour de plus amples informations sur l’API, consultez Publier dans AWS SDK for Go Référence de l’API.

Java
Kit SDK pour Java 2.x
Astuce

Pour découvrir comment configurer et exécuter cet exemple, consultez GitHub.

public static void pubTopic(SnsClient snsClient, String message, String topicArn) { try { PublishRequest request = PublishRequest.builder() .message(message) .topicArn(topicArn) .build(); PublishResponse result = snsClient.publish(request); System.out.println(result.messageId() + " Message sent. Status is " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }
  • Pour de plus amples informations sur l’API, consultez Publier dans AWS SDK for Java 2.x Référence de l’API.

JavaScript
Kit SDK pour JavaScript V3
Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

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

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

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

// Import required AWS SDK clients and commands for Node.js import {PublishCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters var params = { Message: "MESSAGE_TEXT", // MESSAGE_TEXT TopicArn: "TOPIC_ARN", //TOPIC_ARN }; const run = async () => { try { const data = await snsClient.send(new PublishCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();
Kotlin
Kit SDK pour Kotlin
Note

Ceci est une documentation préliminaire pour une fonctionnalité en version de prévisualisation. Elle est susceptible d’être modifiée.

Astuce

Pour découvrir comment configurer et exécuter cet exemple, consultez GitHub.

suspend fun pubTopic(topicArnVal: String, messageVal: String) { val request = PublishRequest { message = messageVal topicArn = topicArnVal } SnsClient { region = "us-east-1" }.use { snsClient -> val result = snsClient.publish(request) println("${result.messageId} message sent.") } }
  • Pour plus d’informations sur l’API, consultez la section Publier de la référence du kit SDK AWS pour l’API Kotlin.

PHP
Kit SDK pour PHP
Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

require 'vendor/autoload.php'; 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: * 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' ]); $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()); }
Python
Kit SDK pour Python (Boto3)
Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

Publiez un message avec des attributs afin qu’un abonnement puisse filtrer en fonction des attributs.

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 attributes.items(): if isinstance(value, str): att_dict[key] = {'DataType': 'String', 'StringValue': value} elif isinstance(value, bytes): att_dict[key] = {'DataType': 'Binary', 'BinaryValue': value} response = topic.publish(Message=message, MessageAttributes=att_dict) message_id = response['MessageId'] logger.info( "Published message with attributes %s to topic %s.", attributes, topic.arn) except ClientError: logger.exception("Couldn't publish message to topic %s.", topic.arn) raise else: return message_id

Publiez un message qui prend différentes formes en fonction du protocole de l’abonné.

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. """ try: message = { 'default': default_message, 'sms': sms_message, 'email': email_message } response = topic.publish( Message=json.dumps(message), Subject=subject, MessageStructure='json') message_id = response['MessageId'] logger.info("Published multi-format message to topic %s.", topic.arn) except ClientError: logger.exception("Couldn't publish message to topic %s.", topic.arn) raise else: return message_id
  • Pour de plus amples informations sur l’API, consultez Publier dans AWS Référence de l’API du kit SDK for Python (Boto3).

Ruby
Kit SDK pour Ruby
Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

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: #{e.message}" end def run_me topic_arn = 'SNS_TOPIC_ARN' region = 'REGION' message = 'MESSAGE' # The text of the message to send. sns_client = Aws::SNS::Client.new(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__
Rust
Kit SDK pour Rust
Note

Cette documentation concerne un kit SDK en prévisualisation préliminaire. Le kit SDK est susceptible d’être modifié et ne doit pas être utilisé en production.

Astuce

Pour découvrir les étapes de configuration et d’exécution de cet exemple, consultez GitHub.

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(()) }
  • Pour de plus amples informations sur l’API, consultez Publier dans AWS Référence du kit SDK pour l’API Rust.