My Profile Photo

Mauricio Villagran - Blog


#Cloud #DevOps #Azure #Powershell #Microsoft


Terraformer

A continuacion les voy a contar sobre una herramienta, la cual nos va a facilitar la vida, para cuando tenemos que pasar una infra que esta previamente desplegada en la nube al codigo de Terraform.

Introducción

La infraestructura como código (IaC) (en inglés: Infrastructure as Code) es el proceso de gestión y aprovisionamiento de centros de datos informáticos a través de archivos de definición legibles por máquina, en lugar de configuración de hardware físico o herramientas de configuración interactiva. La infraestructura de TI gestionada comprende desde equipo físico como servidores bare metal hasta máquinas virtuales y los recursos de configuración asociados. Las definiciones pueden estar en un sistema de control de versiones. Pueda utilizar tanto scripts como definiciones declarativas, en lugar de procesos manuales, pero el término se utiliza más a menudo para promover los enfoques declarativos.

Fuente: Wikipedia.

Terraformer

Terraformer es una herramienta de código abierto que se utiliza para generar templates de Terraform a partir de la infraestructura existente. Esta herramienta es muy util, cuando ya contamos con una infraestructura desplegada en la nube, y necesitamos pasarla a codigo de Terraform para poder administrarla o redesplegarla.

Terraformer es una herramienta que podemos utilizar para generar el entorno existente en el código de Terraform. Esta herramienta ayuda a generar múltiples plataformas en la nube y generar diferentes tipos de recursos en la nube. A continuacion les dejo el link oficial del proyecto:

Terraformer

La herramienta en accion

A continuacion les mostrare un ejemplo del funcionamiento de la herramienta, usando la nube de Azure.

Autenticacion contra Azure

Primero que nada, exportaremos las siguientes variables desde nuestro terminal.

# Service Principal with Client Secret
export ARM_SUBSCRIPTION_ID=[SUBSCRIPTION_ID]
export ARM_CLIENT_ID=[CLIENT_ID]
export ARM_CLIENT_SECRET=[CLIENT_SECRET]
export ARM_TENANT_ID=[TENANT_ID]

A continuacion les dejare el link para poder configurar dicha autenticacion:

Azure Configure Service Principal

Luego crearemos un archivo llamado init.tf el cual tenndra lo siguiente:

variable "client_secret" {
}

# We strongly recommend using the required_providers block to set the
# Azure Provider source and version being used
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=2.46.0"
    }
  }
}

# Configure the Microsoft Azure Provider
provider "azurerm" {
  features {}

  subscription_id = "00000000-0000-0000-0000-000000000000"
  client_id       = "00000000-0000-0000-0000-000000000000"
  client_secret   = var.client_secret
  tenant_id       = "00000000-0000-0000-0000-000000000000"
}

Situados donde estan nuestros archivos de terraform .tf, ejecutaremos:

terraform init

Luego se ejecuta la herrameienta terraformer, con el siguiente comando:

./terraformer import azure -r resource_group

./terraformer import azure -R my_resource_group -r virtual_network,resource_group

Este comando nos generara todos los templates .tf necesarios para tener nuestra infra como codigo.