TigerZF
🌐Español

19.4. Zend_Cloud_Infrastructure

19.4.1. Resumen

Zend_Cloud_Infrastructure es una clase para gestionar diferentes infraestructuras de computación en la nube utilizando una API común.

Para proporcionar una API de clase común para diferentes proveedores de nube hemos implementado un pequeño conjunto de operaciones básicas para la gestión de instancias (servidores) en una infraestructura en la nube. Estas operaciones básicas son:

  • crear una nueva instancia;

  • eliminar una instancia;

  • iniciar/detener una instancia;

  • reiniciar una instancia;

  • listado de las instancias disponibles;

  • obtener el estado de una instancia;

  • esperar un cambio de estado de una instancia;

  • obtener la IP pública o el nombre DNS de la instancia;

  • listar todas las imágenes disponibles para nuevas instancias;

  • listar todas las zonas geográficas disponibles para nuevas instancias;

  • monitorizar una instancia obteniendo la información del sistema (uso de CPU%, RAM%, DISCO%, RED%);

  • desplegar una instancia (ejecutar un script de shell arbitrario en una instancia);

[Note] Despliegue de una instancia

Para las operaciones de despliegue hemos utilizado la extensión SSH2 de PHP (ext/ssh2) para conectarnos a una instancia y ejecutar un script de shell. Las extensiones SSH2 solo se pueden usar para conectarse a instancias (servidores) Gnu/Linux.

Esta clase se gestiona mediante una factoría (factory) para inicializar adaptadores específicos de computación en la nube.

19.4.2. Inicio rápido

Para usar esta clase debe inicializar la factoría con un adaptador específico. Puede consultar los adaptadores soportados en el capítulo específico Zend_Cloud_Infrastructure_Adapter. Estamos planeando soportar otros proveedores de computación en la nube muy pronto.

Por ejemplo, para trabajar con el adaptador de AMAZON EC2 debe inicializar la clase con los siguientes parámetros:

$key    = 'key';
$secret = 'secret';
$region = 'region';

$infrastructure = Zend_Cloud_Infrastructure_Factory::getAdapter(array(
    Zend_Cloud_Infrastructure_Factory::INFRASTRUCTURE_ADAPTER_KEY => 'Zend_Cloud_Infrastructure_Adapter_Ec2',
    Zend_Cloud_Infrastructure_Adapter_Ec2::AWS_ACCESS_KEY => $key,
    Zend_Cloud_Infrastructure_Adapter_Ec2::AWS_SECRET_KEY => $secret,
    Zend_Cloud_Infrastructure_Adapter_Ec2::AWS_REGION     => $region,
));

Zend_Cloud_Infrastructure tiene solo un par de métodos que son específicos del proveedor. Estos métodos son la creación de una nueva instancia y la monitorización de una instancia. Por ejemplo, a continuación se muestra un ejemplo que ilustra cómo crear una nueva instancia usando el adaptador de Amazon EC2:

$param= array (
    'imageId'      => 'your-image-id',
    'instanceType' => 'your-instance-type',
);

$instance= $infrastructure->createInstance('name of the instance', $param);

printf ("Name of the instance: %s\n", $instance->getName());
printf ("ID of the instance  : %s\n", $instance->getId());

La interfaz de createInstance es siempre la misma, solo el contenido de $param es específico del adaptador. Para más información sobre los adaptadores soportados por Zend_Cloud_Infrastructure vaya a la página específica del manual.

Zend_Cloud_Infrastructure utiliza las clases Zend_Cloud_Infrastructure_Instance y Zend_Cloud_Infrastructure_Image para gestionar las instancias (servidores) y las imágenes de una instancia.

19.4.3. Métodos disponibles

createInstance(string $name, array $options);

Crea una instancia. El valor de retorno es una instancia de Zend_Cloud_Infrastructure_Instance. En caso de error el retorno es false.

$name es el nombre de la instancia a crear

$options es el array que contiene el parámetro específico para el adaptador de nube. Para más información lea el capítulo de Zend_Cloud_Infrastructure_Adapter.

deployInstance(string $id, array $param, string|array $cmd);

Ejecuta scripts de shell arbitrarios en una instancia. Devuelve una cadena o un array que contiene toda la salida estándar (incluyendo errores) de los scripts ejecutados en la instancia.

[Note] Requisito

Para usar el método deployInstance debe instalar la extensión SSH2 (ext/ssh2) de PHP. Las extensiones SSH2 solo se pueden usar para conectarse a instancias (servidores) Gnu/Linux. Para más información sobre la extensión SSH2, haga clic aquí.

$id es el ID de la instancia

$param es un array que contiene el nombre de usuario y la contraseña a usar para la conexión SSH. El nombre de usuario y la contraseña deben especificarse usando las siguientes constantes clave de Zend_Cloud_Infrastructure_Instance: SSH_USERNAME, SSH_PASSWORD.

$cmd es una cadena (o un array) que contiene las líneas de comando a ejecutar en la instancia.

destroyInstance(string $id);

Destruye una instancia. Devuelve true en caso de éxito, false en caso de error.

$id es el ID de la instancia

getAdapter();

Devuelve el objeto adaptador.

getAdapterResult();

Devuelve el resultado original del adaptador.

getLastHttpRequest();

Devuelve la última petición HTTP del adaptador.

getLastHttpResponse();

Devuelve la última respuesta HTTP del adaptador.

imagesInstance();

Devuelve todas las imágenes disponibles para usar en una instancia. El valor de retorno es una instancia de Zend_Cloud_Infrastructure_ImageList

listInstances();

Devuelve la lista de las instancias disponibles. El retorno es una instancia de Zend_Cloud_Infrastructure_InstanceList.

monitorInstance(string $id,string $metric,array $options=null);

Monitoriza una instancia. Devuelve la información del sistema sobre la métrica de una instancia. El valor de retorno es un array que contiene muestras de valores, marca de tiempo y el cálculo del valor medio.

$id es el ID de la instancia;

$metric es la métrica a monitorizar. Las métricas permitidas se indican como constantes de la clase Zend_Cloud_Infrastructure_Instance: MONITOR_CPU, MONITOR_RAM, MONITOR_NETWORK_IN, MONITOR_NETWORK_OUT, MONITOR_DISK, MONITOR_DISK_WRITE, MONITOR_DISK_READ.

$options es el array opcional que contiene las opciones específicas del adaptador.

publicDnsInstance(string $id);

Devuelve el nombre DNS público o la dirección IP de la instancia. El valor de retorno es una cadena. En caso de error el retorno es false.

$id es el ID de la instancia

rebootInstance(string $id);

Reinicia una instancia. Devuelve true en caso de éxito, false en caso de error.

$id es el ID de la instancia

startInstance(string $id);

Inicia una instancia. Devuelve true en caso de éxito, false en caso de error.

$id es el ID de la instancia

statusInstance(string $id);

Obtiene el estado de una instancia. El valor de retorno es una cadena. Los estados disponibles se indican en las siguientes constantes de la clase Zend_Cloud_Infrastructure_Instance: STATUS_STOPPED, STATUS_RUNNING, STATUS_SHUTTING_DOWN, STATUS_REBOOTING, STATUS_TERMINATED, STATUS_PENDING, STATUS_REBUILD. En caso de error el retorno es false.

$id es el ID de la instancia

stopInstance(string $id);

Detiene una instancia. Devuelve true en caso de éxito, false en caso de error.

$id es el ID de la instancia

waitStatusInstance(string $id, string $status,integer $timeout=30);

Espera el cambio de estado de una instancia durante un tiempo máximo de n segundos. Devuelve true si el estado cambia como se esperaba, false si no.

$id es el ID de la instancia;

$status es el estado a esperar;

$timeout es el tiempo máximo, en segundos, a esperar para el cambio de estado. Este parámetro es opcional y el valor por defecto es 30 segundos.

zonesInstance();

Devuelve todas las zonas disponibles para una instancia. El valor de retorno es un array.

19.4.4. Ejemplos

Ejemplo 19.40. Obtener la información del sistema de fecha y hora de una instancia

Obtiene el resultado del comando date.

$param = array (
    Instance::SSH_USERNAME => 'username',
    Instance::SSH_PASSWORD => 'password',
);

$cmd    = 'date';
$output = $infrastructure->deployInstance('instance-id', $param, $cmd);

echo $output;

Ejemplo 19.41. Obtener la información del sistema de fecha y hora de una instancia

Obtiene el resultado del comando date.

$param = array (
    Instance::SSH_USERNAME => 'username',
    Instance::SSH_PASSWORD => 'password',
);

$cmd    = 'date';
$output = $infrastructure->deployInstance('instance-id', $param, $cmd);

echo $output;

Ejemplo 19.42. Reiniciar una instancia y esperar el estado de ejecución

Reinicia una instancia y espera 60 segundos por el estado de ejecución.

if (!$infrastructure->rebootInstance('instance-id')) {
    die ('Error in the execution of the reboot command');
}
echo 'Reboot command executed successfully';

if ($rackspace->waitStatusInstance('instance-id', Zend_Cloud_Infrastructure_Instance::STATUS_RUNNING, 60)) {
    echo 'The instance is ready';
} else {
    echo 'The instance is not ready yet';
}