如何通过城市名或EIP在AWS CLI、boto3中查询对应AWS区域代码
对应问题解决方案
方案1:遍历区域查询EIP归属(最准确,推荐)
AWS没有提供全局单接口直接传入EIP返回所属区域的能力,但可以通过遍历你账号已启用的所有AWS区域,调用EC2的describe_addresses接口匹配EIP,匹配成功后即可直接获取对应的区域代码。
示例Python代码(基于boto3):
import boto3 def get_eip_region(eip_address): # 初始化EC2客户端查询所有可用区域 ec2_client = boto3.client('ec2', region_name='us-east-1') all_regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']] for region in all_regions: regional_ec2 = boto3.client('ec2', region_name=region) resp = regional_ec2.describe_addresses(PublicIps=[eip_address]) if resp['Addresses']: return region return None # 调用示例 print(get_eip_region('18.138.84.13'))
注意:使用该方案需要你的AK/SK拥有对应区域的ec2:DescribeAddresses、ec2:DescribeRegions权限
方案2:通过城市名映射区域代码
如果你已经通过ipinfo接口拿到了城市/地理区域名称,可以通过AWS官方提供的区域元数据接口直接映射得到区域代码:
- 调用SSM的
get_parameters_by_path接口拉取全量AWS区域元数据,路径为/aws/service/global-infrastructure/regions,返回结果中包含区域代码和对应的地理名称,和你从ipinfo拿到的region字段做匹配即可得到ap-southeast-1这类标准区域代码。
补充说明
你提到的裁剪hostname的方案实际可靠性很高:AWS EC2公网域名格式固定为ec2-<IP段拆分>.<region-code>.compute.amazonaws.com,只要是AWS官方分配的公网域名,拆分出来的区域代码不会出错,实现成本极低,适合对性能要求高、不需要严格校验EIP归属的场景。
内容的提问来源于stack exchange,提问作者Alok Nath
相关产品推荐
相关产品推荐

