Подтвердить что ты не робот

Как запустить экземпляр EC2 с Boto, указав размер EBS?

Я использую 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, ] )

Эта веб-страница показывает, как увеличить размер исполняемого тома EBS экземпляра EC2 с помощью инструментов командной строки, но я бы например, использовать boto в момент указания экземпляра EC2:

4b9b3361

Ответ 1

Сначала необходимо создать сопоставление блочного устройства:

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

К сожалению, это не очень хорошо документировано, но пример может быть найденный в исходном коде.

Ответ 2

Вы также можете использовать 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 для развертывания вашей среды.