如您所知,有多种方法可以使用 boto3 客户端列出可用区域
例如:
ec2 = boto3.client('ec2')
ec2.describe_regions()['Regions']
or
session = Session()
available_regions = session.get_available_regions("ec2", partition_name='aws')
但这将列出所有区域,其中大多数区域处于非活动状态,这意味着它们不能用于任何操作
AWS 计费仪表板中的部分示例:
我只是想知道如何使用 boto3 获取所有“活动”AWS 区域的列表
在本例中,我扮演的角色是检查远程帐户中的活动区域,但总体思路是列出所有区域,然后实例化 EC2 客户端并尝试描述_instances()。如果该区域处于非活动状态,您将收到“未经授权的操作”响应。将活动的添加到列表中并返回。
def get_active_regions(self, role_arn):
ec2_regions = [
region["RegionName"]
for region in self.local_ec2_client.describe_regions()["Regions"]
]
active_regions = []
for region in ec2_regions:
print(f"verifying ec2 rights in region {region}")
try:
client = self.get_remote_client(
resource_name="ec2", role_arn=role_arn, region=region
)
response = client.describe_instances()
print(response)
active_regions.append(region)
print(f"-- ec2 rights found in region {region}")
except ClientError as e:
if e.response["Error"]["Code"] == "UnauthorizedOperation":
print(e.response["Error"]["Code"])
pass
elif e.response["Error"]["Code"] == "AuthFailure":
print(e.response["Error"]["Code"])
pass
else:
print(e.response["Error"]["Code"])
exit(4)
return active_regions