Gestión de configuración

Cómo la gestión de la configuración ayuda a los equipos de ingeniería a crear sistemas sólidos y estables

Ian Buchanan Ian Buchanan

En los años 50, el Departamento de Defensa de Estados Unidos desarrolló una disciplina de gestión técnica para supervisar los cambios en el desarrollo de sistemas complejos. Dio a este sistema y a sus diversas variaciones nombres muy técnicos, hasta que en 2001 publicó una guía consolidada que estableció el sistema de gestión técnica que ahora se denomina “gestión de la configuración”. Hoy en día, la gestión de la configuración no solo se utiliza en el Departamento de Defensa, sino también en el desarrollo de software, la gestión de servicios de TI, la ingeniería civil y la ingeniería industrial, entre otras áreas.

¿Qué es la gestión de la configuración?

Diagrama de gestión de la configuración

La gestión de la configuración es un proceso de ingeniería de sistemas que sirve para establecer la coherencia de los atributos de un producto a lo largo de su vida. En el mundo de la tecnología, la gestión de la configuración es un proceso de gestión de TI que supervisa los elementos de configuración individuales de un sistema de TI. Los sistemas de TI se componen de activos informáticos que varían en granularidad. Un activo informático puede representar una parte de un software, un servidor o un clúster de servidores. Lo que sigue se centra en la gestión de la configuración tal y como se aplica directamente a los activos de software de TI y a la CI y la CD de activos de software.

La gestión de la configuración de software es un proceso de ingeniería de sistemas que supervisa y controla los cambios en los metadatos de configuración de los sistemas de software. En el desarrollo de software, la gestión de la configuración se utiliza habitualmente junto con el control de versiones y la infraestructura de CI y CD. Esta publicación se centra en su aplicación moderna y su uso en entornos de software de metodología ágil de CI/CD.

¿Por qué es importante la gestión de la configuración?

La gestión de la configuración ayuda a los equipos de ingeniería a crear sistemas sólidos y estables mediante el uso de herramientas que gestionan y supervisan automáticamente las actualizaciones de los datos de configuración. Los sistemas de software complejos están formados por componentes que difieren en granularidad de tamaño y complejidad. Si quieres un ejemplo más concreto, piensa en una arquitectura de microservicios. Cada servicio de esta utiliza metadatos de configuración para registrarse e inicializarse. Algunos ejemplos de metadatos de configuración de software son:

  • Especificaciones de las asignaciones de recursos de hardware informático para la CPU, la RAM, etc.
  • Terminales que especifican conexiones externas a otros servicios, bases de datos o dominios
  • Secretos como contraseña y claves de cifrado

Resulta fácil que estos valores de configuración se conviertan en un elemento no prioritario, lo que lleva a que la configuración sea desorganizada y dispersa. Imagínate un montón de notas adhesivas con contraseñas y URL volando por la oficina. La gestión de la configuración resuelve este reto creando una “fuente de información” con una ubicación centralizada para la configuración.

Git es una plataforma fantástica para gestionar los datos de configuración. El traslado de dichos datos a un repositorio de Git permite el control de versiones y que el repositorio actúe como fuente de información. El control de versiones también resuelve otro problema de la configuración: las modificaciones inesperadas. La gestión de los cambios inesperados mediante el uso de la revisión del código y el control de versiones ayuda a minimizar el tiempo de inactividad.

A menudo se añaden, eliminan o modifican valores de configuración. Sin el control de versiones esto puede causar problemas. Un miembro del equipo puede ajustar un valor de asignación de hardware para que el software se ejecute de forma más eficiente en su portátil personal. Cuando el software se implementa posteriormente en un entorno de producción, esta configuración nueva puede tener un efecto insuficiente o modificarse.

El control de versiones y la gestión de la configuración resuelven este problema añadiendo visibilidad a las modificaciones de la configuración. Cuando se realiza un cambio en los datos de configuración, el sistema de control de versiones lo supervisa, lo que permite a los miembros del equipo revisar un registro de auditoría de las modificaciones.

El control de versiones de la configuración permite revertir o “deshacer” la configuración, lo que ayuda a evitar modificaciones inesperadas. El control de versiones aplicado a la configuración se puede revertir con rapidez a un último estado estable conocido.

Cómo encaja la gestión de la configuración con las prácticas DevOps, la CI, la CD y la metodología ágil

Los datos de configuración han sido siempre difíciles de gestionar y se pueden convertir con facilidad en algo no prioritario. Realmente no son código, por lo que no se ponen de inmediato en control de versiones; además, no son datos de importancia superior, por lo que no se almacenan en una base de datos primaria. La administración de sistemas tradicional y a pequeña escala se suele realizar con un conjunto de scripts y procesos ad-hoc. Los datos de configuración se pueden pasar por alto a veces, pero son fundamentales para el funcionamiento del sistema.

El auge de las infraestructuras en la nube ha provocado el desarrollo y la adopción de nuevos patrones de gestión de infraestructuras. Las complejas arquitecturas de sistemas basados en la nube se gestionan e implementan mediante el uso de archivos de datos de configuración. Estas nuevas plataformas en la nube permiten a los equipos especificar los recursos de hardware y las conexiones de red que necesitan aprovisionar a través de archivos de datos que humanos y máquinas pueden leer, como YAML. A continuación, se leen los archivos de datos y se aprovisiona la infraestructura en la nube. Este patrón se denomina “infraestructura como código” (IaC).

Gestión de la configuración en la metodología DevOps

En los primeros años del desarrollo de aplicaciones de Internet, los recursos de hardware y la administración de sistemas se realizaban principalmente de forma manual. Los administradores de sistemas organizaban los datos de configuración mientras aprovisionaban y gestionaban manualmente los recursos de hardware en función de los datos de configuración.

La gestión de la configuración es un elemento clave del ciclo de vida de DevOps. La configuración de la metodología DevOps es la evolución y la automatización de la función de administración de sistemas, que aporta automatización a la gestión y la implementación de la infraestructura.

La configuración de DevOps también traslada la responsabilidad de la administración del sistema al marco de la ingeniería de software. Las empresas la utilizan hoy en día para permitir que los ingenieros de software soliciten y proporcionen los recursos necesarios bajo demanda, lo que elimina los posibles cuellos de botella en las dependencias organizativas de un equipo de desarrollo de software que espera los recursos de un equipo de administración de sistemas independiente.

Gestión de la configuración en la CI y la CD

La gestión de la configuración en la CI y la CD utiliza flujos de trabajo de revisión de código basados en solicitudes de incorporación de cambios para automatizar la implementación de los cambios de código en un sistema de software activo. Este mismo flujo se puede aplicar a los cambios de configuración. La CI y la CD se pueden configurar para que las solicitudes de cambios de configuración aprobadas se puedan implementar de inmediato en un sistema en funcionamiento. Un ejemplo perfecto de este proceso es el flujo de trabajo de GitOps.

Gestión de la configuración en la metodología ágil

La gestión de la configuración permite a los equipos que siguen una metodología ágil clasificar y priorizar sin lugar a duda el trabajo de configuración. Ejemplos de este tipo de trabajo son tareas y trabajos como los siguientes:

  • Actualizar los certificados SSL de producción
  • Añadir un terminal nuevo de base de datos
  • Cambiar la contraseña de los servicios de correo electrónico de desarrollo, entorno de ensayo y producción
  • Añadir claves API para una nueva integración de terceros

Una vez que se haya implantado una plataforma de gestión de la configuración, los equipos podrán ver el trabajo que se requieran para las tareas de configuración. El trabajo de gestión de la configuración puede identificarse como dependencias de otros trabajos y abordarse correctamente como parte de los sprints de la metodología ágil.

Herramientas de gestión de la configuración

Herramientas de gestión de la configuración

Git

Git es el sistema de control de versiones líder del sector para realizar el seguimiento de los cambios de código. Añadir los datos de gestión de la configuración junto al código en un repositorio de Git proporciona una visión global del control de versiones de todo un proyecto. Git es una herramienta fundamental en la gestión de la configuración de mayor nivel. La siguiente lista de otras herramientas de gestión de la configuración está diseñada para que se almacene en un repositorio de Git y se aproveche el seguimiento del control de versiones de esta herramienta.

Docker

Docker introdujo la contenedorización, una forma avanzada de gestión de la configuración (una especie de bloqueo de la configuración). Docker se basa en archivos de configuración denominados “Dockerfiles”, que contienen una lista de comandos que se evalúan para reconstruir la instantánea esperada del estado del sistema operativo. Docker crea contenedores a partir de estos Dockerfiles, que son instantáneas de una aplicación preconfigurada. Los Dockerfiles se envían a un repositorio de Git para realizar el seguimiento de las versiones y requieren una gestión adicional de la configuración para implementarlos en la infraestructura.

Terraform

Terraform, de HashiCorp, es una plataforma de código abierto para la gestión de la configuración. Terraform utiliza IaC para aprovisionar y gestionar clústeres, infraestructuras en la nube o servicios. Terraform es compatible con Amazon Web Services (AWS), Microsoft Azure y otras plataformas en la nube. Cada plataforma en la nube tiene su propia representación e interfaz para los componentes comunes de la infraestructura, como servidores, bases de datos y colas. Terraform desarrolló una capa de abstracción de herramientas de configuración para plataformas en la nube que permite a los equipos escribir archivos que son definiciones reproducibles de su infraestructura.

Ansible, SaltStack, Chef y Puppet

Ansible, SaltStack y Chef son marcos de automatización de TI que automatizan muchos procesos tradicionales de los administradores de sistemas. Cada marco utiliza una serie de archivos de datos de configuración, por lo general, YAML o XML, que evalúa un ejecutable.

Los archivos de datos de configuración especifican una secuencia de acciones que se deben realizar para configurar un sistema. A continuación, el ejecutable lleva a cabo las acciones. Dicho ejecutable difiere en el lenguaje entre los sistemas: Ansible y SaltStack se basan en Python y Chef, en Ruby. Este flujo de trabajo es similar a la ejecución de scripts de shell ad hoc, pero ofrece una experiencia más estructurada y pulida a través de los respectivos ecosistemas de las plataformas. Estas herramientas son las que permitirán la automatización necesaria para lograr la CI y la CD.

Cómo implementar la gestión de la configuración

Identificación

La primera acción para gestionar la configuración es recopilar información. Los datos de configuración se deben añadir y compilar a partir de diferentes entornos de aplicación, desarrollo, ensayo y producción para todos los componentes y servicios en uso. Cualquier dato secreto, como las contraseñas y las claves, se debe identificar, cifrar y almacenar de forma segura. En este punto, los datos de configuración se deben organizar en archivos de datos que se puedan consultar como una fuente de información centralizada.

Referencia

Una vez que los datos de configuración se hayan añadido y organizado, se puede establecer una referencia inicial. Dicha referencia presenta un estado de configuración conocido que permitirá que el software dependiente funcione correctamente, es decir, sin errores. Esta referencia inicial se suele crear revisando la configuración de un entorno de producción en funcionamiento y confirmando esos ajustes de configuración.

Control de versiones

Tu proyecto de desarrollo debería utilizar un sistema de control de versiones. Si no es así, instala Git, inicializa un repositorio para el proyecto y añade los archivos de datos de configuración al repositorio. Una advertencia antes de añadir datos de configuración a un repositorio: asegúrate de que los datos secretos, como contraseñas o claves, estén cifrados con una clave externa. Los datos secretos que se incluyan por error en un repositorio implican un gran riesgo. Se deben borrar del historial de los repositorios o cualquiera podrá aprovechar la situación y extraerlos.

auditoría

El hecho de añadir los datos de configuración a un repositorio y tenerlos organizados facilita la colaboración y permite ver la configuración del sistema. El popular flujo de trabajo de solicitudes de incorporación de cambios que los equipos de software usan para revisar y editar el código se puede aplicar a los archivos de datos de configuración. Esto ayuda a crear un sistema de auditoría y contabilidad. El equipo debe revisar y aceptar cualquier cambio que se aplique a la configuración. Esto añade responsabilidad y visibilidad a los cambios de configuración.

En conclusión...

La gestión de la configuración es una herramienta necesaria para gestionar sistemas de software complejos. La falta de gestión de la configuración puede causar graves problemas de fiabilidad, tiempo de actividad y capacidad de escalar un sistema. Muchas de las herramientas actuales de desarrollo de software llevan incorporadas funciones de gestión de la configuración. Bitbucket ofrece un potente sistema para gestionar la configuración que se ha desarrollado en torno a los flujos de trabajo de solicitud de incorporación de cambios de Git y la canalización de CI y CD.