Amazon ec2 API に関して 2 つの関連する質問 (または問題) があります。私は実際には python と boto パッケージを使用したいので、以下のコードを示していますが、同等のシェル ec2-* コマンドを使用してもまったく同じ結果が得られます。
まず、Debian ベースのパブリック AMI イメージからインスタンスを生成したいのですが、より大きなルート「パーティション」が必要です (イメージにない追加の Debian パッケージをインストールしたいため)。ドキュメントは、私が次のようなことをすべきだと私に信じさせました:
import boto.ec2 as BE
import boto.ec2.blockdevicemapping as BEM
conn=BE.connect_to_region('us-east-1')
bdt=BEM.BlockDeviceType()
# I want a 10G root device, not a 1G
bdt.size=10
bdm=BEM.BlockDeviceMapping()
bdm['/dev/sda1']=bdt
reservations=conn.run_instances('ami-1234abcd', key_name='mykey',
instance_type='m1.medium', block_device_map=bdm)
しかし、これはまったく効果がないようです。インスタンスは正常に生成され、正しいイメージとすべてが生成されますが、ルート デバイスはまだ 1G です :-(
そのため、イメージを変更する前に、イメージから BlockDeviceMapping を初期化する必要があるのではないかと考えました。私はこのように試しました:
bdm=conn.get_image_attribute('ami-1234abcd', attribute='blockDeviceMapping')
これにより、「不正な操作の試行」などの奇妙な例外トレースが発生します。これは、私自身が別のインスタンスをフリーズして作成したイメージでも発生します!
ひどい Web インターフェイスでインスタンスを作成するときに、デバイス構成を変更するのは簡単です。プログラムでこれを行う方法を教えてください!ありがとう。