AWS BudgetsのコストアラートをSlackに自動通知するTerraform設定です。
このシステムは以下の流れでAWSのコスト監視を行います:
AWS Budgets → SNS Topic → AWS Chatbot → Slack Channel
- AWS Budgets: 月次予算を設定し、閾値を超えた際にアラートを発行
- SNS Topic: アラートメッセージを配信
- AWS Chatbot: SNSメッセージをSlackに転送
- Slack: チームにコストアラートを通知
graph LR
A[AWS Budgets<br/>予算監視・アラート発行] --> B[SNS Topic<br/>メッセージ配信]
B --> C[AWS Chatbot<br/>メッセージ転送]
C --> D[Slack Channel<br/>通知表示]
style A fill:#ff9999
style B fill:#99ccff
style C fill:#99ff99
style D fill:#ffcc99
sequenceDiagram
participant User as ユーザー
participant Budget as AWS Budgets
participant SNS as SNS Topic
participant Chatbot as AWS Chatbot
participant Slack as Slack Channel
participant Email as メール通知
User->>Budget: 予算設定($100, 80%閾値)
Budget->>Budget: コスト監視
alt 予算の80%を超過
Budget->>SNS: アラートメッセージ送信
SNS->>Chatbot: メッセージ配信
SNS->>Email: メール通知
Chatbot->>Slack: Slack通知
Slack->>User: アラート表示
Email->>User: メール受信
end
- AWS Budgets: 月次予算の設定
- SNS Topic: アラートメッセージの配信
- SNS Topic Policy: BudgetsからのPublish権限
- SNS Subscription: メール通知(オプション)
- IAM Role: Chatbot用の権限
- IAM Policy: SNSアクセス権限
- AWS Chatbot: Slack連携設定
- Slack Workspace: 通知先のワークスペース
- Slack Channel: 通知先のチャンネル
- AWS CLI が設定済み
- Terraform がインストール済み
- Slack ワークスペースへの管理者権限
terraform.tfvars ファイルを作成し、以下の値を設定:
# メール通知先(オプション)
email_address = "your-email@example.com"
# Slack設定
slack_channel_id = "CXXXXXXXXXX" # SlackチャンネルID
slack_workspace_id = "TXXXXXXXXXX" # SlackワークスペースID
# AWS設定
aws_account_id = "123456789012" # AWSアカウントID
# 予算設定
threshold = "80" # 予算の80%で通知
limit_amount = "10" # 月次予算上限 $100# 初期化
terraform init
# 計画確認
terraform plan
# 適用
terraform apply- AWS ChatbotコンソールでSlack連携を確認
- テストメッセージを送信して動作確認
このシステムは完全無料です:
| サービス | 料金 |
|---|---|
| AWS Budgets | 無料 |
| SNS | 最初の100万リクエスト無料 |
| AWS Chatbot | 無料 |
| Slack | 既存ワークスペース使用 |
├── budgets.tf # AWS Budgets、SNS、Chatbot設定
├── data.tf # IAMポリシードキュメント
├── provider.tf # AWS プロバイダー設定
├── variables.tf # 変数定義
├── terraform.tfvars # 変数値(機密情報 - Git除外)
├── .gitignore # Git除外設定
└── README.md # このファイル
terraform.tfvars の limit_amount と threshold を変更:
# より厳しい監視
threshold = "50" # 50%で通知
limit_amount = "50" # $50の予算
# より緩い監視
threshold = "90" # 90%で通知
limit_amount = "500" # $500の予算budgets.tf にSNSサブスクリプションを追加:
resource "aws_sns_topic_subscription" "additional_email" {
topic_arn = aws_sns_topic.aws_budget_alerts.arn
protocol = "email"
endpoint = "additional@example.com"
}terraform.tfvarsは機密情報を含むため、Gitにコミットされません- IAMロールは最小権限の原則に従って設定
- SNSトピックポリシーでBudgetsからのアクセスのみを許可
-
Slackに通知が届かない
- AWS Chatbotの設定を確認
- SlackチャンネルIDが正しいか確認
-
メール通知が届かない
- SNSサブスクリプションの確認メールをチェック
- スパムフォルダを確認
-
Terraform認証エラー
- AWS CLIの認証設定を確認
aws sts get-caller-identityでテスト
MIT License