AWS CLIで自アカウントのAZ名とAZ IDのマッピングを確認する

普段目にしているAZ名がどのAZとマッピングされているのかはAWSアカウントによってまちまちです。一意に識別できる情報はAZ IDとなります。今回はAWS CLIを利用して、AZ名とAZ IDのマッピングを確認する方法を紹介します。
2019.08.26

こんにちは。サービスグループの武田です。

先日、AWSの東京リージョンで障害が発生しました。詳細は公式のアナウンスを参照してください。

Summary of the Amazon EC2 Issues in the Asia Pacific (Tokyo) Region (AP-NORTHEAST-1)

当日はリアルタイムでAWSから情報が発信され、それを確認しながら対応されていた方も多いのではないでしょうか。その情報の中に a single Availability Zone in the AP-NORTHEAST-1 Region という一文がありました。これにより複数AZにまたがった障害ではないということが分かりましたが、具体的にどのAZなのかがわかりませんでした。どのAZで起きた障害なのか情報収集をしていた方の中に次のような方はいなかったでしょうか?

「障害ってap-northeast-1aじゃないの?え?AZ名とAZ IDは違う?なにそれ!」

簡単にいうと、apne1-az1などがAZ IDと呼ばれるもので、AZに一意に付けられた識別子です。一方、皆さんもよく知っているap-northeast-1aなどがAZ名で、AWS アカウントごとにどのAZとマッピングされるかは異なる可能性があります。次の大瀧のエントリが分かりやすく参考になります。

AWSアカウントに因らずアベイラビリティゾーンを識別できるAZ IDを利用しよう #reinvent

さて、前置きが長くなりましたが、では使用しているアカウントのマッピング情報を知るにはどうすればいいでしょうか?ひとつは紹介したエントリにも画面キャプチャ付きで紹介しているマネジメントコンソールを使用する方法がありますね。このエントリでは、別の方法としてAWS CLIを使用した方法を紹介します。

環境

次の環境で検証しています。

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.6
BuildVersion:	18G87

$ aws --version
aws-cli/1.16.225 Python/3.7.0 Darwin/18.7.0 botocore/1.12.215

やってみた

AWS CLIではEC2のdescribe-availability-zonesを使用することで取得できます。

describe-availability-zones — AWS CLI 1.16.225 Command Reference

$ aws ec2 describe-availability-zones --region ap-northeast-1
{
    "AvailabilityZones": [
        {
            "State": "available",
            "Messages": [],
            "RegionName": "ap-northeast-1",
            "ZoneName": "ap-northeast-1a",
            "ZoneId": "apne1-az4"
        },
        {
            "State": "available",
            "Messages": [],
            "RegionName": "ap-northeast-1",
            "ZoneName": "ap-northeast-1c",
            "ZoneId": "apne1-az1"
        },
        {
            "State": "available",
            "Messages": [],
            "RegionName": "ap-northeast-1",
            "ZoneName": "ap-northeast-1d",
            "ZoneId": "apne1-az2"
        }
    ]
}

人間が目で確認したい場合、JSON形式ではやや視認性が悪いです。AWS CLIではテーブル形式でも出力できます。

$ aws ec2 describe-availability-zones \
  --region ap-northeast-1 \
  --query 'AvailabilityZones[].{RegionName:RegionName, ZoneName:ZoneName, ZoneId:ZoneId}' \
  --output table
----------------------------------------------------
|             DescribeAvailabilityZones            |
+----------------+-------------+-------------------+
|   RegionName   |   ZoneId    |     ZoneName      |
+----------------+-------------+-------------------+
|  ap-northeast-1|  apne1-az4  |  ap-northeast-1a  |
|  ap-northeast-1|  apne1-az1  |  ap-northeast-1c  |
|  ap-northeast-1|  apne1-az2  |  ap-northeast-1d  |
+----------------+-------------+-------------------+

この結果から、私のアカウントではap-northeast-1aapne1-az4を指しているのだな。といったことが確認できます。

まとめ

簡単にですが、AWS CLIでAZ名とAZ IDのマッピングを確認してみました。興味があれば東京リージョン以外もぜひ確認してみてください。

合わせて読みたい

8/23東京リージョン障害中の当ブログ稼働を紹介します

複数のAvailability ZoneにプロビジョニングしたELB(ALB) / AutoScaling Groupから特定Availability Zone上のリソースをパージする