What is @aws-cdk/aws-sns?
@aws-cdk/aws-sns is an AWS Cloud Development Kit (CDK) library that allows you to define Amazon Simple Notification Service (SNS) topics and subscriptions in your AWS infrastructure as code. This package provides a high-level, object-oriented abstraction to create and manage SNS resources programmatically.
What are @aws-cdk/aws-sns's main functionalities?
Create an SNS Topic
This code sample demonstrates how to create an SNS topic with a display name using the AWS CDK.
const sns = require('@aws-cdk/aws-sns');
const cdk = require('@aws-cdk/core');
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
const topic = new sns.Topic(this, 'MyTopic', {
displayName: 'My Cool Topic'
});
}
}
const app = new cdk.App();
new MyStack(app, 'MyStack');
Add an Email Subscription to an SNS Topic
This code sample shows how to add an email subscription to an SNS topic using the AWS CDK.
const sns = require('@aws-cdk/aws-sns');
const subs = require('@aws-cdk/aws-sns-subscriptions');
const cdk = require('@aws-cdk/core');
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
const topic = new sns.Topic(this, 'MyTopic');
topic.addSubscription(new subs.EmailSubscription('example@example.com'));
}
}
const app = new cdk.App();
new MyStack(app, 'MyStack');
Add a Lambda Subscription to an SNS Topic
This code sample demonstrates how to add a Lambda function as a subscription to an SNS topic using the AWS CDK.
const sns = require('@aws-cdk/aws-sns');
const subs = require('@aws-cdk/aws-sns-subscriptions');
const lambda = require('@aws-cdk/aws-lambda');
const cdk = require('@aws-cdk/core');
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
const topic = new sns.Topic(this, 'MyTopic');
const myFunction = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda')
});
topic.addSubscription(new subs.LambdaSubscription(myFunction));
}
}
const app = new cdk.App();
new MyStack(app, 'MyStack');
Other packages similar to @aws-cdk/aws-sns
aws-sdk
The aws-sdk package is the official AWS SDK for JavaScript, which provides low-level APIs for interacting with AWS services, including SNS. Unlike @aws-cdk/aws-sns, which is used for defining infrastructure as code, aws-sdk is used for making API calls to AWS services at runtime.
serverless
The serverless framework is a toolkit for deploying and operating serverless architectures, including AWS Lambda and SNS. It provides a higher-level abstraction compared to @aws-cdk/aws-sns and is focused on deploying serverless applications rather than defining infrastructure as code.
pulumi
Pulumi is an infrastructure as code tool that supports multiple cloud providers, including AWS. It allows you to define and manage cloud resources using familiar programming languages. Pulumi provides similar functionalities to @aws-cdk/aws-sns but offers a different approach and supports multiple clouds.
Amazon Simple Notification Service Construct Library
Add an SNS Topic to your stack:
import sns = require('@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 subs = require('@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.subscribeLambda(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
})
}
}));
CloudWatch Event Rule Target
SNS topics can be used as targets for CloudWatch event rules.
Use the @aws-cdk/aws-events-targets.SnsTopicTarget
:
import targets = require('@aws-cdk/aws-events-targets');
codeCommitRepository.onCommit(new targets.SnsTopicTarget(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.
1.0.0 (2019-07-09)
General Availability of the AWS Cloud Development Kit!! πππ₯π₯πΎπΎ
We are excited to announce the 1.0.0 release of the AWS CDK β
including GA support for TypeScript, JavaScript, and Python!
We want to thank all of our early customers, and the hundreds of contributors,
for all the help and support in making this release a reality.
Thank you for the patience to deal with the many, many breaking changes that happened along the way.
This product would not be what it is today if it weren't for all the feedback,
diligent issue reporting (bugs, missing features, unclear documentation, etc.),
and code contributions from the community.
Special thanks go out to a few of our most prolific contributors who went above and beyond to help improve the CDK:
1.0.0 is a huge milestone for us, but it's still only the beginning!
We are excited to continue evolving the CDK, to introduce support for new languages and capabilities,
and to continue working closely with the open-source community.
Bug Fixes
- cli: output message when successfully synthesizing multiple stacks (#3259) (0c30f12)
- python: Make sure stack name in the init template does not contain illegal characters (#3261) (7d22b2c)