如何在 CDK 中向 SNS 主题添加订阅过滤器
How to add subscription filter to SNS topic in 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)
我不确定如何添加过滤器,我试过 sns.SubscriptionFilter 但运气不好
我让它可以使用这样的代码:
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']})
}
}))
我在 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)
我不确定如何添加过滤器,我试过 sns.SubscriptionFilter 但运气不好
我让它可以使用这样的代码:
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']})
}
}))