Skip to content
v2.274.0

Topic L2 construct ​

A new SNS topic.

Example ​

ts
import * as sns from 'aws-cdk-lib/aws-sns';

const topic = new sns.Topic(this, 'MyTopic');

const topicRule = new iot.TopicRule(this, 'TopicRule', {
  sql: iot.IotSql.fromStringAsVer20160323(
    "SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'",
  ),
  actions: [
    new actions.SnsTopicAction(topic, {
      messageFormat: actions.SnsActionMessageFormat.JSON, // optional property, default is SnsActionMessageFormat.RAW
    }),
  ],
});
python
import aws_cdk.aws_sns as sns


topic = sns.Topic(self, "MyTopic")

topic_rule = iot.TopicRule(self, "TopicRule",
    sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'"),
    actions=[
        actions.SnsTopicAction(topic,
            message_format=actions.SnsActionMessageFormat.JSON
        )
    ]
)
java
import software.amazon.awscdk.services.sns.*;


Topic topic = new Topic(this, "MyTopic");

TopicRule topicRule = TopicRule.Builder.create(this, "TopicRule")
        .sql(IotSql.fromStringAsVer20160323("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'"))
        .actions(List.of(
            SnsTopicAction.Builder.create(topic)
                    .messageFormat(SnsActionMessageFormat.JSON)
                    .build()))
        .build();
csharp
// Install: dotnet add package Amazon.CDK.Lib
using Amazon.CDK.AWS.SNS;


var topic = new Topic(this, "MyTopic");

var topicRule = new TopicRule(this, "TopicRule", new TopicRuleProps {
    Sql = IotSql.FromStringAsVer20160323("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'"),
    Actions = new [] {
        new SnsTopicAction(topic, new SnsTopicActionProps {
            MessageFormat = SnsActionMessageFormat.JSON
        }) }
});
go
// Install: go get github.com/aws/aws-cdk-go/awscdk/v2
import sns "github.com/aws/aws-cdk-go/awscdk"


topic := sns.NewTopic(this, jsii.String("MyTopic"))

topicRule := iot.NewTopicRule(this, jsii.String("TopicRule"), &TopicRuleProps{
	Sql: iot.IotSql_FromStringAsVer20160323(jsii.String("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'")),
	Actions: []IAction{
		actions.NewSnsTopicAction(topic, &SnsTopicActionProps{
			MessageFormat: actions.SnsActionMessageFormat_JSON,
		}),
	},
})

Initializer ​

ts
new Topic(scope: Construct, id: string, props?: TopicProps)
python
Topic(scope: Construct, id: str, props: typing.Optional[TopicProps] = None)
java
new Topic(Construct scope, String id, TopicProps props)
csharp
new Topic(Construct scope, string id, TopicProps? props = null)
go
NewTopic(Scope Construct, Id *string, Props TopicProps)

Construct Props ​

contentBasedDeduplicationbooleancontent_based_deduplicationboolcontentBasedDeduplicationBooleanContentBasedDeduplicationboolContentBasedDeduplication*bool= None#
Enables content-based deduplication for FIFO topics.
displayNamestringdisplay_namestrdisplayNameStringDisplayNamestringDisplayName*string= None#
A developer-defined string that can be used to identify this SNS topic.

The display name must be maximum 100 characters long, including hyphens (-), underscores (_), spaces, and tabs.

enforceSSLbooleanenforce_sslboolenforceSSLBooleanEnforceSSLboolEnforceSSL*bool= false#
Adds a statement to enforce encryption of data in transit when publishing to the topic.
fifobooleanfifoboolfifoBooleanFifoboolFifo*bool= None#
Set to true to create a FIFO topic.
fifoThroughputScopeFifoThroughputScopefifo_throughput_scopeFifoThroughputScopefifoThroughputScopeFifoThroughputScopeFifoThroughputScopeFifoThroughputScopeFifoThroughputScopeFifoThroughputScope= undefined - SNS default setting …#
Specifies the throughput quota and deduplication behavior to apply for the FIFO topic.

You can only set this property when fifo is true.

default

Default: undefined - SNS default setting is FifoThroughputScope.TOPIC

loggingConfigsLoggingConfig[]logging_configstyping.List[LoggingConfig]loggingConfigsList<LoggingConfig>LoggingConfigsLoggingConfig[]LoggingConfigs*[]LoggingConfig= None#
The list of delivery status logging configurations for the topic.
masterKeyIKeymaster_keyIKeymasterKeyIKeyMasterKeyIKeyMasterKeyIKey= None#
A KMS Key, either managed by this CDK app, or imported.
messageRetentionPeriodInDaysnumbermessage_retention_period_in_daysint | floatmessageRetentionPeriodInDaysNumberMessageRetentionPeriodInDaysdoubleMessageRetentionPeriodInDays*float64= do not archive messages#
The number of days Amazon SNS retains messages.

It can only be set for FIFO topics.

signatureVersionstringsignature_versionstrsignatureVersionStringSignatureVersionstringSignatureVersion*string= 1#
The signature version corresponds to the hashing algorithm used while creating the signature of the notifications, subscription confirmations, or unsubscribe confirmation messages sent by Amazon SNS.
topicNamestringtopic_namestrtopicNameStringTopicNamestringTopicName*string= Generated name#
A name for the topic.

If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the topic name. For more information, see Name Type.

tracingConfigTracingConfigtracing_configTracingConfigtracingConfigTracingConfigTracingConfigTracingConfigTracingConfigTracingConfig= TracingConfig.PASS_THROUGH#
Tracing mode of an Amazon SNS topic.

Properties ​

contentBasedDeduplicationbooleancontent_based_deduplicationboolcontentBasedDeduplicationBooleanContentBasedDeduplicationboolContentBasedDeduplication*boolrequired#
Enables content-based deduplication for FIFO topics.
The environment this resource belongs to.
notes

For resources that are created and managed in a Stack (those created by creating new class instances like new Role(), new Bucket(), etc.), this is always the same as the environment of the stack they belong to.

For referenced resources (those obtained from referencing methods like Role.fromRoleArn(), Bucket.fromBucketName(), etc.), they might be different than the stack they were imported into.

fifobooleanfifoboolfifoBooleanFifoboolFifo*boolrequired#
Whether this topic is an Amazon SNS FIFO queue.

If false, this is a standard topic.

grantsTopicGrantsgrantsTopicGrantsgrantsTopicGrantsGrantsTopicGrantsGrantsTopicGrantsrequired#
Collection of grant methods for a Topic.
masterKeyIKeymaster_keyIKeymasterKeyIKeyMasterKeyIKeyMasterKeyIKey#
A KMS Key, either managed by this CDK app, or imported.

This property applies only to server-side encryption.

nodeNodenodeNodenodeNodeNodeNodeNodeNoderequired#
The tree node.
PROPERTY_INJECTION_IDstringproperty_injection_idstrPROPERTY_INJECTION_IDStringPROPERTY_INJECTION_IDstringPROPERTY_INJECTION_ID*stringrequiredstatic#
Uniquely identifies this class.
stackStackstackStackstackStackStackStackStackStackrequired#
The stack in which this resource is defined.
topicArnstringtopic_arnstrtopicArnStringTopicArnstringTopicArn*stringrequired#
The ARN of the topic.
topicNamestringtopic_namestrtopicNameStringTopicNamestringTopicName*stringrequired#
The name of the topic.
topicRefTopicReferencetopic_refTopicReferencetopicRefTopicReferenceTopicRefTopicReferenceTopicRefTopicReferencerequired#
A reference to a Topic resource.

Methods ​

addLoggingConfig(config: LoggingConfig): voiddef add_logging_config(self, config: LoggingConfig) -> Nonepublic void addLoggingConfig(LoggingConfig config)public void AddLoggingConfig(LoggingConfig config)func AddLoggingConfig(Config LoggingConfig)#
Adds a delivery status logging configuration to the topic.
addSubscription(topicSubscription: ITopicSubscription): Subscriptiondef add_subscription(self, topic_subscription: ITopicSubscription) -> Subscriptionpublic Subscription addSubscription(ITopicSubscription topicSubscription)public Subscription AddSubscription(ITopicSubscription topicSubscription)func AddSubscription(TopicSubscription ITopicSubscription) Subscription#
Subscribe some endpoint to this topic.
addToResourcePolicy(statement: PolicyStatement): AddToResourcePolicyResultdef add_to_resource_policy(self, statement: PolicyStatement) -> AddToResourcePolicyResultpublic AddToResourcePolicyResult addToResourcePolicy(PolicyStatement statement)public AddToResourcePolicyResult AddToResourcePolicy(PolicyStatement statement)func AddToResourcePolicy(Statement PolicyStatement) AddToResourcePolicyResult#
Adds a statement to the IAM resource policy associated with this topic.
notes

If this topic was created in this stack (new Topic), a topic policy will be automatically created upon the first call to addToResourcePolicy. However, if enforceSSL is set to true, the policy has already been created before the first call to this method.

If the topic is imported (Topic.import), then this is a no-op.

applyCrossStackReferenceStrength(strength: ReferenceStrength): voiddef apply_cross_stack_reference_strength(self, strength: ReferenceStrength) -> Nonepublic void applyCrossStackReferenceStrength(ReferenceStrength strength)public void ApplyCrossStackReferenceStrength(ReferenceStrength strength)func ApplyCrossStackReferenceStrength(Strength ReferenceStrength)#
Override the cross-stack reference strength for this resource.
notes · 1 parameter

When set, any cross-stack reference to this resource will use the specified mechanism instead of the global default determined by the @aws-cdk/core:defaultCrossStackReferences context key. This is useful for selectively weakening specific references to avoid the "deadly embrace" problem without changing the app-wide default.

Parameters

  • strengthstrengthstrengthstrengthStrength — - The reference strength to use for this resource.
applyRemovalPolicy(policy: RemovalPolicy): voiddef apply_removal_policy(self, policy: RemovalPolicy) -> Nonepublic void applyRemovalPolicy(RemovalPolicy policy)public void ApplyRemovalPolicy(RemovalPolicy policy)func ApplyRemovalPolicy(Policy RemovalPolicy)#
Apply the given removal policy to this resource.
notes

The Removal Policy controls what happens to this resource when it stops being managed by CloudFormation, either because you've removed it from the CDK application or because you've made a change that requires the resource to be replaced.

The resource can be deleted (RemovalPolicy.DESTROY), or left in your AWS account for data recovery and cleanup later (RemovalPolicy.RETAIN).

bindAsNotificationRuleTarget(_scope: Construct): NotificationRuleTargetConfigdef bind_as_notification_rule_target(self, _scope: Construct) -> NotificationRuleTargetConfigpublic NotificationRuleTargetConfig bindAsNotificationRuleTarget(Construct _scope)public NotificationRuleTargetConfig BindAsNotificationRuleTarget(Construct _scope)func BindAsNotificationRuleTarget(_scope Construct) NotificationRuleTargetConfig#
Represents a notification target That allows SNS topic to associate with this rule target.
fromTopicArn(scope: Construct, id: string, topicArn: string): ITopic@staticmethod def from_topic_arn(scope: Construct, id: str, topic_arn: str) -> ITopicpublic static ITopic fromTopicArn(Construct scope, String id, String topicArn)public static ITopic FromTopicArn(Construct scope, string id, string topicArn)func FromTopicArn(Scope Construct, Id *string, TopicArn *string) ITopicstatic#
Import an existing SNS topic provided an ARN.
3 parameters

Parameters

  • scopescopescopescopeScope — The parent creating construct.
  • ididididId — The construct's name.
  • topicArntopic_arntopicArntopicArnTopicArn — topic ARN (i.e. arn:aws:sns:us-east-2:444455556666:MyTopic).
fromTopicAttributes(scope: Construct, id: string, attrs: TopicAttributes): ITopic@staticmethod def from_topic_attributes(scope: Construct, id: str, attrs: TopicAttributes) -> ITopicpublic static ITopic fromTopicAttributes(Construct scope, String id, TopicAttributes attrs)public static ITopic FromTopicAttributes(Construct scope, string id, TopicAttributes attrs)func FromTopicAttributes(Scope Construct, Id *string, Attrs TopicAttributes) ITopicstatic#
Import an existing SNS topic provided a topic attributes.
3 parameters

Parameters

  • scopescopescopescopeScope — The parent creating construct.
  • ididididId — The construct's name.
  • attrsattrsattrsattrsAttrs — the attributes of the topic to import.
grantOnKey(grantee: IGrantable, ...actions: string[]): GrantOnKeyResultdef grant_on_key(self, grantee: IGrantable, actions: str) -> GrantOnKeyResultpublic GrantOnKeyResult grantOnKey(IGrantable grantee, String actions)public GrantOnKeyResult GrantOnKey(IGrantable grantee, string actions)func GrantOnKey(Grantee IGrantable, Actions *string) GrantOnKeyResult#
Gives permissions to a grantable entity to perform actions on the encryption key.
grantPublish(grantee: IGrantable): Grantdef grant_publish(self, grantee: IGrantable) -> Grantpublic Grant grantPublish(IGrantable grantee)public Grant GrantPublish(IGrantable grantee)func GrantPublish(Grantee IGrantable) Grant#
Grant topic publishing permissions to the given identity.

The use of this method is discouraged. Please use grants.publish() instead.

[disable-awslint:no-grants]

grantSubscribe(grantee: IGrantable): Grantdef grant_subscribe(self, grantee: IGrantable) -> Grantpublic Grant grantSubscribe(IGrantable grantee)public Grant GrantSubscribe(IGrantable grantee)func GrantSubscribe(Grantee IGrantable) Grant#
Grant topic subscribing permissions to the given identity.

The use of this method is discouraged. Please use grants.subscribe() instead.

[disable-awslint:no-grants]

isConstruct(x: any): boolean@staticmethod def is_construct(x: Any) -> boolpublic static Boolean isConstruct(Object x)public static bool IsConstruct(object x)func IsConstruct(X interface{}) *boolstatic#
Checks if `x` is a construct.
notes · 1 parameter · returns

Use this method instead of instanceof to properly detect Construct instances, even when the construct library is symlinked.

Explanation: in JavaScript, multiple copies of the constructs library on disk are seen as independent, completely different libraries. As a consequence, the class Construct in each copy of the constructs library is seen as a different class, and an instance of one class will not test as instanceof the other class. npm install will not create installations like this, but users may manually symlink construct libraries together or use a monorepo tool: in those cases, multiple copies of the constructs library can be accidentally installed, and instanceof will behave unpredictably. It is safest to avoid using instanceof, and using this type-testing method instead.

Parameters

  • xxxxX — Any object.

Returns: true if x is an object created from a class which extends Construct.

isOwnedResource(construct: IConstruct): boolean@staticmethod def is_owned_resource(construct: IConstruct) -> boolpublic static Boolean isOwnedResource(IConstruct construct)public static bool IsOwnedResource(IConstruct construct)func IsOwnedResource(Construct IConstruct) *boolstatic#
Returns true if the construct was created by CDK, and false otherwise.
isResource(construct: IConstruct): boolean@staticmethod def is_resource(construct: IConstruct) -> boolpublic static Boolean isResource(IConstruct construct)public static bool IsResource(IConstruct construct)func IsResource(Construct IConstruct) *boolstatic#
Check whether the given construct is a Resource.
metric(metricName: string, props?: MetricOptions): Metricdef metric(self, metric_name: str, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metric(String metricName, MetricOptions props)public Metric Metric(string metricName, MetricOptions? props = null)func Metric(MetricName *string, Props MetricOptions) Metric#
Return the given named metric for this Topic.
metricNumberOfMessagesPublished(props?: MetricOptions): Metricdef metric_number_of_messages_published(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricNumberOfMessagesPublished(MetricOptions props)public Metric MetricNumberOfMessagesPublished(MetricOptions? props = null)func MetricNumberOfMessagesPublished(Props MetricOptions) Metric#
The number of messages published to your Amazon SNS topics.

Sum over 5 minutes

metricNumberOfNotificationsDelivered(props?: MetricOptions): Metricdef metric_number_of_notifications_delivered(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricNumberOfNotificationsDelivered(MetricOptions props)public Metric MetricNumberOfNotificationsDelivered(MetricOptions? props = null)func MetricNumberOfNotificationsDelivered(Props MetricOptions) Metric#
The number of messages successfully delivered from your Amazon SNS topics to subscribing endpoints.

Sum over 5 minutes

metricNumberOfNotificationsFailed(props?: MetricOptions): Metricdef metric_number_of_notifications_failed(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricNumberOfNotificationsFailed(MetricOptions props)public Metric MetricNumberOfNotificationsFailed(MetricOptions? props = null)func MetricNumberOfNotificationsFailed(Props MetricOptions) Metric#
The number of messages that Amazon SNS failed to deliver.

Sum over 5 minutes

metricNumberOfNotificationsFilteredOut(props?: MetricOptions): Metricdef metric_number_of_notifications_filtered_out(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricNumberOfNotificationsFilteredOut(MetricOptions props)public Metric MetricNumberOfNotificationsFilteredOut(MetricOptions? props = null)func MetricNumberOfNotificationsFilteredOut(Props MetricOptions) Metric#
The number of messages that were rejected by subscription filter policies.

Sum over 5 minutes

metricNumberOfNotificationsFilteredOutInvalidAttributes(props?: MetricOptions): Metricdef metric_number_of_notifications_filtered_out_invalid_attributes(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricNumberOfNotificationsFilteredOutInvalidAttributes(MetricOptions props)public Metric MetricNumberOfNotificationsFilteredOutInvalidAttributes(MetricOptions? props = null)func MetricNumberOfNotificationsFilteredOutInvalidAttributes(Props MetricOptions) Metric#
The number of messages that were rejected by subscription filter policies because the messages' attributes are invalid.

Sum over 5 minutes

metricNumberOfNotificationsFilteredOutNoMessageAttributes(props?: MetricOptions): Metricdef metric_number_of_notifications_filtered_out_no_message_attributes(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricNumberOfNotificationsFilteredOutNoMessageAttributes(MetricOptions props)public Metric MetricNumberOfNotificationsFilteredOutNoMessageAttributes(MetricOptions? props = null)func MetricNumberOfNotificationsFilteredOutNoMessageAttributes(Props MetricOptions) Metric#
The number of messages that were rejected by subscription filter policies because the messages have no attributes.

Sum over 5 minutes

metricPublishSize(props?: MetricOptions): Metricdef metric_publish_size(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricPublishSize(MetricOptions props)public Metric MetricPublishSize(MetricOptions? props = null)func MetricPublishSize(Props MetricOptions) Metric#
Metric for the size of messages published through this topic.

Average over 5 minutes

metricSMSMonthToDateSpentUSD(props?: MetricOptions): Metricdef metric_sms_month_to_date_spent_usd(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricSMSMonthToDateSpentUSD(MetricOptions props)public Metric MetricSMSMonthToDateSpentUSD(MetricOptions? props = null)func MetricSMSMonthToDateSpentUSD(Props MetricOptions) Metric#
The charges you have accrued since the start of the current calendar month for sending SMS messages.

Maximum over 5 minutes

metricSMSSuccessRate(props?: MetricOptions): Metricdef metric_sms_success_rate(self, props: typing.Optional[MetricOptions] = None) -> Metricpublic Metric metricSMSSuccessRate(MetricOptions props)public Metric MetricSMSSuccessRate(MetricOptions? props = null)func MetricSMSSuccessRate(Props MetricOptions) Metric#
The rate of successful SMS message deliveries.

Sum over 5 minutes

toString(): stringdef to_string(self, ) -> strpublic String toString()public string ToString()func ToString() *string#
Returns a string representation of this construct.
with(...mixins: IMixin[]): IConstructdef with(self, mixins: IMixin) -> IConstructpublic IConstruct with(IMixin mixins)public IConstruct With(IMixin mixins)func With(Mixins IMixin) IConstruct#
Applies one or more mixins to this construct.

Mixins are applied in order. The list of constructs is captured at the start of the call, so constructs added by a mixin will not be visited. Use multiple with() calls if subsequent mixins should apply to added constructs.