如何在CDK中向SNS主题添加订阅过滤器

sma*_*rds 4 amazon-sns aws-cdk

我在CDK中遇到这个问题。我有一个由 SNS 主题触发的 lambda(从 S3 存储桶接收事件),但现在它在传递到 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)
Run Code Online (Sandbox Code Playgroud)

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

sma*_*rds 8

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

    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']})
          }
        }))
Run Code Online (Sandbox Code Playgroud)