如何利用公网及私有IP地址在boto3中查找EC2实例
通过公网/私有IP查找EC2实例(boto3实现)
CLI 对应命令
查找公网IP:
aws ec2 describe-instances --filter Name=ip-address,Values=IP_1,..IP_N
查找私有IP:
aws ec2 describe-instances --filter Name=private-ip-address,Values=IP_1,..IP_N
Boto3 实现方式
方式一:使用服务端过滤(推荐)
利用boto3的filter方法让AWS服务端直接过滤实例,避免本地遍历所有实例,效率更高:
import boto3 ec2 = boto3.resource('ec2') # 匹配公网IP public_ip_filters = [{'Name': 'ip-address', 'Values': ['1.2.3.4', '5.6.7.8']}] public_matched_instances = ec2.instances.filter(Filters=public_ip_filters) for instance in public_matched_instances: print(f"实例ID: {instance.id}, 公网IP: {instance.public_ip_address}, 私有IP: {instance.private_ip_address}") # 匹配私有IP private_ip_filters = [{'Name': 'private-ip-address', 'Values': ['10.0.0.5']}] private_matched_instances = ec2.instances.filter(Filters=private_ip_filters) for instance in private_matched_instances: print(f"实例ID: {instance.id}, 私有IP: {instance.private_ip_address}, 公网IP: {instance.public_ip_address}")
方式二:本地遍历判断
如果需要自定义复杂逻辑,可以遍历所有实例后本地匹配:
import boto3 ec2 = boto3.resource("ec2") # 目标IP集合 target_public_ips = {'1.2.3.4', '5.6.7.8'} target_private_ips = {'10.0.0.5'} for instance in ec2.instances.all(): # 检查公网IP匹配 if instance.public_ip_address in target_public_ips: print(f"匹配公网IP的实例: {instance.id} - {instance.public_ip_address}") # 检查私有IP匹配 if instance.private_ip_address in target_private_ips: print(f"匹配私有IP的实例: {instance.id} - {instance.private_ip_address}")
注意事项
- 优先使用服务端过滤方式,尤其是实例数量较多时,能大幅减少数据传输和本地计算开销。
- 确保当前AWS账号拥有
ec2:DescribeInstances权限。
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

