AWSリソース上限数と現在の使用数を簡単に比較したい

AWSリソースの上限数と現在のリソース使用数を簡単に把握する方法を紹介します
2021.06.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな ネクストモード株式会社 の吉井です。

AWS アカウントには、サービスクォータ というリソース使用数の上限値が設けられています。
AWS 内部のリソースが枯渇しないようにという理由もありますが、それよりもユーザーが必要以上のリソース確保を誤って行ってしまい過大請求をされることを防いでくれるという防御面の理由が大きいように思います。

この上限値ですが現時点の値はどれくらいで残りどの程度リソースを作成できるのかを忘れてしまうと
いざというときに希望のリソースが作成できず、上限緩和申請で時間を取られてしまうというミスをしてしまうことがよくあります。

AWS CLI 等で上限値・現在値を都度確認して突き合わせるのも面倒に感じていたところ便利なツールを発見したので紹介します。

インストール

Docker Image を使う方法とローカルマシンにコマンドをインストール方法の2パターンがあります。

本エントリではローカルインストールを紹介します。

Requirements

awslimitchecker docs からコピペしました前提条件です。
予め揃えておきます。ローカルを汚したくない場合は Docker Image を活用ください。

  • Python 3.5 or newer.
  • Python VirtualEnv and pip (recommended installation method; your OS/distribution should have packages for these)
  • boto3 >= 1.4.6 and its dependency botocore >= 1.6.0.

インストール

virtualenv をインストールします。

pip3 install virtualenv --user

続いて awslimitchecker をインストールします。

virtualenv limitchecker
source limitchecker/bin/activate
pip3 install awslimitchecker

インストール確認

コマンドのヘルプを表示させインストールが正常であることを確認します。

awslimitchecker --help

コマンド実行

awslimitchecker docs にある通りコマンドを実行していきます。

必要な IAM ポリシー

awslimitchecker で結果を得るために必要な IAM ポリシーを表示します。
コマンドを実行する IAM ユーザーに表示されたポリシーを付与します。

awslimitchecker --iam-policy

リージョンの指定

-r または --region でリージョンの指定です。
一回のコマンドでは一つのリージョンしか指定できません。
複数リージョンで実行したい場合は bash for などでループします。

awslimitchecker -r ap-northeast-1

上限値に対する現在値の確認

一番使いたいコマンドです。
デフォルトでは80%で WARNING、99% で CRITICAL です。
これらのしきい値は -W-C で任意に変更可能です。

awslimitchecker -W 80 -C 99

下が出力サンプルです。
カッコのなかが上限値、リソース ID と現在値が = で結ばれて表示されます。
出力を省略しているのでリソース ID が一つだけですが、実際は9つ表示されます。

ApiGateway/Custom authorizers per API  (limit 10) WARNING: o7dr5l47tk=9
ApiGateway/Resources per API           (limit 300) CRITICAL: o7dr5l47tk=299

上限値の表示

上限値を表示させます。

awslimitchecker -l

現在値の表示

現在値を表示させます。

awslimitchecker -u

Assume Role

Assume Role も可能です。

  • -r リージョン
  • -A スイッチ先アカウント
  • -R スイッチ先ロール名
  • -E External ID (指定している場合)
awslimitchecker -r ap-northeast-1 -A 123456789012 -R foobar

使い方

EC2 上にインストールして cron などで定期的に実行し結果を SNS 経由で Slack 通知、または、
ECS で定期実行して結果を SNS 経由で Slack 通知のような使い方がシンプルだと思います。
SNS へ投げる処理と SNS から Slack は作り込みになります。

リソース作成前後に都度手動実行も手間ではありますが検討する価値はあると思います。

サポートしている上限

執筆日 (2021/06/17) 時点でサポートしている上限は以下です。

  • ApiGateway
  • AutoScaling
  • CloudFormation
  • CloudTrail
  • Directory Service
  • DynamoDB
  • EBS
  • EC2
  • EFS
  • EKS
  • ELB
  • Firehose
  • IAM
  • Kinesis
  • Lambda
  • RDS
  • Route53
  • SES
  • VPC

詳細は公式 Supported Limits をご覧ください。

感謝

このような便利で素敵なツールを公開してくださっている jantman 氏に感謝申し上げます。
また、多くの Contributors にも感謝申し上げます。

参考

awslimitchecker
awslimitchecker docs
Virtualenv

以上、吉井 亮 がお届けしました。