【问题标题】:How to add subscription filter to SNS topic in CDK如何在 CDK 中向 SNS 主题添加订阅过滤器
【发布时间】:2021-09-24 10:21:41
【问题描述】:

我在 CDK 中遇到了这个问题。我有一个由 SNS 主题(从 S3 存储桶接收事件)触发的 lambda,但现在它在传递到 SNS 主题的每条消息上执行。我希望 Lambda 仅在特定的存储桶名称、文件结尾和 PutObject 操作上执行。

我知道如何将 SNS 连接到我的 lambda,只是不使用过滤器:

    const myTopic = new sns.Topic(this, "Topic", {});

    myTopic.addToResourcePolicy(new iam.PolicyStatement({
      effect: iam.Effect.ALLOW,
      actions: ["sns:Publish"],
      resources: [myTopic.topicArn],
      principals: [new iam.AccountPrincipal('XXXXXXXXX')]
    }))
    
     const snsEventSource = new lambdaEventSources.SnsEventSource(myTopic);
     myLambda.addEventSource(snsEventSource)

我不知道如何添加过滤器,我试过玩 sns.SubscriptionFilter 没有任何运气

【问题讨论】:

    标签: amazon-sns aws-cdk


    【解决方案1】:

    我让它与这样的代码一起工作:

        const myTopic = new sns.Topic(this, "Topic", {});
        myTopic.addToResourcePolicy(new iam.PolicyStatement({
          effect: iam.Effect.ALLOW,
          actions: ["sns:Publish"],
          resources: [myTopic.topicArn],
          principals: [new iam.AccountPrincipal('XXXXXXXXX')]
        }))
    
        myLambda.grantInvoke(new iam.ServicePrincipal('sns.amazonaws.com'))
        
        myTopic.addSubscription(new subs.LambdaSubscription(myLambda, {
              filterPolicy: {
                S3_BUCKET_NAME: sns.SubscriptionFilter.stringFilter({allowlist: ['myBucket']}),
                S3_EVENT_NAME: sns.SubscriptionFilter.stringFilter({allowlist: ['ObjectCreated:Put']})
              }
            }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-14
      • 2021-06-24
      • 2015-09-26
      • 2019-12-13
      • 2020-09-17
      • 2021-01-07
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多