AWSサービスクォータ制限を監視してSlack通知してみた(AWS Trusted Advisor + AWS Step Functions + Amazon EventBridge + Slack Webhook)

AWSサービスクォータ制限を監視してSlack通知してみた(AWS Trusted Advisor + AWS Step Functions + Amazon EventBridge + Slack Webhook)

2025.10.13

意図しないAWSサービスクォータ枯渇を防ぐためには、監視の設定が必要です。

先日自動管理設定機能が追加されましたので、基本的にはこちらを使って監視することをお勧めします

https://dev.classmethod.jp/articles/automatic-quota-management-service-quotas/

上記の機能で要件を満たせない場合は、独自で仕組みを作る必要があります。

今回は、AWS Trusted Advisor + AWS Step Functions + Amazon EventBridge + Slack Webhookを組み合わせた構成をご紹介します。

構成

aws-architecture-diagram.png

Slack通知にAmazon Q Developer in chat applications ではなくSlack Webhookを使った理由

Slackへの通知には、Amazon Q Developer in chat applications (旧称: AWS Chatbot)を使うことも可能です。

しかし、今回はSlack Webhookを使いました。

複数AWSアカウントへ展開する際の設定の手間を減らしたかったからです。

今回の仕組みをAWSアカウントごとに展開する場合、それぞれのAWSアカウントでAmazon Q Developer in chat applicationsの設定が必要になります。

一方、Slack Webhookの場合は、通知先のチャンネルごとにSlack側で1回発行すれば良いため、AWSアカウントごとに通知の設定を行う必要がありません。

Slack Webhookの呼び出しにStep Functionsを利用

今回Slack Webhookを叩く部分にStep Functionsを利用しました。

この処理はAPIリクエストを行うだけでかなりシンプルです。

Lambdaで実装することも可能ですが、ランタイムバージョンのメンテナンス負荷をなくすためにStep Functionsを利用しました。

やってみた

リソースをデプロイ

Terraformで作成しました。コードの全体は以下をご確認ください。

https://github.com/msato0731/terraform-sample/tree/main/aws-service-quota-monitoring

実行する際には、terraform.tfvarsを用意してSlack Webhook URLをセットしてください。

			
			cp terraform.tfvars-sample terraform.tfvars

		
terraform.tfvars
			
			slack_webhook_url = "https://hooks.slack.com/services/hoge/fuga/piyo"

		
			
			terraform init
terraform plan
terraform apply

		

サンプルコード中では、サービスクォータの監視対象としてVPC VPC Internet Gateways EC2-VPC Elastic IP Addressの3つとしています。

check-nameの配列部分に任意の対象を追加することで、監視対象を増やすことが可能です。

main.tf
			
			# EventBridge Rule for Trusted Advisor
resource "aws_cloudwatch_event_rule" "service_quota_monitoring" {
  name        = "ServiceQuotaMonitoring-Alert"
  description = "Monitor AWS service quotas via Trusted Advisor alerts"

  event_pattern = jsonencode({
    source      = ["aws.trustedadvisor"]
    detail-type = ["Trusted Advisor Check Item Refresh Notification"]
    detail = {
      status = ["ERROR", "WARN"]
      check-name = [
        "VPC",
        "VPC Internet Gateways",
        "EC2-VPC Elastic IP Address",
      ]
    }
  })

  state = "ENABLED"
}

		

Step FunctionsでCall HTTPS APIsアクションを使うために、aws_cloudwatch_event_connectionを定義する必要がありました。

Slack Webhook URLを叩く際にはAPI Keyは不要ですが、上記のアクションを使う際に値が必要だったのでダミー値をセットしています。

main.tf
			
			# EventBridge Connection for HTTP calls
resource "aws_cloudwatch_event_connection" "slack_webhook" {
  name        = "ServiceQuotaMonitoring-SlackWebhook"
  description = "Connection for Slack webhook"

  authorization_type = "API_KEY"
  auth_parameters {
    api_key {
      key   = "Authorization"
      value = "Bearer dummy" # Slack webhooks don't require auth, but connection needs this
    }
  }
}

		

動作確認

EIPをサービスクォータの上限値(デフォルト5個)まで作成して、Slack通知が飛ぶことをテストしました。

サービスの制限___Trusted_Advisor___Global.png

Slackを確認すると以下のメッセージが届きました。

random__Channel__-_test_-_Slack.png

おわりに

AWS Trusted Advisor + AWS Step Functions + Amazon EventBridge + Slack Webhookを組み合わせたサービスクォータ監視についてでした。

冒頭に紹介したAWS Service Quotasの自動管理機能が良さそうと思うのですが、現時点では通知タイミングやメッセージのカスタマイズには対応していません。

自動管理機能で要件を満たせなさそうな場合は、本ブログの構成も検討してみてください。

この記事をシェアする

FacebookHatena blogX

関連記事

AWSサービスクォータ制限を監視してSlack通知してみた(AWS Trusted Advisor + AWS Step Functions + Amazon EventBridge + Slack Webhook) | DevelopersIO