如何使用 Boto3 列出可用区域 (Python)

How to list available regions with Boto3 (Python)

随着 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'}]}

为了 space,我已经删除了重复数据和 ResponseMetadata。

如何将 RegionName 解析为列表?

以下将为您 return 每个区域的 RegionName 和 Endpoint。

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

除了 Frédéric 的回答之外,您还可以在不进行任何服务调用的情况下获取每个服务的已知区域。但是,我会提醒您,由于这是从 botocore 的本地模型中提取数据而不是到达端点,因此它并不总是详尽无遗,因为您需要更新 botocore 以更新列表。

from boto3.session import Session

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

此外,您不限于此列表中的区域。如果您使用的是旧版本的 botocore,您仍然可以通过指定新区域来使用它们。他们只是不会出现在这个列表中。