批量导出AWS所有快照详细信息至Excel表格

批量导出AWS所有快照详细信息至Excel表格

Deng YongJie's blog 8 2025-05-03

CLI导出快照的详细信息

aws ec2 describe-snapshots \
--owner-ids self \
--query "Snapshots[*].[SnapshotId,VolumeSize,VolumeId,Description,StartTime]" \
--output json > snapshots_info.json

使用Python脚本将json内容,指定表头写入excel表格

import json
import csv
from dateutil import parser
import pytz


# 读取 JSON 文件
with open('snapshots_info.json', 'r', encoding='utf-8') as file:
    snapshot_data = json.load(file)

# 定义CSV头部
fields = ['快照 ID', '快照大小 (GiB)', '源卷ID', '卷大小 (GiB)', '快照启动时间', '快照描述']

# 准备写入CSV
with open('snapshots_info.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(fields)

    # 遍历每个快照并写入 CSV
    for snapshot in snapshot_data:
        snapshot_id = snapshot[0] if snapshot[0] else ''
        volume_size_gb = snapshot[1] if len(snapshot) > 1 and snapshot[1] else ''
        volume_id = snapshot[2] if len(snapshot) > 2 and snapshot[2] else ''
        description = snapshot[3] if len(snapshot) > 3 and snapshot[3] else ''
        start_time_utc = snapshot[4] if len(snapshot) > 4 and snapshot[4] else ''

        # 快照大小与卷大小相同(以 GiB 为单位)
        snapshot_size_gb = volume_size_gb

        # 将 UTC 时间转换为中国标准时间 (CST, UTC+8)
        if start_time_utc:
            utc_dt = parser.parse(start_time_utc)
            cst_tz = pytz.timezone('Asia/Shanghai')  # 获取中国标准时间时区
            start_time_cst = utc_dt.astimezone(cst_tz).strftime('%Y-%m-%d %H:%M:%S GMT+0800 (中国标准时间)')  # 转换为 CST 并格式化输出
        else:
            start_time_cst = ''

        # 写入行
        writer.writerow([
            snapshot_id,  # 快照 ID
            snapshot_size_gb,  # 快照大小 (GiB)
            volume_id,  # 源卷ID
            volume_size_gb,  # 卷大小 (GiB)
            start_time_cst,  # 快照启动时间
            description  # 快照描述
        ])

print("快照信息已成功提取并保存到 snapshots_info.csv 文件中。")

最终结果展示:

image-20250314111230730