クォータを自動で確認して通知。

AWS でのクォータモニタを試してみた

2022-10-03
AWS ソリューション紹介

吉澤 巧 (監修 : 山澤 良介)

みなさん、こんにちは!ソリューションアーキテクトの吉澤 巧です。

今回は、お客様の課題に対応するためのテンプレートを提供する「AWS ソリューションライブラリ」の中から、AWS サービスのクォータをより楽に管理したい方に向けたソリューションを紹介したいと思います。

「そもそもクォータって何?」って思われた方もいらっしゃるかと思います。クォータとは、各サービスごとに定められた利用上限を示しています。クォータがあることで、お客様が誤った操作をしてしまい過剰に AWS サービスを利用してしまうことを防げます。デフォルトのクォータをいくつか挙げると、Amazon S3 は各アカウントごとに 100 バケットまで、Amazon VPC は各リージョンごとに 5 つまで、といったクォータがあります。クォータの種類によっては、引き上げリクエストによって上限が緩和されるものもあります。

クォータによって AWS リソースの過剰なプロビジョニングを防げる一方で、必要な AWS リソースの作成を妨げる可能性があります。また、引き上げリクエストは即時反映されるものもあれば、有効になるまでに数日かかるものもあります。今回紹介する「AWS でのクォータモニタ」を使うことによって、AWS Trusted Advisor によるリソースの使用状況の追跡を収集し、クォータの 80 %に達した場合や上限に達した場合はメールや Slack による通知が可能になります。これによって、上限到達前にクォータ引き上げをリクエストしたり、不要なリソースを停止するきっかけとなります。

今回のソリューションの実行には、ビジネスレベル以上の AWS サポートプランが必要です。サポートプランについては AWS Support プラン比較 を参考にしてください。

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

この記事のデモを無料でお試しいただけます »

毎月提供されるデベロッパー向けアップデート情報とともに、クレジットコードを受け取ることができます。 


AWS Trusted Advisor とは

AWS Trusted Advisor はお客様の AWS 環境を分析し、ベストプラクティスに沿うためのレコメンデーションを提供します。チェック項目は以下の 5 つに分類されます。

  • コストの最適化:AWSコストを削減する方法について提供
  • パフォーマンス:使用率の高いリソースを特定するなど、パフォーマンス改善する方法について提供
  • セキュリティ:AWS におけるセキュリティベストプラクティスについて提供
  • 耐障害性:AWS リソースの可用性と冗長性を高める方法について提供
  • サービス制限:サービスクォータの確認

コスト最適化を例に挙げると、Amazon EC2 リザーブドインスタンスの活用や利用率の低いインスタンスの検出などがチェックされます。なお、全項目をチェックするには、AWS ビジネスサポート以上のプラン契約が必要になります。AWS ベーシックサポートと AWS デベロッパーサポートの場合は、一部のセキュリティ項目とサービスクォータのみが確認されます。Trusted Advisorによってチェックされる項目や、ベーシックサポートで確認できる項目については「AWS Trusted Advisor のベストプラクティスチェックリスト」をご確認ください。

チェックされた項目は

  • :問題が検出されなかった項目
  • 黄 (警告) : 調査が推奨される項目
  • 赤 (エラー) : 即時の対応が推奨される項目

に分類され、AWS マネージメントコンソールや AWS CLI から確認することが可能になっています。

クリックすると拡大します

サービスクォータについては、制限の 80 %に達した場合黄(警告)、上限に達した場合赤(エラー)が表示されます。また、Trusted Advisor についてより詳しく知りたい方は、AWS Black Belt Online Seminar をご確認ください。


ソリューションの概要

AWS ソリューション「AWS でのクォータモニタ」は、24 時間毎に Trusted Advisor を更新してリソースの使用率を追跡し、上限に近づいた場合は通知を行う構成となっています。確認されるクォータ項目については「サービス制限 - AWS Support」をご覧ください。また、同時にデプロイされる Lambda 関数 vCPU チェッカーが 5 分毎に実行され、Amazon EC2 のクォータが重点的に確認されます。

通知先はメールだけでなく、Slack も選択することができます。なお、本ソリューションは、Trusted Advisor がグローバルサービスであるため、バージニア北部リージョンにデプロイする必要があります

以下の画像は、今回デプロイするソリューションのアーキテクチャ図となっています。

本ソリューションは、プライマリアカウントとセカンダリアカウントで構成されます。プライマリアカウントは、クォータの監視を行い、制限の 80 % に達していた場合メールもしくは Slack にて通知をするアカウントです。また、すべての監視履歴を Amazon DynamoDB に保存します。セカンダリアカウントは、クォータの監視を行い、その結果をプライマリアカウントに送信するアカウントです。

クォータ監視対象のアカウントが複数ある場合、全てをプライマリアカウントとして本ソリューションを利用することもできます。一方で、収集した情報や通知機能を集約することによって、運用管理の負担を減らすことが可能になります。そこで、本ソリューションでは 1 つのプライマリアカウントに通知機能を実装し、他アカウントはセカンダリとしてそれを利用する構成を推奨します。すでに通知機能を集約したアカウントを保有している場合、そのアカウントをプライマリとする構成が一般的となっています。

このテンプレートをデフォルトで使用した場合、以下のようなワークフローが立ち上がります。

1. 24 時間毎に実行される Lambda 関数により、Trusted Advisor によるサービス制限のチェックをします。
2. Amazon EC2 におけるクォータの確認に特化したLambda 関数が、5 分毎に実行されます。
3. 2つの Lambda 関数の実行結果は、Amazon EventBridge によってフィルタリングされます。そして、メール配信用の Amazon SNS、Slack 配信用の Lambda 関数、ステータス履歴保存用の Amazon SQS へそれぞれ配信されます。
4. (任意) Lambda 関数が Slack へ通知を送信します。この時、Slack へメッセージを送信するために必要な Webhook URL は、AWS Systems Manager Parameter Store に保存されます。
5. SQS に格納されたステータスチェック履歴について、Lambda 関数がポーリングを行い Amazon DynamoDB に書き込みます。書き込みに失敗した場合はデットレターキューに格納されます。

上記アーキテクチャ図のワークフロー 6 - 8 は、セカンダリアカウントで同様のチェックを行い、その結果をプライマリアカウントに集約するプロセスを表しています。

6. 24 時間毎に実行される Lambda 関数により、Trusted Advisor によるサービス制限のチェックをします。
7. Amazon EC2 におけるクォータの確認に特化したLambda 関数が、5 分毎に実行されます。
8. 実行結果は Amazon EventBridge によってフィルタリングされ、プライマリアカウントに転送されます。

なお、Amazon EC2 インスタンスのクォータ制限はインスタンス数ではなく、使用している vCPU 数ベースに対して行われます。 vCPU 数ベースのクォータの詳細は Amazon Elastic Compute Cloud エンドポイントとクォータをご確認ください。


コスト試算

いくら便利なソリューションといえど、やはりコストは気になりますよね。以下に本ソリューションのプライマリ・セカンダリアカウントにおける月額予想コストをまとめました。それぞれのアカウントが月額数ドル単位でご利用できることが分かるかと思います。また、上記アーキテクチャ図のワークフロー 2、Lambda 関数による vCPU クォータのモニタリング頻度 (デフォルト : 5 分) を下げることでコストを節約することができます。

AWS Service プライマリアカウント セカンダリアカウント
AWS Lambda 3.50 USD 3.00 USD
Amazon DynamoDB 1.50 USD ーーー
Amazon EventBridge 1.00 USD 1.00 USD
6.00 USD 4.00 USD

デプロイ手順

プライマリ・セカンダリアカウントそれぞれのデプロイ手順についてご紹介します。

プライマリアカウントの場合

Step1. テンプレートの起動

本ソリューションをデプロイするために、AWS でのクォータモニタにアクセスして「AWS コンソールで起動する」をクリックしましょう。

この時、AWS アカウントへのログインが求められた場合は、プライマリアカウントにログインしてください。

クリックすると拡大します

マネージメントコンソールの AWS CloudFormation の画面に移動したら、右上からアカウントを確認し、プライマリアカウントにログインしているか確認します。また、リージョンがバージニア北部になっていることも確認してください。

スタックの作成」ステップ1は変更せず、そのまま「次へ」を選択します。

クリックすると拡大します

Step2. テンプレートの詳細の入力

次に、テンプレートの詳細を入力していきます。「スタックの名前」はデフォルトで「LimitMonitor」となっていますが、任意の名前に変更可能です。

次に「パラメータ」です。

  • Account List : 本アカウント以外のクォータを監視する場合、ここにアカウント ID を二重引用符とカンマ区切りで入力します。(例:“123456789012”, “123456789013”)
    なお、プライマリアカウントのみを監視する場合は、空欄のままで大丈夫です。
  • Email Notification Level (必須) : Email で通知を行う Trusted Advisor の警告レベルを記入します。(例:“WARN”, “ERROR”)
  • Email Address (必須) : 通知先の Email アドレスを入力します。
  • Slack Notification Level : Slack で通知を行う Trusted Advisor の警告レベルを記入します。
  • Slack Hook URL Key Name : Slack から発行される webhook 用 URL、詳細は後述します。
  • Slack Channel Key Name : 送信先チャンネル名、詳細は後述します。

クリックすると拡大します

Step3. スタックオプションの設定

スタックオプションの設定」では、なにも変更せずに次へを押します。タグ等の設定が必要な場合は適宜変更してください。

Step4. レビュー

次に、「 レビュー」で設定を確認します。
 
一番下の「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」と「AWS CloudFormation によって次の機能が要求される場合があることを承認します」にチェックを入れて、 スタックの作成 」を選択してください。

クリックすると拡大します

Step5. 確認

最後に、スタックの作成が成功したことを確認します。作成所要時間は 5 分程度です。なお、途中のパラメータについては、作成後に変更して再デプロイすることも可能になっています。また、 パラメータに入力したメールアドレスに確認メールが到着したら、SubscirbeURL リンクをクリックして通知を有効化しましょう

クリックすると拡大します


セカンダリアカウントの場合

まず、プライマリアカウントにおける本ソリューションの Account List パラメータに、セカンダリアカウントの ID が追加されていることを確認してください。実装ガイドの「Step 2. Launch the spoke stack (optional)」から、「Launch solution」をクリックします。

その後は、CloudFormation スタックの作成をプライマリアカウントの時と同様に進めてください。パラメータの MasterAccount には、プライマリアカウントの ID を入力してください。

クリックすると拡大します

補足:Slack 通知のための設定

Slack を使用して通知を行う場合は、Incoming Webhook の設定が必要です。詳細は、実装ガイドをご確認ください。設定が完了したら、発行された URL と送信先チャンネル名を CloudFormation のパラメータに設定します。


動作確認

スタックの作成が完了したら動作確認をしていきましょう!DynamoDB にアクセスし、本ソリューションによってデプロイされたテーブルを開きます。CloudFormation のスタック名を変更していない場合、「LimitMonitor-SummaryDDB-****」というテーブル名で作成されています。テーブルアイテムの探索を押しアイテムのスキャンを実行することで、Trusted Advisorによる確認履歴を見ることができます。

クリックすると拡大します

なお、本ソリューションは Lambda 関数を定期的に実行することで、クォータの確認を行なっています。そのため、デプロイ直後はテーブルの中身が空となっています。しばらく待ってから確認するか、Lambda 関数を直接実行してください。

また繰り返しになりますが、本ソリューションはビジネスレベル以上の AWS サポートが必要です。

クリックすると拡大します

また、クォータに近づいた、もしくはクォータ到達した場合は右のようなメールが届きます。画像は us-east-1 リージョンで、VPC のクォータに到達した時のものです。

クリックすると拡大します


リソースの削除方法

本ソリューションを削除したい場合、CloudFormation で 作成したスタック (デフォルトの名前を変更していない場合は LimitMonitor) を選択し削除をクリックします。

クリックすると拡大します

また、Lambda 関数に関連した CloudWatch Logs や DynamoDB は CloudFormation スタック削除後も残ってしまうので、別途削除する必要があります

CloudWatch Logs では、コンソールの CloudWatch、ロググループから LimitMonitor の Lambda 関数に関連するロググループを削除します。ロググループの検索欄に 作成したスタック名 (デフォルトの名前を変更していない場合は LimitMonitor、同名の他リソースがないことに注意) を入力し、全て選択して「アクション」「ロググループの削除」を行いましょう。

クリックすると拡大します

DynamoDB も同様に、今回デプロイされたテーブルを選択して、「アクション」「テーブルの削除」を選択します

クリックすると拡大します

以上で今回デプロイされたリソースが削除されました。


まとめ

いかがだったでしょうか?今回は AWS ソリューションの「AWS でのクォータモニタ」について紹介しました。本ソリューションを使用することで、クォータの切迫を検出し早期の引き上げリクエストが可能になります。なお、クォータ引き上げのリクエスト方法については、「リファレンスガイド AWS サービスクォータ」をご確認ください。

また、AWS ソリューションを利用することで、お客様がお困りなポイントを簡単に解決できることを理解していただけたと思います。既に他の AWS ソリューションの 紹介記事 もありますので活用していただけると幸いです。最後に、今後 AWS ソリューションの紹介記事が続々登場するので builders.flash の購読もお忘れなく!


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

吉澤 巧
アマゾン ウェブ サービス ジャパン合同会社 ソリューションアーキテクト

2022 年 4 月に入社したソリューションアーキテクトです。天気予報が少しだけできます。好きなサービスは AWS Trusted AdvisorAmazon CDK 。最近、在宅ワーク用のデスク周りが完璧になりました。

監修者プロフィール

山澤 良介
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト

テクニカルソリューションアーキテクトとして、業種業態を問わず様々なお客様を支援させて頂いています。
前職では主にネットワーク案件を担当していたため、好きなサービスは、AWS Direct Connect と AWS Transit Gateway です。
休日はスノーボードが大好きなので、シーズン中は毎週スキー場に行っているほか、オフシーズン中もオフトレ施設に行っています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する