Automatización de infraestructura: qué es y cómo comenzar

Automatización de infraestructura: qué es y cómo comenzar

La automatización de la infraestructura es el uso de tecnología para realizar tareas con poca o ninguna intervención humana para controlar el almacenamiento de datos, el sistema operativo, la red, los componentes de software y hardware para proporcionar soluciones y servicios de TI. La automatización de la infraestructura puede aportar varios beneficios a las organizaciones de TI, como por ejemplo:

  • Aumente la eficiencia y productividad de los equipos de TI reduciendo el tiempo y el esfuerzo necesarios para realizar tareas manuales y repetitivas.
  • Mejorar la calidad y consistencia de los servicios de TI, evitando errores humanos y asegurando el cumplimiento de estándares y políticas.
  • Acelere la entrega y la implementación de aplicaciones facilitando la integración, entrega e implementación continuas (CI/CD).
  • Escalar la infraestructura según la demanda, optimizando el uso de recursos y reduciendo costos.

En este artículo, explicaremos qué es la automatización de la infraestructura, cuáles son los principales tipos y herramientas de automatización y cómo comenzar a automatizar su infraestructura de TI.


¿Qué es la automatización de infraestructura?

La automatización de la infraestructura es el proceso de utilizar software para definir, configurar, gestionar y monitorear los componentes de la infraestructura de TI. La infraestructura de TI son los componentes necesarios para ejecutar y gestionar entornos de TI empresariales. Incluyen almacenamiento de datos, sistemas operativos, redes, software y hardware.

La automatización de la infraestructura se puede aplicar en diferentes niveles y enfoques según el objetivo y el alcance de la automatización. Algunos de los enfoques principales son:

  • Automatizar la configuración de máquinas virtuales (VM) o contenedores: Consiste en utilizar herramientas que permiten definir las configuraciones deseadas de los sistemas operativos y software instalados en las VM o contenedores. Estas herramientas pueden aplicar configuraciones automáticamente cada vez que se crea o modifica una nueva máquina virtual o contenedor. Algunos ejemplos de estas herramientas son Ansible, Chef, Puppet y cloud-init.
  • Automatizar la gestión de infraestructura: Consiste en utilizar herramientas que permiten definir la infraestructura como código (IaC), es decir, describir los recursos de la infraestructura (como redes, VM, contenedores, bases de datos, etc.) en archivos de texto que pueden ser versionados y ejecutados para crear o cambiar el infraestructura. Estas herramientas pueden facilitar el aprovisionamiento, la actualización y la eliminación de recursos de infraestructura. Algunos ejemplos de estas herramientas son Terraform, Packer y Azure Resource Manager.
  • Automatizar la entrega y despliegue de aplicaciones: Consiste en utilizar herramientas que permiten automatizar el proceso de construcción, prueba, empaquetado e implementación de aplicaciones en entornos de desarrollo, prueba o producción. Estas herramientas pueden integrarse con herramientas de configuración y administración de infraestructura para garantizar que las aplicaciones se implementen en la infraestructura adecuada. Algunos ejemplos de estas herramientas son Azure DevOps Services, Jenkins y GitHub Actions.

¿Cómo empezar a automatizar tu infraestructura?

Para comenzar a automatizar tu infraestructura de TI, debes seguir algunos pasos básicos:

  • Definir el objetivo y alcance de la automatización: Es necesario identificar qué problema u oportunidad deseas resolver o aprovechar con la automatización. Por ejemplo, es posible que desees automatizar el aprovisionamiento de VM para reducir el tiempo de implementación de aplicaciones o automatizar las pruebas de aplicaciones para aumentar la calidad del código. También es necesario definir el alcance de la automatización, es decir, qué componentes de la infraestructura deseas automatizar y qué procesos están involucrados en la automatización.
  • Elegir las herramientas adecuadas para la automatización: Debes investigar qué herramientas están disponibles en el mercado que satisfagan tus necesidades y requisitos. Puedes considerar factores como costo, compatibilidad, facilidad de uso, soporte técnico, etc. También puedes comparar las ventajas y desventajas de diferentes herramientas para tomar una decisión informada.
  • Implementar la automatización: Necesitas instalar y configurar las herramientas elegidas en tu infraestructura. También debes crear los archivos o scripts que definen la configuración o los recursos de tu infraestructura. Puedes utilizar un lenguaje específico de herramienta o un lenguaje genérico como Python o PowerShell. También debes probar que la automatización funciona como se espera antes de ponerla en producción.
  • Monitorear y mejorar la automatización: Necesitas realizar un seguimiento del rendimiento y los resultados de su automatización. Puedes utilizar herramientas de monitoreo o análisis para recopilar datos sobre el tiempo, el costo, la calidad de tu automatización y más. También puedes utilizar los comentarios de los usuarios o clientes para identificar posibles problemas u oportunidades de mejora en tu automatización.

Ejemplos práticos

Para ilustrar cómo funciona la automatización de la infraestructura en la práctica, mostraremos dos ejemplos sencillos utilizando Python y Terraform.

Exemplo 1: Automatizar la configuración de las VMs usando Python

En este ejemplo, usaremos Python para automatizar la configuración de máquinas virtuales Linux en Azure. Usemos el módulo Python azure-mgmt-compute para interactuar con el servicio Azure Compute Management. Creemos una función que tome como parámetros el nombre del grupo de recursos, el nombre de la VM y un diccionario con la configuración de VM deseada (como tamaño de VM, nombre de usuario administrador, contraseña de usuario administrador, nombre del sistema operativo, versión del sistema operativo, etc.).

La función comprobará si existe una imagen del sistema operativo en Azure con las características especificadas. Si existe, la función creará una VM usando esta imagen y aplicando la configuración deseada. Si no existe, la función devolverá un mensaje indicando que no se pudo crear la VM.

# Importando o módulo azure-mgmt-compute
from azure.mgmt.compute import ComputeManagementClient

# Definindo a função para automatizar a configuração das VMs
def configurar_vm(grupo_de_recursos,nome_da_vm,parametros_da_vm):

  # Criando um objeto do tipo ComputeManagementClient
  compute_client = ComputeManagementClient(credenciais_do_azure,id_da_assinatura_do_azure)

  # Buscando uma imagem do sistema operacional no Azure com as características especificadas
  imagem = compute_client.virtual_machine_images.get(
    location=parametros_da_vm["localizacao"],
    publisher_name=parametros_da_vm["nome_do_publicador"],
    offer=parametros_da_vm["nome_do_sistema_operacional"],
    skus=parametros_da_vm["versao_do_sistema_operacional"],
    version="latest"
  )

  # Verificando se encontrou uma imagem válida
  if imagem:

    # Criando um objeto do tipo VirtualMachine
    vm = compute_client.virtual_machines.models.VirtualMachine(
      location=parametros_da_vm["localizacao"],
      hardware_profile=compute_client.virtual_machines.models.HardwareProfile(
        vm_size=parametros_da_vm["tamanho_da_vm"]
      ),
      storage_profile=compute_client.virtual_machines.models.StorageProfile(
        image_reference=compute_client.virtual_machines.models.ImageReference(
          publisher=imagem.storage_profile.image_reference.publisher,
          offer=imagem.storage_profile.image_reference.offer,
          sku=imagem.storage_profile.image_reference.sku,
          version=imagem.storage_profile.image_reference.version
        )
      ),
      os_profile=compute_client.virtual_machines.models.OSProfile(
        computer_name=nome_da_vm,
        admin_username=parametros_da_vm["nome_do_usuario_administrador"],
        admin_password=parametros_da_vm["senha_do_usuario_administrador"]
      ),
          network_profile=compute_client.virtual_machines.models.NetworkProfile(
        network_interfaces=[
          compute_client.virtual_machines.models.NetworkInterfaceReference(
            id=id_da_interface_de_rede
          )
        ]
      )
    )

    # Criando a VM no Azure usando o objeto VirtualMachine
    resultado = compute_client.virtual_machines.create_or_update(
      resource_group_name=grupo_de_recursos,
      vm_name=nome_da_vm,
      parameters=vm
    )

    # Aguardando a conclusão da criação da VM
    resultado.wait()

    # Retornando uma mensagem informando que a VM foi criada com sucesso
    return f"A VM {nome_da_vm} foi criada com sucesso no grupo de recursos {grupo_de_recursos}."

  else:

    # Retornando uma mensagem informando que não foi possível criar a VM
    return f"Não foi possível encontrar uma imagem do sistema operacional {parametros_da_vm['nome_do_sistema_operacional']} na versão {parametros_da_vm['versao_do_sistema_operacional']} no Azure."



Este es un ejemplo sencillo de cómo usar Python para automatizar la configuración de máquinas virtuales en Azure. Puedes adaptar este código para satisfacer tus necesidades y requisitos específicos. También puedes utilizar otras herramientas de automatización de configuración como Ansible, Chef o Puppet que ofrecen módulos o recursos listos para usar para interactuar con Azure.

Ejemplo 2: Automatizar la gestión de la infraestructura usando Terraform


En este ejemplo, usaremos Terraform para automatizar la administración de infraestructura en Azure. Usaremos el proveedor azurerm de Terraform para interactuar con los servicios de Azure. Creemos un archivo llamado main.tf que contenga el código para definir la infraestructura como código (IaC). Generemos un grupo de recursos, una red virtual, una subred, una interfaz de red y una máquina virtual Linux en Azure.

Usaremos variables para parametrizar algunos valores, como el nombre del grupo de recursos, el nombre de la máquina virtual y las credenciales de Azure. También usaremos salidas para mostrar información sobre la infraestructura creada, como la dirección IP de la VM.

# Configurando o provedor azurerm
provider "azurerm" {
  features {}
}

# Definindo as variáveis
variable "resource_group_name" {
  description = "O nome do grupo de recursos"
  default     = "meu-grupo-de-recursos"
}

variable "vm_name" {
  description = "O nome da VM"
  default     = "minha-vm"
}

variable "azure_subscription_id" {
  description = "O ID da assinatura do Azure"
}

variable "azure_client_id" {
  description = "O ID do cliente do Azure"
}

variable "azure_client_secret" {
  description = "O segredo do cliente do Azure"
}

variable "azure_tenant_id" {
  description = "O ID do locatário do Azure"
}

# Criando um grupo de recursos
resource "azurerm_resource_group" "meu_grupo_de_recursos" {
  name     = var.resource_group_name
  location = "eastus"
}

# Criando uma rede virtual
resource "azurerm_virtual_network" "minha_rede_virtual" {
  name                = "minha-rede-virtual"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name
}

# Criando uma sub-rede
resource "azurerm_subnet" "minha_sub_rede" {
  name                 = "minha-sub-rede"
  resource_group_name  = azurerm_resource_group.meu_grupo_de_recursos.name
  virtual_network_name = azurerm_virtual_network.minha_rede_virtual.name
  address_prefixes     = ["10.0.1.0/24"]
}

# Criando uma interface de rede
resource "azurerm_network_interface" "minha_interface_de_rede" {
  name                = "minha-interface-de-rede"
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name

  ip_configuration {
    name                          = "minha-configuracao-de-ip"
    subnet_id                     = azurerm_subnet.minha_sub_rede.id
    private_ip_address_allocation = "Dynamic"
    public_ip_address_id          = azurerm_public_ip.meu_endereco_ip_publico.id
  }
}

# Criando um endereço IP público
resource "azurerm_public_ip" "meu_endereco_ip_publico" {
  name                = "meu-endereco-ip-publico"
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name
  allocation_method   = "Dynamic"
}

# Criando uma VM do Linux
resource "azurerm_linux_virtual_machine" "minha_vm_linux" {
  name                = var.vm_name
  resource_group_name = azurerm_resource_group.meu_grupo_de_recursos.name
  location            = azurerm_resource_group.meu_grupo_de_recursos.location
  size                = "Standard_B1s"
  admin_username      = "adminuser"

  network_interface_ids = [
    azurerm_network_interface.minha_interface_de_rede.id,
  ]

  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "18.04-LTS"
    version   = "latest"
  }
}

# Definindo as saídas
output "vm_name" {
  value = azurerm_linux_virtual_machine.minha_vm_linux.name
}

output "vm_ip_address" {
  value = azurerm_public_ip.meu_endereco_ip_publico.ip_address
}


Este es un ejemplo sencillo de cómo utilizar Terraform para automatizar la gestión de infraestructura en Azure. Puedes adaptar este código para satisfacer tus necesidades y requisitos específicos. También puedes usar otras herramientas de automatización de administración de infraestructura, como Packer, Azure Resource Manager o Azure Automation.


Conclusión

La automatización de la infraestructura es una práctica esencial para las organizaciones de TI que desean aumentar su eficiencia, calidad y agilidad. Existen varias herramientas y soluciones que permiten automatizar diferentes aspectos de infraestructura de TI como la configuración, administración y entrega de aplicaciones.

Para comenzar a automatizar la infraestructura de TI, necesitas definir el objetivo y el alcance de la automatización, elegir las herramientas adecuadas para automatización, implementar la automatización, monitorearla y mejorarla. En este artículo, mostramos dos ejemplos prácticos de cómo usar Python y Terraform para automatizar la configuración y administración de infraestructura en Azure.

Espero que este artículo haya sido útil para aprender más sobre la automatización de infraestructura y cómo empezar a aplicarla en tu organización.

Referencias bibliográficas

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.