miércoles, 22 de agosto de 2012

Crear instancia EC2 con PHP parte 1 de 3

Muy buenas a todos, hace tiempo que quería publicar estos post. La pena es que actualmente no funcionan al 100% pero no tengo encuentro la forma ni el error. Sigo al pie de la letra toda la documentación de la API de Amazon EC2. 

En el siguiente ejemplo se verá como crearemos una instancia en EC2, con mis comentarios y ejemplos de la web oficial.

Según la ayuda y la info de la web está todo correcto no hay errores. Pero en mi caso no me crea la máquina. Cuando saque tiempo investigaré más en el asunto. Y os preguntareis si está mal por que lo publicas!! pues me repito diciendo que según la ayuda de los técnicos y la documentación de la web de Amazon AWS está correcto. Quiero pensar que el problema es mio por no abrir algún puerto o permisos.
<?php
error_reporting(-1);
header("Content-type: text/html; charset=utf-8");
require_once 'sdk.class.php';

//creamos una máquina a partir de una plantilla ya creada para ello rellenamos los siguientes datos recogidos por POST

$ami = $_POST['amis']; //IDENTIFICADOR DE LA AMIs

$instancetype = $_POST['instancetype']; //TYPO DE INSTANCIA MYCRO,SMALL...

$keyname = $_POST['key']; //NOMBRE DE LA CLAVE DE ACCESO

$securitygroup = $_POST['securitygroups']; //ID DEL GRUPO DE SEGURIDAD

$ec2 = new AmazonEC2();

$response = $ec2->run_instances($ami, 1, 1, array(

    'KeyName' => $keyname,

    'InstanceType' => $instancetype,

    'SecurityGroupId' => $securitygroup,

));

//ejemplo de la web oficial
//$response = $ec2 -> run_instances(
//'ami-38fe7308', 1, 1,
//array(
//'InstanceType' => 'm1.small',
//'KeyName' => 'my-php-key-pair',
//'SecurityGroup' => 'my-php-security-group'));

if (!($response->isOK())) {
    echo "<p class='error'>ERROR! No se ha podido crear la instancia!</p>";
return;}

$instance = $response->body->instancesSet->item->instanceId;
$message = "<p>La instancia se a creado correctamente.</p>";
$message .= ("<p>Instancia ID: <b>$instance</b></p>");

$response = $ec2->describe_instances(array(
    'Filter' => array(
       array('Name' => 'instance-id', 'Value' => "$instance"),
    )
));

if (!($response->isOK())){
    echo "<p class='error'>ERROR! No se puede recibir el hostname de la instancia!</p>";
return;}

$hostname = $response->body->reservationSet->item->instancesSet->item->dnsName;
$message .= "<p>Host de la instancia: <b>$hostname</b></p>";
$message .= "<p>Para conectarte usa el comando:".
"<b>ssh -i $keyname.pem usuario@".$hostname."</b></p>";
echo $message;
Cuando de con mi error actualizaré la información. De todas formas espero que os ayude a vosotros.