2012-11-27 113 views
23

我正在使用boto/python啓動從EBS卷啓動的新EC2實例。在我啓動實例的時候,我想覆蓋引導EBS卷的默認大小。如何用Boto啓動EC2實例,指定EBS的大小?

我沒有發現任何可能適合我的啓動代碼博託方法或參數:

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卷的大小,但我D類似於在指定了EC2實例時使用博託:

回答

36

你必須首先創建一個塊設備映射:

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

後第是你所能給予的塊設備的地圖將在run_instances電話:

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]) 

不幸的是,這是not really well documented,但例如can be found in the source code

+2

This Works!謝謝!請注意像我這樣的其他noob:我認爲我會很聰明,並將'/ dev/sda1'改爲'/ dev/xvda1',因爲在我運行的Ubuntu實例中,這是啓動卷的名稱,根據'df -h'命令。無論出於何種原因,失敗的錯誤信息是:「無效的設備名稱/ dev/xvda1」因此,我將其更改回爲「/ dev/sda1」,並且一切順利。 –

+0

不會默認的亞馬遜linux 8GB ami仍然有一個8GB大小的分區表,這將不得不在第一次啓動時擴展? –

+0

你基本上是對的。我不知道Amazon AMI在這種情況下做了什麼,Ubuntu AMI在第一次啓動時自動擴展分區。 – j0nes

0

您也可以使用CloudFormation,它用於記錄和自動化您的環境。 您可以檢查模板的ESB定義: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" ]} 
     } 
    } 

然後可以使用Boto CloudFormation API部署您的環境。

+0

謝謝蓋伊。雲信息看起來很有趣,最後還會仔細看看 –

相關問題