Connect AWS Budgets to Slack: Alert before the surprise bill arrives

AWS Budgets can send alerts when spending approaches or exceeds a defined threshold. By default, it sends them to email addresses. Email is where alerts go to be missed. A budget breach notification that sits unread for three days while a runaway resource accumulates costs is no alert at all.

Slack integration routes the same alerts to the channel your team actually monitors. When a threshold is crossed, the notification arrives in context alongside the other operational signals your team works with. This guide covers the complete setup: budget creation, SNS configuration, AWS Chatbot integration, and the UK-specific configuration details that most guides omit.

Prerequisites

Before starting, confirm:

  • An AWS account with Budgets enabled (available under Cost Management in the console)
  • A Slack workspace where you have admin rights to add apps
  • An IAM user with billing permissions (the root account should not be used for this)
  • The eu-west-2 (London) region selected if your team prefers UK region proximity, though Budgets itself is a global service

For UK organisations, set currency to GBP in your account billing preferences. AWS Budgets uses the account's preferred currency in threshold calculations. If your account bills in USD, you will need to account for exchange rate fluctuations when setting pound-sterling thresholds.

Step 1: Create an SNS topic

Amazon SNS is the intermediary between AWS Budgets and Slack. Budgets publishes notifications to an SNS topic; AWS Chatbot subscribes to that topic and forwards messages to Slack.

In the AWS console, navigate to Simple Notification Service > Topics > Create topic. Choose Standard type (not FIFO). Give it a descriptive name: aws-budget-alerts. Note the Topic ARN after creation.

Update the topic's access policy to allow AWS Budgets to publish to it. In the topic's Access policy editor, add this statement within the existing policy's Statement array:

{
  "Sid": "AllowBudgetsPublish",
  "Effect": "Allow",
  "Principal": {
    "Service": "budgets.amazonaws.com"
  },
  "Action": "SNS:Publish",
  "Resource": "arn:aws:sns:REGION:ACCOUNT_ID:aws-budget-alerts"
}

Without this, AWS Budgets cannot deliver notifications to the topic and alerts will silently fail.

If you use AWS KMS to encrypt the SNS topic, add a corresponding KMS key policy allowing budgets.amazonaws.com to call kms:GenerateDataKey* and kms:Decrypt. Encrypted topics without this key policy will block Budgets from publishing.

Step 2: Set up AWS Chatbot with Slack

AWS Chatbot handles the Slack integration without requiring a Lambda function. Navigate to AWS Chatbot in the console (search for it directly). Click Configure new client and select Slack.

Authorise AWS Chatbot to access your Slack workspace. You will be redirected to Slack to approve the connection. After approval, you return to the AWS console to configure a channel.

Configure a Slack channel:

  • Select the workspace you just connected
  • Enter the Slack channel ID (not the channel name; find it by right-clicking the channel in Slack > Copy link, then extract the ID from the URL)
  • Select the SNS topic ARN you created in Step 1 as the notification topic
  • Set an IAM role for Chatbot to assume; use the AWSChatbotServiceLinkedRolePolicy or create a custom role with read-only permissions

For security, use a private Slack channel for budget alerts rather than a public one. Budget notifications contain cost data that should not be visible to every member of the workspace.

Step 3: Create the budget and configure alerts

In the AWS console, navigate to Cost Management > Budgets > Create budget. Choose Customise (advanced) to control thresholds precisely.

Select Cost budget. Configure:

  • Budget name: Use a descriptive convention: Production-Monthly-Budget or {AccountName}-{Period}
  • Period: Monthly, Recurring (resets automatically at the start of each month)
  • Budget amount: Your monthly ceiling in GBP (e.g., £5,000)
  • Filters: Optionally scope to specific services, regions, or cost allocation tags

For the UK financial year (April-March), create an annual budget alongside the monthly one to track cumulative spend against the year's allocation. AWS Budgets supports both monthly and annually resetting budget periods.

Configure alert thresholds under Budget alerts. Add multiple conditions:

Threshold Type Purpose
50% Actual Informational: spend is on track
80% Actual Warning: investigate if unexpected
80% Forecasted Early warning before actual breach
100% Actual Limit reached: review immediately

For each alert, under Notification preferences > Amazon SNS Alerts, enter the ARN of the SNS topic from Step 1. This routes the alert to Slack via Chatbot.

Step 4: Create separate budgets per service

A single monthly budget catches the total spend but does not tell you which service is responsible when it fires. Create additional budgets for your high-cost services:

  • EC2 compute (typically the largest line item)
  • RDS or Aurora (database compute and storage)
  • S3 (can grow unexpectedly with log accumulation)
  • Data transfer (often underestimated)

Filter each budget to the specific service using the Service filter in the budget configuration. When the EC2 budget fires at 80%, your team knows immediately that compute is the cause rather than spending time in Cost Explorer to diagnose.

Testing the integration

Do not wait for a real budget breach to discover the integration is broken. Test it:

  1. Temporarily lower a budget threshold below your current spend (e.g., set the 50% threshold to 1% of the budget)
  2. Wait up to 10 minutes for AWS Budgets to evaluate and send the alert
  3. Confirm the Slack message arrives with the correct budget name and threshold information
  4. Restore the original threshold

Alternatively, use the SNS console to publish a test message directly to the topic and confirm it appears in Slack.

Where Critical Cloud comes in

Budget alerts tell you when spend is high. They do not tell you why. A budget that fires at 80% every month because of legitimate growth needs no action. One that fires mid-month when it normally hits 80% at month-end means something changed. We run AWS cost monitoring for technology-led businesses alongside observability, so spend anomalies appear in the same operational context as infrastructure and application health signals. As the world's first Powered by Datadog accredited partner, we correlate cost events with resource changes and deployments. See how Critical Support works.