解决方法
EBS和实例存储卷的块设备映射是其中可用的几个属性之一,并且可以使用诸如“curl”之类的工具从shell和脚本轻松访问数据.
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
这可能是发现您正在寻找的“最正确”的方式.
更新:我敲了一个快速而极其肮脏的单行来演示这个功能.我不打算暗示这是生产质量代码,也没有特别详细记录,但它绝对有效.
上面的端点似乎提供了其界面的几个“版本”,其中大多数使用版本发布日期,或者您可以使用“最新”版本.因此,即使接口发生更改,此示例代码仍将继续工作,我将选择版本“2012-01-12”.
我们将在shell变量$MetaURL中存储一个链接,用curl检索那里可用的映射列表,然后使用bash for / do / done循环(再次使用curl)迭代每个映射,以找到块设备…然后使用perl使其更整洁并将“sdX”重写为“xvdX”,因为我的特定实例用于其设备名称,最后排序以按词汇顺序排列.
bash$MetaURL="http://169.254.169.254/2012-01-12/Meta-data/block-device-mapping/" bash$for bd in `curl -s $MetaURL`; do curl -s $MetaURL$bd | \ perl -pe 'BEGIN { $d = shift } s/^(\/dev\/)?(sd)?(.*)$/\/dev\/xvd$3 is $d\n/' $bd; \ done | sort
输出示例:
/dev/xvda1 is ami /dev/xvda1 is root /dev/xvdb is ephemeral0 /dev/xvdf is ebs2 /dev/xvdg is ebs1 /dev/xvdh is ebs5
这很光滑,相对无痛.
但是,我的回答有一个小问题.
block-device-mapping/ebsN
The virtual devices associated with Amazon EBS volumes,if any are present. This value is only available in Metadata if it is present at launch time.
— 07001
此解决方案不会告诉您实例启动后安装的EBS卷.这可能没问题,因为短暂的卷信息总是可用的,因为短暂的磁盘只能在启动时添加,而不是更晚……所以如果卷是短暂的,你应该总是能够通过这种方法发现它.如果它不在这里,它不是一个短暂的磁盘.
鉴于此,EC2 API或aws cli实用程序(调用EC2 API)将是您需要使用的内容,如果您确实需要了解所有关于实例附加内容的信息.那里有更多的数据,但在脚本中使用会有点琐碎.我猜想经典的权衡.