web-dev-qa-db-fra.com

Comment lancer une instance EC2 avec Boto, en spécifiant la taille d'EBS?

J'utilise boto/python pour lancer une nouvelle instance EC2 qui démarre à partir d'un volume EBS. Au moment où je lance l'instance, j'aimerais remplacer la taille par défaut du volume EBS de démarrage. 

Je n'ai trouvé aucune méthode ni aucun paramètre de boto qui puisse s'intégrer dans mon code de lancement:

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

Cette page Web montre comment augmenter la taille du volume EBS d'une instance EC2 en cours à l'aide d'outils de ligne de commande, mais j'aimerais utiliser boto au moment de la spécification de l'instance EC2:

26
Iron Pillow

Vous devez d'abord créer un mappage de bloc de périphérique:

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

Après cela, vous pouvez donner la carte de bloc de périphérique dans votre appel 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])

Malheureusement, ceci est pas vraiment bien documenté , mais l'exemple peut être trouvé dans le code source .

41
j0nes

Vous pouvez également utiliser CloudFormation , utilisé pour documenter et automatiser votre environnement . Vous pouvez vérifier le modèle pour la définition ESB à l’adresse: 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" ]}
      }
    }

Vous pouvez ensuite utiliser API Boto CloudFormation pour déployer votre environnement.

0
Guy