icon / menu / white V2Created with Sketch.
Switch LanguageSwitch Language
Adecuación de infraestructura en la nube: Ansible, Terraform, Bash y Python Juntos en acción

Adecuación de infraestructura en la nube: Ansible, Terraform, Bash y Python Juntos en acción

El núcleo de DevOps radica en la automatización de despliegues y configuración de infraestructura. La mayoría de estas herramientas están optimizadas para Linux, beneficiándose de la compatibilidad intrínseca con este sistema operativo. Utilizando Bash y Python, presentes en diversas distribuciones de Linux, junto con herramientas de infraestructura como código (Terraform) y orquestadores como Ansible, es factible crear scripts poderosos. Estos, a pesar de tener interfaces sencillas, esconden complejas operaciones que permiten desplegar y configurar instancias en la nube (como AWS) y servidores (como Apache, Grafana, JBoss) en cuestión de minutos. El resultado: una drástica reducción de errores, una visión de la infraestructura IT como código y un impulso significativo en la transformación digital de tu empresa. 

Infraestructura como código con Terraform 

Existen dos rutas para crear infraestructura computacional en nube pública:

1.- Manualmente: Ya sea a través de la consola o del agente CLI del proveedor. Esta opción, aunque funcional, implica invertir tiempo en documentar cada paso para poder replicarlo en futuras implementaciones. 

2.- Automáticamente, con Terraform. Esta herramienta permite abstraer y simplificar la entrega de infraestructura. Al identificar patrones recurrentes en tus despliegues, puedes convertirlos en módulos reutilizables, optimizando así los futuros lanzamientos. 

Si hablamos de automatización, consideremos el caso típico: Desplegar un servidor web Apache en una instancia Linux, específicamente utilizando la distribución Amazon 2.

Previo a escribir el código con Terraform, revisemos el listado de lo que se necesita a nivel de cómputo. 

- Instancia con Sistema Operativo Linux: Debe contar con al menos 2GB de RAM, arquitectura de 64 bits, 2 vCPUs y un disco duro de, como mínimo, 10GB destinados a la instalación del S.O

- Conectividad a Internet: Se necesita una red que permita exponer el servicio web al exterior.

- Red Interna: Para facilitar la comunicación con otros servidores o servicios dentro de AWS.

- Firewall: Esencial para restringir y controlar el tráfico hacia la instancia.

- Almacenamiento Externo: Espacio designado para guardar logs y datos específicos del servidor Apache.

Traduciendo lo anterior al mundo de servicios Amazon, la configuración sería la siguiente:
Infraestructura en la nube, tabla 1

Trasladando esto al lenguaje de Terraform, estructuraríamos la solución en una carpeta denominada "Terraform." Dentro de esta, encontraríamos 9 archivos, cada uno definido para configurar los componentes mencionados previamente. Pero, para enriquecer y flexibilizar la propuesta, añadiríamos tres archivos adicionales: 

Variables: Con el objetivo de personalizar recursos, este archivo facilitará adaptaciones para despliegues futuros. 

Provider: Encargado de gestionar las credenciales de acceso y etiquetas de los recursos generados. 

Outputs: Una herramienta clave para visualizar datos esenciales como la IP pública, el DNS público y el ID de la instancia, garantizando un acceso rápido al servicio web. 

De esta manera, no solo aseguramos un despliegue eficaz, sino que también sentamos las bases para futuras adaptaciones sin contratiempos, con la siguiente estructura:

Infraestructura en la nube, python, código

Teniendo el siguiente código, alojado en este repositorio. 

Configuración de server e instancia con Ansible 

Una vez definida la infraestructura con Terraform, es momento de dar vida a la instancia mediante la configuración con Ansible. Utilizaremos roles y playbooks para instalar Apache, gestionar los sistemas de archivos y establecer un certificado autofirmado para el protocolo HTTPS. Al igual que con Terraform, desglosemos lo necesario para llevar a cabo esta configuración en la instancia. 

INFRAESTRUCTURA EN LA NUBE, PYTHON, PALO IT, APACHE

En una carpeta llamada Ansible ejecutar el siguiente comando para generar el role apache: 
$ ansible-galaxy init apach

Iniciaremos en la carpeta 'tasks', donde segmentaremos las tareas y posteriormente las invocaremos desde el archivo main.yml.

install-apache.yml: realizara la tarea de descargar apache, las dependencias para usar https e iniciarlo 

add-fs.yml : realizara los file systems para alojar logs y datos de despliegue en el apache en /var/log/httpd y /var/www/html 

configure_https.yml:  generara el certificado autofirmado y las configuraciones de apache para que use el cifrado tls 

main-yml: este el archivo principal, el cual llamara las tareas anteriores, las tareas serán ejecutadas de acuerdo al orden del siguiente listado. 

En la parte final de la tarea de configure apache, se agregó la linea notify, la cual indica que tendremos que reiniciar el servicio apache para que tome el cambio, así que agregamos la tarea de reinicio en la carpeta de handlers/main.yml 

Hasta este punto hemos terminado el rol, ahora a realizar las configuraciones de ansible, el cual estará a nivel del directorio de ansible. Aquí agregaremos los siguientes archivos. 

a) install-apache.yml: Tendra el llamado al rol creado e instalación de dependencias  

b)  aws_ec2.yml: Tendra el llamado al inventario dinámico, para obtener el listado de  instancias activas en AWS para que Ansible se conecte y ejecute las tareas. Adicional, aquí se especifica la región donde está la instancia a conectar y el plug para conectar a la cuenta de AWS. 

c) ansible.cfg: Se especificarán los parámetros para que ansible se conecte a la instancia creada en aws.  

Ahora que se tiene el código de infraestructura y configuración del server el siguiente paso es agruparlo para ejecutarlos en serie. 

Python como nuestro entorno a ejecutar el código de IaaS 

Muchas distribuciones Linux actuales vienen con Python 3 pre-instalado. Dada esta ventaja, nos inclinamos hacia 'python virtualenv', un entorno Python independiente y aislado del sistema operativo. Esta particularidad de Python nos ofrece un espacio seguro para ejecutar nuestro código. La principal ventaja de usarlo es que nos permite instalar Ansible y sus dependencias sin requerir altos privilegios y, además, garantiza que dichos paquetes no interfieran con el resto del sistema. 

Para optimizar el proceso descrito, lo ideal es operar desde un servidor pivote con Ubuntu (versión mínima 22.04) o RHEL (al menos versión 8), que cuente con acceso a internet. Esta conexión facilitará la descarga de dependencias y establecerá la comunicación con la nube AWS. Veamos cuáles son los paquetes adicionales a considerar.  

Infraestructura en la nube, adecuación, AWS, PYTHON, PALO IT, Consultoría

El Poder de la Integración con Bash

Utilizaremos Bash para consolidar las herramientas previamente mencionadas en un script.

Agrupando todo en una carpeta quedaría de la siguiente forma: 

Por lo que solo es cuestión de ejecutar ./start.sh y esperar algunos minutos para la instalación de paquetes y aprovisionamiento de la infraestructura. 

El código descrito anteriormente se encuentra organizado ya en este repositorio.

Conclusión

Con la potencia del código abierto, los principios de DevOps y una adecuada interpretación de las demandas empresariales, tenemos la capacidad de codificar y optimizar nuestra infraestructura. Esto se traduce en una mejora sustancial en la documentación, rapidez en entregas y una drástica reducción de errores, garantizando siempre una asignación precisa de recursos. 

Aunque lo que te he mostrado es solo la punta del iceberg, puede servirte como punto de partida. Imagina añadir opciones de ejecución adicionales a ese script de Bash. Luego, piensa en un repositorio de control de versiones para compartir y evolucionar el código junto con tu equipo de infraestructura, incorporando revisiones, nuevas características y automatizando el despliegue, quizás integrándolo con herramientas como Jenkins. 

Visualiza, por ejemplo, el uso de esta mezcla de herramientas en la transición de una infraestructura bare metal hacia la nube, siendo esta la verdadera antesala a una transformación digital adaptada a tu negocio. En ese viaje, PALO IT es tu aliado para navegar con éxito por esta revolución tecnológica. 
Si deseas implementar cualquier tipo de adecuación de infraestructura en la nube, contáctanos.

Rolando Antonio Jimenez
Rolando Antonio Jimenez

Related articles

Explorando las innovaciones de IA en Google Cloud Next 2024
2 mins
Tendencias tecnológicas
Explorando las innovaciones de IA en Google Cloud Next 2024
Checklist para ejecutivos en la implementación de la IA Generativa en seguros
3 mins
Tendencias tecnológicas
Checklist para ejecutivos en la implementación de la IA Generativa en seguros
DevSecOps: Desafíos y estrategias para una integración exitosa
3 mins
Tendencias tecnológicas
DevSecOps: Desafíos y estrategias para una integración exitosa

Button / CloseCreated with Sketch.