AWSのリージョンとAZの一覧を作成する

AWSのサービスを利用するときにリージョンとAZ (Availability Zone)を指定することがあると思いますが、自分の環境で使えるリージョンとAZの具体的な値がわからなかったので、今回はその一覧を作成してみることにしました。

AWS CLI

$ aws --version
aws-cli/2.17.6 Python/3.11.8 Linux/6.8.0-40-generic exe/x86_64.zorin.17

AZの一覧表示

プロファイルは各自の環境に合わせて置き換えてください。

$ aws ec2 describe-regions --profile dabansky-san | jq -r '.Regions[].RegionName' \
> | xargs -I{} aws ec2 describe-availability-zones --region {} --profile dabansky-san | jq -r '.AvailabilityZones[].ZoneName'
ap-south-1a
ap-south-1b
ap-south-1c
eu-north-1a
eu-north-1b
eu-north-1c
eu-west-3a
eu-west-3b
eu-west-3c
eu-west-2a
eu-west-2b
eu-west-2c
eu-west-1a
eu-west-1b
eu-west-1c
ap-northeast-3a
ap-northeast-3b
ap-northeast-3c
ap-northeast-2a
ap-northeast-2b
ap-northeast-2c
ap-northeast-2d
ap-northeast-1a
ap-northeast-1c
ap-northeast-1d
ca-central-1a
ca-central-1b
ca-central-1d
sa-east-1a
sa-east-1b
sa-east-1c
ap-southeast-1a
ap-southeast-1b
ap-southeast-1c
ap-southeast-2a
ap-southeast-2b
ap-southeast-2c
eu-central-1a
eu-central-1b
eu-central-1c
us-east-1a
us-east-1b
us-east-1c
us-east-1d
us-east-1e
us-east-1f
us-east-2a
us-east-2b
us-east-2c
us-west-1a
us-west-1c
us-west-2a
us-west-2b
us-west-2c
us-west-2d

各コマンドについて以下で紹介します。

リージョンの一覧表示

リージョンの一覧はaws ec2 describe-regionsで取得できます。

$ aws ec2 describe-regions --profile dabansky-san
{
    "Regions": [
        {
            "Endpoint": "ec2.ap-south-1.amazonaws.com",
            "RegionName": "ap-south-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.eu-north-1.amazonaws.com",
            "RegionName": "eu-north-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.eu-west-3.amazonaws.com",
            "RegionName": "eu-west-3",
            "OptInStatus": "opt-in-not-required"
        },

jqコマンドを使ってRegionNameだけ取り出せばよさそうです。

$ aws ec2 describe-regions --profile dabansky-san | jq -r '.Regions[].RegionName'
ap-south-1
eu-north-1
eu-west-3
eu-west-2
eu-west-1
ap-northeast-3
ap-northeast-2
ap-northeast-1
ca-central-1
sa-east-1
ap-southeast-1
ap-southeast-2
eu-central-1
us-east-1
us-east-2
us-west-1
us-west-2

特定のリージョンに含まれるAZの一覧表示

特定のリージョンに含まれるAZの一覧はaws ec2 describe-availability-zonesで取得できます。

$ aws ec2 describe-availability-zones --region ap-northeast-1 --profile dabansky-san
{
    "AvailabilityZones": [
        {
            "State": "available",
            "OptInStatus": "opt-in-not-required",
            "Messages": [],
            "RegionName": "ap-northeast-1",
            "ZoneName": "ap-northeast-1a",
            "ZoneId": "apne1-az4",
            "GroupName": "ap-northeast-1",
            "NetworkBorderGroup": "ap-northeast-1",
            "ZoneType": "availability-zone"
        },
        {
            "State": "available",
            "OptInStatus": "opt-in-not-required",
            "Messages": [],
            "RegionName": "ap-northeast-1",
            "ZoneName": "ap-northeast-1c",
            "ZoneId": "apne1-az1",
            "GroupName": "ap-northeast-1",
            "NetworkBorderGroup": "ap-northeast-1",
            "ZoneType": "availability-zone"
        },
        {
            "State": "available",
            "OptInStatus": "opt-in-not-required",
            "Messages": [],
            "RegionName": "ap-northeast-1",
            "ZoneName": "ap-northeast-1d",
            "ZoneId": "apne1-az2",
            "GroupName": "ap-northeast-1",
            "NetworkBorderGroup": "ap-northeast-1",
            "ZoneType": "availability-zone"
        }
    ]
}

ZoneNameだけ取り出します。

$ aws ec2 describe-availability-zones --region ap-northeast-1 --profile dabansky-san | jq -r '.AvailabilityZones[].ZoneName'
ap-northeast-1a
ap-northeast-1c
ap-northeast-1d

最初に掲載したコマンドでは、aws ec2 describe-regionsで取得した各リージョン名をxargsでaws ec2 describe-availability-zones--regionに渡しています。

$ aws ec2 describe-regions --profile dabansky-san | jq -r '.Regions[].RegionName' \
> | xargs -I{} aws ec2 describe-availability-zones --region {} --profile dabansky-san | jq -r '.AvailabilityZones[].ZoneName'

Boto3 (Python)

Boto3はPythonで使えるAWS SDKです。
Boto3を使ってAZの一覧を作成し、JSON形式で出力したいと思います。

$ python -V
Python 3.10.12

$ pip freeze
boto3==1.35.19
botocore==1.35.19
jmespath==1.0.1
python-dateutil==2.9.0.post0
s3transfer==0.10.2
six==1.16.0
urllib3==2.2.3
import boto3
import json

def main():
    #利用可能なリージョンの名前を取得する
    session=boto3.Session(profile_name="dabansky-san")
    ec2_client=session.client("ec2")

    response=ec2_client.describe_regions()
    
    region_names:list[str]=[]
    for region in response["Regions"]:
        region_name=region["RegionName"]
        region_names.append(region_name)

    #各リージョンに含まれるAZの情報を取得する
    az_infos:list[dict]=[]

    for region_name in region_names:
        session=boto3.Session(profile_name="dabansky-san",region_name=region_name)
        ec2_client=session.client("ec2")
        response=ec2_client.describe_availability_zones()

        azs=response["AvailabilityZones"]
        for az in azs:
            az_info={
                "regionName": az["RegionName"],
                "zoneName": az["ZoneName"],
                "zoneId": az["ZoneId"]
            }
            az_infos.append(az_info)

    #結果をJSONファイルに出力する
    with open("availability_zones.json","w",encoding="utf-8") as w:
        json.dump(az_infos,w)

if __name__=="__main__":
    main()

プロファイル名や出力ファイルの名前をコマンドライン引数で指定できるようにすると便利かもしれません。

AWS

Posted by 駄場さん