2012-11-27 19 views
23

私は、EBSボリュームから起動する新しいEC2インスタンスを起動するためにboto/pythonを使用しています。インスタンスを起動した時点で、起動しているEBSボリュームのデフォルトサイズを上書きしたいと思います。EBSのサイズを指定して、BotoでEC2インスタンスを起動する方法は?

私は私の起動コードに収まるかもしれない何のboto方法やパラメータ見つかりませんでした。

ec2 = boto.connect_ec2(ACCESS_KEY, SECRET_KEY, region=region) 

reservation = ec2.run_instances(image_id=AMI_ID, 
           key_name=EC2_KEY_HANDLE, 
           instance_type=INSTANCE_TYPE, 
           security_groups = [ SECGROUP_HANDLE, ]) 

This web pageは、コマンドラインツールを使用して、実行中のEC2インスタンスのEBSボリュームのサイズを大きくする方法を示していますが、私は」

答えて

36

あなたが最初のブロックデバイスマッピングを作成する必要があります:EC2インスタンスは、指定された時間でのbotoを使用したいdは

dev_sda1 = boto.ec2.blockdevicemapping.EBSBlockDeviceType() 
dev_sda1.size = 50 # size in Gigabytes 
bdm = boto.ec2.blockdevicemapping.BlockDeviceMapping() 
bdm['/dev/sda1'] = dev_sda1 

目の後残念ながら、これはnot really well documentedですが、たとえばcan be found in the source code

reservation = ec2.run_instances(image_id=AMI_ID, 
           key_name=EC2_KEY_HANDLE, 
           instance_type=INSTANCE_TYPE, 
           security_groups = [ SECGROUP_HANDLE, ], 
           block_device_mappings = [bdm]) 

:あなたのrun_instances呼び出しでブロックデバイスマップを与えることができています。

+2

これは機能します!ありがとうございました!私のような他のnoobsへの注意:私は私が実行するUbuntuのインスタンス上ではブートボリュームの名前であるため、私は巧妙になり、 '/ dev/sda1'を'/dev/xvda1'に変更すると思った'df -h'コマンドです。何らかの理由で、それはエラーメッセージ "Invalid device name/dev/xvda1"で失敗したので、私はそれを '/ dev/sda1'に戻して、うまくいった。 –

+0

デフォルトのamazon linux 8GB amiはまだ8GBサイズのパーティションテーブルを持っていませんでしたが、これは最初にブートした後に拡張する必要がありますか? –

+0

あなたは基本的に正しいです。この場合、AmazonのAMIが何をするのか分かりません。UbuntuのAMIは最初の起動時に自動的にパーティションを拡張します。 – j0nes

0

CloudFormationを使用して、環境を文書化して自動化することもできます。あなたは、あなたの環境を展開するためにBoto CloudFormation APIを使用することができますhttps://s3.amazonaws.com/cloudformation-templates-us-east-1/EC2WithEBSSample.template

"Resources" : { 
    "Ec2Instance" : { 
     "Type" : "AWS::EC2::Instance", 
     "Properties" : { 
     "AvailabilityZone" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "TestAz" ]}, 
     "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], 
     "KeyName" : { "Ref" : "KeyName" }, 
     "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, 
     "Volumes" : [ 
      { "VolumeId" : { "Ref" : "NewVolume" }, 
      "Device" : "/dev/sdk" 
      } 
     ] 
     } 
    }, 

    ... 

    "NewVolume" : { 
     "Type" : "AWS::EC2::Volume", 
     "Properties" : { 
     "Size" : "100", 
     "AvailabilityZone" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "TestAz" ]} 
     } 
    } 

: あなたはでESB定義のテンプレートを確認することができます。

+0

ありがとうございました。雲の形はかなり面白く見えていますが、これを最後に詳しく見ていきます –

関連する問題