【AWS】AWSサービスの各種上限値をaws-cliで取得する

2013.10.29

はじめに

こんにちは植木和樹です。先日「AWSサービスの各種上限値一覧」というエントリがありましたが、上限緩和をした後の新しい上限値を知る方法はないか、できればコマンドで取りたいな・・・と考えていたところaws-cliのsupportコマンドでTrusted Advisorの情報を取得できることを知りました。(aws-cli support

どのような情報が取れるのでしょうか?試してみました。

取得方法

必要なもの

  • aws-cli/1.2.0
  • jq/1.2

Trusted Advisorでチェックできる項目一覧

Trusted Advisorから取得できる情報はdescribe-trusted-advisor-checksコマンドで確認することができます。

$ aws support describe-trusted-advisor-checks --language en | jq -r '.checks[].name'

Amazon EC2 Reserved Instances Optimization
Low Utilization Amazon EC2 Instances
Idle Load Balancers
Underutilized Amazon EBS Volumes
Unassociated Elastic IP Addresses
Security Groups - Specific Ports Unrestricted
Security Groups - Unrestricted Access
IAM Use
Amazon S3 Bucket Permissions
MFA on Root Account
IAM Password Policy
Amazon RDS Security Group Access Risk
Amazon EBS Snapshots
Amazon EC2 Availability Zone Balance
Load Balancer Optimization
VPN Tunnel Redundancy
High Utilization Amazon EC2 Instances
Auto Scaling Group Resources
Amazon RDS Backups
Amazon RDS Multi-AZ
Auto Scaling Group Health Check
Service Limits
Amazon S3 Bucket Logging
Amazon EBS Provisioned IOPS Volume Attachment Configuration
Large Number of Rules in an EC2 Security Group
Large Number of EC2 Security Group Rules Applied to an Instance
Amazon RDS Idle DB Instances
Amazon Route 53 Alias Resource Record Sets
Amazon Route 53 Name Server Delegations
Amazon Route 53 High TTL Resource Record Sets

名前から推測するに、どうやら上限値の取得は「Service Limits」で取れそうです。

上限値を取得する

対象を「Service Limits」に絞って取得できる情報(description)をみてみましょう。

$ aws support describe-trusted-advisor-checks --language en | \
  jq -r '.checks[] | select(.name == "Service Limits")'
        {
            "category": "performance",
            "metadata": [
                "Region",
                "Service",
                "Limit Name",
                "Limit Amount",
                "Current Usage",
                "Status"
            ],
            "description": "Checks for usage 〜(長いので下記に抜粋)",
            "name": "Service Limits",
            "id": "eW7HH0l7J9"
        },

Checks for usage that is more than 80% of the service limit. Values are based on a snapshot, so your current usage might differ. Limit and usage data can take up to 24 hours to reflect any changes. In some cases, your usage might be greater than the indicated limit for a period of time.

Alert Criteria
Yellow: Usage is more than 80% of the service limit.

Recommended Action
If you anticipate exceeding a service limit, request an increase by submitting the relevant form from the Additional Resources section of the AWS Contact Us page.

Additional Resources
AWS Service Limits

実際の上限数と現在の使用数はdescribe-trusted-advisor-check-resultコマンドに、CHECK-ID(eW7HH0l7J9)を指定することで取得することができます。

$ aws support describe-trusted-advisor-check-result --check-id eW7HH0l7J9a | \
  jq -r ".result.flaggedResources"

[
(途中省略)
  {
    "metadata": [
      "ap-northeast-1",
      "EC2",
      "On-Demand Instances",
      "20",
      "1",
      "Green"
    ],
    "region": "ap-northeast-1",
    "isSuppressed": false,
    "resourceId": "8fl6nRb1Dw6CswuB3NlGFBjL9OkFafCHapz2wzTRDHA",
    "status": "ok"
  },
  {
    "metadata": [
      "ap-northeast-1",
      "EC2",
      "VPC Elastic IP addresses (EIPs)",
      "5",
      "2",
      "Green"
    ],
    "region": "ap-northeast-1",
    "isSuppressed": false,
    "resourceId": "PBpzzAB4CKAS2Eyij2dt8fGCPuLRwN8Qu8IhjWrDI2E",
    "status": "ok"
  }
]

metadataに実際の値が入っています。項目の並びはdescribe-trusted-advisor-checksで表示された順になっています。JSON形式なのでちょっと頑張って読まなければいけませんが「オンデマンドEC2インスタンスの同時起動数の上限20に対して1起動中」、「VPC ElasticIPの上限5に対して2つ使用中」ということが分かります。

なお現時点で取得できる上限値は次のものになります。(Reserved Instancesがたくさん出ているのはリージョン毎に上限数が設定されているためです)

$ aws support describe-trusted-advisor-check-result --check-id eW7HH0l7J9 \
  | jq -r ".result.flaggedResources[].metadata[2]"

Active snapshots
Active volumes
Volume aggregate size (GB)
Reserved Instances - purchase limit (monthly)
Reserved Instances - purchase limit (monthly)
Reserved Instances - purchase limit (monthly)
Reserved Instances - purchase limit (monthly)
Reserved Instances - purchase limit (monthly)
Reserved Instances - purchase limit (monthly)
Reserved Instances - purchase limit (monthly)
Reserved Instances - purchase limit (monthly)
On-Demand Instances
VPC Elastic IP addresses (EIPs)

まとめ

AWSビジネスサポートを契約することでTrusted Advisorを利用することができるようになります。さらにaws-cliを使うことで各種上限値を簡単に取得することができました。コマンド(API)から取得することでプログラムに組み込みやすくなり、定期的な自動チェックと通知など色々と用途が考えられそうですね。

本日(2013年10月29日)時点では、残念ながら「AWSサービスの各種上限値一覧」で紹介されている、すべての上限値が取得できるわけではないようです。CloudFormationのスタック上限数やSNSのトピック数は取得できませんでした。ただ今後取得できる項目は増えていくと思いますので心待ちにしたいと思います