1

私はbotoを使用しています。コードは次のとおりです。

dev_xvdb = boto.ec2.blockdevicemapping.EBSBlockDeviceType(volume_id='vol-xxxxxx')
bdm = boto.ec2.blockdevicemapping.BlockDeviceMapping()
bdm['/dev/xvdb'] = dev_xvdb

rs = ec2.request_spot_instances(price=MY_MAX_PRICE,
                                image_id='ami-xxxxx',
                                count=1,
                                type='one-time',
                                key_name='MY_KEY_NAME',
                                security_groups=['default'],
                                instance_type='t1.micro',
                                block_device_map=bdm)

このコードは正しく実行できますが、EBS ボリューム (id=vol-xxxxxx) をアタッチできません。なんで?

4

1 に答える 1

3

ここでの問題は、BlockDeviceMapping を使用して既存のボリュームをインスタンスにアタッチできないことだと思います。BlockDeviceMapping を使用すると、ボリューム サイズまたはスナップショット ID を指定できます。サイズを指定すると、そのサイズの新しい空のボリュームが作成され、指定したデバイスに接続されます。スナップショット ID を指定すると、そのスナップショットから新しいボリュームが作成され、アタッチされます。

既存のボリュームをインスタンスに接続するattach_volume場合は、インスタンス ID を取得した後にのみ実行できるメソッドを使用する必要があります。

では、なぜ boto の EBSBlockDeviceType にはvolume_id属性があるのでしょうか? これは、get_all_instances呼び出しを行うと、BlockDeviceMapping に対して AWS によって返されるデータに、volume_id現在接続されている EBS ボリュームが含まれるためです。

于 2013-02-09T14:26:25.630 に答える