AWSが拡張し、新しいリージョンを追加するにつれて、コードにそれを自動的に検出させたいと思います。現在、「Select your region」はハードコーディングされていますが、RegionNameについてのみ以下を解析したいと思います。
import boto3
ec2 = boto3.client('ec2')
regions = ec2.describe_regions()
print(regions)
私の出力は次のようなJSONです:
{'Regions':[{'Endpoint': 'ec2.ap-south-1.amazonaws.com'、 'RegionName': 'ap-south-1'}、{'Endpoint': 'ec2.eu-west- 1.amazonaws.com」、「RegionName」:「eu-west-1」}、{「Endpoint」:「ec2.ap-southeast-1.amazonaws.com」、「RegionName」:「ap-southeast-1」 }]}
スペースを確保するために、繰り返しデータとResponseMetadataを削除しました。
RegionNameを解析してリストにするにはどうすればよいですか?
以下は、各地域のRegionNameとEndpointを返します。
# List all regions
client = boto3.client('ec2')
regions = [region['RegionName'] for region in client.describe_regions()['Regions']]
フレデリックの答えに加えて、サービスを呼び出すことなく、各サービスの既知の地域を取得することもできます。ただし、これはエンドポイントにヒットするのではなく、botocoreのローカルモデルから取得するため、botocoreを更新してリストを更新する必要があるため、必ずしも網羅的ではないことに注意してください。
from boto3.session import Session
s = Session()
dynamodb_regions = s.get_available_regions('dynamodb')
さらに、このリストの地域に制限されません。古いバージョンのbotocoreを使用している場合、新しいリージョンを指定することで引き続き使用できます。このリストには表示されません。