# Simple Notification Service Managed pub/sub message delivery service. 1. [TL;DR](#tldr) 1. [Connect a Slack channel to SNS](#connect-a-slack-channel-to-sns) 1. [Further readings](#further-readings) 1. [Sources](#sources) ## TL;DR _Publishers_ (or _producers_) send messages to a _topic_.
Topics are logical access points acting as communication channels for multiple _endpoints_ like SQS, emails, lambda, and others. SNS can be also used to send notifications to HTTP(S) endpoints such as Webhook URLs.
Anyway, SNS does **not** support sending requests using JSON key-value pairs, which some webhooks require (i.e. Slack). _Subscribers_ (or _consumers_) subscribe to the topic and receive published messages using a supported endpoint type.
Standard topics - Do **not** enforce strict message ordering, grouping, **nor** deduplication.
Consumers of the queue may receive messages out of order, and more than once. - Support **all** delivery protocols.
FIFO topics - Integrate with FIFO queues in [SQS]. - **Do** enforce strict message ordering, grouping, and deduplication.
They always deliver messages to subscribed [SQS] queues in the **exact** order in which the messages are published to the topic, and **only once**. - **Do** ensure strict message ordering, message grouping, and deduplication. - Allowing FIFO and standard queues to subscribe for message processing.
By default, only the topic's owner can publish or subscribe to the topic.
Configure additional access permissions by expanding the topic's Access policy.
Usage ```sh # List topics. aws sns list-topics # Get information about topics. aws sns get-topic-attributes --topic-arn 'arn:aws:sns:eu-west-1:012345678901:aSucculentTopic' # List subscriptions. aws sns list-subscriptions aws sns list-subscriptions --query 'Subscriptions' aws sns list-subscriptions-by-topic --topic-arn 'arn:aws:sns:eu-west-1:012345678901:aSucculentTopic' # Get information about subscriptions. aws sns get-subscription-attributes \ --subscription-arn 'arn:aws:sns:eu-west-1:012345678901:aSucculentTopic:abcdef01-2345-6789-abcd-ef0123456789' ```
## Connect a Slack channel to SNS Refer [How to Connect AWS SNS to Slack using Webhooks: Easy Step-by-Step Explanation]. SNS does **not** currently support integrating directly with third-party applications.
Leverage [Slack's incoming webhooks] or create a [Chatbot] configuration for the destination Slack channel.
Webhook SNS does **not** currently support sending requests using JSON key-value pairs, and Slack's webhooks require JSON requests to include a message string as the value of the `text` key.
To solve this, use a Lambda function to modify the SNS message's body JSON document for the webhook endpoint. Procedure: 1. Ensure the existence of a [Slack incoming webhook][slack's incoming webhooks] to send requests to. 1. Create a topic.
The _standard_ type is usually enough. 1. Create a Lambda function.
And test it works. 1. Add a topic trigger to the function.
Chatbot 1. Ensure the existence of a [Slack incoming webhook][slack's incoming webhooks] to send requests to. 1. Create a topic.
The _standard_ type is usually enough. 1. Create a IAM Role for the Chatbot configuration to use.
```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "chatbot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } ``` ```json { "Version": "2012-10-17", "Statement": [ { "Sid": "Autogenerated-AWS-Chatbot-NotificationsOnly-Policy", "Effect": "Allow", "Action": [ "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" } ] } ```
1. Create a Chatbot configuration for the destination Slack channel.
## Further readings - [SQS] ### Sources - [What is Amazon SNS?] - [How To Set Up A Slack Channel To Be An AWS SNS Subscriber] - [How to Connect AWS SNS to Slack using Webhooks: Easy Step-by-Step Explanation] [chatbot]: chatbot.md [sqs]: sqs.md [slack's incoming webhooks]: ../../slack.md#incoming-webhooks [what is amazon sns?]: https://docs.aws.amazon.com/sns/latest/dg/welcome.html [how to set up a slack channel to be an aws sns subscriber]: https://medium.com/cohealo-engineering/how-set-up-a-slack-channel-to-be-an-aws-sns-subscriber-63b4d57ad3ea [how to connect aws sns to slack using webhooks: easy step-by-step explanation]: https://hevodata.com/learn/sns-to-slack/