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

如何通过AWS CLI导出含实例名加密状态的EBS卷为可排序CSV

Windows 10 环境AWS CLI导出EBS卷带实例名CSV方案

你遇到的几个问题原因很明确:

  1. 直接写InstanceName/Name返回None,是因为EC2实例的名称存在实例自身的Tags数组里(Key为Name的标签值),describe-volumes接口返回的Attachments挂载结构只带实例ID、挂载状态这类基础关联信息,不会携带关联实例的标签数据,自然取不到值。
  2. 加密字段就是卷对象的顶层属性Encrypted,是布尔值,直接在查询参数里引用即可,不需要额外找特殊字段。
  3. AWS CLI的text输出模式默认不会生成表头,Windows环境下先写表头行再追加数据即可实现带表头的可排序CSV。

另外注意你原命令里–-query前面的横杠是全角长横杠,运行时容易报错,替换成半角双短横--query即可。


可直接在Win10自带PowerShell运行的完整命令

不需要安装额外工具,执行完成后会在当前目录生成标准格式的volumes.csv:

# 拉取所有EC2实例的ID与名称的映射表
$instanceNameMap = @{}
aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId, Tags[?Key=='Name']|[0].Value]" --output text | ForEach-Object {
    $splitItems = $_ -split "`t"
    $instanceNameMap[$splitItems[0]] = $splitItems[1]
}

# 写入CSV表头
"VolumeId,AvailabilityZone,InstanceName,AttachmentState,SizeGiB,Encrypted" | Out-File volumes.csv -Encoding UTF8

# 查询EBS卷数据,替换实例ID为实例名,追加写入CSV
aws ec2 describe-volumes --query "Volumes[*].[Attachments[0].VolumeId,AvailabilityZone,Attachments[0].InstanceId,Attachments[0].State,Size,Encrypted]" --output text | ForEach-Object {
    $splitItems = $_ -split "`t"
    $currentInstName = if ($instanceNameMap.ContainsKey($splitItems[2])) { $instanceNameMap[$splitItems[2]] } else { "" }
    "$($splitItems[0]),$($splitItems[1]),$currentInstName,$($splitItems[3]),$($splitItems[4]),$($splitItems[5])"
} | Out-File volumes.csv -Encoding UTF8 -Append

效果说明

  • 导出的CSV首行是表头,直接用Excel/WPS打开即可正常排序、筛选,不会出现格式错乱。
  • 未挂载到实例的EBS卷,InstanceName字段会自动留空,不会出现脚本报错。
  • Encrypted列值为True代表该卷已开启加密,False为未加密。
  • 所有接口调用只走两次AWS API(一次拉实例列表,一次拉卷列表),执行效率高,不会因为卷数量多出现长时间等待。

内容的提问来源于stack exchange,提问作者Ace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:24:34