
メタデータからインスタンスIDを取得するのと同じように、インスタンスにアタッチされたボリュームIDを取得したい
InstanceID=`curl http://169.254.169.254/latest/meta-data/instance-id
答え1
ボリュームIDはメタデータからは入手できません。仮想デバイスは以下から入手できます。block-device-mapping/
インスタンスに割り当てられたボリューム ID を取得するには、AWS CLI (またはスクリプト、プログラムなど) を使用する必要があります。
CLI の場合:
aws ec2 describe-volumes
出力には、ボリュームが接続されているインスタンス ID が含まれます。
インスタンス ID がわかれば、そのインスタンスに接続されているボリュームだけをフィルタリングできます。
aws ec2 describe-volumes --filters Name=attachment.instance-id,Values=i-555550604eaf99999
ドキュメントにはさらに詳しい情報と例が記載されています。
答え2
私の場合、シェル アクセスのみを持つインスタンスのボリューム ID を取得する必要がありました。VM をセットアップした顧客にボリューム ID を伝える必要がありました。
その場合、awsプロファイルがなく、ボリュームIDのみを取得する必要がある場合は、ebsnvme-id
Linuxディストリビューションにプリインストールされているawsツールを使用できます(https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html)
たとえば:
$ sudo /sbin/ebsnvme-id /dev/nvme1n1
Volume ID: vol-c26087a73f2293647
sdb
答え3
答えはすでに出ていますが、クエリを実行している現在のインスタンス接続ボリュームを探していました。
instance Id
したがって、 curl 応答から を渡すだけです。
aws ec2 describe-volumes --filters Name=attachment.instance-id,Values=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
サンプル出力
{
"Volumes": [
{
"AvailabilityZone": "us-west-2b",
"Attachments": [
{
"AttachTime": "2018-03-01T07:47:43.000Z",
"InstanceId": "i-abcdedf",
"VolumeId": "vol-12345",
"State": "attached",
"DeleteOnTermination": true,
"Device": "/dev/xvda"
}
],
"Encrypted": false,
"VolumeType": "gp2",
"VolumeId": "vol-123456",
"State": "in-use",
"Iops": 450,
"SnapshotId": "snap-1234",
"CreateTime": "2018-03-01T07:47:43.261Z",
"Size": 150
}
]
}