随着AWS扩展并添加新区域,我希望让我的代码自动检测到这一点。目前,"选择您所在的地区"是硬编码但我想解析以下仅 RegionName 。
import boto3
ec2 = boto3.client('ec2')
regions = ec2.describe_regions()
print(regions)
我的输出是JSON,如下所示:
{'地区':[{' Endpoint':' ec2.ap-south-1.amazonaws.com',' RegionName&#39 ;:' ap-south-1'},{' Endpoint':' ec2.eu-west-1.amazonaws.com',' RegionName& #39;:' eu-west-1'},{' Endpoint':' ec2.ap-southeast-1.amazonaws.com',' ; RegionName':' ap-southeast-1'}]}
我为了空间而修剪了重复数据和ResponseMetadata。
如何将RegionName解析为列表?
答案 0 :(得分:29)
除了Frédéric的答案,您还可以在不进行任何服务呼叫的情况下获取每项服务的已知区域。但是,我会告诫你,因为这是从botocore的本地模型中提取而不是命中一个端点,所以它并不总是详尽无遗,因为你需要更新botocore来更新列表。
from boto3.session import Session
s = Session()
dynamodb_regions = s.get_available_regions('dynamodb')
此外,您不限于此列表中的区域。如果您使用的是旧版本的botocore,则仍可以通过指定它们来使用新区域。它们不会出现在此列表中。
答案 1 :(得分:20)
以下内容将返回每个区域的RegionName和Endpoint。
# List all regions
client = boto3.client('ec2')
regions = [region['RegionName'] for region in client.describe_regions()['Regions']]