2016-07-19 5 views
6

AWSが展開して新しい領域を追加するとき、コードで自動的に検出するようにしたいと思います。現在のところ、 "Select your region"はハードコードされていますが、RegionNameの場合、次のように解析したいと思います。Boto3(Python)で使用可能な領域をリストする方法

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をリストに解析するにはどうすればよいですか?

答えて

11

以下は、各地域のRegionNameとEndpointを返します。

# List all regions 
client = boto3.client('ec2') 
regions = [region['RegionName'] for region in client.describe_regions()['Regions']] 
+1

ありがとうございます!私はそれが – Shawn

+1

'クライアント= boto3.client(「EC2」)'エラーで失敗感謝「botocore.exceptions.NoRegionError:あなたは地域を指定する必要があります。」 – jononomo

+0

地域を設定するには、複数の方法があります(AWSはそのための良いドキュメントを持っている)がありますが、クライアント= boto3.client(「EC2」、「私たちは西-2」=のregion_name) ' –

13

フレデリックの答えに加えて、サービスコールを行わずに各サービスの既知の領域を取得することもできます。しかし、これはエンドポイントにぶつかるのではなく、ボトコアのローカルモデルから取り除かれているので、リストを更新するためにボトコアを更新する必要があるため、必ずしも網羅的ではありません。

from boto3.session import Session 

s = Session() 
dynamodb_regions = s.get_available_regions('dynamodb') 

さらに、このリストの地域に限定されるものではありません。以前のバージョンのbotocoreを使用している場合は、新しいリージョンを指定して使用することができます。彼らはこのリストには表示されません。

関連する問題