Estado de entrega de mensajes de Amazon SNS - Amazon Simple Notification Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Estado de entrega de mensajes de Amazon SNS

Con Amazon SNS, puede registrar el estado de entrega de los mensajes de notificación enviados a los temas con los puntos de enlace de Amazon SNS siguientes:

  • HTTP

  • Amazon Data Firehose

  • AWS Lambda

  • Punto de conexión de aplicación de plataforma

  • Amazon Simple Queue Service

Después de configurar los atributos del estado de entrega de los mensajes, las entradas de registro se envían a CloudWatch los registros para los mensajes enviados a los suscriptores de los temas. El log del estado de entrega de los mensajes aporta información operativa de mejor calidad, como la siguiente:

  • Saber si un mensaje se ha entregado al punto de enlace de Amazon SNS.

  • Identificar la respuesta enviada desde el punto de enlace de Amazon SNS a Amazon SNS.

  • Determinar el tiempo de permanencia del mensaje (el tiempo entre la marca de tiempo de publicación y justo antes de entregarlo a un punto de enlace de Amazon SNS).

Para configurar los atributos de los temas para el estado de entrega de los mensajes AWS Management Console, puede utilizar los kits de desarrollo de AWS software (SDK), la API de consultas o AWS CloudFormation.

Configuración del registro del estado de entrega mediante la AWS Management Console

  1. Inicie sesión en la consola de Amazon SNS.

  2. En el panel de navegación, elija Topics (Temas).

  3. En la página Topics (Temas) seleccione un tema y Delete (Eliminar).

  4. En la MyTopicpágina de edición, expanda la sección Registro del estado de entrega.

  5. Elija el protocolo para los que desea registrar el estado de entrega, por ejemplo AWS Lambda.

  6. Introduzca la frecuencia de muestreo correcta (el porcentaje de mensajes correctos de los que desea recibir CloudWatch registros).

  7. En la subsección Roles de IAM, lleve a cabo una de las siguientes operaciones:

    • Para elegir un rol de servicio existente de la cuenta, elija Use existing service role (Utilizar el rol de servicio existente) y, a continuación, especifique los roles de IAM para las entregas correctas y con error.

    • Para crear un nuevo rol de servicio en la cuenta, elija Create new service role (Crear un nuevo rol de servicio) y después Create new roles (Crear roles nuevos) para definir los roles de IAM para las entregas correctas y con error en la consola de IAM.

      Para conceder a Amazon SNS acceso de escritura para usar CloudWatch Logs en tu nombre, selecciona Permitir.

  8. Elija Guardar cambios.

    Ahora puede ver y analizar los CloudWatch registros que contienen el estado de entrega de los mensajes. Para obtener más información sobre su uso CloudWatch, consulte la CloudWatchdocumentación.

Configuración del registro del estado de la entrega mediante los AWS SDK

Los AWS SDK proporcionan API en varios idiomas para utilizar los atributos de estado de entrega de los mensajes con Amazon SNS.

Atributos de los temas

Puede utilizar los siguientes valores de nombres de atributos de los temas para el estado de entrega de los mensajes:

HTTP

  • HTTPSuccessFeedbackRoleArn: indica el estado de entrega correcta de los mensajes de un tema de Amazon SNS que está suscrito a un punto de conexión de HTTP.

  • HTTPSuccessFeedbackSampleRate: indica el porcentaje de mensajes correctos que se van a muestrear para un tema de Amazon SNS que está suscrito a un punto de conexión de HTTP.

  • HTTPFailureFeedbackRoleArn: indica el estado de entrega errónea de los mensajes para un tema de Amazon SNS que está suscrito a un punto de conexión de HTTP.

Amazon Data Firehose

  • FirehoseSuccessFeedbackRoleArn: indica el estado de entrega correcta de los mensajes de un tema de Amazon SNS que está suscrito a un punto de conexión de Amazon Kinesis Data Firehose.

  • FirehoseSuccessFeedbackSampleRate: indica el porcentaje de mensajes correctos que se van a muestrear para un tema de Amazon SNS que está suscrito a un punto de conexión de Amazon Kinesis Data Firehose.

  • FirehoseFailureFeedbackRoleArn: indica el estado de entrega errónea de los mensajes para un tema de Amazon SNS que está suscrito a un punto de conexión de Amazon Kinesis Data Firehose.

AWS Lambda

  • LambdaSuccessFeedbackRoleArn: indica el estado de entrega correcta de los mensajes de un tema de Amazon SNS que está suscrito a un punto de conexión de Lambda.

  • LambdaSuccessFeedbackSampleRate: indica el porcentaje de mensajes correctos que se van a muestrear para un tema de Amazon SNS que está suscrito a un punto de conexión de Lambda.

  • LambdaFailureFeedbackRoleArn: indica el estado de entrega errónea de los mensajes para un tema de Amazon SNS que está suscrito a un punto de conexión de Lambda.

Punto de conexión de aplicación de plataforma

  • ApplicationSuccessFeedbackRoleArn— Indica que el mensaje se ha entregado correctamente para un tema de Amazon SNS que está suscrito a un AWS punto final de aplicación.

  • ApplicationSuccessFeedbackSampleRate— Indica el porcentaje de mensajes correctos que se deben muestrear para un tema de Amazon SNS que esté suscrito a un AWS punto final de aplicación.

  • ApplicationFailureFeedbackRoleArn— Indica el estado de entrega de mensajes fallidos para un tema de Amazon SNS que está suscrito a un AWS punto final de aplicación.

    nota

    Además de poder configurar los atributos de los temas para el estado de entrega de los mensajes de notificación enviados a puntos de enlace de la aplicación de Amazon SNS, también puede configurar atributos de las aplicaciones para el estado de entrega de los mensajes de notificaciones push enviados a los servicios de notificaciones push. Para obtener más información, consulte Uso de los atributos de la aplicaciones de Amazon SNS para el estado de entrega de los mensajes.

Amazon SQS

  • SQSSuccessFeedbackRoleArn: indica el estado de entrega correcta de los mensajes de un tema de Amazon SNS que está suscrito a un punto de conexión de Amazon SQS.

  • SQSSuccessFeedbackSampleRate: indica el porcentaje de mensajes correctos que se van a muestrear para un tema de Amazon SNS que está suscrito a un punto de conexión de Amazon SQS.

  • SQSFailureFeedbackRoleArn: indica el estado de entrega errónea de los mensajes para un tema de Amazon SNS que está suscrito a un punto de conexión de Amazon SQS.

nota

Los <ENDPOINT>FailureFeedbackRoleArn atributos <ENDPOINT>SuccessFeedbackRoleArn y se utilizan para conceder a Amazon SNS acceso de escritura para usar CloudWatch Logs en su nombre. El atributo <ENDPOINT>SuccessFeedbackSampleRate permite especificar el porcentaje de la frecuencia de muestreo (0-100) de los mensajes entregados correctamente. Tras configurar el <ENDPOINT>FailureFeedbackRoleArn atributo, todas las entregas de mensajes fallidas generarán CloudWatch registros.

AWS Ejemplos de SDK para configurar los atributos de los temas

En los siguientes ejemplos de código, se muestra cómo utilizar SetTopicAttributes.

CLI
AWS CLI

Para establecer un atributo para un tema

En el ejemplo de set-topic-attributes siguiente, se establece el atributo DisplayName del tema especificado.

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

Este comando no genera ninguna salida.

  • Para obtener más información sobre la API, consulte SetTopicAttributesla Referencia de AWS CLI comandos.

Java
SDK para Java 2.x
nota

Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el Repositorio de ejemplos de código de 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); } } }
  • Para obtener más información sobre la API, consulta SetTopicAttributesla Referencia AWS SDK for Java 2.x de la API.

JavaScript
SDK para JavaScript (v3)
nota

Hay más información. GitHub Busque el ejemplo completo y aprenda a configurarlo y ejecutarlo en el Repositorio de ejemplos de código de AWS.

Cree el cliente en un módulo separado y expórtelo.

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 el SDK y los módulos de cliente, y llame a la 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 para Kotlin
nota

Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el Repositorio de ejemplos de código de 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.") } }
  • Para obtener más información sobre la API, consulta SetTopicAttributesla referencia sobre el AWS SDK para la API de Kotlin.

PHP
SDK para PHP
nota

Hay más información al respecto. GitHub Busque el ejemplo completo y aprenda a configurar y ejecutar en el Repositorio de ejemplos de código de 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()); }
  • Para obtener más información sobre la API, consulta SetTopicAttributesla Referencia AWS SDK for PHP de la API.

Ruby
SDK para Ruby
nota

Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el Repositorio de ejemplos de código de 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 de SAP ABAP
nota

Hay más información al respecto GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el Repositorio de ejemplos de código de 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.
  • Para obtener más información sobre la API, consulte SetTopicAttributesla referencia sobre la API ABAP del AWS SDK para SAP.

Configuración del registro del estado de entrega mediante AWS CloudFormation

Para configurar DeliveryStatusLogging el uso AWS CloudFormation, usa una plantilla JSON o YAML para crear una AWS CloudFormation pila. Para obtener más información, consulta la DeliveryStatusLogging propiedad del AWS::SNS::Topic recurso en la Guía del AWS CloudFormation usuario. A continuación, se muestran ejemplos de AWS CloudFormation plantillas en JSON y YAML para crear un tema nuevo o actualizar un tema existente con todos los DeliveryStatusLogging atributos del protocolo 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