¿Cómo iniciar una instancia EC2 con Boto, especificando el tamaño de EBS?


Estoy usando boto/python para lanzar una nueva instancia EC2 que arranca desde un volumen de EBS. En el momento en que inicie la instancia, me gustaría anular el tamaño predeterminado del volumen de arranque de EBS.

No he encontrado métodos o parámetros boto que puedan encajar en mi código de lanzamiento:

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

Esta página web muestra cómo aumentar el tamaño del volumen EBS de una instancia EC2 en ejecución utilizando herramientas de línea de comandos, pero me gustaría usar boto en el momento en que se especifica la instancia EC2:

Author: Chris Martin, 2012-11-27

2 answers

Primero debe crear una asignación de dispositivos de bloque:

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

Después de esto, puede dar el mapa de dispositivo de bloque en su llamada 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])

Desafortunadamente esto es no muy bien documentado, pero el ejemplo se puede encontrar en el código fuente.

 37
Author: j0nes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 13:18:45

También puede usar CloudFormation, que se utiliza para documentar y automatizar su entorno. Puede consultar la plantilla para la definición de ESB en: 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" ]}
      }
    }

Luego puede usar Boto CloudFormation API para implementar su entorno.

 0
Author: Guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-29 10:39:34