You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用boto3获取AWS仅活跃区域列表?

获取AWS活跃可用区域(通过boto3)

你提到的两种方法核心区别在于:

  • session.get_available_regions() 返回的是AWS服务(如EC2)在对应分区官方支持的所有区域,不管你的账户是否启用这些区域,因此会包含无法操作的非活跃区域。
  • ec2.describe_regions() 默认返回的是你的账户已启用、且当前有权限访问的区域,这些区域都是可以正常执行操作的活跃区域。

方案1:直接获取已启用的活跃区域

这是最简便的方式,利用describe_regions的默认行为即可:

import boto3
from botocore.exceptions import ClientError

# 初始化EC2客户端(无需指定区域,默认用配置的区域即可)
ec2_client = boto3.client('ec2')

try:
    # 获取所有已启用的活跃区域
    active_regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']]
    print("活跃区域列表:", active_regions)
except ClientError as e:
    print(f"获取区域失败:{e.response['Error']['Message']}")

方案2:主动验证区域可用性(精确校验)

如果需要确保每个区域都能实际执行操作,可以逐个验证区域的连通性:

import boto3
from botocore.exceptions import ClientError, EndpointConnectionError

def fetch_active_regions(service="ec2"):
    session = boto3.Session()
    # 获取服务支持的所有区域
    all_possible_regions = session.get_available_regions(service)
    active_regions = []

    for region in all_possible_regions:
        try:
            # 用轻量API验证区域是否可访问
            client = session.client(service, region_name=region)
            # 以EC2为例,调用describe_availability_zones来验证
            client.describe_availability_zones()
            active_regions.append(region)
        except (ClientError, EndpointConnectionError):
            # 无法访问则跳过该区域
            continue
    
    return active_regions

# 使用示例
active_ec2_regions = fetch_active_regions("ec2")
print("可操作的活跃EC2区域:", active_ec2_regions)

补充说明

AWS账单控制台显示的区域,本质就是你的账户已启用的区域,和方案1中describe_regions返回的结果完全一致,因为账单只会统计已启用区域内的资源消耗。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:10:31