Statut de distribution de message 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.

Statut de distribution de message Amazon SNS

Amazon SNS prend en charge la journalisation de le statut de distribution des messages de notification envoyés aux rubriques avec les points de terminaison Amazon SNS suivants :

  • HTTP

  • Amazon Data Firehose

  • AWS Lambda

  • Point de terminaison d’application de plateforme

  • Amazon Simple Queue Service

Une fois que vous avez configuré les attributs d'état de livraison des messages, les entrées du journal sont envoyées aux CloudWatch journaux pour les messages envoyés aux abonnés à la rubrique. La consignation de le statut de distribution du message permet de fournir des informations opérationnelles plus précises, par exemple :

  • Savoir si un message a été distribué au point de terminaison Amazon SNS.

  • Identifiez la réponse envoyée à Amazon SNS par le point de terminaison Amazon SNS.

  • Déterminez la durée de conservation du message (la durée entre l'horodatage de publication et le moment juste avant sa distribution à un point de terminaison Amazon SNS).

Pour configurer les attributs des rubriques en fonction de l'état de livraison des messages AWS Management Console, vous pouvez utiliser les kits de développement AWS logiciel (SDK), l'API de requête ou AWS CloudFormation.

Configuration de le statut de distribution à l'aide de AWS Management Console

  1. Connectez-vous à la console Amazon SNS.

  2. Dans le panneau de navigation, choisissez Rubriques.

  3. Sur la page Rubriques, sélectionnez une rubrique, puis choisissez Modifier.

  4. Sur la MyTopicpage Modifier, développez la section Enregistrement de l'état de livraison.

  5. Choisissez le protocole pour lequel vous souhaitez enregistrer le statut de distribution, par exemple AWS Lambda.

  6. Entrez le taux d'échantillonnage de réussite (le pourcentage de messages réussis pour lesquels vous souhaitez recevoir des CloudWatch journaux).

  7. Dans la section rôles IAM, effectuez l'une des opérations suivantes :

    • Pour choisir un rôle de service existant à partir de votre compte, choisissez Use existing service role (Utiliser un rôle de service existant), puis spécifiez les rôles IAM pour les distributions réussies et celles ayant échoué.

    • Pour créer un nouveau rôle de service dans votre compte, choisissez Create new service role (Créer un nouveau rôle de service), choisissez Create new roles (Créer de nouveaux rôles) pour définir les rôles IAM pour les distributions réussies et celles ayant échoué dans la console IAM.

      Pour autoriser Amazon SNS à utiliser CloudWatch Logs en votre nom, sélectionnez Autoriser.

  8. Sélectionnez Enregistrer les modifications.

    Vous pouvez désormais consulter et analyser les CloudWatch journaux contenant l'état de livraison des messages. Pour plus d'informations sur l'utilisation CloudWatch, consultez la CloudWatchdocumentation.

Configuration de la journalisation de l'état de livraison à l'aide des AWS SDK

Les AWS SDK fournissent des API en plusieurs langues pour utiliser les attributs d'état de livraison des messages avec Amazon SNS.

Attributs de rubrique

Vous pouvez utiliser les valeurs de nom d'attribut de rubrique suivantes pour le statut de livraison du message :

HTTP

  • HTTPSuccessFeedbackRoleArn : indique que l'état de diffusion des messages est réussi pour une rubrique Amazon SNS abonnée à un point de terminaison HTTP.

  • HTTPSuccessFeedbackSampleRate : indique le pourcentage de messages réussis pour une rubrique Amazon SNS abonnée à un point de terminaison HTTP.

  • HTTPFailureFeedbackRoleArn : indique que l'état de diffusion des messages est en échec pour une rubrique Amazon SNS abonnée à un point de terminaison HTTP.

Amazon Data Firehose

  • FirehoseSuccessFeedbackRoleArn : indique que l'état de diffusion des messages est réussi pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon Kinesis Data Firehose.

  • FirehoseSuccessFeedbackSampleRate : indique le pourcentage de messages réussis pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon Kinesis Data Firehose.

  • FirehoseFailureFeedbackRoleArn : indique que l'état de diffusion des messages est en échec pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon Kinesis Data Firehose.

AWS Lambda

  • LambdaSuccessFeedbackRoleArn : indique que l'état de diffusion des messages est réussi pour une rubrique Amazon SNS abonnée à un point de terminaison Lambda.

  • LambdaSuccessFeedbackSampleRate : indique le pourcentage de messages réussis pour une rubrique Amazon SNS abonnée à un point de terminaison Lambda.

  • LambdaFailureFeedbackRoleArn : indique que l'état de diffusion des messages est en échec pour une rubrique Amazon SNS abonnée à un point de terminaison Lambda.

Point de terminaison de l'application de plateforme

  • ApplicationSuccessFeedbackRoleArn— Indique l'état de transmission du message réussi pour une rubrique Amazon SNS abonnée à un point de terminaison d' AWS application.

  • ApplicationSuccessFeedbackSampleRate— Indique le pourcentage de messages réussis à échantillonner pour une rubrique Amazon SNS abonnée à un point de terminaison d' AWS application.

  • ApplicationFailureFeedbackRoleArn— Indique le statut d'échec de livraison des messages pour une rubrique Amazon SNS abonnée à un point de terminaison d' AWS application.

    Note

    Outre la possibilité de configurer des attributs de rubrique pour le statut de distribution des messages de notification envoyés à des points de terminaison d'application Amazon SNS, vous pouvez également configurer des attributs d'application pour le statut de distribution des messages de notification push envoyés aux services de notification push. Pour plus d'informations, consultez la page Utilisation des attributs d'application Amazon SNS pour le statut de distribution du message.

Amazon SQS

  • SQSSuccessFeedbackRoleArn : indique que l'état de diffusion des messages est réussi pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon SQS.

  • SQSSuccessFeedbackSampleRate : indique le pourcentage de messages réussis pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon SQS.

  • SQSFailureFeedbackRoleArn : indique que l'état de diffusion des messages est en échec pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon SQS.

Note

Les <ENDPOINT>FailureFeedbackRoleArn attributs <ENDPOINT>SuccessFeedbackRoleArn et sont utilisés pour donner à Amazon SNS un accès en écriture lui permettant d'utiliser CloudWatch Logs en votre nom. L'attribut <ENDPOINT>SuccessFeedbackSampleRate permet de spécifier le pourcentage de la fréquence d’échantillonnage (0-100) des messages diffusés avec succès. Une fois que vous avez configuré l'<ENDPOINT>FailureFeedbackRoleArnattribut, toutes les livraisons de messages ayant échoué génèrent des CloudWatch journaux.

AWS Exemples de SDK pour configurer les attributs des rubriques

Les exemples de code suivants montrent comment utiliserSetTopicAttributes.

CLI
AWS CLI

Pour définir un attribut pour une rubrique

L'exemple set-topic-attributes suivant définit l'attribut DisplayName pour la rubrique spécifiée.

aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \ --attribute-name DisplayName \ --attribute-value MyTopicDisplayName

Cette commande ne produit aucun résultat.

  • Pour plus de détails sur l'API, reportez-vous SetTopicAttributesà la section Référence des AWS CLI commandes.

Java
Kit 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.SetTopicAttributesRequest; import software.amazon.awssdk.services.sns.model.SetTopicAttributesResponse; 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 SetTopicAttributes { public static void main(String[] args) { final String usage = """ Usage: <attribute> <topicArn> <value> Where: attribute - The attribute action to use. Valid parameters are: Policy | DisplayName | DeliveryPolicy . topicArn - The ARN of the topic.\s value - The value for the attribute. """; if (args.length < 3) { System.out.println(usage); System.exit(1); } String attribute = args[0]; String topicArn = args[1]; String value = args[2]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); setTopAttr(snsClient, attribute, topicArn, value); snsClient.close(); } public static void setTopAttr(SnsClient snsClient, String attribute, String topicArn, String value) { try { SetTopicAttributesRequest request = SetTopicAttributesRequest.builder() .attributeName(attribute) .attributeValue(value) .topicArn(topicArn) .build(); SetTopicAttributesResponse result = snsClient.setTopicAttributes(request); System.out.println( "\n\nStatus was " + result.sdkHttpResponse().statusCode() + "\n\nTopic " + request.topicArn() + " updated " + request.attributeName() + " to " + request.attributeValue()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }
  • Pour plus de détails sur l'API, reportez-vous SetTopicAttributesà la section Référence des AWS SDK for Java 2.x 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 { SetTopicAttributesCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; export const setTopicAttributes = async ( topicArn = "TOPIC_ARN", attributeName = "DisplayName", attributeValue = "Test Topic", ) => { const response = await snsClient.send( new SetTopicAttributesCommand({ AttributeName: attributeName, AttributeValue: attributeValue, TopicArn: topicArn, }), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: 'd1b08d0e-e9a4-54c3-b8b1-d03238d2b935', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // } // } return response; };
Kotlin
Kits 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 setTopAttr(attribute: String?, topicArnVal: String?, value: String?) { val request = SetTopicAttributesRequest { attributeName = attribute attributeValue = value topicArn = topicArnVal } SnsClient { region = "us-east-1" }.use { snsClient -> snsClient.setTopicAttributes(request) println("Topic ${request.topicArn} was updated.") } }
  • Pour plus de détails sur l'API, reportez-vous SetTopicAttributesà la section 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; /** * Configure the message delivery status attributes for 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' ]); $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()); }
  • Pour plus de détails sur l'API, reportez-vous SetTopicAttributesà la section Référence des AWS SDK for PHP API.

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.

# Service class to enable an SNS resource with a specified policy class SnsResourceEnabler # Initializes the SnsResourceEnabler with an SNS resource client # # @param sns_resource [Aws::SNS::Resource] The SNS resource client def initialize(sns_resource) @sns_resource = sns_resource @logger = Logger.new($stdout) end # Sets a policy on a specified SNS topic # # @param topic_arn [String] The ARN of the SNS topic # @param resource_arn [String] The ARN of the resource to include in the policy # @param policy_name [String] The name of the policy attribute to set def enable_resource(topic_arn, resource_arn, policy_name) policy = generate_policy(topic_arn, resource_arn) topic = @sns_resource.topic(topic_arn) topic.set_attributes({ attribute_name: policy_name, attribute_value: policy }) @logger.info("Policy #{policy_name} set successfully for topic #{topic_arn}.") rescue Aws::SNS::Errors::ServiceError => e @logger.error("Failed to set policy: #{e.message}") end private # Generates a policy string with dynamic resource ARNs # # @param topic_arn [String] The ARN of the SNS topic # @param resource_arn [String] The ARN of the resource # @return [String] The policy as a JSON string def generate_policy(topic_arn, resource_arn) { Version: "2008-10-17", Id: "__default_policy_ID", Statement: [{ Sid: "__default_statement_ID", Effect: "Allow", Principal: { "AWS": "*" }, Action: ["SNS:Publish"], Resource: topic_arn, Condition: { ArnEquals: { "AWS:SourceArn": resource_arn } } }] }.to_json end end # Example usage: if $PROGRAM_NAME == __FILE__ topic_arn = "MY_TOPIC_ARN" # Should be replaced with a real topic ARN resource_arn = "MY_RESOURCE_ARN" # Should be replaced with a real resource ARN policy_name = "POLICY_NAME" # Typically, this is "Policy" sns_resource = Aws::SNS::Resource.new enabler = SnsResourceEnabler.new(sns_resource) enabler.enable_resource(topic_arn, resource_arn, policy_name) end
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. lo_sns->settopicattributes( iv_topicarn = iv_topic_arn iv_attributename = iv_attribute_name iv_attributevalue = iv_attribute_value ). MESSAGE 'Set/updated SNS topic attributes.' TYPE 'I'. CATCH /aws1/cx_snsnotfoundexception. MESSAGE 'Topic does not exist.' TYPE 'E'. ENDTRY.
  • Pour plus de détails sur l'API, reportez-vous SetTopicAttributesà la section de référence du AWS SDK pour l'API SAP ABAP.

Configuration de la journalisation du statut de distribution à l'aide d' AWS CloudFormation

Pour configurer DeliveryStatusLogging l'utilisation AWS CloudFormation, utilisez un modèle JSON ou YAML pour créer une AWS CloudFormation pile. Pour plus d'informations, consultez la DeliveryStatusLogging propriété de la AWS::SNS::Topic ressource dans le guide de AWS CloudFormation l'utilisateur. Vous trouverez ci-dessous des exemples de AWS CloudFormation modèles en JSON et YAML permettant de créer une nouvelle rubrique ou de mettre à jour une rubrique existante avec tous les DeliveryStatusLogging attributs du protocole Amazon SQS.

JSON
"Resources": { "MySNSTopic" : { "Type" : "AWS::SNS::Topic", "Properties" : { "TopicName" : "TestTopic", "DisplayName" : "TEST", "SignatureVersion" : "2", "DeliveryStatusLogging" : [{ "Protocol": "sqs", "SuccessFeedbackSampleRate": "45", "SuccessFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1", "FailureFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSFailureFeedback_test2" }] } } }
YAML
Resources: MySNSTopic: Type: AWS::SNS::Topic Properties: TopicName:TestTopic DisplayName:TEST SignatureVersion:2 DeliveryStatusLogging: - Protocol: sqs SuccessFeedbackSampleRate: 45 SuccessFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1 FailureFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSFailureFeedback_test2