Desplegar Azure Private DNS zones con terraform

¿Que es Terraform?

Terraform es un software de infraestructura como código (infrastructure as code) desarrollado por HashiCorp. Permite a los usuarios definir y configurar la infraestructura de un centro de datos en un lenguaje de alto nivel, generando un plan de ejecución para desplegar la infraestructura en OpenStack,3​ por ejemplo, u otros proveedores de servicio tales como AWSIBM Cloud (antiguamente Bluemix), Google Cloud PlatformLinode,45​ Microsoft AzureOracle Cloud Infrastructure o VMware vSphere.678910​ La infraestructura se define utilizando la sintaxis de configuración de HashiCorp denominada HashiCorp Configuration Language (HCL) o, en su defecto, el formato JSON.11

En este ejemplo, vamos a desplegar el servicio: Azure DNS private zone

En primer lugar configuramos el archivo «main.tf» en donde vamos a configurar el Resurce Group y la VNET

#Resource Group

resource "azurerm_resource_group" "RG-RedOrbita_frontend" {
  name = "RedOrbita_frontend"
  location = "westeurope"
}

#Virtual Network

resource "azurerm_virtual_network" "VNET-RedOrbita_frontend_Vnet" {
  name                = "RedOrbita_frontend_Vnet"
  address_space       = ["10.10.1.0/24"]
  location            = azurerm_resource_group.RG-RedOrbita_frontend.location
  resource_group_name = azurerm_resource_group.RG-RedOrbita_frontend.name
}

En el fichero «providers.tf» configuremos todos los provider que vamos a utilizar.

#Configure the Azure provider
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.39.0"
    }
  }
}

provider "azurerm" {
  features {}
}

Por ultimo, crearemos un archivo llamado «redorbita.tf» el cual configuraremos la zona DNS y todos los record de dicha zona.

resource "azurerm_private_dns_zone" "DNS-REDORBITA" {
  name                = "redorbita.com"
  resource_group_name = azurerm_resource_group.RG-RedOrbita_frontend.name
}


resource "azurerm_private_dns_zone_virtual_network_link" "DNS-REDORBITA-LINK-RedOrbita_frontend_Vnet" {
  name                  = "dns_vnet_frontend"
  resource_group_name   = azurerm_resource_group.RG-RedOrbita_frontend.name
  private_dns_zone_name = azurerm_private_dns_zone.DNS-REDORBITA.name
  virtual_network_id    = azurerm_virtual_network.VNET-RedOrbita_frontend_VNet.id
  registration_enabled  = "false"

}

# Record REDORBITA.COM


resource "azurerm_private_dns_a_record" "DNS-REDORBITA-COM" {
  name                = "redorbita.com"
  zone_name           = azurerm_private_dns_zone.DNS-REDORBITA.name
  resource_group_name = azurerm_resource_group.RG-RedOrbita_frontend.name
  ttl                 = 300
  records             = ["10.10.1.10"]
}

resource "azurerm_private_dns_a_record" "DNS-REDORBITA-COM" {
  name                = "srvweb001"
  zone_name           = azurerm_private_dns_zone.DNS-REDORBITA.name
  resource_group_name = azurerm_resource_group.RG-RedOrbita_frontend.name
  ttl                 = 300
  records             = ["10.10.1.12"]
}

resource "azurerm_private_dns_a_record" "DNS-REDORBITA-COM" {
  name                = "srvweb002"
  zone_name           = azurerm_private_dns_zone.DNS-REDORBITA.name
  resource_group_name = azurerm_resource_group.RG-RedOrbita_frontend.name
  ttl                 = 300
  records             = ["10.10.1.13"]
}

En caso que tengamos que importar algún estado como por ejemplo en mi caso el grupo de recurso y la vnet. Esto nos creará un fichero llamado «terraform.tfstate» el cual guarda todos los estados de los recursos importados.

terraform import azurerm_resource_group.RG-RedOrbita_frontend  /subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/RedOrbita_frontend

terraform import  azurerm_virtual_network.VNET-RedOrbita_frontend_Vnet /subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/RedOrbita_frontend/providers/Microsoft.Network/virtualNetworks/RedOrbita_frontend_Vnet

Nos logamos a Azure

az login
az account set -s "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

Desplegamos

 
 terraform init
 terraform plan
 terraform apply

Más información

:wq!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *