You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:27:05