AWS CLI からインスタンスにアタッチされたボリューム ID を取得する方法

AWS CLI からインスタンスにアタッチされたボリューム ID を取得する方法

メタデータからインスタンス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-idLinuxディストリビューションにプリインストールされている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
        }
    ]
}

関連情報