CLI导出AMI模板的配置信息
aws ec2 describe-images \
--owners self \
--filters Name=is-public,Values=false \
--query "Images[*].[Name,ImageId,BlockDeviceMappings[0].Ebs.SnapshotId,BlockDeviceMappings[0].Ebs.VolumeSize,SourceImageId,SourceImageRegion,Description,Tags]" \
--output json > private_ami_info.json
使用Python脚本将json内容,指定表头写入excel表格
import json
import csv
# 读取 JSON 文件
with open('private_ami_info.json','r',encoding='utf-8') as file:
ami_data = json.load(file)
# 定义CSV头部
fields = ['AMI 名称','AMI ID','Source AMI ID','Source AMI Region','块存储设备ID','卷大小(GiB)','描述','标签']
# 准备写入CSV
with open('private_ami_info.csv','w',newline='',encoding='utf-8-sig') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(fields)
# 遍历每个 AMI 并写入 CSV
for ami in ami_data:
ami_name = ami[0] if ami[0] else '' # AMI 名称与 Name 字段相同
ami_id = ami[1]
block_device_id = ami[2] if len(ami) > 2 and ami[2] else ''
volume_size = ami[3] if len(ami) > 3 and ami[3] else ''
source_ami_id = ami[4] if len(ami) > 4 and ami[4] else ''
source_ami_region = ami[5] if len(ami) > 5 and ami[5] else ''
description = ami[6] if len(ami) > 6 and ami[6] else ''
# 提取和格式化标签信息,过滤掉系统默认生成的标签
user_tags = {}
if len(ami) > 7 and ami[7]:
for tag in ami[7]:
key = tag['Key']
value = tag['Value']
# 过滤掉以 "aws:" 开头的系统标签
if not key.startswith("aws:"):
user_tags[key] = value
tags_str = json.dumps(user_tags, ensure_ascii=False) # 将用户自定义标签转换为 JSON 字符串
# 写入行
writer.writerow([
ami_name, # AMI 名称
ami_id, # AMI ID
source_ami_id, # Source AMI ID
source_ami_region, # Source AMI Region
block_device_id, # 块存储设备ID
volume_size, # 卷大小(GiB)
description, # 描述
tags_str # 标签
])
print("私有 AMI 信息已成功提取并保存到 private_ami_info.csv 文件中。")
最终结果: