AWS SDK для PHP 2 - Изменение размера корневого тома при создании экземпляра

Относительно легко создать новый экземпляр с использованием PHP с помощью метода runInstances().

$instance = $ec2->runInstances(array(
    'ImageId'        => AMI_ID,      // AMI ID
    'InstanceType'   => AMI_TYPE,    // m1.medium etc.
    'MinCount'       => 1,           // Minimum to create
    'MaxCount'       => 1,           // Maximum to create
    'SecurityGroups' => SEC_NAME,    // Security Group Name
    'KeyName'        => KEY_NAME     // Key Pair to use
))->toArray();                       // Get back our data in an array

Тем не менее, точка API заключается в том, чтобы сделать все, что вы можете сделать с интерфейсом на веб-сайте amazon, в десятую часть времени и с собственным кодом.

Имея это в виду, мне нужно сделать следующее:

AWS Request Instances Wizard - Root Volume

В интерфейсе я могу изменить Размер тома, скажем, 40 ГБ.

Как я могу задать размер тома 40 ГБ при создании нового экземпляра с PHP? Он может даже запускаться после создания экземпляра, если он автоматически - я должен быть в состоянии сделать это программно.

Как я могу достичь того, что мне нужно, используя AWS SDK для PHP 2?

Ответ 1

Похоже, ты на правильном пути. В документации для runInstances() имеется параметр BlockDeviceMappings, который содержит еще один параметр Ebs, который содержит парафаз, который вы ищете VolumeSize. Это непроверенный код.

$instance = $ec2->runInstances(array(
'ImageId'                => AMI_ID,      // AMI ID
'InstanceType'           => AMI_TYPE,    // m1.medium etc.
'MinCount'               => 1,           // Minimum to create
'MaxCount'               => 1,           // Maximum to create
'SecurityGroups'         => SEC_NAME,    // Security Group Name
'KeyName'                => KEY_NAME,    // Key Pair to use
'BlockDeviceMappings' => array(          // How block devices are mapped to instance
   array(
     'Ebs' => array(                     // EBS Volume Info
        array(
            'VolumeSize' => 40           // Volume Size
        )
    )
)
)
))->toArray();                           // Get back our data in an array

Ответ 2

Это не отличается от того, как это делается с помощью инструментов командной строки. Сначала вам нужно выяснить идентификатор моментальной копии AMI, который вы будете запускать. Вы делаете это, запрашивая свойства AMI. Одним из возвращаемых значений является идентификатор моментального снимка. Затем вы используете этот идентификатор для запуска экземпляра, указав идентификатор моментального снимка, который вы будете использовать, а также размер.

Документация здесь: http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=AmazonEC2/run_instances

объясняет, что это необходимо передать с помощью массива BlockDeviceMapping. Затем внутри этого массива вам нужно использовать "Ebs" и указать SnapshotId и VolumeSize.

Если вы передадите все эти параметры в вызове runinstance, он запустится с нужным размером.