Amazon Simple Notification Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:应用订阅筛选策略

您可以使用 Amazon SNS 控制台将筛选策略应用于 Amazon SNS 订阅。或者,要以编程方式应用策略,您可以使用 Amazon SNS API、AWS Command Line Interface (AWS CLI) 或任何支持 Amazon SNS 的 AWS 开发工具包(例如 AWS SDK for Java)。

AWS 管理控制台

  1. 登录 Amazon SNS 控制台

  2. 在导航面板中,选择订阅

  3. 选择订阅,然后选择编辑

  4. Edit EXAMPLE1-23bc-4567-d890-ef12g3hij456 (编辑示例1-23bc-4567-d890-ef12g3hij456) 页上,展开 Subscription filter policy (订阅筛选策略) 部分。

  5. JSON editor (JSON 编辑器) 字段中,提供筛选策略的 JSON 正文。

  6. 选择保存更改

    Amazon SNS 将您的筛选策略应用到订阅。

AWS CLI

要使用 AWS Command Line Interface (AWS CLI) 应用筛选策略,请使用 set-subscription-attributes 命令,如以下示例所示:

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

对于 --attribute-name 选项,请指定 FilterPolicy。对于 --attribute-value,请指定您的 JSON 策略。

要为您的策略提供有效的 JSON,请用双引号将属性名和值括起来。此外,您必须用引号将整个策略参数括起来。要避免转义引号,您可以使用单引号将策略括起来,并使用双引号将 JSON 名称和值括起来,如示例中所示。

要验证是否已应用您的筛选策略,请使用 get-subscription-attributes 命令。终端输出中的属性应显示 FilterPolicy 键的筛选策略,如以下示例中所示:

$ 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\"]}", "Owner": "111122223333", "SubscriptionArn": "arn:aws:sns: . . .", "TopicArn": "arn:aws:sns: . . ." } }

AWS SDK for Java

以下示例说明如何使用 AWS 开发工具包提供的 Amazon SNS 客户端来应用筛选策略。

AWS SDK for Java适用于 .NET 的 AWS 开发工具包
AWS SDK for Java

要使用 AWS SDK for Java 应用筛选策略,请使用 AmazonSNS 客户端的 setSubscriptionAttributes 方法。提供 SetSubscriptionAttributesRequest 对象作为参数,如以下示例所示:

AmazonSNS snsClient = AmazonSNSClientBuilder.defaultClient(); String filterPolicyString = "{\"store\":[\"example_corp\"],\"event\":[\"order_placed\"]}"; SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest(subscriptionArn, "FilterPolicy", filterPolicyString); snsClient.setSubscriptionAttributes(request);

要初始化 SetSubscriptionAttributesRequest 对象,请提供以下参数:

  • subscriptionArn – 要向其应用策略的订阅的 Amazon 资源名称 (ARN)。

  • attributeName – 必须是 "FilterPolicy"

  • attributeValue – 字符串形式的 JSON 筛选策略。因为您必须用双引号将字符串策略括起来,所以请记住对括起属性名称和值的双引号进行转义,如 \"store\" 中所示。

SetSubscriptionAttributesRequest 类接受筛选策略作为字符串。如果要将策略定义为 Java 集合,请创建一个映射来将每个属性名称与一个值列表相关联。若要将策略分配给订阅,首先要从映射的内容生成策略的字符串版本。然后将该字符串作为 attributeValue 参数传递给 SetSubscriptionAttributesRequest

适用于 .NET 的 AWS 开发工具包

要使用适用于 .NET 的 AWS 开发工具包应用筛选策略,请使用 AmazonSNS 客户端的 SetSubscriptionAttributes 方法。提供 SetSubscriptionAttributesRequest 对象作为参数,如以下示例所示:

AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(); String filterPolicyString = "{\"store\":[\"example_corp\"],\"event\":[\"order_placed\"]}"; SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest(subscriptionArn, "FilterPolicy", filterPolicyString); snsClient.setSubscriptionAttributes(request);

要初始化 SetSubscriptionAttributesRequest 对象,请提供以下参数:

  • subscriptionArn – 要向其应用策略的订阅的 Amazon 资源名称 (ARN)。

  • attributeName – 必须是 "FilterPolicy"

  • attributeValue – 字符串形式的 JSON 筛选策略。因为您必须用双引号将字符串策略括起来,所以请记住对括起属性名称和值的双引号进行转义,如 \"store\" 中所示。

SetSubscriptionAttributesRequest 类接受筛选策略作为字符串。如果要将策略定义为 C# 集合,请创建一个词典来将每个属性名称与一个值列表相关联。若要将策略分配给订阅,首先要从词典的内容生成策略的字符串版本。然后将该字符串作为 attributeValue 参数传递给 SetSubscriptionAttributesRequest

Amazon SNS API

要使用 Amazon SNS API 应用筛选策略,需要请求 SetSubscriptionAttributes 操作。将 AttributeName 参数设置为 FilterPolicy,并将 AttributeValue 参数设置为您的筛选策略 JSON。

AWS CloudFormation

要使用 AWS CloudFormation 应用筛选策略,请使用 JSON 或 YAML 模板创建一个 AWS CloudFormation 堆栈。有关更多信息,请参阅AWS CloudFormation 用户指南AWS::SNS::Subscription 资源的 FilterPolicy 属性示例 AWS CloudFormation 模板

  1. 登录 AWS CloudFormation 控制台

  2. 选择创建堆栈

  3. Select Template (选择模板) 页面上,依次选择 Upload a template to Amazon S3 (将模板上传到 Amazon S3)、您的文件和下一步

  4. 指定详细信息页面中,执行以下操作:

    1. 对于堆栈名称,键入 MyFilterPolicyStack

    2. 对于 myHttpEndpoint,键入要订阅主题的 HTTP 终端节点。

      提示

      如果没有 HTTP 终端节点,请创建一个。

  5. Options 页面上,选择 Next

  6. 审核页面上,选择创建