如何使用Python查询AWS EC2嵌套JSON数据获取InstanceId对应IP和VolumeId
实现方案
代码逻辑说明
- 首先加载AWS CLI输出的JSON数据
- 遍历
Reservations数组下的所有实例 - 提取对应实例的
InstanceId、PrivateIpAddress字段 - 遍历实例的
BlockDeviceMappings数组,提取所有已挂载EBS盘的VolumeId - 按要求用逗号拼接字段后输出
完整可运行代码
场景1:输出所有实例的对应信息
import json # 读取本地保存的EC2描述JSON文件 with open("ec2.json", "r", encoding="utf-8") as f: ec2_data = json.load(f) for reservation in ec2_data["Reservations"]: for instance in reservation["Instances"]: ins_id = instance["InstanceId"] private_ip = instance["PrivateIpAddress"] # 收集所有已挂载的卷ID,无需过滤挂载状态可删掉`if bdm["Ebs"]["Status"] == "attached"`部分 vol_ids = [bdm["Ebs"]["VolumeId"] for bdm in instance["BlockDeviceMappings"] if bdm["Ebs"]["Status"] == "attached"] # 拼接输出行 print(",".join([ins_id, private_ip] + vol_ids))
运行后输出结果和要求的格式完全一致:
i-01,10.1.1.1,vol-123,vol-456 i-02,10.2.2.2,vol-789
场景2:查询指定实例ID的信息
仅需要增加实例ID匹配逻辑即可:
import json with open("ec2.json", "r", encoding="utf-8") as f: ec2_data = json.load(f) # 填入你要查询的目标实例ID target_ins_id = "i-01" for reservation in ec2_data["Reservations"]: for instance in reservation["Instances"]: if instance["InstanceId"] == target_ins_id: private_ip = instance["PrivateIpAddress"] vol_ids = [bdm["Ebs"]["VolumeId"] for bdm in instance["BlockDeviceMappings"] if bdm["Ebs"]["Status"] == "attached"] print(",".join([target_ins_id, private_ip] + vol_ids)) # 匹配到后直接终止循环,提高效率 break
内容的提问来源于stack exchange,提问作者adamtjgogo
相关产品推荐
相关产品推荐

