Stato di consegna dei SNS messaggi Amazon - 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 SNS messaggi Amazon

Amazon SNS fornisce supporto per registrare lo stato di consegna dei messaggi di notifica inviati agli argomenti con i seguenti SNS endpoint Amazon:

  • 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 recapitato all'SNSendpoint Amazon.

  • Identificazione della risposta inviata dall'SNSendpoint Amazon ad AmazonSNS.

  • Determinazione del tempo di permanenza del messaggio (il tempo che intercorre tra il timestamp di pubblicazione e il momento prima della consegna a un endpoint Amazon). SNS

Per configurare gli attributi dell'argomento per lo stato di consegna dei messaggi, puoi utilizzare AWS software development kits () AWS Management Console SDKs, query o. API AWS CloudFormation

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

  1. Accedi alla SNSconsole Amazon.

  2. Nel pannello di navigazione, scegliere Argomenti.

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

  4. Nella sezione Modifica MyTopicpagina, espandi la sezione Registrazione dello stato della 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 IAMruoli, effettuate una delle seguenti operazioni:

    • Per scegliere un ruolo di servizio esistente dal tuo account, scegli Usa il ruolo di servizio esistente, quindi specifica IAM i ruoli per le consegne riuscite e non riuscite.

    • Per creare un nuovo ruolo di servizio nel tuo account, scegli Crea nuovo ruolo di servizio, scegli Crea nuovi ruoli per definire i IAM ruoli per le consegne riuscite e non riuscite nella IAM console.

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

  8. Scegli Save changes (Salva 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 utilizzando il AWS SDKs

AWS SDKsForniscono APIs in diverse lingue per l'utilizzo degli attributi dello stato di consegna dei messaggi con AmazonSNS.

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 invio corretto dei messaggi per un SNS argomento Amazon sottoscritto a un HTTP endpoint.

  • HTTPSuccessFeedbackSampleRate— Indica la percentuale di messaggi riusciti da campionare per un SNS argomento Amazon sottoscritto a un HTTP endpoint.

  • HTTPFailureFeedbackRoleArn— Indica lo stato di mancato recapito dei messaggi per un SNS argomento Amazon sottoscritto a un HTTP endpoint.

Amazon Data Firehose

  • FirehoseSuccessFeedbackRoleArn— Indica lo stato di invio corretto dei messaggi per un SNS argomento Amazon sottoscritto a un endpoint Amazon Kinesis Data Firehose.

  • FirehoseSuccessFeedbackSampleRate— Indica la percentuale di messaggi riusciti da campionare per un SNS argomento Amazon sottoscritto a un endpoint Amazon Kinesis Data Firehose.

  • FirehoseFailureFeedbackRoleArn— Indica lo stato di invio non riuscito dei messaggi per un SNS argomento Amazon sottoscritto a un endpoint Amazon Kinesis Data Firehose.

AWS Lambda

  • LambdaSuccessFeedbackRoleArn— Indica lo stato di invio corretto dei messaggi per un SNS argomento Amazon sottoscritto a un endpoint Lambda.

  • LambdaSuccessFeedbackSampleRate— Indica la percentuale di messaggi riusciti da campionare per un SNS argomento Amazon sottoscritto a un endpoint Lambda.

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

Endpoint applicazione piattaforma

  • ApplicationSuccessFeedbackRoleArn— Indica lo stato di invio corretto dei messaggi per un SNS argomento Amazon sottoscritto a un endpoint AWS dell'applicazione.

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

  • ApplicationFailureFeedbackRoleArn— Indica lo stato di mancato recapito dei messaggi per un SNS argomento Amazon sottoscritto a un endpoint AWS dell'applicazione.

    Nota

    Oltre a poter configurare gli attributi degli argomenti per lo stato di consegna dei messaggi di notifica inviati agli endpoint delle SNS applicazioni Amazon, puoi anche configurare gli attributi dell'applicazione per lo stato di consegna dei messaggi di notifica push inviati ai servizi di notifica push. Per ulteriori informazioni, consulta Using Amazon SNS Application Attributes for Message Delivery Status.

Amazon SQS

  • SQSSuccessFeedbackRoleArn— Indica lo stato di invio corretto dei messaggi per un SNS argomento Amazon sottoscritto a un SQS endpoint Amazon.

  • SQSSuccessFeedbackSampleRate— Indica la percentuale di messaggi riusciti da campionare per un SNS argomento Amazon sottoscritto a un SQS endpoint Amazon.

  • SQSFailureFeedbackRoleArn— Indica lo stato di invio non riuscito del messaggio per un SNS argomento Amazon sottoscritto a un SQS endpoint Amazon.

Nota

<ENDPOINT>FailureFeedbackRoleArnGli attributi <ENDPOINT>SuccessFeedbackRoleArn and vengono utilizzati per consentire ad Amazon l'accesso in SNS 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 CloudWatch log.

AWS SDKesempi 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
SDKper 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
SDKper JavaScript (v3)
Nota

C'è di più su. 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({});

Importa i moduli SDK e client e chiama ilAPI.

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
SDKper Kotlin
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.

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'è di più 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
SDKper Ruby
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.

# 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
SDKper SAP ABAP
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.

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.

Configurazione della registrazione dello stato di consegna utilizzando AWS CloudFormation

Per configurare DeliveryStatusLogging l'utilizzo AWS CloudFormation, usa un YAML modello JSON or per creare uno AWS CloudFormation stack. Per ulteriori informazioni, consulta la DeliveryStatusLogging proprietà della AWS::SNS::Topic risorsa nella Guida per l' AWS CloudFormation utente. Di seguito sono riportati alcuni esempi di AWS CloudFormation JSON modelli YAML per creare un nuovo argomento o aggiornare un argomento esistente con tutti DeliveryStatusLogging gli attributi per il SQS protocollo Amazon.

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