Cloudformation - 如何在代码中设置SNS订阅的过滤策略?

Esb*_*ald 6 amazon-sqs amazon-sns aws-cloudformation serverless-framework

更新:Cloudformation 现在支持 SNS 主题过滤器,因此这个问题不再相关,不需要自定义插件或代码。

我正在构建一个包含多个 SNS 主题和多个 Lambda 的系统,每个 Lambda 都从分配的 SQS 队列中读取消息。SQS 队列订阅 SNS 主题,但也有过滤策略,因此消息最终会进入相关的 SQS 队列。

当我在 AWS 控制台中设置订阅时,效果很好。

现在我尝试在代码中执行相同的操作,但 AWS Cloudformation 文档没有描述如何向订阅添加筛选策略。基于这里的 python 示例,我尝试了以下操作:

  StopOperationSubscription:
    Type: "AWS::SNS::Subscription"
    Properties:
      Protocol: sqs
      TopicArn: 
        Ref: StatusTopic
      Endpoint: 
        Fn::GetAtt: [StopActionQueue, Arn]
      FilterPolicy: '{"value": ["stop"]}'
Run Code Online (Sandbox Code Playgroud)

但后来我得到这个错误:

An error occurred: StopOperationSubscription - Encountered unsupported property FilterPolicy.
Run Code Online (Sandbox Code Playgroud)

如何使用 CloudFormation 设置所需的过滤策略?如果不支持,您建议什么替代方案?

我希望在部署无服务器应用程序时自动设置它,无需手动步骤。

use*_*541 4

Cloudformation 昨天才开始支持 FilterPolicy。我也挣扎了一段时间:)

句法

JSON

{
  "Type" : "AWS::SNS::Subscription",
  "Properties" : {
    "DeliveryPolicy" : JSON object,
    "Endpoint" : String,
    "FilterPolicy" : JSON object,
    "Protocol" : String,
    "RawMessageDelivery" : Boolean,
    "Region" : String,
    "TopicArn" : String
  }
}
Run Code Online (Sandbox Code Playgroud)

YAML

Type: "AWS::SNS::Subscription"
Properties:
  DeliveryPolicy: JSON object
  Endpoint: String
  FilterPolicy: JSON object
  Protocol: String
  RawMessageDelivery: Boolean,
  Region: String
  TopicArn: String
Run Code Online (Sandbox Code Playgroud)

参考:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#cfn-sns-subscription-filterpolicy

https://aws.amazon.com/blogs/compute/managing-amazon-sns-subscription-attributes-with-aws-cloudformation/

  • 是的,但不清楚在“JSON对象”中放入什么,OP问如何...... (5认同)