Status de entrega de SNS mensagens da Amazon - Amazon Simple Notification Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Status de entrega de SNS mensagens da Amazon

SNSA Amazon fornece suporte para registrar o status de entrega das mensagens de notificação enviadas aos tópicos com os seguintes SNS endpoints da Amazon:

  • HTTP

  • Amazon Data Firehose

  • AWS Lambda

  • Endpoint da aplicação da plataforma

  • Amazon Simple Queue Service

Depois de configurar os atributos do status de entrega da mensagem, as entradas de registro são enviadas ao CloudWatch Logs para mensagens enviadas aos assinantes do tópico. O registro de status de entrega de mensagens proporciona um melhor insight operacional, por exemplo:

  • Saber se uma mensagem foi entregue ao SNS endpoint da Amazon.

  • Identificar a resposta enviada do SNS endpoint da Amazon para a AmazonSNS.

  • Determinar o tempo de permanência da mensagem (o tempo entre a data e hora de publicação e pouco antes da entrega para um endpoint da Amazon). SNS

Para configurar os atributos do tópico para o status de entrega da mensagem AWS Management Console, você pode usar os kits de desenvolvimento de AWS software (SDKs)API, query ou AWS CloudFormation.

Configurar registro em log do status de entrega usando o AWS Management Console

  1. Faça login no SNSconsole da Amazon.

  2. No painel de navegação, escolha Topics (Tópicos).

  3. Na página Topics (Tópicos), escolha um tópico e selecione Edit (Editar).

  4. Na edição MyTopicpágina, expanda a seção Registro do status de entrega.

  5. Escolha o protocolo para os quais você deseja registrar em log o status de entrega, por exemplo, AWS Lambda.

  6. Insira a taxa de amostragem de sucesso (a porcentagem de mensagens bem-sucedidas das quais você deseja receber CloudWatch registros).

  7. Na seção IAMFunções, faça o seguinte:

    • Para escolher uma função de serviço existente em sua conta, escolha Usar função de serviço existente e, em seguida, especifique as IAM funções para entregas bem-sucedidas e malsucedidas.

    • Para criar uma nova função de serviço em sua conta, escolha Criar nova função de serviço, escolha Criar novas funções para definir as IAM funções para entregas bem-sucedidas e malsucedidas no IAM console.

      Para dar à Amazon acesso de SNS gravação para usar o CloudWatch Logs em seu nome, escolha Permitir.

  8. Escolha Salvar alterações.

    Agora você pode visualizar e analisar os CloudWatch registros que contêm o status de entrega da mensagem. Para obter mais informações sobre o uso CloudWatch, consulte a CloudWatchdocumentação.

Configurando o registro do status de entrega usando o AWS SDKs

Eles AWS SDKs fornecem APIs em vários idiomas o uso de atributos de status de entrega de mensagens com a AmazonSNS.

Atributos de tópicos

Você pode usar os seguintes valores de nome de atributo de tópico para o status de entrega de mensagens:

HTTP

  • HTTPSuccessFeedbackRoleArn— Indica o status de entrega bem-sucedida da mensagem para um SNS tópico da Amazon que está inscrito em um HTTP endpoint.

  • HTTPSuccessFeedbackSampleRate— Indica a porcentagem de mensagens bem-sucedidas para amostra de um SNS tópico da Amazon que está inscrito em um HTTP endpoint.

  • HTTPFailureFeedbackRoleArn— Indica o status de falha na entrega de mensagens para um SNS tópico da Amazon que está inscrito em um HTTP endpoint.

Amazon Data Firehose

  • FirehoseSuccessFeedbackRoleArn— Indica o status de entrega de mensagem bem-sucedida para um SNS tópico da Amazon que está inscrito em um endpoint do Amazon Kinesis Data Firehose.

  • FirehoseSuccessFeedbackSampleRate— Indica a porcentagem de mensagens bem-sucedidas para amostra de um SNS tópico da Amazon que está inscrito em um endpoint do Amazon Kinesis Data Firehose.

  • FirehoseFailureFeedbackRoleArn— Indica o status de falha na entrega de mensagens para um SNS tópico da Amazon que está inscrito em um endpoint do Amazon Kinesis Data Firehose.

AWS Lambda

  • LambdaSuccessFeedbackRoleArn— Indica o status de entrega de mensagem bem-sucedida para um SNS tópico da Amazon que está inscrito em um endpoint Lambda.

  • LambdaSuccessFeedbackSampleRate— Indica a porcentagem de mensagens bem-sucedidas para amostra de um SNS tópico da Amazon que está inscrito em um endpoint Lambda.

  • LambdaFailureFeedbackRoleArn— Indica o status de falha na entrega de mensagens para um SNS tópico da Amazon que está inscrito em um endpoint Lambda.

Endpoint da aplicação da plataforma

  • ApplicationSuccessFeedbackRoleArn— Indica o status de entrega de mensagem bem-sucedida para um SNS tópico da Amazon que está inscrito em um endpoint AWS do aplicativo.

  • ApplicationSuccessFeedbackSampleRate— Indica a porcentagem de mensagens bem-sucedidas para amostra de um SNS tópico da Amazon que está inscrito em um endpoint de AWS aplicativo.

  • ApplicationFailureFeedbackRoleArn— Indica o status de falha na entrega de mensagens para um SNS tópico da Amazon que está inscrito em um endpoint AWS do aplicativo.

    nota

    Além de poder configurar atributos de tópicos para o status de entrega de mensagens de notificação enviadas aos endpoints de SNS aplicativos da Amazon, você também pode configurar atributos do aplicativo para o status de entrega de mensagens de notificação push enviadas aos serviços de notificação push. Para obter mais informações, consulte Usando os atributos do SNS aplicativo Amazon para o status de entrega de mensagens.

Amazon SQS

  • SQSSuccessFeedbackRoleArn— Indica o status de entrega de mensagem bem-sucedida para um SNS tópico da Amazon que está inscrito em um SQS endpoint da Amazon.

  • SQSSuccessFeedbackSampleRate— Indica a porcentagem de mensagens bem-sucedidas para amostra de um SNS tópico da Amazon que está inscrito em um SQS endpoint da Amazon.

  • SQSFailureFeedbackRoleArn— Indica o status de falha na entrega de mensagens para um SNS tópico da Amazon que está inscrito em um SQS endpoint da Amazon.

nota

Os <ENDPOINT>FailureFeedbackRoleArn atributos <ENDPOINT>SuccessFeedbackRoleArn e são usados para dar à Amazon acesso de SNS gravação para usar CloudWatch Logs em seu nome. O atributo <ENDPOINT>SuccessFeedbackSampleRate é para especificar a porcentagem de taxa de amostra (0-100) de mensagens bem-sucedidas. Depois de configurar o <ENDPOINT>FailureFeedbackRoleArn atributo, todas as entregas de mensagens com falha geram CloudWatch registros.

AWS SDKexemplos para configurar atributos de tópicos

Os exemplos de códigos a seguir mostram como usar SetTopicAttributes.

CLI
AWS CLI

Para definir um atributo para um tópico

O exemplo set-topic-attributes a seguir define o atributo DisplayName para o tópico especificado.

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

Este comando não produz saída.

Java
SDKpara Java 2.x
nota

Tem mais sobre GitHub. Encontre o exemplo completo e veja como configurar e executar no AWS Code Examples Repository.

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); } } }
  • Para API obter detalhes, consulte SetTopicAttributesem AWS SDK for Java 2.x APIReferência.

JavaScript
SDKpara JavaScript (v3)
nota

Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no AWS Code Examples Repository.

Crie o cliente em um módulo separado e exporte-o.

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

Importe os módulos SDK e do cliente e chame API o.

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
SDKpara Kotlin
nota

Tem mais sobre GitHub. Encontre o exemplo completo e veja como configurar e executar no AWS Code Examples Repository.

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 para PHP
nota

Tem mais sobre GitHub. Encontre o exemplo completo e veja como configurar e executar no AWS Code Examples Repository.

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
SDKpara Ruby
nota

Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no Repositório de exemplos de código da 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
SDKpara SAP ABAP
nota

Tem mais sobre GitHub. Encontre o exemplo completo e veja como configurar e executar no AWS Code Examples Repository.

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.

Configurar registro em log do status de entrega usando o AWS CloudFormation

Para configurar DeliveryStatusLogging usando AWS CloudFormation, use um YAML modelo JSON ou para criar uma AWS CloudFormation pilha. Para obter mais informações, consulte a DeliveryStatusLogging propriedade do AWS::SNS::Topic recurso no Guia do AWS CloudFormation usuário. Abaixo estão exemplos de AWS CloudFormation modelos YAML para criar um novo tópico ou atualizar um tópico existente com todos os DeliveryStatusLogging atributos do SQS protocolo da Amazon. JSON

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