🌐

PythonでAWS全RegionのAZを出してみた

2022/12/28に公開

今回は完全に備忘録です。


師走の、しかも仕事終わりの日に、AWSのリージョンのAZを抽出したくて、Pythonのコードで書いた人です。

コード


import boto3
import datetime

def Execute():
    print('Run!')

    ec2 = boto3.client('ec2')
    regions = ec2.describe_regions(AllRegions=True)['Regions']
    regions_list = []
    for region in regions:
      regions_list.append(region['RegionName'])
    
    regions_list_sorted = sorted(regions_list)
    for region in regions_list_sorted:
      get_availability_zone(region)

    print(now)
    print('End!')

def get_availability_zone(region):
    try:

      ec2 = boto3.client('ec2', region_name=region)
      azs = ec2.describe_availability_zones(AllAvailabilityZones=True)['AvailabilityZones']
      for az in azs:
        if az['ZoneType'] =='availability-zone':
          print(az['RegionName'] + ':' + az['ZoneName'])

    except Exception as error:
      print(region + ' Skip!')

now = datetime.datetime.now()
print(now)
Execute()

雑なコードですみません。

WaveLength用のAZとかはいらんかなーと思ったので、
AvailabilityZones[].ZoneType = 'availability-zone'
で絞り込んでますが、全部みたい場合は、
if az['ZoneType'] =='availability-zone': を外せば全部取れます。
EC2#describe_availability_zones のパラメータ、AllAvailabilityZones=Trueを外せばいいともいう。

クライアント宣言時、region_name指定しないと、指定のリージョン取れないのはほほぅ・・・となりました(ずっと、デフォルトのリージョンしか取れなくて何で?ってなってた)
ec2 = boto3.client('ec2', region_name=region)

アカウントベースなんで、東京リージョンの場合は、1b は出てこないな。(無論利用できるアカウントでやれば出てくるはず)

今後

AWS Lambdaで定期実行して、増えたら通知するとかできるかなとか。
その場合は、TypeScriptあたりで書き直して、AWS CDKでデプロイしてみよう
(最近ちょっとしたバッチをPythonで書いていたもので)

Discussion