我可以通过仅传递 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_ipAPI可用。但是,你可以这样做

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

如果性能很关键,您可以进行多线程或多处理以并行查询区域。