Stato di consegna dei messaggi Amazon SNS - Amazon Simple Notification Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Stato di consegna dei messaggi Amazon SNS

Amazon SNS fornisce supporto per la registrazione dello stato di consegna dei messaggi di notifica inviati agli argomenti con i seguenti endpoint Amazon SNS:

  • HTTP

  • Amazon Data Firehose

  • AWS Lambda

  • Endpoint applicazione piattaforma

  • Amazon Simple Queue Service

Dopo aver configurato gli attributi dello stato di consegna dei messaggi, le voci di registro vengono inviate ai CloudWatch registri per i messaggi inviati agli abbonati all'argomento. La registrazione dello stato di consegna dei messaggi consente di ottenere informazioni operative più precise, ad esempio:

  • Sapere se un messaggio è stato consegnato all'endpoint Amazon SNS.

  • Identificare la risposta inviata dall'endpoint Amazon SNS a Amazon SNS.

  • Determinare il tempo di attesa del messaggio (il periodo di tempo tra il timestamp di pubblicazione e l'istante immediatamente precedente alla consegna a un endpoint Amazon SNS).

Per configurare gli attributi dell'argomento per lo stato di consegna dei messaggi, puoi utilizzare i AWS Management Console kit di sviluppo AWS software (SDK), l'API di interrogazione o. AWS CloudFormation

Configurazione della registrazione dello stato di consegna utilizzando la AWS Management Console

  1. Accedi alla console Amazon SNS.

  2. Nel pannello di navigazione, scegliere Argomenti.

  3. Nella pagina Topics (Argomenti), selezionare un argomento quindi scegliere Edit (Modifica).

  4. Nella MyTopicpagina Modifica, espandi la sezione Registrazione dello stato di consegna.

  5. Scegliere il protocollo per cui registrare lo stato di consegna, ad esempio AWS Lambda.

  6. Inserisci la percentuale di campionamento di successo (la percentuale di messaggi riusciti per i quali desideri ricevere CloudWatch i registri).

  7. Nella sezione IAM roles (Ruoli IAM) eseguire una delle operazioni seguenti:

    • Per scegliere un ruolo del servizio esistente dall'account, scegliere Use existing service role (Usa ruolo del servizio esistente) e quindi specificare i ruoli IAM per le consegne riuscite e non riuscite.

    • Per creare un nuovo ruolo del servizio nell'account, scegliere Create new service role (Crea nuovo ruolo del servizio), quindi Create new roles (Crea nuovi ruoli) per definire i ruoli IAM per le consegne riuscite e non riuscite nella console IAM.

      Per consentire ad Amazon SNS l'accesso in scrittura per utilizzare CloudWatch i log per tuo conto, scegli Consenti.

  8. Seleziona Salvataggio delle modifiche.

    Ora puoi visualizzare e analizzare i CloudWatch log contenenti lo stato di consegna dei messaggi. Per ulteriori informazioni sull'utilizzo CloudWatch, consulta la CloudWatch documentazione.

Configurazione della registrazione dello stato di consegna tramite gli SDK AWS

Gli AWS SDK forniscono API in diverse lingue per l'utilizzo degli attributi dello stato di consegna dei messaggi con Amazon SNS.

Attributi di argomento

Puoi utilizzare i seguenti valori di nome di attributo di argomento per lo stato di consegna dei messaggi:

HTTP

  • HTTPSuccessFeedbackRoleArn: indica lo stato di corretta consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint HTTP.

  • HTTPSuccessFeedbackSampleRate: indica la percentuale di campionamenti di messaggi riusciti per un argomento Amazon SNS sottoscritto a un endpoint HTTP.

  • HTTPFailureFeedbackRoleArn: indica lo stato di mancata consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint HTTP.

Amazon Data Firehose

  • FirehoseSuccessFeedbackRoleArn: indica lo stato di corretta consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint Amazon Kinesis Data Firehose.

  • FirehoseSuccessFeedbackSampleRate: indica la percentuale di campionamenti di messaggi riusciti per un argomento Amazon SNS sottoscritto a un endpoint Amazon Kinesis Data Firehose.

  • FirehoseFailureFeedbackRoleArn: indica lo stato di mancata consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint Amazon Kinesis Data Firehose.

AWS Lambda

  • LambdaSuccessFeedbackRoleArn: indica lo stato di corretta consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint Lambda.

  • LambdaSuccessFeedbackSampleRate: indica la percentuale di campionamenti di messaggi riusciti per un argomento Amazon SNS sottoscritto a un endpoint Lambda.

  • LambdaFailureFeedbackRoleArn: indica lo stato di mancata consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint Lambda.

Endpoint applicazione piattaforma

  • ApplicationSuccessFeedbackRoleArn— Indica lo stato di corretta consegna dei messaggi per un argomento di Amazon SNS sottoscritto a un AWS endpoint applicativo.

  • ApplicationSuccessFeedbackSampleRate— Indica la percentuale di messaggi riusciti da campionare per un argomento di Amazon SNS sottoscritto a un AWS endpoint applicativo.

  • ApplicationFailureFeedbackRoleArn— Indica lo stato di invio non riuscito dei messaggi per un argomento di Amazon SNS sottoscritto a un AWS endpoint applicativo.

    Nota

    Oltre a configurare attributi di argomento per lo stato di consegna dei messaggi di notifica inviati a endpoint applicazione Amazon SNS, puoi anche configurare attributi di applicazione per lo stato di consegna dei messaggi di notifica push inviati ai servizi di notifica push. Per ulteriori informazioni, consulta la pagina sull'utilizzo degli attributi di applicazione di Amazon SNS per lo stato di consegna dei messaggi.

Amazon SQS

  • SQSSuccessFeedbackRoleArn: indica lo stato di corretta consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint Amazon SQS.

  • SQSSuccessFeedbackSampleRate: indica la percentuale di campionamenti di messaggi riusciti per un argomento Amazon SNS sottoscritto a un endpoint Amazon SQS.

  • SQSFailureFeedbackRoleArn: indica lo stato di mancata consegna dei messaggi per un argomento Amazon SNS sottoscritto a un endpoint Amazon SQS.

Nota

<ENDPOINT>FailureFeedbackRoleArnGli attributi <ENDPOINT>SuccessFeedbackRoleArn and vengono utilizzati per consentire ad Amazon SNS l'accesso in scrittura per utilizzare CloudWatch i log per tuo conto. L'attributo <ENDPOINT>SuccessFeedbackSampleRate consente di specificare la percentuale della frequenza di campionamento (0-100) dei messaggi consegnati. Dopo aver configurato l'<ENDPOINT>FailureFeedbackRoleArnattributo, tutte le consegne di messaggi non riuscite generano log. CloudWatch

AWS Esempi SDK per configurare gli attributi degli argomenti

I seguenti esempi di codice mostrano come utilizzareSetTopicAttributes.

CLI
AWS CLI

Impostazione di un attributo per un argomento

Nell'esempio set-topic-attributes seguente vengono impostati gli attributi DisplayName per l'argomento specificato.

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

Questo comando non produce alcun output.

Java
SDK per Java 2.x
Nota

C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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); } } }
JavaScript
SDK per JavaScript (v3)
Nota

C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

Creare il client in un modulo separato ed esportarlo.

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({});

Importare l'SDK e i moduli client e chiamare 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
SDK per Kotlin
Nota

C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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.") } }
PHP
SDK per PHP
Nota

C'è altro su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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()); }
Ruby
SDK per Ruby
Nota

C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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
SDK per SAP ABAP
Nota

C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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.
  • Per i dettagli sulle API, SetTopicAttributesconsulta AWS SDK for SAP ABAP API reference.

Configurazione della registrazione dello stato di consegna utilizzando AWS CloudFormation

Per configurare DeliveryStatusLogging l'utilizzo AWS CloudFormation, utilizza un modello JSON o YAML per creare uno stack. AWS CloudFormation Per ulteriori informazioni, consultate la DeliveryStatusLogging proprietà della AWS::SNS::Topic risorsa nella Guida per l'utente. AWS CloudFormation Di seguito sono riportati alcuni esempi di AWS CloudFormation modelli in JSON e YAML per creare un nuovo argomento o aggiornare un argomento esistente con tutti DeliveryStatusLogging gli attributi per il protocollo 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