利用可能なAZをワンライナーで取得してみた

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

ウィスキー、シガー、パイプをこよなく愛する大栗です。
1年以上前からAWSを使用されている方は、東京リージョンでEC2を起動する時にAZを3個から選択できるのではないでしょうか。しかし、この中の1個のAZは新機能が提供されておらず、旧世代のEC2インスタンスしか使用できず、EBSもMagneticのみの提供となっています。
そのため、できる限り早く新機能が提供されていないAZから、別の利用可能なAZへ移行すべきです。

AZはAWSアカウント毎にマッピングが異なるため、自分のアカウントのap-northeast-1aと隣の人のap-northeast-1aが別の可能性があります。管理しているアカウントが多いと利用可能なAZを一つ一つ確認するのは手間なのでワンライナーで利用可能なAZを取得できるようにしてみました。
なお、確認環境はAmazon Linux AMI 2014.09です。

やってみる

aws ec2 describe-regions --region ap-northeast-1 --query "Regions[*].RegionName[]" --output text | \
tr -d "\n" | xargs -I'{}' -d"\t" -n 1 -P 1 aws rds describe-orderable-db-instance-options --region '{}' \
--engine mysql --max-items 1 --query "OrderableDBInstanceOptions[0].AvailabilityZones[*].Name"

少し解説をすると、最初に"aws ec2 describe-regions"でリージョン一覧を取得します。次に改行を取っていますが、次のxargsで具合が悪くなる為です。最後にxargsでリージョン毎に"aws rds describe-orderable-db-instance-options"を実行してRDSが起動できるAZを取得しました。
結果は、以下の様になります。

[
    "eu-central-1a", 
    "eu-central-1b"
]
[
    "sa-east-1a", 
    "sa-east-1b"
]
[
    "ap-northeast-1a", 
    "ap-northeast-1c"
]
[
    "eu-west-1a", 
    "eu-west-1b", 
    "eu-west-1c"
]
[
    "us-east-1a", 
    "us-east-1b", 
    "us-east-1c"
]
[
    "us-west-1a", 
    "us-west-1c"
]
[
    "us-west-2a", 
    "us-west-2b", 
    "us-west-2c"
]
[
    "ap-southeast-2a", 
    "ap-southeast-2b"
]
[
    "ap-southeast-1a", 
    "ap-southeast-1b"
]

まとめ

これで、今後利用しているAZが分かりましたので、今度はAZの移行計画を考える番ですね。