Skip to content
AWS SNS to Slack publisher
Python
Branch: master
Clone or download
Latest commit e496fe2 May 15, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc Remove this May 11, 2018
handlers Add a debug line May 10, 2018
tests Really make this test work May 15, 2018
.gitignore Remove this May 11, 2018
.travis.yml Just use sed May 13, 2018
LICENSE Initial commit May 10, 2018
README.md syntax May 15, 2018
diagram.png Initial commit May 10, 2018
package.json Add SAM template May 11, 2018
pytest.ini Initial commit May 10, 2018
requirements-dev.txt Initial commit May 10, 2018
requirements.txt Add message validation May 10, 2018
sam.yml Meant TopicName May 14, 2018
serverless.yml Add SAM template May 11, 2018
slack-message-schema.json Upon closer reading of Slack API doc, text is optional so lon as May 12, 2018

README.md

aws-sns-to-slack-publisher

Serverless License Build Status

Publish a message received from SNS to Slack.

System Architecture

This service requires an SNS topic for it to subscribe to. It will receive SNS messages formatted for the chat.postMessage Slack API for publishing to Slack.

Example service:

Slack App setup

This service requires the creation of a Slack App in your organization. It will use the credentials and permissions of that app in order to post messages.

1) Sign in to your Slack workspace.

click the link below to sign into the desired Slack workspace.

2) Create a Slack app in your workspace.

Click the link below and on that page click the "Create New App" button.

Give the app a name and select the workspace.

Slack Create App

3) Obtain OAth token and select permissions.

OAuth Tokens & Redirect URLs

Click "OAuth & Permissions" in the left side bar. On that page under the OAuth Tokens & Redirect URLs section obtain an OAuth Access Token. You will need that to deploy this service.

Under the Scopes section add the following:

  • channels:read
  • chat:write:bot

Once you've saved settings, your Slack bot is configured.

Service Interface

  • Event Type: AWS SNS
  • SNS Message: Message should be a JSON formatted string that conforms to the chat.postMessage Slack API method. See also slack-message-schema.json in this repository to understand more about the message shape.

Deployment

You will need the following in order to deploy and use this service.

  • A Slack App API key
  • A Slack channel
  • The CloudFormation export value of the SNS topic ARN this should subscribe to.

In addition, this service can optionally publish responses from the Slack API to an SNS topic so the responses may be processed. You may toggle this attribute of the stack as well.

This application is intended to be deployed using AWS Serverless Application Repository. However, Serverless Framework is also supported.

Serverless Application Repository / CloudFormation

When deploying via Serverless Application Repository or CloudFormation, you will be presented with the following parameters to configure.

  • SlackApiToken (Required): API token to use when publishing to slack.
  • SlackDefaultChannel: Channel messages should be published to.
  • SnsPublishResponse: Name of the CloudFormation export to find the event source SNS topic to subscribe
  • SnsPublisherTopicExport (Required): Whether to publish Slack API responses to an SNS topic.

AWS Serverless Application Repository: aws-sns-to-slack-publisher

Serverless Framework

To configure the deployment of this service, the following environment variables may be set when running sls deploy.

  • SLACK_API_TOKEN (Required): API token to use when publishing to slack.
  • SLACK_DEFAULT_CHANNEL: Channel messages should be published to.
  • SNS_PUBLISHER_TOPIC_EXPORT (Required): Name of the CloudFormation export to find the event source SNS topic to subscribe to.
  • SNS_PUBLISH_RESPONSE (Values: 'true'|'false'): Whether to publish Slack API responses to an SNS topic.
$ npm install -g serverless
$ npm install
$ SLACK_API_TOKEN=|TOKEN| SNS_PUBLISHER_TOPIC_EXPORT=|CFN_EXPORT| serverless deploy -v

Exports

These values may be used by other services in your AWS infrastructure.

  • ${AWS::StackName}-SlackResponseSnsTopicArn: Topic to which Slack publishing responses are sent.
You can’t perform that action at this time.