Introducción a cloud-init
Implantación de Aplicaciones Web
Curso 2024/2025
1 Introducción a cloud-init
1.1 ¿Qué es cloud-init?
cloud-init
es una
utilidad que permite realizar la configuración inicial de una máquina
virtual o una instancia que se ejecuta en un proveedor de cloud
computing como AWS, Azure, OpenStack, entre otros.
Algunas de las tareas que se pueden realizar con cloud-init
son crear
usuarios, instalar paquetes de software, configurar redes, configurar
claves SSH, etc.
cloud-init
es un
proyecto open source, liderado por Canonical que fue diseñado originamente
para la distribución de Ubuntu de Amazon EC2, pero actualmente
es compatible con la mayoría de distribuciones Linux y es utilizado por
los principales de proveedores de cloud computing.
1.2 ¿Cómo puede un usuario especificar cuál es la configuración inicial deseada?
Al crear una instancia en un proveedor de cloud computing, suele
existir un campo llamado user-data
en el cual un usario
puede indicar que se ejecute un script de configuración inicial. Este
script puede ser:
- Un script de bash
- Un archivo
YAML
que contiene las instrucciones de configuración. A estos archivosYAML
se les conoce como scriptscloud-config
.
cloud-init
también
le permite a los proveedores de cloud computing indicar una
configuración inicial a través de metadatos
(vendor-data
).
1.3 Archivos de configuración
cloud-config
Los archivos de configuración cloud-config
son archivos
de texto plano en formato YAML
que contienen las
instrucciones de configuración inicial de la instancia.
Si no está familiarizado con el formato YAML
, le
recomiendo la lectura del tutorial Aprenda YAML en Y minutos
.
Debe tener en cuenta que toda la información que se utiliza en los
scripts de configuración YAML
de cloud-init
es
accesible para cualquier usuario del sistema. Por lo tanto, se
recomienda no incluir información confidencial, ni contraseñas en estos
archivos de configuración en entornos de producción.
1.3.1 Ejemplo 1
En este ejemplo vamos a modificar la contraseña del usuario que esté configurado en la imagen como usuario por defecto. Además vamos a indicar que la contraseña no caduca y que se puede acceder por SSH con contraseña.
#cloud-config
password: nueva_password
chpasswd: { expire: False }
ssh_pwauth: True
- La primera línea con el texto
#cloud-config
es obligatoria. - La clave
password
indica cuál será la nueva del usuario. - La clave
chpasswd
indica que la contraseña no caduca y no tiene que ser cambiada después de iniciar sesión la primera vez. - La calve
ssh_pwauth
indica que se habilita el acceso por SSH con contraseña.
1.3.2 Ejemplo 2
En este ejemplo vamos a modificar la contraseña del usuario
root
y del usuario ubuntu
.
#cloud-config
ssh_pwauth: True
chpasswd:
expire: False
users:
- name: root
password: root
type: text
- name: ubuntu
password: ubuntu
type: text
El usuario
root
no puede acceder por SSH, sólo puede por la consola de Openstack. Esto se debe a que en la configuración por defecto de cloud-init se deshabilita el acceso por SSH al usuarioroot
.El usuario
ubuntu
puede acceder por SSH y por la consola de Openstack
1.3.3 Ejemplo 3
En este ejemplo vamos a instalar el servidor web nginx
y
vamos a iniciar el servicio.
#cloud-config
package_update: true
package_upgrade: true
packages:
- nginx
runcmd:
- systemctl start nginx
- La línea
package_update: true
equivale a ejecutarapt update
. - La línea
package_upgrade: true
equivale a ejecutarapt upgrade -y
. Tenga en cuenta que esta operación puede tardar varios minutos en algunos casos.
1.3.4 Ejemplo 4
En este ejemplo vamos a instalar los paquetes docker.io
,
docker-compose
, vamos a iniciar el servicio de
docker
y vamos a agregar el usuario ubuntu
al
grupo docker
.
#cloud-config
package_update: true
package_upgrade: true
packages:
- docker.io
- docker-compose
runcmd:
- systemctl enable docker
- systemctl start docker
- usermod -aG docker ubuntu
1.4 Referencias
- Sitio oficial de cloud-init.
- Documentación oficial de cloud-init.
- Cloud config examples.
- How To Use Cloud-Config For Your Initial Server Setup. DigitalOcean.
- Cloud-Init Reference. Zetta.io
2 Licencia
Esta
página forma parte del curso
Implantación de Aplicaciones
Web de José Juan Sánchez
Hernández y su contenido se distribuye bajo una
licencia
Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0
Internacional.