我可以通过仅传递 ec2-instance 的私有 IP 来使用 boto 3 获取给定实例的区域值吗
Can I get region value for a given instance using boto 3 by passing on just private IP of ec2-instance
正在尝试获取特定实例的 AWS 区域。是否可以通过仅传递 ec2 实例 ip 来了解其区域?
我尝试了什么:
import boto3
client = boto3.client('s3') # example client, could be any
client.meta.region_name
但它显示所有服务器的相同区域..
遗憾的是,没有原生跨区域get_instance_by_private_ip
API可用。但是,你可以这样做
import boto3
def find_region_by_private_ip_address(ip):
ec2 = boto3.resource('ec2', 'us-east-1')
regions = [r['RegionName'] for r in ec2.meta.client.describe_regions()['Regions']]
for region in regions:
ec2 = boto3.resource('ec2', region)
instance_iterator = ec2.instances.filter(
Filters=[
{
'Name': 'private-ip-address',
'Values': [
ip
]
},
]
)
instance_list = list(instance_iterator)
if len(instance_list) > 0:
return region
如果性能很关键,您可以进行多线程或多处理以并行查询区域。
正在尝试获取特定实例的 AWS 区域。是否可以通过仅传递 ec2 实例 ip 来了解其区域?
我尝试了什么:
import boto3
client = boto3.client('s3') # example client, could be any
client.meta.region_name
但它显示所有服务器的相同区域..
遗憾的是,没有原生跨区域get_instance_by_private_ip
API可用。但是,你可以这样做
import boto3
def find_region_by_private_ip_address(ip):
ec2 = boto3.resource('ec2', 'us-east-1')
regions = [r['RegionName'] for r in ec2.meta.client.describe_regions()['Regions']]
for region in regions:
ec2 = boto3.resource('ec2', region)
instance_iterator = ec2.instances.filter(
Filters=[
{
'Name': 'private-ip-address',
'Values': [
ip
]
},
]
)
instance_list = list(instance_iterator)
if len(instance_list) > 0:
return region
如果性能很关键,您可以进行多线程或多处理以并行查询区域。