如何用Boto启动EC2实例,指定EBS的大小?

2024-06-01 20:11:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用boto/python启动一个新的EC2实例,该实例从EBS卷引导。在启动实例时,我想覆盖引导EBS卷的默认大小。

我没有找到适合我的启动代码的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卷的大小,但我希望在指定EC2实例时使用boto:


Tags: 实例方法key代码参数secretaccessconnect
2条回答

必须先创建块设备映射:

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

您还可以使用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来部署环境。

相关问题 更多 >