希望您能帮助我解决此问题。希望答案能让我构建更好的查询。我正在尝试按特定实例的根设备进行过滤并获取根设备卷 ID。您能解释一下我如何连接两个这样的查询吗?搜索 DeviceName /dev/sda1 然后获取相应的 VolumeId。
aws ec2 describe-instances --instance-id i-02bc19e18ef09cdbe --query 'Reservations[].Instances[].BlockDeviceMappings[]'
[
{
"Ebs": {
"AttachTime": "2017-04-20T13:32:04.000Z",
"VolumeId": "vol-0118bd9c0a08164f2",
"DeleteOnTermination": false,
"Status": "attached"
},
"DeviceName": "/dev/sda1"
}
]
答案1
这个问题有点老了,但这里有一个可能的解决方案。做一个假设——即根设备是/dev/sda1
。我认为这对 AWS 来说是一个相当好的假设。如果您不指定实例 ID,则将返回所有实例。然后我搜索 DeviceName 等于 /dev/sda1。搜索词后,将创建一个包含 DeviceName 和 VolumeId 的列表。
aws ec2 describe-instances --query "Reservations[].Instances[].BlockDeviceMappings[?DeviceName == '/dev/sda1'].{DeviceName: DeviceName, VolumeID: Ebs.VolumeId}
答案2
我知道已经晚了,但是如果有人需要它,这里是 aws cli 命令,可用于检索连接到实例的根卷设备名称。
aws ec2 describe-instances --instance-ids <instance-id> --region <region-name> --query "Reservations[*].Instances[*].RootDeviceName" --output text
使用上述命令的输出作为以下命令的输入,我们可以检索卷 ID。
aws ec2 describe-volumes --region <region name> --filters Name=attachment.instance-id,Values=<instance-id> Name=attachment.device,Values=<output from above command> --query 'Volumes[*].VolumeId' --output text