Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Digital Ocean

Usar la API de Digital Ocean para administrar instancias en la nube

by
Read Time:9 minsLanguages:

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

¿Qué es Digital Ocean?

Digital Ocean es uno de los proveedores de alojamiento web de más rápido crecimiento, en parte debido a sus rápidos servidores basados en SSD y a sus planes de alojamiento mensuales de $5 de bajo coste. Crear instancias en Digital Ocean para pruebas o uso a largo plazo es rápido, fácil y asequible.

En Construir una aplcación para revender en Digital Ocean, te acompañé a través del proceso de lanzaminto de una instancia de WordPress (u otra aplicación) y a clonarlas repetidamente para los clientes. En este tutorial, voy a guiarte en el uso de la API de Digital Ocean para administrar mediante programación nuestras instancias, también conocidas como "droplets", y para automatizar tareas comunes. También proporcionaré un código base de ejemplo para ejecutar operaciones API muy básicas escritas en Yii Framework para PHP; puedes obtener el código aquí en Github.

La API de Digital Ocean

La API de Digital Ocean te permite administrar Droplets y recursos de una manera sencilla y programática mediante solicitudes HTTP. Toda la funcionalidad con la que estás familiarizado en el panel de control de Digital Ocean también está disponible a través de la API, lo que te permite crear scripts de las complejas acciones que tu propia casuística requiera.

Para este tutorial, integraremos la biblioteca de API PHP Digital Ocean V2 del desarrollador Antoine Corcy en una aplicación de consola basada en Yii. No necesitas conocimientos sobre Yii para utilizar la aplicación, pero puedes aprender más sobre ella aquí: Introducción al framework Yii.

La API de Digital Ocean autentica tu cuenta a través de OAuth y se compone de cerca de una docena de áreas de alto nivel:

  • Cuentas: proporciona información básica sobre tu cuenta de Digital Ocean.
  • Acciones: un registro histórico de acciones en las instancias de tu cuenta.
  • Dominios y registros de dominio: te permite administrar los dominios utilizados en las instancias de tu cuenta, así como los registros DNS asociados a ellos.
  • Instancas y Acciones de instancias: te permite crear, apagar, reiniciar, hacer instantáneas y más mucho para tus instancias.
  • Imágenes y acciones de imagen: te permite enumerar y administrar las imágenes de las instantáneas que hayas creado de las instancias de tu cuenta.
  • Claves SSH: te permite registrar una clave SSH para que la instales al crear una instancia de manera que no se necesite seguridad de contraseña.
  • Regiones: enumera las regiones geográficas en las que se pueden crear instancias de Digital Ocean.
  • Tamaños: enumera los tamaños de las instancias que puedes utilizar al crearlas.

Ahora que sabes un poco sobre la API, vamos a sumergirnos con nuestra propia aplicación.

Configuración de las claves de acceso

Para utilizar la API, debes activar los tokens de acceso personal para tu cuenta. Inicia sesión en tu cuenta y visita la página de ajustes de la aplicación: https://cloud.digitalocean.com/settings/applications. Haz clic en Generar nuevo token, como se muestra a continuación:

Digital Ocean API Generate Acces TokenDigital Ocean API Generate Acces TokenDigital Ocean API Generate Acces Token

A continuación, anota tu token de acceso: Digital Ocean solo te lo mostrará una vez:

Digital Ocean API Your New Acces TokenDigital Ocean API Your New Acces TokenDigital Ocean API Your New Acces Token

Ahora, pasemos a la aplicación de consola de ejemplo.

Nuestra aplicación de consola

En este tutorial, vamos a explorar una pequeña aplicación de consola creada por mí y que realiza algunas tareas relacionadas con la administración de instancias. Puedes instalar la aplicación tú mismo desde el repositorio GitHub de Tuts+ y personalizarla o ampliarla para implementar las características de API adicionales que desee. He publicado en mi sitio web una detallada guía de instalación para la aplicación de consola. También puedes explorar mi guía de instalación genérica para aplicaciones de Digital Ocean.

Configurar el acceso a la API

Una vez más, estamos usando la biblioteca de API PHP Digital Ocean V2 de Antoine Corcy para acceder a la API.

Hemos construido un componente llamado Ocean.php que actúa como modelo para usar su biblioteca. Está en /app/protected/components/Ocean.php.

Yii carga el token de acceso desde el archivo Ocean.ini, que se describe en la Guía de instalación de la aplicación Digital Ocean Console y crea una instancia de un objeto API digitalOcean.

Localizar instancias

Digital Ocean API Console Manage Your DropletsDigital Ocean API Console Manage Your DropletsDigital Ocean API Console Manage Your Droplets

Ahora, vamos a buscar un listado de nuestras instancias activas. En /app/protected/models/Droplet.php, nuestro método de sincronización (sync) invoca los componentes de Ocean y obtiene las instancias:

Este es el aspecto del método getDroplets de Ocean:

Nota: la aplicación de consola básica solo realiza una sincronización de descarga unidireccional de nuestros listados de instancias. Podrías implementar más características por tu cuenta, incluida la eliminación de las instancias que se hayan eliminado en la nube.

Aquí está la función add modelo de nuestra instancia. Si la instancia ya existe, solo actualizamos el registro:

Si deseas ampliar las características del modelo, Digital Ocean ofrece una amplia variedad de acciones de la API de Droplet y Corcy tiene una lista de claros ejemplos.

Obtención de imágenes

A continuación, usaremos la API para obtener un listado de nuestras actuales imágenes. Las imágenes son instantáneas, esencialmente copias de seguridad, tomadas de una instancia del servidor en un momento dado.

Digital Ocean API Console Manage Your ImagesDigital Ocean API Console Manage Your ImagesDigital Ocean API Console Manage Your Images

Nuestro modelo Snapshot.php tiene una operación de sincronización (sync) que solicita una lista de tus imágenes y las añade individualmente a la base de datos:

Aquí está el código getSnapshots del componente de Ocean:

Aquí está el modelo add code de Snapshot: ignoramos las imágenes de aplicación de stock de Digital Ocean que se distinguen como públicas:

Automatización de instantáneas

Como hemos comentado en Creación de una imagen de aplicación para revender en Digital Ocean, es útil automatizar la creación de instantáneas que puedas transferir a clientes. Desafortunadamente, actualmente no hay forma de clonar o transferir una imagen por referencia; cada vez que transfieres una instantánea a otra cuenta, se ha ido.

Dado que Digital Ocean requiere que instancies una imagen como instancia y la apagues antes de tomar una nueva instantánea, crear instantáneas de forma repetitiva es un proceso manual que consume mucho tiempo. No ayuda que Digital Ocean vuelva a activar instancias después de tomar instantáneas, esto solo ralentiza el proceso.

Dado que la API no acepta solicitudes mientras otras operaciones están pendientes, tenemos que crear una tabla para realizar un seguimiento de las acciones en segundo plano y usar una tarea cron para repetir la operación de apagado de instantánea. Así es como funciona:

Visite la página Imágenes y haz clic en Ver para la instantánea que desees clonar. A continuación, haz clic en la opción de menú Replicar situada a la derecha.

View image snapshot and replicateView image snapshot and replicateView image snapshot and replicate

Esto creará una instancia y añadirá una entrada en la tabla Action de fondo con este image_id y droplet_id. end_stage es una constante que puedes establecer indicando el número de duplicados que se van a crear.

Row in the Action table representing the background processRow in the Action table representing the background processRow in the Action table representing the background process

Aquí está el método replicate() del modelo Snapshot:

La tarea cron hará ping http://ocean.yourdomain.com/daemon/index para procesar regularmente la tabla de acciones. Cualquier elemento pendiente sin terminar solicitará otra instantánea.

Aquí tienes el método process() del modelo Action:

El proceso de instantáneas apagará la instancia, pausará 20 segundos para esperar a que se apague la instancia y solicitará una instantánea.

Droplet shutdown sleep and snapshotDroplet shutdown sleep and snapshotDroplet shutdown sleep and snapshot

Aquí está el método take() del modelo Snapshot:

Este es el código del componente de Ocean para realizar las llamadas a la API:

Si visitas el sitio web de Digital Ocean para ver la instancia, verás la acción en curso:

Droplet Snapshot in ProgressDroplet Snapshot in ProgressDroplet Snapshot in Progress

Si la instantánea se ha realizado correctamente, vuelve al modelo Snapshot para incrementar el escenario de pruebas. Cuando el número de replicaciones del escenario de pruebas haya finalizado, la acción se completa.

Puede visitar la página Imágenes en el sitio web de Digital Ocean para ver las instantáneas replicadas:

Cloned copies of your snapshotCloned copies of your snapshotCloned copies of your snapshot

Una vez creadas las imágenes, puedes eliminar la instantánea manualmente, o puedes ampliar el código para hacerlo cuando se alcance STATUS_COMPLETE. Si no eliminas la instancia, te cobrarán por ella.

Ten en cuenta que en este momento, la API no ofrece la capacidad de transferir una instantánea a una dirección de correo electrónico, por lo que tendrás que seguir haciéndolo manualmente a través de la interfaz web.

¿Qué sigue?

Espero que hayas disfrutado de este tutorial y que Digital Ocean te parezca un servicio útil para tu caja de herramientas y para proveedores de alojamiento. En el siguiente tutorial exploraremos el servicio DNS de Digital Ocean.

Por favor, no dudes en publicar tus preguntas y comentarios a continuación. También puedes ponerte en contacto conmigo en Twitter @reifman o enviarme un correo electrónico directamente. Siga mi página de instructor de Tuts+ para ver futuros artículos de esta serie.

Enlaces relacionados

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.