Amazon Simple Notification Service Construct Library
Add an SNS Topic to your stack:
import * as sns from '@aws-cdk/aws-sns';
const topic = new sns.Topic(this, 'Topic', {
displayName: 'Customer subscription topic'
});
Subscriptions
Various subscriptions can be added to the topic by calling the
.addSubscription(...)
method on the topic. It accepts a subscription object,
default implementations of which can be found in the
@aws-cdk/aws-sns-subscriptions
package:
Add an HTTPS Subscription to your topic:
import * as subs from '@aws-cdk/aws-sns-subscriptions';
const myTopic = new sns.Topic(this, 'MyTopic');
myTopic.addSubscription(new subs.UrlSubscription('https://foobar.com/'));
Subscribe a queue to the topic:
myTopic.addSubscription(new subs.SqsSubscription(queue));
Note that subscriptions of queues in different accounts need to be manually confirmed by
reading the initial message from the queue and visiting the link found in it.
Filter policy
A filter policy can be specified when subscribing an endpoint to a topic.
Example with a Lambda subscription:
const myTopic = new sns.Topic(this, 'MyTopic');
const fn = new lambda.Function(this, 'Function', ...);
topic.addSubscription(new subs.LambdaSubscription(fn, {
filterPolicy: {
color: sns.SubscriptionFilter.stringFilter({
whitelist: ['red', 'orange'],
matchPrefixes: ['bl']
}),
size: sns.SubscriptionFilter.stringFilter({
blacklist: ['small', 'medium'],
}),
price: sns.SubscriptionFilter.numericFilter({
between: { start: 100, stop: 200 },
greaterThan: 300
}),
store: sns.SubscriptionFilter.existsFilter(),
}
}));
CloudWatch Event Rule Target
SNS topics can be used as targets for CloudWatch event rules.
Use the @aws-cdk/aws-events-targets.SnsTopic
:
import * as targets from '@aws-cdk/aws-events-targets';
codeCommitRepository.onCommit(new targets.SnsTopic(myTopic));
This will result in adding a target to the event rule and will also modify the
topic resource policy to allow CloudWatch events to publish to the topic.