【问题标题】:How to construct SNS filter policy to match partial S3 object key如何构造 SNS 过滤策略以匹配部分 S3 对象键
【发布时间】:2018-01-18 22:22:57
【问题描述】:

我创建了一个对 SNS 主题的订阅,其中所有事件都来自 S3 ObjectCreated:Put 操作。我只想接收 S3 对象键包含字符串“KLWX”的通知。该过滤策略应该是什么样的?通知数据如下,但“消息”属性值是作为字符串给出的,而不是 JSON 对象。为了便于阅读,我只是对其进行了扩展。

{
"SignatureVersion": "1",
"Type": "Notification",
"TopicArn": "xxx",
"Message": {
    "Records": [{
        "eventVersion": "2.0",
        "eventSource": "aws:s3",
        "awsRegion": "us-east-1",
        "eventTime": "2018-01-18T20:16:27.590Z",
        "eventName": "ObjectCreated:Put",
        "userIdentity": {
            "principalId": "xxx"
        },
        "requestParameters": {
            "sourceIPAddress": "xxx"
        },
        "responseElements": {
            "x-amz-request-id": "6CF3314E6D6B7671",
            "x-amz-id-2": "tJdr3KDcAsp1tuGdo6y4jBLkYXsEDEeVPcvQ1SWQoLXWsZL81WUzbloDe1HxbhGes4u0tY9Jh+g="
        },
        "s3": {
            "s3SchemaVersion": "1.0",
            "configurationId": "NewNEXRADLevel2Object",
            "bucket": {
                "name": "xxx",
                "ownerIdentity": {
                    "principalId": "xxx"
                },
                "arn": "xxx"
            },
            "object": {
                "key": "KCBW/881/20180118-201329-015-I",
                "size": 16063,
                "eTag": "772cd2d2e82b22448792308755891350",
                "sequencer": "005A61009B8EC82991"
            }
        }
    }]
},
"UnsubscribeURL": "xxx",
"Signature": "xxx",
"Timestamp": "2018-01-18T20:16:27.626Z",
"SigningCertURL": "xxx",
"Subject": "Amazon S3 Notification",
"MessageId": "ed6a0365-4af2-5497-9be0-51be4829cdee"

}

【问题讨论】:

    标签: amazon-web-services amazon-sns


    【解决方案1】:

    您必须在 S3 上执行此操作。创建事件时,您可以使用前缀/后缀的组合来过滤哪个对象将通知发送到您的 SNS 主题。

    假设存储桶名称为YourBucket,并且您的对象键为KCBW/881/20180118-201329-015-I,则您必须在YourBucket上配置S3事件prefix = KLWX/

    【讨论】:

    • 很遗憾,因为我不拥有存储桶或 SNS 主题。我订阅了公共主题,并且我知道主题通知是由 S3:ObjectCreated:Put 事件引起的。 SNS 订阅有一个相对较新的功能,即“编辑订阅过滤策略”。有没有办法使用这个功能?
    • 您可以使用它,但即便如此,我猜您也需要访问拥有该主题的帐户。在此处阅读详细信息 - docs.aws.amazon.com/sns/latest/dg/message-filtering.html 我推荐上述方法,假设这一切都在您自己的帐户中。
    • @abiydv 您是否找到了一种通过过滤策略实现该功能的方法?也许有一个“包含”过滤器可以应用于“消息”键的类似 json 的值?
    【解决方案2】:

    您可以为 AWS Lambda 函数订阅和添加目标。在该函数中,您可以编写逻辑代码。如果需要,您可以从那里发送另一条 SNS 消息,或根据需要存储/处理数据。

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 2018-12-13
      • 2021-12-23
      相关资源
      最近更新 更多