AWS Limit MonitorによるAWSサービス制限の管理
こんにちは、藤本です。
みなさん、AWS Answers活用していますか?
本日はAWS Answersにあるサービス制限の管理手法をご紹介します。
AWS Answersとは?
AWS Answers は、AWS アーキテクトが開発したドキュメントやソリューションのリポジトリで、AWS クラウドを構築して拡大するのに役立つ方法を説明しています。アカウント管理、モバイルアプリケーション、ネットワーキング、セキュリティといったさまざまなトピックについてのガイダンスを入手できます。AWS のベストプラクティスや規範的なアーキテクチャ戦略、および AWS アカウント内で数分でデプロイできる自動化されたソリューションなど、各カテゴリにおける一般的な質問の回答を得られます。
AWS Answers(クラウドでのアプリ設計、開発、運用に関するよくあるご質問) | AWS
Developers.IOでも以前、EC2 Schedulerをご紹介しています。
EC2 SchedulerでEC2インスタンスをスケジュール操作してみた
AWS Limit Monitor
今回は AWS Answers の AWS Limit Monitor を利用して、AWSのサービス制限を監視し、しきい値を超えた際に通知する環境を作ってみました。
AWSは不正アクセスや操作ミスによる高額請求を防ぐためにAWSアカウント単位にサービス制限を設定しています。例えば、各種インスタンスタイプ毎のEC2インスタンス数、EBSの合計ストレージサイズ、EIP数、RDSインスタンス数などなど。これらサービス制限は利用者がAWSサポートへ上限緩和することでサービス制限を増加させることが可能となっています。
素晴らしい仕組みですが、サービス制限を管理していないと、構築や変更時にサービス制限に達してしまい、構築や変更ができないといった自体に陥ります。例えば、AutoScaling構成でスケールアウトイベントが発生した時に上限に達してしまいインスタンスの起動に失敗するといったサービス影響が発生するケースも考えられます。地味ですが、サービス制限の管理は大事です。
そんなサービス制限ですが、Trusted Advisor にて現在のサービス制限値、および利用値を取得することが可能です。利用値がサービス制限値の80%以上になっていれば、アラート表示としてくれるので AMC から Trusted Advisor のWebUIを見れば、簡単に把握することができます。
ただ、Trusted Advisor を定期的に見るか、と言われれば、見ないですよね。また Trusted Advisor で全てのサービス制限を管理できているわけではありません。
そこでこれらを解決する助けとなるのが、今回ご紹介する AWS Limit Monitor です。AWS Limit Monitor は日次でサービス制限をチェックし、メール通知をしてくれる環境となります。
構成は以下のようになっています。
- CloudWatch Events により毎日0時(UTC)に Master Lambda Function を起動します。
-
Master Lambda Function は、指定したAWSアカウント単位で Child Lambda Function を起動します。複数のAWSアカウントに対応しています。
-
Child Lambda Function は、AWSアカウント単位で Trusted Advisor、および Trusted Advisor で管理されていないEC2インスタンス全体の上限数、CloudFormation Stack の上限数、DynamoDB の各種キャパシティユニットをチェックします。
-
サービス制限値の80%以上利用しているリソースがある場合、SNSをキックし、アラートメールを送信することが可能です。
利用するリソースは全て従量課金制であり、ほぼコストがかからない構成となっているのは嬉しいところです。
更にはこの環境を構築するCloudFormationテンプレートが用意されていますので、10分で環境を整えることができます。
それでは早速、CloudFormationテンプレートを利用して環境を作ってみましょう。
CloudFormation Stack作成
CloudFormationテンプレートは以下のURLとなります。
https://s3.amazonaws.com/solutions-reference/limit-monitor/latest/limit-monitor.template
CloudFormation Stack作成画面から上記URLを入力してください。
パタメータには以下を指定する必要があります。
- AccountList : チェック対象とするAWSアカウントIDを指定、「"」で括り、複数チェックしたい場合、「,」で区切ります。
- CheckRoleName : 作成するIAM Roleの名前
- SendAnonymousData : 使用状況をAWSへレポートします。送りたくない場合、「No」をご指定ください
- SNSTopicName : 作成するSNS Topicの名前
- TopicEmail : アラート送信先メールアドレス
あとは次へ、次へで進んでStackを作成できます。
5分ほどでStack作成が完了します。
動作確認
動作確認として、何かしらのリソースをサービス制限値の80%以上とした状態で AWS Lambda をキックして、アラートメールが届くかどうか確認してみます。
今回はVPC数を5つ(サービス制限値:5)としてみました。CloudWatch Eventの時間を調整して、待ちます。。。
メールを受信しました。マスクしていますが、AWSアカウントID、しきい値を超えたサービス名、リージョン、サービス制限値、利用値が記載されており、どういう状況なのかを簡単に把握することができました。
まとめ
いかがでしたでしょうか?
ほんの数分でサービス制限を監視する環境を構築することができました。コストもほぼほぼかからないのでAWS環境に導入してはいかがでしょうか?
AWS AnswersはAWSのベストプラクティスが詰まっています。AWS利用者であれば、一度目を通してみると、今まで困っていたことが簡単に解決できるかもしれません。