“HERRAMIENTAS DE AUTOMATIZACIÓN E
INFRAESTRUCTURA COMO SERVICIO”
Cochabamba – Bolivia
2018
Gracias a mi familia haber sido mi sostén en
ii
Tabla de Contenido
Resumen 1
Introducción 2
1 Generalidades 3
2 Metodología 5
3 Computación en la Nube 6
5 Gestión de configuraciones 11
iii
6 Herramientas de gestión de configuraciones 12
6.1 Chef 13
6.2 Puppet 17
6.3 Ansible 24
7.1 Terraform 29
10 Conclusiones 34
11 Bibliografía 34
iv
v
TABLA DE CUADROS, GRAFICOS Y FIGURAS
Figura 2 Interacciones del cliente chef con el servidor chef ( Sharma & Soni, 2015) .................. 17
Figura 11 diagrama entidad relación de un playbook en asible ( Moser & Hochstein, 2017) 7) .. 27
vi
Resumen
operaciones las rutinarias de manera automática, para este cometido hace uso de la gestión de
En la computación en la nube uno de los modelos de servicio más utilizado por las empresas y
configuraciones.
los servicios ofrecido por proveedores de infraestructura como servicio, mientras que Terraform se
1
Introducción
Según el instituto nacional de tecnologías NIST1 “La computación en la nube es un modelo que
aprovisionar y liberar rápidamente con un mínimo esfuerzo de gestión o interacción del proveedor
del servicio.”. Esta forma de compartir recursos a través de internet ha abierto nuevas posibilidades
de sus infraestructuras informáticas o centros de datos, sin embargo, con este nuevo modelo de
la empresas, instituciones o personas y que estas paguen solo por los servicios o recursos que
utilizan, hace que muchas de las empresas dejen de hacer inversiones de mantenimiento de sus
híbridos.
conocida por su sigla en inglés de IT es poder contar con herramientas que ayuden a reproducir,
tanto de software o hardware en relación a los ambientes donde se desarrollaron los productos y la
1
Siglas en inglés para “National Institutes of Standards and Technology”.
2
Dentro de la cultura de DevOps2, se establece como parte fundamental el desarrollo y las entregas
código proporcionan principios, prácticas y diseños de uso de tecnologías de manera eficiente, sin
que hagan uso de estas metodologías para así poder brindar recursos de infraestructura de manera
Con esto se pretende ayudar a las personas que están iniciando con en el uso de herramientas de
automatización de infraestructura orientados a la nube a tener una idea más clara de que
1 Generalidades
problemas que se presentaban podían ser fácilmente detectados y resueltos a tiempo permitiendo a
2
Acrónimo en inglés de development (desarrollo) y operations (operaciones).
3
Sin embargo este tipo de operaciones también trajo consigo la necesidad de nuevos conocimientos
parte de los encargados de IT3. Si bien las existen herramientas facilitan mucho el trabajo, poder
contar con los conocimientos necesarios de uso estas herramientas y su aplicación a modelos de
servicio en la nube de forma automatizada representa un reto y en muchos casos puede llegar a
Si bien la computación en la nube se proyecta como una alternativa viable para solucionar muchos
de los problemas por los que atraviesan las organizaciones en especial en el aspecto económico,
para implementar este nuevo modelo de negocio es necesario contar con conocimientos y
implementados.
Un método que ha sido utilizado por los encargados de infraestructura de tecnologías para tratar de
de forma automatizada, se basa en crear archivos de código donde se colocan los comandos
necesarios para instalar todas las dependencias dando paso al concepto de infraestructura como
código la cual por sus características permite estructura la infraestructura en formatos legibles y
entendibles.
3
Acrónimo en inglés para Information Technology (Tecnologías de Información).
4
Otro aspecto importante a considerar cuando se trata administrar los recursos de infraestructura a
asegurar la calidad y se pueda hace un control de los cambios que puedan existir en los archivos de
configuración de infraestructura, este tipo de gestión es usada actualmente por muchas de las
herramientas de automatización de código por lo que resulta importante entender este enfoque.
ayudan a mantener y automatizar las operaciones de infraestructura ya sea en redes públicas como
abierto las cuales pueden ser usadas tato en redes públicas, privadas o híbridas, algunas de las
herramientas de código abierto son Ansible, Puppet, Chef, Terraform las cuales poseen diversas
características que equivalen o difieren unas de otras, es necesario tener un conocimiento acerca
2 Metodología
5
3 Computación en la Nube
Según el instituto nacional de tecnologías NIST “La computación en la nube es un modelo que
aprovisionar y liberar rápidamente con un mínimo esfuerzo de gestión o interacción del proveedor
Servicio bajo demanda. Esta característica hace referencia a que el usuario accede a los
servicios según sus necesidades permitiendo que pueda cancelar o dar de baja el servicio
base en ofrecer “como servicio” algún Recurso es necesario que el acceso a estos servicios
sean a través de una red, está por lo general es el internet bajo ciertos protocolos
establecidos por el proveedor del servicio, esta característica asegura que el acceso al
servicio siempre esté disponible y los recursos puedan ser accedidos desde cualquier lugar
capacidad de poder ofrecer como servicios un conjunto recursos de IT, estos recursos
despliegues en la nube donde los recursos son compartidos por varios clientes el rango de
utilización se establece entre un 80% y 90% donde los proveedores del servicio tienen un
aumentando.
necesidades de los clientes, bajo el modelo de pagar por lo que se consume es necesario
contar con un modelo que se ajuste rápidamente y de forma dinámica al crecimiento de las
organizaciones por lo que los productos y servicios que son desplegados, adquiridos y
los modelos tradicionales, el uso de los recursos son administrables y medibles de forma
exacta lo que genera transparencia en los cobros entre los proveedores y los clientes
permitiendo a estos tener reportes de consumo lo que les ayuda cuantificar, calificar y
los modelos de la computación en la nube dependen mucho de cómo los servicios son ofertados,
desplegados y consumidos estos modelos generalmente se ajustan a las necesidades de los clientes
donde los productos y servicios son agrupados en arquitecturas de bloque dentro de los cuales se
Existen tres modelos que son principalmente usados: Infraestructura como servicio (IaaS) 4,
4
Sigla en inglés “Infrastructure as a service” para infraestructura como servicio.
7
Plataforma como servicio (PaaS5), Software como servicio (SaaS6) los cuales si bien cumplen con
y de niveles de riesgo son afrontados, estas diferencias también se hacen presentes dependiendo si
las redes son públicas, privadas o híbridas. El uso de uno u otro modelo dependerá por lo general
del factor económico y el nivel de riesgo que estén dispuestos a correr las organizaciones que usen
estos servicios debido a que una red pública o compartida por lo general será más insegura que una
almacenamiento y red entre otros servicios donde los clientes no tiene control sobre los aspectos
físicos de la infraestructura pero puede administrar los recursos a través de software, en este tipo
a los clientes solo los recursos necesarios para correr sus aplicaciones o servicios evitando gastos
en infraestructura que no vayan a ser aprovechados de manera óptima, el acceso a estos recursos
por lo general es a través de una red donde se accede a una instancia de virtualizada de
infraestructura.
Si bien con este modelo las tareas de mantenimiento de equipamiento físico son liberadas los
administradores aún tienen que realizar las tareas de configuración e instalación de recursos.
5
Sigla en inglés “Plataform as a service” para plataforma como servicio.
6
Sigla en inglés “Software as a service” para software como servicio.
8
Algunos de los proveedores más importantes de este tipo de servicio son Amazon con AWS,
software como servicio se basa en proveer a los clientes una solución funcional completa de una
aplicación sino del uso y las configuraciones de esta, favorece en el acceso y uso desde cualquier
dispositivo y en la adquisición de las licencias de uso algunos producto comunes a este tipo de
servicio son software de ofimática, gestores de relacionamiento con clientes (CRM) y Sistemas de
desarrolladores donde estos puedan probar y ejecutar estas aplicaciones sin la necesidad de
Si bien anteriormente existían servicios como los de Google Engine, Microsoft Asure los cuales
ofrecían este servicio estos estaban limitados a lenguajes de programación como ser Python 7y
ensamblar las plataformas con los lenguajes de programación de su preferencia, bases de datos y
7
Python, lenguaje de programación.
9
Las interfaces de programación de aplicaciones (API8s) son muy aprovechadas por los proveedores
de plataformas como servicio las cuales ofrecen a sus clientes API’s específicas y comunes para la
integración, debido a que las aplicaciones de terceros como propietarias las suelen utilizar API’s
para el acceso o la integración de sistemas los desarrolladores en este modelo de servicio solo se
en prácticas del desarrollo de software. Hace hincapié en rutinas consistentes y repetibles para
definiciones y luego se implementan en los sistemas a través de procesos desatendidos que incluyen
8
Acrónimo en inglés para interface de programación de aplicaciones (application programming interface).
10
Se posibilita la validación de cambios en la infraestructura a través de revisiones de
Existen herramientas las cuales permiten administrar la infraestructura como código entre
estas están Ansible, Chef y Puppet, la clave de poder manejar y administrar la infraestructura
en archivos de configuración radica en poder definir las configuraciones base para nuestra
lenguaje declarativo el cual es claro de entender para luego la herramienta ejecutar los
5 Gestión de configuraciones
La gestión de configuraciones surge por la necesidad de contar con herramientas que ayudan a la
realizar estos cambios de manera automatizada y sistemática para garantizar que los cambios se
configuran los recursos de manera manual, este hecho garantiza que nuevas características
Otro aspecto importante radica que al tener servidores que se pueden reproducir fácilmente
configuraciones en los nodos a los cuales administran, muchas de las herramientas se basan en el
modelo servidor/cliente aunque existen algunas como Ansible la cual no utiliza clientes para
12
6.1 Chef
donde los clientes o nodos que administra deberán contar con una instancia de chef cliente.
Los componentes más importantes de chef y sobre los que se basa su funcionamiento son:
Cuchillo. El cual está instalado en la estación de trabajo sirve para cargar los libros de
Recetas. Son archivos donde se guardan tareas que ejecutaran los nodos de manera
automática.
Los nodos. Se comunican con el servidor chef de donde obtienen las configuraciones
9
Ruby. Lenguaje de programación.
10
Erlang, Lenguaje de programación.
13
6.1.2 Arquitectura de Chef
El entorno de trajo de Chef o Chef Framework es una combinación del servicio chef, los nodos y
la estación de trabajo, chef ejecuta trabajos sobre estas instancias las cuales trabajan
vez posee diversos componentes los cuales son llamados herramientas chef como se puede observar
en la figura 1.
6.1.3 Servidor Chef. El servidor chef funciona como un repositorio centralizado que contiene
las políticas de configuración para los nodos, los libros de cocina de chef y es utilizado
Chef server anfitrión. el cual es ofrecido por empresa Opscode como software como
servicio.
14
Chef server privado. El cual es usado por empresas en sus redes privadas
6.1.4 Libro de Cocina. Es el corazón del servidor chef, son directorios donde se almacenas las
recetas, archivos y librerías. Define todos los pasos que serán usados para el despliegue de
recursos o aplicaciones. También contiene todas las configuraciones que serán usadas
6.1.4.1 Recetas. Son la base lógica de configuración de chef, tiene un objetivo especio y están
libros de cocina.
cocina.
6.1.4.3 Versiones. Son archivos que describen la versión de la configuración los estados de
6.1.5 Estación de trabajo. La estación de trabajo es desde la cual se provee el código chef al
servidor chef y los nodos, es donde se codifica, compila y prueba las configuraciones.
La estación de trabajo.
Nodos.
11
Ruby. Lenguaje de programación.
15
Roles.
Ambientes.
6.1.5.2 El repositorio chef. Es el lugar donde se almacena el código chef y por lo general esta
6.1.6 Nodos. Un nodo puede ser una maquina física, una maquina virtualizada o un instancia en
la nube la cual es administrada y configurada por el cliente de chef, los nodos son
registrados y sincronizados con el servidor para obtener las tareas y configuraciones las
6.1.6.1 Cliente chef. Es un programa que se encuentra en todos los nodos de la infraestructura
con chef, es el que se encarga de ejecutar las configuraciones recatadas del servidor chef
16
En la figura 2 se muestra las interacciones que tiene el cliente chef con el servidor chef.
Figura 2 Interacciones del cliente chef con el servidor chef ( Sharma & Soni, 2015)
6.1.6.2 Hoai. Es una herramienta que brinda información de la maquina o instancia donde está
Detalles de la red
Procesador y memoria
6.2 Puppet
17
modelo Maestro/Agente donde cada recurso o nodo a ser administrado deberá contar con una
Puppet utiliza lenguaje declarativo a para la realizar las configuraciones en los servidores , esto
quiere decir que es necesario que sea declarado el estado final deseado del sistema y no así los
pasos a seguir para llegar a ese estado como se puede observar en el ejemplo.
package{“apache2”:
ensure => installed,
}
Puppet puede ser implementado en tanto en una computadora personal que tenga un sistema Linux
como también en puede ser utilizado para administrar e implementar infraestructura en plataformas
específico, una vez el Agente obtenga el archivo de configuraciones ejecuta y aplica esta
configuración.
18
6.2.2 Arquitectura de Puppet
Como se muestra en la figura 3. Puppet tiene una arquitectura maestro/agente y hace uso de
Puppet
Puppet Agent
MCollective
master Puppet
Agent
Figura 3 Arquitectura de Puppet (Uphillis, Franceschi, Soriano Pastor, Frank, & Alfke, 2017).
Agentes Puppet.
Los agentes son paquetes de software que deberán ser instalados en cada nodo servidor a ser
administrado, los agentes son responsables de mantener, configurar e instalar software en cada
nodo de nuestra la infraestructura y pueden ser configurados para ejecutarse cada cierto tiempo
definido en su configuración o pueden ser ejecutados por otras herramientas como MCollective.
19
Puppet Maestro o Puppet Master.
es responsable de brindar configuraciones y definiciones a lo largo de todos los nodos así como el
Actualmente el Puppet master ha sido reemplazado por el Puppet server el cual está escrito en
Ruby y usa Java Virtual Machine con Clojure/JRuby para su ejecución, este cambio de tecnología
MCollective.
nodos en bloques, también permite obtener informes de cada uno de los nodos y sus estados de
Lenguaje Puppet.
El lenguaje Puppet define los recursos como tipos estos tipos definen a través de variables las
Tipo archivo. Define un archivo a ser creado o ejecutado su nombre y la ruta para ser
20
En el ejemplo se muestra la definición básica de un archivo
file{“/etc/data”:
ensure => present,
content => “este es el
contenido del archivo”,
owner => ‘root‘,
Mode=> ‘755‘,
}
Tipo paquete. Los archivos tipo paquete dependen del sistema de paquetes del sistema
operativo donde se ejecutan, según sea el sistema operativos estos comandos usados
serán “apt” para distribuciones Debian, “yum” para distribuciones RedHat u otros
comando compatibles.
package{“apache2”:
ensure => present,
}
Tipo servicio. Los archivos servicios dependen del sistema de paquetes del sistema
servicio web debe estar presente y se usa el comando “apache2” debido a que se
Puppet Manifest.
Es una archivo que describe cómo los recursos deberán ser configurados e implementados en
los nodos y está escrito en el lenguaje de configuración de Puppet y hacen referencia a los
módulos, los cuales a su vez son pedazos de código reutilizable que pueden ser desarrollados o
descargados.
En la figura 7 se muestra un Manifest donde se configura una servidor web para un sistema
basado en Debian, inicialmente se asegura que apache este instalado, luego se configura el
VirtualHost de apache para finalmente asegurarse que el servicio de apache esté corriendo.
package{“apache2”:
ensure => installed,
}
file{“/etc/apache2/sites-enabled/000-default.conf”:
ensure => file,
content => “<VirtualHosto *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
Customlog ${APACHE_LOG_DIR}/access.log
combined
</VirtualHost>”,
owner => ‘root‘,
Mode=>
Figura 7 Ejemplo Manifest ‘755‘, (Uphillis, Franceschi, Soriano Pastor, Frank, & Alfke, 2017)
en Puppet
}
service{“apache2”:
ensure => running,22
}
Dentro de los manifest también podemos hacer uso de variable y operadores condicionales para
ejecutar uno u otro módulo dependiendo del sistema operativo que se esté ejecutando en el nodo o
variables para instalar un paquete según el tipo de sistema operativo que se tenga.
case $::opetarinsystem {
‘Ubuntu’: {
package{“apache2”:
ensure => installed,
}
‘RedHat’:{
package{“httpd”:
ensure => installed,
}
}
}
Figura 8 Ejemplo de uso de variables en Puppet (Rhett, 2016)
PuppetDB. Es una base de datos que almacena información de los nodos que están
manera jerárquica.
Detalles de la red.
Procesador y memoria.
23
6.3 Ansible
a diferencia de otras herramientas similares como Puppet o Chef no necesita de ningún software
adicional o agente a ser instalado en las máquinas que administra por lo que los requerimiento y
las configuraciones realizadas son mínimas, utiliza YAML12 para ejecutar comando y se comunica
con los recursos de infraestructura a través de SSH13 además de poder ser integrada con otras
herramientas como Docker o Vagrant para proveer infraestructura automatizada. ( Raithatha &
Mohaan, 2014).
a API’s.
instalar software adicional debido a que los requerimientos de Ansible son contar
con SSH y Python los cuales vienen preinstalados en las máquinas Linux.
12
Sigla en ingles para Ain't Markup Language.
13
Acronimo en inglés para Secure Shell.
24
Simple. Ansible es fácil de instalar, configurar y la curva de aprendizaje es baja
relativamente fácil.
Modular. Ansible al ser modular puede integrarse con otras herramientas por lo
mayoría software propietarios que pueden ser integrados con Ansible a través de
la escritura de plugins.
25
Ansible config. Es donde realizan las configuraciones del ambiente.
infraestructura que administra ansible los cuales pueden ser agrupados como se muestra en
la figura 10, los inventarios a su vez pueden ser estáticos o dinámico y se estructuran
básicamente en:
Host
Grupo
comportamiento
[web]
mastery.example.name
[dns]
backend.example.name
[database]
backend.example.name
[frontend:children]
web
[backend:children]
dns
database
Playbooks. Los playbooks 14son listas de tareas escritos en YAML que le dicen a Ansible
15
que hacer, estas tareas se ejecutan de manera secuencial al igual que los cookbooks en
14
Nombre en inglés de uno de los componentes de ansible.
15
Nombre en inglés de uno de los componentes de chef.
26
Chef o manifest 16 en Puppet, a su vez las tareas hacen referencia a un pedazo de código de
un módulo en específico y si bien los módulos pueden estar escritos en cualquier lenguaje
Figura 11 Diagrama entidad relación de un playbook en Ansible ( Moser & Hochstein, 2017).
16
Nombre en inglés de los manifiestos en Puppet.
27
---
- hosts: host1
Remote_user: admin-user
Tasks:
hosts: acá se configura la máquina o grupo de máquinas en las que se ejecutarán las tareas
remote_user: indica a ansible el usuario con el que se debería trabajar para realizar las
tareas.
tasks: acá se describe la lista de tareas que se realizarán, las tareas a su vez tienen su propia
paquetes para httpd en sistemas basados en Redhat es httpd mientras que en los
módulos. los módulos son pedazos de código que Ansible ejecuta para realizar una
tarea.
28
7 Herramientas de aprovisionamiento de infraestructura
• CloudFormation.
• Heat.
• Terraform.
7.1 Terraform
Terraform es una herramienta para aprovisionamiento de infraestructura fue creado por la empresa
infraestructura como servicio como ser AWS, Azure, Google Cloud, DigitalOcean así como
Ansible y Puppet los cuales son herramientas de gestión de configuraciones de servidores, es una
uso de las API’s que brinda los proveedores de servicio y dejando la labor de configuración a otras
herramientas.
estado deseado de la infraestructura que se desea lograr, hace uso de los recursos y servicios que
29
brindan los proveedores mediante CLI por lo que es necesario configurar las credenciales de
identificación de acceso a utilizar los cuales serán proporcionados según el proveedor del servicio.
Los proveedores de servicios de computación en la nube brindan recursos para ser utilizados en
sus plataformas los cuales comúnmente en el modelo de infraestructura como servicio son
imágenes de sistemas operativos tanto gratuitos como pagados con configuraciones especiales ya
definidas, Terraform hace uso de estos recursos para instanciar la infraestructura configurando los
En la figura 13 se muestra una configuración básica de Terraform donde se instancia una imagen
de sistema operativo Ubuntu (ami-40d28157) proporcionada por AWS con CPU virtual y 1GB de
# Provider configuration
provider "aws" {
region = "us-east-1"
}
# Resource configuration
resource "aws_instance" "hello-instance" {
ami = "ami-40d28157"
instance_type = "t2.micro"
tags {
Name = "hello-instance"
}
}
30
8 Análisis de similitudes y diferencias entre las herramientas
desplegados ya sea en entornos físicos como virtualizados, para este cometido hacen uso de
infraestructura como código lo cual hace que puedan administrar y configurar varias instancias de
manera automática.
Por su parte Terraform es una herramienta de aprovisionamiento de infraestructura, hace uso de las
API’s que ofrecen los proveedores para instanciar las máquinas virtuales que luego a través de una
infraestructura.
Si bien Chef, Puppet y Ansible pueden ser utilizadas para el aprovisionamiento de infraestructura
en proveedores de servicio mediante el uso de las API’s, por su naturaleza aún existen limitaciones
en su uso, debido a que estas herramientas se centran en las configuraciones, si realizaran cambios
o actualizaciones en las características de las maquinas desplegadas en tiempo estos cambios puede
Terraform por su parte no realiza cambios en la infraestructura desplegada sino que despliega una
Chef y Puppet siguen el modelo cliente/servidor donde cada instancia a ser configurada deberá
contar con un agente propio de la herramienta que se use, este agente solicitará al servidor
periódicamente las instrucciones de configuración que deberían ser ejecutadas o los estados
31
deseados de configuración, y realizara cambios en sistema que administra según sea necesario de
manera automática.
gestionar los recursos. Ansible utiliza Python y SSH para realizar las configuraciones en los nodos
que administra mientras que Terraform hace uso de las API’s de los proveedores y los recursos que
Finalmente Chef y Ansible hacen uso de lenguaje procedimental para representar los estados
deseados de configuración deseados, esto quiere decir que deben expresar todos los pasos a ser
ejecutados para llegar a un estado deseado, a diferencia de estas herramientas, Puppet y Terraform
utilizan lenguaje declarativo el cual consiste de declarar el estado deseado si preocuparse de los
Existen tres componentes básicos a ser considerados cuando se quiere hacer uso de herramientas
32
Figura 14 Modelo de infraestructura como código en la nube (Shirinkin, 2017)
Primeramente se debe contar con un proveedor de servicio el cual brindara recursos necesarios para
33
10 Conclusiones
servicio que esta ofrece como alternativa a los modelos clásicos de infraestructura de
tecnológicas.
11 Bibliografía
Moser, R., & Hochstein, L. (2017). Ansible: Up and Running, 2nd Edition (pp. 1-42). O'Reilly
Media, Inc.
Raithatha , R., & Mohaan, M. (2014). Learning Ansible (pp. 1-61). Packt Publishing.
Sharma, R., & Soni, M. (2015). Learning Chef (pp. 1-57). Packt Publishing.
Wang, L., Chen, J., Benatallah, B., & Rajan, R. (2011). Cloud Computing (pp. 1-25, 74). CRC
Press.
Brikman, Y. (2017). Terraform: Up and Running (pp. 1-27). O'Reilly Media, Inc.,.
Keating, J. (2017). Mastering Ansible - second Edition (pp. 1-32). Packt Publishing.
34
Rhett, J. (2016). Learning Pupet (pp. 3-6, 37-82). O'Reilly Media, Inc.
Uphillis, T., Franceschi, A., Soriano Pastor, J., Frank, F., & Alfke, M. (2017). Puppet: Mastering
Vargo, S., & Taylor, M. (2015). Learning Chef (pp. 1-6). O'Reilly Media, Inc.
35