🌐
PythonでAWS全RegionのAZを出してみた
今回は完全に備忘録です。
師走の、しかも仕事終わりの日に、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