This module creates an SNS topic (or uses an existing one) and an AWS Lambda function that sends notifications to Slack using the incoming webhooks API.
Start by setting up an incoming webhook integration in your Slack workspace.
Doing serverless with Terraform? Check out serverless.tf framework, which aims to simplify all operations when working with the serverless in Terraform.
module "notify_slack" {
source = "terraform-aws-modules/notify-slack/aws"
version = "~> 4.0"
sns_topic_name = "slack-topic"
slack_webhook_url = "https://hooks.slack.com/services/AAA/BBB/CCC"
slack_channel = "aws-notification"
slack_username = "reporter"
}
Version 3 uses Terraform AWS Lambda module to handle most of heavy-lifting related to Lambda packaging, roles, and permissions, while maintaining the same interface for the user of this module after many of resources will be recreated.
Terraform Cloud Agents are a paid feature, available as part of the Terraform Cloud for Business upgrade package.
This module requires Python 3.8. You can customize tfc-agent to include Python using this sample Dockerfile
:
FROM hashicorp/tfc-agent:latest
RUN apt-get -y update && apt-get -y install python3.8 python3-pip
ENTRYPOINT ["/bin/tfc-agent"]
If you want to subscribe the AWS Lambda Function created by this module to an existing SNS topic you should specify create_sns_topic = false
as an argument and specify the name of existing SNS topic name in sns_topic_name
.
To run the tests:
Set up a dedicated slack channel as a test sandbox with it's own webhook. See Slack Incoming Webhooks docs for details.
Make a copy of the sample pytest configuration and edit as needed.
cp functions/pytest.ini.sample functions/pytest.ini
Run the tests:
pytest functions/notify_slack_test.py
Name | Version |
---|---|
terraform | >= 0.13.0 |
aws | >= 2.35 |
Name | Version |
---|---|
aws | >= 2.35 |
Name | Source | Version |
---|---|---|
lambda | terraform-aws-modules/lambda/aws | 1.47.0 |
Name | Type |
---|---|
aws_cloudwatch_log_group.lambda | resource |
aws_sns_topic.this | resource |
aws_sns_topic_subscription.sns_notify_slack | resource |
aws_caller_identity.current | data source |
aws_iam_policy_document.lambda | data source |
aws_partition.current | data source |
aws_region.current | data source |
Name | Description | Type | Default | Required |
---|---|---|---|---|
cloudwatch_log_group_kms_key_id | The ARN of the KMS Key to use when encrypting log data for Lambda | string |
null |
no |
cloudwatch_log_group_retention_in_days | Specifies the number of days you want to retain log events in log group for Lambda. | number |
0 |
no |
cloudwatch_log_group_tags | Additional tags for the Cloudwatch log group | map(string) |
{} |
no |
create | Whether to create all resources | bool |
true |
no |
create_sns_topic | Whether to create new SNS topic | bool |
true |
no |
iam_role_boundary_policy_arn | The ARN of the policy that is used to set the permissions boundary for the role | string |
null |
no |
iam_role_name_prefix | A unique role name beginning with the specified prefix | string |
"lambda" |
no |
iam_role_tags | Additional tags for the IAM role | map(string) |
{} |
no |
kms_key_arn | ARN of the KMS key used for decrypting slack webhook url | string |
"" |
no |
lambda_description | The description of the Lambda function | string |
null |
no |
lambda_function_name | The name of the Lambda function to create | string |
"notify_slack" |
no |
lambda_function_s3_bucket | S3 bucket to store artifacts | string |
null |
no |
lambda_function_store_on_s3 | Whether to store produced artifacts on S3 or locally. | bool |
false |
no |
lambda_function_tags | Additional tags for the Lambda function | map(string) |
{} |
no |
lambda_function_vpc_security_group_ids | List of security group ids when Lambda Function should run in the VPC. | list(string) |
null |
no |
lambda_function_vpc_subnet_ids | List of subnet ids when Lambda Function should run in the VPC. Usually private or intra subnets. | list(string) |
null |
no |
lambda_role | IAM role attached to the Lambda Function. If this is set then a role will not be created for you. | string |
"" |
no |
log_events | Boolean flag to enabled/disable logging of incoming events | bool |
false |
no |
reserved_concurrent_executions | The amount of reserved concurrent executions for this lambda function. A value of 0 disables lambda from being triggered and -1 removes any concurrency limitations | number |
-1 |
no |
slack_channel | The name of the channel in Slack for notifications | string |
n/a | yes |
slack_emoji | A custom emoji that will appear on Slack messages | string |
":aws:" |
no |
slack_username | The username that will appear on Slack messages | string |
n/a | yes |
slack_webhook_url | The URL of Slack webhook | string |
n/a | yes |
sns_topic_kms_key_id | ARN of the KMS key used for enabling SSE on the topic | string |
"" |
no |
sns_topic_name | The name of the SNS topic to create | string |
n/a | yes |
sns_topic_tags | Additional tags for the SNS topic | map(string) |
{} |
no |
subscription_filter_policy | (Optional) A valid filter policy that will be used in the subscription to filter messages seen by the target resource. | string |
null |
no |
tags | A map of tags to add to all resources | map(string) |
{} |
no |
Name | Description |
---|---|
lambda_cloudwatch_log_group_arn | The Amazon Resource Name (ARN) specifying the log group |
lambda_iam_role_arn | The ARN of the IAM role used by Lambda function |
lambda_iam_role_name | The name of the IAM role used by Lambda function |
notify_slack_lambda_function_arn | The ARN of the Lambda function |
notify_slack_lambda_function_invoke_arn | The ARN to be used for invoking Lambda function from API Gateway |
notify_slack_lambda_function_last_modified | The date Lambda function was last modified |
notify_slack_lambda_function_name | The name of the Lambda function |
notify_slack_lambda_function_version | Latest published version of your Lambda function |
this_slack_topic_arn | The ARN of the SNS topic from which messages will be sent to Slack |
Module is maintained by Anton Babenko with help from these awesome contributors.
Apache 2 Licensed. See LICENSE for full details.
Terraform AWS frontend module Collection of Terraform modules for frontend app deployment on AWS. List of submodules Frontend app Maintainers Bartłomiej Wójtowicz (@qbart) Łukasz Pawlik (@LukeP91) LIC
Terraform Provider for AWS Website: terraform.io Tutorials: learn.hashicorp.com Forum: discuss.hashicorp.com Chat: gitter Mailing List: Google Groups The Terraform AWS provider is a plugin for Terrafo
AWS VPC Terraform module Terraform module which creates VPC resources on AWS. Usage module "vpc" { source = "terraform-aws-modules/vpc/aws" name = "my-vpc" cidr = "10.0.0.0/16" azs = [
Mastodon on AWS with Terraform Terraform module for mastodon service deploy Will deploy an ec2 instance with mastodon and run the service. Requirements AWS account EC2 domain with Route53 Terraform Us
AWS RDS Terraform module Terraform module which creates RDS resources on AWS. Root module calls these modules which can also be used separately to create independent resources: db_instance - creates R
AWS Identity and Access Management (IAM) Terraform module Features Cross-account access. Define IAM roles using iam_assumable_role or iam_assumable_roles submodules in "resource AWS accounts (prod, st