Topic ​
The Topic resource allows you to manage AWS SNS Topics for sending notifications and messages to subscribers.
Minimal Example ​
Create a basic SNS topic with a name and display name.
ts
import AWS from "alchemy/aws/control";
const basicTopic = await AWS.SNS.Topic("basicTopic", {
TopicName: "MyFirstSNSTopic",
DisplayName: "My First SNS Topic"
});
Advanced Configuration ​
Configure an SNS topic with enhanced settings like FIFO and KMS key.
ts
const advancedTopic = await AWS.SNS.Topic("advancedTopic", {
TopicName: "MyAdvancedSNSTopic.fifo",
FifoTopic: true,
KmsMasterKeyId: "arn:aws:kms:us-east-1:123456789012:key/abcd1234-a123-456a-a12b-a123b4cd56ef",
ContentBasedDeduplication: true
});
Delivery Status Logging ​
Set up an SNS topic with delivery status logging for monitoring message delivery.
ts
const loggingTopic = await AWS.SNS.Topic("loggingTopic", {
TopicName: "MyLoggingSNSTopic",
DeliveryStatusLogging: [
{
Format: "json",
Label: "MyLoggingLabel",
LogGroupArn: "arn:aws:logs:us-west-2:123456789012:log-group:MyLogGroup",
RoleArn: "arn:aws:iam::123456789012:role/MyLoggingRole"
}
]
});
Data Protection Policy ​
Create an SNS topic with a data protection policy to enforce access controls.
ts
const protectedTopic = await AWS.SNS.Topic("protectedTopic", {
TopicName: "MyProtectedSNSTopic",
DataProtectionPolicy: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Principal: {
AWS: "arn:aws:iam::123456789012:role/MyRole"
},
Action: "SNS:Publish",
Resource: "*",
Condition: {
StringEquals: {
"aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:MyProtectedSNSTopic"
}
}
}
]
}
});
Subscriptions Example ​
Create a topic and subscribe an email endpoint to receive notifications.
ts
const subscriptionTopic = await AWS.SNS.Topic("subscriptionTopic", {
TopicName: "MySubscriptionSNSTopic",
Subscription: [
{
Protocol: "email",
Endpoint: "user@example.com"
}
]
});