仅获取 ACTIVE 区域列表 |博托3 | AWS

问题描述 投票:0回答:1

如您所知,有多种方法可以使用 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 区域的列表

python amazon-web-services amazon-ec2 boto3 aws-regions
1个回答
0
投票

在本例中,我扮演的角色是检查远程帐户中的活动区域,但总体思路是列出所有区域,然后实例化 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
© www.soinside.com 2019 - 2024. All rights reserved.