クォータを自動で確認して通知
AWS でのクォータモニタのアップデートを確認してみた
Author : 奥村 美生, 吉澤 巧
本記事は、2022 年に公開されたブログ「クォータを自動で確認して通知。AWS でのクォータモニタを試してみた」の 2024 年アップデート版です。この記事では、クォータと呼ばれる各サービスごとに定められた利用上限を監視するための AWS ソリューションを紹介しました。
その後、このソリューションに大きなアップデートがありました。変更点は大きく分けて 2 つあります。まず、AWS Organizations への対応です。マルチアカウント環境においてそれぞれのアカウントでクォータを監視、収集された情報をモニタリングアカウントに集約できるようになりました。次に Amazon CloudWatch を使用したクォータ監視機能の強化です。これまでは、主に AWS Trusted Advisor を使用してリソース利用量を監視していたため、ビジネスレベル以上の AWS サポートが必須でした。今回のアップデートにより、CloudWatch を使用した監視機能が強化されたため、AWS サポートへの加入が必須ではなくなりました。(とはいえ、環境に応じたサポートプランへの加入を推奨しております)
一方で、アーキテクチャやデプロイ手順も大きく変わっております。そこで、今回の記事ではソリューションが更新されてユーザーが嬉しくなったポイント、そして新しくなったデプロイ手順に焦点を当ててお話しします。
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
この記事のデモを無料でお試しいただけます »
毎月提供されるデベロッパー向けアップデート情報とともに、クレジットコードを受け取ることができます。
ソリューションの概要
AWS ソリューションとは
AWS ソリューションでは、お客様の課題を解決するためのアーキテクチャを提供しております。アーキテクチャ図や導入コスト試算に加え AWS CloudFormation のテンプレートも用意されており、お客様は迅速に課題を解決するためのソリューションを使用することができます。
AWS でのクォータモニタ
AWS ソリューションの 1 つとして提供される「AWS でのクォータモニタ」を使用することで、お客様は AWS リソースの使用率を追跡することが可能になります。
そもそも、クォータとは各サービスごとに定められた利用上限で、お客様の誤った操作を防ぐ役割を果たします。例えば、AWS Lambda はデフォルトで各リージョンあたり最大同時実行数が 1,000 といった制限が設定されています。これにより、 AWS リソースの過剰なプロビジョニングを防げる一方で、本来必要であるリソースの作成を妨げてしまうこともありえます。
本ソリューションを使用することにより、クォータに対するサービス使用率の追跡が可能になり、必要に応じて E メールや Slack を通した通知を実現できます。これにより、クォータの上限に達する前に引き上げリクエストを申請することや、不要なリソースの削除が可能になります。
加えて、このソリューションはシングルアカウント環境のみならず、Organizations を使用したマルチアカウント環境に対しても適用可能です。収集したサービス使用率の情報はモニタリング用のアカウントに集約可能で、通知や永続化の仕組みを一元的に管理することができます。
アーキテクチャの説明
以下の画像は、マルチアカウント環境に対して本ソリューションをデプロイした際のアーキテクチャ図です。
Monitoring account は クォータ使用率を集約するためのアカウントで、Organization 1 つにつき 1 アカウントです。Member account はクォータ監視対象となるアカウントで、複数存在します。Monitoring account には、Hub Template がデプロイされます。Member account には、Service Quotas spoke template が各リージョン、Trusted Advisor spoke template がバージニア北部リージョンにそれぞれデプロイされ、クォータの監視と Monitoring account への情報転送を行います。
アーキテクチャの構成要素は、それぞれ以下のような役割を果たします。
- Reporting : 全アカウントのクォータの監視履歴を、Amazon DynamoDB に格納します。
- Centralized event collection : Member Account より送られてきたクォータの記録を元に、使用率が 80 % を超えた場合、メールや Slack で通知します。
- Deployment management : AWS CloudFormation StackSets を使用し、Member account に対して、各種リソースをデプロイします。対象となるアカウントや 組織単位 (OU) は、AWS Systems Manager Parameter Store において指定します。
- Quota list generation : 確認対象とするクォータの一覧を DynamoDB に格納します。
- Quota utilization alerting : Lambda 関数はワークフロー 4 で作成された DynamoDB 内を参照し、確認対象となるサービスの使用率を CloudWatch で確認します。この Lambda 関数は各リージョンに作成され、それぞれ 12 時間に 1 度実行されます。
- Trusted Advisor alerting : Trusted Advisor を使用してクォータ使用状況のモニタリングを行います。こちらの機能を使用する場合、ビジネスレベル以上のサポートプランが必要です。サポートプランについては AWS Support プラン比較 を参考にしてください。Trusted Advisor を更新するための Lambda 関数は 24 時間に 1 度実行されます。
コスト試算
このソリューションの総コストは、クォータ監視対象としたアカウント数とリージョン数によって大きく異なります。アーキテクチャ図における、各テンプレートごとの月額コストの目安を以下に記載します。
Hub template |
$ 12.25 |
Trusted Advisor spoke template |
$ 0.01 × [アカウント数] |
Service Quotas spoke template |
$ 0.16 × [リージョン数] × [アカウント数] |
例えば、監視対象アカウントが 10、リージョン数が 25 の場合、月額コストの目安は以下になります。
Hub template |
$ 12.25 |
Trusted Advisor spoke template |
$ 0.01 × [アカウント数:10] = $ 0.10 |
Service Quotas spoke template |
$ 0.16 × [リージョン数:25] × [アカウント数:10] = $ 40.0 |
合計 | $ 52.35 |
上記の通り、本ソリューションのコストを占めるのは、Service Quotas spoke template のデプロイ数です。もし、コスト最適化を実施したい場合は、Service Quotas spoke template によるクォータ監視を普段使用しているリージョンに限定する、Trusted Advisor spoke template による監視のみを利用する (ビジネスレベル以上のサポートプランが必要) といった方法が考えられます。
デプロイ手順
今回は Organizations 配下のアカウントに対して、クォータモニタをデプロイする手順を示します。Organizations のセットアップについては、「チュートリアル: 組織の作成と設定」を参考にしてください。また、本ソリューションを単一のアカウントにデプロイしたい場合は、こちらのドキュメント を参照してください。
Step 0. 事前準備
クォータモニタを実現するためのリソースを各アカウントにデプロイするには、AWS CloudFormation StackSetsを使用します。この機能を使用するため、CloudFormation の委任された管理者を登録する必要があります。
まず、Organizations の管理アカウントで AWS マネジメントコンソールにログインし、サービス一覧から、「AWS CloudFormation」を選択してください。そして、ナビゲーションペインで、「StackSets」を選択します。「委任された管理者」タブで、「委任された管理者を登録」を選択します。
クリックすると拡大します
モニタリングアカウントの「12 桁のアカウント ID」を入力し、「委任された管理者を登録」を選択します。ここで選択されたアカウントが、上記アーキテクチャ図の Monitoring account となります。
クリックすると拡大します
委任された管理者を設定することができました。
これで事前準備は以上です。それではここからソリューションをデプロイしていきましょう!
クリックすると拡大します
Step 1. テンプレートの起動
こちらのリンクをクリックしてください。マネジメントコンソールの AWS CloudFormation の画面に移動します。
右上のアカウントを確認し、モニタリングアカウントにログインしているか確認します。確認できたら「次へ」をクリックします。
クリックすると拡大します
Step 2. テンプレートの詳細の入力
テンプレートの詳細を入力していきます。「スタック名」は任意の名前(例:LimitMonitor )を記入してください。
次に「パラメータ」です。パラメータは、デフォルトのままでもデプロイすることはできますが、必要に応じて E メールや Slack の項目を入力してください。入力できたら「次へ」をクリックします。
クリックすると拡大します
「スタックオプションの設定」では、なにも変更せずに「次へ」をクリックします。タグ等の設定が必要な場合は適宜変更してください。
Step 3. レビュー
クリックすると拡大します
Step 4. スタック作成の確認
スタックが作成されるまで 5 分程待ちます。なお、途中のパラメータについては、作成後に変更して再デプロイすることも可能になっています。
E メールのパラメータを入力した場合、 入力したメールアドレスに確認メールが到着したら、SubscirbeURL リンクをクリックして通知を有効化にしましょう。
クリックすると拡大します
クリックすると拡大します
Step 5. パラメータの更新
AWS マネジメントコンソールにて、AWS Systems Manager に移動します。ナビゲーションペインで、「パラメータストア」を選択します。
「マイパラメータ」タブで、「/QuotaMonitor/RegionsToDeploy」の横にあるボックスを選択し、「編集」をクリックします。
クリックすると拡大します
「パラメータを編集」にて、クォータを監視したいリージョンを値に入力します。値はスペースを入れずにカンマで区切る必要があります。(例:us-east-1,us-east-2)
デフォルト値は、ALL です。今回はバージニア北部リージョン(us-east-1)に絞って監視してみます。
「変更を保存」を選択します。
クリックすると拡大します
次に、「マイパラメータ」タブの画面に戻って、「/QuotaMonitor/OUs」の横にあるボックスを選択し、「編集」をクリックします。
クリックすると拡大します
「パラメータを編集」で、値を更新します。クォータの監視を行いたい OU の ID を記入します。値はスペースを入れずにカンマで区切る必要があります。(例:ou-a1bc-d2efghij,ou-k1lm-n2opqrst)
「変更を保存」を選択します。
クリックすると拡大します
パラメータを更新することで、OU 内のアカウントで自動的にクォータモニターがデプロイされます。指定した OU 内のアカウントにログインし、CloudFormation のスタックの画面に移動してください。
クリックすると拡大します
デプロイ手順は以上で終了です。続いて動作確認をします。
動作確認
バージニア北部リージョンに VPC をクォータ上限まで作成してみました。しばらくすると以下のような通知が届きます。
クリックすると拡大します
メールから、VPC の作成上限数は 5 で、その上限に達していることが確認できます。
このままでもクォータに関する情報は確認できますが、よりメールを読みやすくするため、以下の画像のように改行を入れる方法を紹介します。
クリックすると拡大します
Monitoring account の Lambda 関数で「QMSNSPublisherFunctionQMSNSPublisher」という名前が含まれたものを開き、「ダウンロード」から「ファンクションコード .zip をダウンロード」を選択します。
クリックすると拡大します
ファイルをダウンロードしたら解凍して、「index.js」というファイルの 8 行目を以下のように修正します。
修正前
const eventText = JSON.stringify(event);
修正後
const eventText = JSON.stringify(event, null, 2);
zip コマンドを使用してファイルを再び圧縮し、先ほどの Lambda 関数の画面からアップロードします。
クリックすると拡大します
これで、メールが改行されて配信されるようになりました。おつかれさまでした !
リソースの削除
今回デプロイしたリソースを削除する場合、CloudFormation の StackSet を削除します。詳細な手順については、こちらのドキュメント を参照してください。
注意点として、DynamoDB や AWS Key Management Service のカスタマー管理キーは別途削除する必要があります。
まとめ
今回は AWS ソリューションの「AWS でのクォータモニタ」について改めて紹介しました。本ソリューションを使用することで、管理者は AWS リソースの使用率を追跡し、早期の対応が可能になります。加えて今回のアップデートにより、Organizations に対応し、より一元的なリソース管理を実現できるようになりました。
今回のソリューション紹介が、 AWS 活用の促進につながれば幸いです !
筆者プロフィール
奥村 美生
アマゾン ウェブサービス ジャパン合同会社
ソリューションアーキテクト
2023 年 4 月に入社したソリューションアーキテクトです。趣味は水族館巡りです。水族館の全国制覇を目指しています !
吉澤 巧
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
2022 年 4 月に入社したソリューションアーキテクト。気象予報士を持っていることが特技でしたが、今では天気予報アプリにおんぶに抱っこです。好きな AWS サービスは Amazon S3、バケツのようなアイコンが可愛いですよね。
AWS を無料でお試しいただけます