Aplicar una política de filtros de suscripciones en 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.

Aplicar una política de filtros de suscripciones en Amazon SNS

El filtrado de mensajes en Amazon te SNS permite entregar mensajes a los suscriptores de forma selectiva en función de las políticas de filtrado. Estas políticas definen las condiciones que deben cumplir los mensajes para poder entregarse a una suscripción. Si bien la entrega de mensajes sin procesar es una opción que puede afectar al procesamiento de los mensajes, no es necesaria para que los filtros de suscripción funcionen.

Puedes aplicar una política de filtrado a una SNS suscripción de Amazon mediante la SNS consola de Amazon. O bien, para aplicar las políticas de forma programática, puedes usar Amazon SNSAPI, AWS Command Line Interface (AWS CLI) o cualquiera AWS SDK que sea compatible con Amazon. SNS También puedes usar. AWS CloudFormation

Habilitar la entrega de mensajes sin procesar

La entrega de mensajes sin procesar garantiza que las cargas útiles de los mensajes se entreguen tal cual a los suscriptores sin necesidad de codificación ni transformación adicionales. Esto puede resultar útil cuando los suscriptores necesitan el formato de mensaje original para su procesamiento. Sin embargo, la entrega de mensajes sin procesar no está directamente relacionada con la funcionalidad de los filtros de suscripción.

Aplicar filtros de suscripción

Para aplicar filtros de mensajes a una suscripción, defina una política de filtrado mediante la JSON sintaxis. Esta política especifica las condiciones que debe cumplir un mensaje para entregarse a la suscripción. Los filtros se pueden basar en los atributos del mensaje, como los atributos del mensaje, la estructura del mensaje o incluso el contenido del mensaje.

Relación entre la entrega de mensajes sin procesar y los filtros de suscripción

Si bien habilitar la entrega de mensajes sin procesar puede afectar a la forma en que los suscriptores entregan y procesan los mensajes, no es un requisito previo para usar filtros de suscripción. Sin embargo, en situaciones en las que los suscriptores requieren el formato de mensaje original sin ninguna modificación, habilitar la entrega de mensajes sin procesar podría resultar beneficioso junto con los filtros de suscripción.

Consideraciones para un filtrado eficaz

Al implementar el filtrado de mensajes, tenga en cuenta los requisitos específicos de su aplicación y de sus suscriptores. Defina políticas de filtrado que coincidan con precisión con los criterios de entrega de mensajes para garantizar una distribución eficiente y específica de los mensajes.

importante

AWS servicios como IAM Amazon SNS utilizan un modelo de computación distribuida llamado consistencia eventual. Los añadidos o cambios a una política de filtro de suscripción pueden tardar hasta 15 minutos en tener efecto.

AWS Management Console

  1. Inicia sesión en la SNSconsola de Amazon.

  2. En el panel de navegación, seleccione Subscriptions (Suscripciones).

  3. Seleccione una suscripción y, a continuación, elija Edit (Editar).

  4. En la página Edit (Editar), amplíe la sección Subscription filter policy (Política de filtro de suscripción).

  5. Elija entre el filtrado basado en atributos o el filtrado basado en cargas.

  6. En el campo del JSONeditor, proporciona el JSONcuerpo de tu política de filtros.

  7. Elija Guardar cambios.

    Amazon SNS aplica tu política de filtros a la suscripción.

AWS CLI

Para aplicar una política de filtrado con AWS Command Line Interface (AWS CLI), utilice el set-subscription-attributescomando, tal y como se muestra en el siguiente ejemplo. Para la opción --attribute-name, especifique FilterPolicy. Para--attribute-value, especifique su JSONpolítica.

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicy --attribute-value '{"store":["example_corp"],"event":["order_placed"]}'

Para que su política sea válidaJSON, escriba los nombres y valores de los atributos entre comillas dobles. Incluya también todo el argumento de la política entre comillas. Para evitar el escape entre comillas, puede utilizar comillas simples para encerrar la política y comillas dobles para incluir los JSON nombres y valores, como se muestra en el ejemplo anterior.

Si quieres cambiar de un filtrado de mensajes basado en atributos (predeterminado) a uno basado en cargas útiles, también puedes usar el comando. set-subscription-attributes Para la opción --attribute-name, especifique FilterPolicyScope. En --attribute-value, especifique MessageBody.

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicyScope --attribute-value MessageBody

Para verificar que su política de filtro se ha aplicado, utilice el comando get-subscription-attributes. Los atributos del resultado deben mostrar la política de filtro para la clave FilterPolicy, tal y como se muestra en el ejemplo siguiente:

$ aws sns get-subscription-attributes --subscription-arn arn:aws:sns: ... { "Attributes": { "Endpoint": "endpoint . . .", "Protocol": "https", "RawMessageDelivery": "false", "EffectiveDeliveryPolicy": "delivery policy . . .", "ConfirmationWasAuthenticated": "true", "FilterPolicy": "{\"store\": [\"example_corp\"], \"event\": [\"order_placed\"]}", "FilterPolicyScope": "MessageAttributes", "Owner": "111122223333", "SubscriptionArn": "arn:aws:sns: . . .", "TopicArn": "arn:aws:sns: . . ." } }

AWS SDKs

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

importante

Si está utilizando el ejemplo SDK para Java 2.x, la clase no SNSMessageFilterPolicy está disponible de fábrica. Para obtener instrucciones sobre cómo instalar esta clase, consulte el ejemplo del GitHub sitio web.

CLI
AWS CLI

Para establecer los atributos de suscripción

En el siguiente set-subscription-attributes ejemplo, se establece el RawMessageDelivery atributo en una SQS suscripción.

aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc \ --attribute-name RawMessageDelivery \ --attribute-value true

Este comando no genera ninguna salida.

En el siguiente set-subscription-attributes ejemplo, se establece un FilterPolicy atributo en una SQS suscripción.

aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc \ --attribute-name FilterPolicy \ --attribute-value "{ \"anyMandatoryKey\": [\"any\", \"of\", \"these\"] }"

Este comando no genera ninguna salida.

En el siguiente set-subscription-attributes ejemplo, se quita el FilterPolicy atributo de una SQS suscripción.

aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc \ --attribute-name FilterPolicy \ --attribute-value "{}"

Este comando no genera ninguna salida.

Java
SDKpara Java 2.x
nota

Hay más información. 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.SnsException; import java.util.ArrayList; /** * 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 UseMessageFilterPolicy { public static void main(String[] args) { final String usage = """ Usage: <subscriptionArn> Where: subscriptionArn - The ARN of a subscription. """; if (args.length != 1) { System.out.println(usage); System.exit(1); } String subscriptionArn = args[0]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); usePolicy(snsClient, subscriptionArn); snsClient.close(); } public static void usePolicy(SnsClient snsClient, String subscriptionArn) { try { SNSMessageFilterPolicy fp = new SNSMessageFilterPolicy(); // Add a filter policy attribute with a single value fp.addAttribute("store", "example_corp"); fp.addAttribute("event", "order_placed"); // Add a prefix attribute fp.addAttributePrefix("customer_interests", "bas"); // Add an anything-but attribute fp.addAttributeAnythingBut("customer_interests", "baseball"); // Add a filter policy attribute with a list of values ArrayList<String> attributeValues = new ArrayList<>(); attributeValues.add("rugby"); attributeValues.add("soccer"); attributeValues.add("hockey"); fp.addAttribute("customer_interests", attributeValues); // Add a numeric attribute fp.addAttribute("price_usd", "=", 0); // Add a numeric attribute with a range fp.addAttributeRange("price_usd", ">", 0, "<=", 100); // Apply the filter policy attributes to an Amazon SNS subscription fp.apply(snsClient, subscriptionArn); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }
Python
SDKpara Python (Boto3)
nota

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

class SnsWrapper: """Encapsulates Amazon SNS topic and subscription functions.""" def __init__(self, sns_resource): """ :param sns_resource: A Boto3 Amazon SNS resource. """ self.sns_resource = sns_resource @staticmethod def add_subscription_filter(subscription, attributes): """ Adds a filter policy to a subscription. A filter policy is a key and a list of values that are allowed. When a message is published, it must have an attribute that passes the filter or it will not be sent to the subscription. :param subscription: The subscription the filter policy is attached to. :param attributes: A dictionary of key-value pairs that define the filter. """ try: att_policy = {key: [value] for key, value in attributes.items()} subscription.set_attributes( AttributeName="FilterPolicy", AttributeValue=json.dumps(att_policy) ) logger.info("Added filter to subscription %s.", subscription.arn) except ClientError: logger.exception( "Couldn't add filter to subscription %s.", subscription.arn ) raise

Amazon SNS API

Para aplicar una política de filtrado con Amazon SNSAPI, haz una solicitud a la SetSubscriptionAttributesacción. Defina el AttributeName parámetro en y establezca el AttributeValue parámetro en su política de filtradoJSON. FilterPolicy

Si quiere cambiar de filtrado de mensajes basado en atributos (predeterminado) a filtrado de mensajes basado en cargas, puede usar también la acción SetSubscriptionAttributes. Establezca el parámetro AttributeName en FilterPolicyScope y el parámetro AttributeValue en MessageBody.

AWS CloudFormation

Para aplicar una política de filtrado AWS CloudFormation, utilice una YAML plantilla JSON o para crear una AWS CloudFormation pila. Para obtener más información, consulte la FilterPolicypropiedad del AWS::SNS::Subscription recurso en la Guía del AWS CloudFormation usuario y en la AWS CloudFormation plantilla de ejemplo.

  1. Inicie sesión en la consola de AWS CloudFormation.

  2. Elija Crear pila.

  3. En la página Select Template (Seleccionar plantilla), elija Upload a template to Amazon S3 (Cargar una plantilla en Amazon S3), elija el archivo y, a continuación, elija Next (Siguiente).

  4. En la página Specify Details (Especificar detalles), haga lo siguiente:

    1. Para Stack Name (Nombre de la pila), escriba MyFilterPolicyStack.

    2. Para myHttpEndpoint, escriba el HTTP punto final al que se va a suscribir al tema.

      sugerencia

      Si no tiene un HTTP punto final, cree uno.

  5. En la página Opciones, seleccione Siguiente.

  6. En la página Review (Revisar), elija Create (Crear).