amazon-web-services - 使用 AWS CLI 检索与标签匹配的所有实例的所有卷 ID
问题描述
堆栈溢出!我正在寻找一种更有效的方法来计算附加到与标签匹配的实例的 EBS 卷的总大小。请注意,我/dev/sda1
只对根卷感兴趣!
目前,我正在使用以下方法来获取与标签匹配的所有实例。我遍历该输出以获取附加卷的大小。
# Calculate the total amount of storage needed for all volumes attached to production EC2 instances (based on 'prod' in the Name tag)
for i in $(aws ec2 describe-instances --query 'Reservations[].Instances[][].{Id: InstanceId}' --filters "Name=tag:Name,Values=*prod*" --output=text);
do
size=$(aws ec2 describe-volumes --query="Volumes[].Size | [0]" --filters Name=attachment.instance-id,Values=${i} --output=text)
total=$((total+size))
echo "$total $size"
done
echo "Total: $total"
这可行,但我知道它效率不高,因为我使用一个 CLI 调用来获取实例(将其替换为N),然后调用每个实例来获取卷大小。
这导致总共N+1 个命令。
我知道该describe-instances
命令可以返回附加到实例的卷,然后我可以使用describe-volumes
所有卷作为参数进行调用。
这将导致只有 2 个 CLI 调用!
total=0
VOLUMES=$(aws ec2 describe-instances --query … --filter ...)
SIZES=$(aws ec2 describe-volumes --volume-ids ${VOLUMES} --query 'Volumes[].Size' --output=text)
for size in ${SIZES};
do
total=$((total+size))
echo "$total $size"
done
echo "Total: $total"
但是,我无法让查询返回卷。
我使用以下内容作为起点:
aws ec2 describe-instances --query 'Reservations[].Instances[][].BlockDeviceMappings[]' --filters "Name=tag:Name,Values=*prod*"
它给了我这个:
[
{
"DeviceName": "/dev/sda1",
"Ebs": {
"AttachTime": "2019-07-02T21:17:50.000Z",
"DeleteOnTermination": true,
"Status": "attached",
"VolumeId": "vol-abcdef1234567890"
}
},
...
]
但是我无法在describe-instances
调用中获得正确的查询以仅返回VolumeId
s。
有什么建议么?
解决方案
在发布此内容时进行了一些黑客攻击后,我想出了正确的查询:
aws ec2 describe-instances \
--query 'Reservations[].Instances[][].BlockDeviceMappings[].Ebs[].VolumeId' \
--filters "Name=tag:Name,Values=*prod*" \
--output=text
推荐阅读
- mysql - Mysql cli 未在 crontab 运行的 bash 脚本中返回数据
- wordpress - 如何检查,我的主机是否支持 http2?
- ruby-on-rails - 如何显示 Rails API 调用数据?
- android - 如何使用 NotificationListener 服务解决极度耗电问题
- algorithm - 将矩阵分解为更小的子列表
- javascript - 如何使用 Puppeteer 将数据写入文件?
- macos - 在 Mac 上使用以太网电缆将 VNC 插入 Raspberry Pi 3B+ 当 Mac 上的 wifi 打开时,OSX 失去连接
- java - 有人可以为我解释以下代码的含义是什么
- google-apps-script - 加速电子表格的脚本(GAS - Google App Script & Google Sheets)
- python - 如何从列表中返回一个字典,其中键是列表中的项目,值是 python 中该列表中出现的次数?