Despliegue de Resource Group en Azure con Terraform y Terragrunt

En esta serie, exploraremos cómo desplegar diversos recursos en Azure utilizando Terraform y Terragrunt. Comenzaremos con el elemento más básico: el Resource Group.

Un Resource Group en Azure es como una carpeta que agrupa los recursos relacionados de una aplicación o proyecto. Proporciona organización, gestión de acceso, seguimiento de costos y facilita el despliegue y eliminación de recursos.

Artículos relacionados: 

Estructura del Proyecto

Antes de profundizar en el código, es importante entender la estructura del proyecto. El proyecto está organizado de la siguiente manera:

├── env
│   ├── code
│   │   │   ├── rg
│   │   │   └── 00
│   │   │       ├── backend.tf
│   │   │       ├── data.tf
│   │   │       ├── locals.tf
│   │   │       ├── main.tf
│   │   │       ├── outputs.tf
│   │   │       ├── provider.tf
│   │   │       └── variables.tf
│   └── dev
│       ├── rg
│       │   └── 00
│       │       ├── terragrunt.hcl
│       │       └── vars.tfvars
├── terragrunt.hcl
├── varCommon.hcl
└── varDataState.hcl

La carpeta env contiene la configuración específica del entorno, mientras que code alberga los archivos de configuración de Terraform para el despliegue de Resource Group. La carpeta dev contiene archivos de configuración específicos del entorno de desarrollo. terragrunt.hclvarCommon.hcl y varDataState.hcl son archivos de configuración para Terragrunt y variables comunes.

Configuración de Terraform

Ahora, profundicemos en los archivos de configuración de Terraform para desplegar Azure OpenAI:

backend.tf

Este archivo configura el backend de Terraform para almacenar el estado remoto en Azure.

terraform {
  backend "azurerm" {
  }
  required_version = "~>0.14"
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "3.13.0"
    }
  }
}

Explicación:

  • Este archivo comienza con un bloque terraform, que contiene la configuración global de Terraform.
  • Dentro del bloque terraform, hay un bloque backend específico para Azure (backend "azurerm"). Sin embargo, no se proporcionan detalles específicos sobre la configuración del backend de Azure en este bloque. Es probable que la configuración detallada, como la URL del almacenamiento de estado de Azure o las credenciales de acceso, se especifiquen en otro lugar del proyecto.
  • Se especifica que se requiere una versión mínima de Terraform compatible con la sintaxis ~>0.14. Esto significa que se necesitará una versión de Terraform igual o superior a 0.14, pero menor que 0.15.
  • El bloque required_providers especifica los proveedores de Terraform necesarios para este proyecto. En este caso, solo se necesita el proveedor de Azure (azurerm). La versión específica requerida es la 3.47.0, y se indica utilizando el atributo version. La URL de origen (source) indica dónde Terraform puede encontrar este proveedor. En este caso, se espera encontrarlo en hashicorp/azurerm.

locals.tf

Aquí se definen las variables locales utilizadas en el proyecto.

locals {
  rg_name = upper(join("-", [ var.Environment, var.EntityName, var.Provider, var.BussinessUnit,  var.ProjectName, "RGP-01" ]))
}

Explicación:

  • join: La función join toma una lista de elementos y los une en una sola cadena utilizando un separador especificado. En este caso, los elementos son variables y el separador es un guion «-«.
  • [ var.Environment, var.EntityName, var.Provider, var.BussinessUnit, var.ProjectName, "RGP-01" ]: Esta es la lista de elementos que se unirán para formar el nombre del grupo de recursos. Cada elemento es una variable que se espera que esté definida en el contexto donde se utiliza este bloque de código. Los elementos son:
    • var.Environment: Representa el entorno en el que se está implementando el recurso.
    • var.EntityName: Representa el nombre de la entidad relacionada con el recurso.
    • var.Provider: Representa el proveedor de la nube (en este caso, se espera que sea «Azure»).
    • var.BussinessUnit: Representa la unidad de negocio relacionada con el recurso.
    • var.ProjectName: Representa el nombre del proyecto al que pertenece el recurso.
    • "RGP-01": Este es un sufijo estático que se agrega al final del nombre del grupo de recursos.
  • upper: La función upper convierte la cadena resultante en mayúsculas. Esto asegura que el nombre del grupo de recursos esté en mayúsculas, lo cual es una convención común en muchos entornos de infraestructura.

main.tf

Este archivo contiene la configuración principal para el despliegue de Resource Group.

resource "azurerm_resource_group" "rg" {
  name     = local.rg_name
  location = var.region
  tags = var.tags
}
  • resource "azurerm_resource_group" "rg": Esto declara un nuevo recurso de tipo azurerm_resource_group, que es proporcionado por el proveedor de Azure en Terraform. El nombre dado a este recurso dentro del código es "rg", que se utilizará para hacer referencia a este recurso en otros lugares del archivo de configuración.
  • name = local.rg_name: Aquí se especifica el nombre del grupo de recursos. Utiliza la variable local rg_name definida anteriormente. Esta variable local se calcula dinámicamente utilizando la función join y upper, como se explicó anteriormente. Por lo tanto, el nombre del grupo de recursos será generado según la lógica definida en esa variable local.
  • location = var.region: Esta línea establece la ubicación del grupo de recursos en Azure. Utiliza la variable region definida en las variables de entrada (inputs) del archivo de configuración. Esta variable se espera que contenga el nombre de la región de Azure donde se creará el grupo de recursos.
  • tags = var.tags: Aquí se establecen las etiquetas (tags) para el grupo de recursos. Utiliza la variable tags definida en las variables de entrada del archivo de configuración. Se espera que esta variable sea un mapa de etiquetas (clave-valor) que se aplicarán al grupo de recursos. Las etiquetas son metadatos opcionales que se pueden utilizar para organizar y gestionar recursos en Azure.

output.tf

Aquí se definen las salidas del despliegue para obtener información útil después del despliegue.

output "id" {
    value = azurerm_resource_group.rg.id
    description = "id del Resource Group"
}

output "name" {
    value = local.rg_name
    description = "Name del Resource Group"
}
  • output "id": Esta línea define una salida llamada "id", que proporciona el ID del recurso de grupo de recursos creado. El valor de esta salida se obtiene accediendo al atributo id del recurso de grupo de recursos azurerm_resource_group.rg.
  • value = azurerm_resource_group.rg.id: Aquí se especifica el valor de la salida "id". Utiliza la interpolación para acceder al atributo id del recurso de grupo de recursos azurerm_resource_group.rg. Esto asegura que la salida proporcionará el ID único del grupo de recursos creado en Azure.
  • description = "id del Resource Group": Proporciona una descripción que explica el propósito de esta salida. En este caso, describe que esta salida proporciona el ID del grupo de recursos.
  • output "name": Similar al anterior, esta línea define una salida llamada "name", que proporciona el nombre del recurso de grupo de recursos creado.
  • value = local.rg_name: Define el valor de la salida "name". Utiliza la variable local rg_name definida anteriormente en el archivo Terraform. Esta variable contiene el nombre generado dinámicamente del grupo de recursos.
  • description = "Name del Resource Group": Al igual que la primera salida, proporciona una descripción que explica el propósito de esta salida. En este caso, describe que esta salida proporciona el nombre del grupo de recursos.

provider.tf

Aquí se configuran los proveedores de Terraform, incluido Azure.

provider "azurerm" {
  subscription_id = var.Subscription
  tenant_id       = var.Tenant
  features {}
}
  • provider "azurerm": Este encabezado indica que se está configurando un proveedor de recursos de Azure.
  • subscription_id = var.Subscription: Aquí se especifica el ID de la suscripción de Azure que se utilizará para aprovisionar los recursos. El valor se toma de la variable Subscription, que debe definirse en otro lugar del archivo o del entorno de Terraform.
  • tenant_id = var.Tenant: Este parámetro especifica el ID del inquilino (tenant) de Azure que se utilizará para la autenticación. El valor se toma de la variable Tenant, que también debe definirse en otro lugar del archivo o del entorno de Terraform.
  • features {}: Este bloque vacío indica que no se están utilizando características especiales del proveedor de Azure en este momento. Sin embargo, es un espacio donde se pueden agregar configuraciones adicionales si es necesario en futuras versiones de Terraform.

variables.tf

En este archivo se definen las variables necesarias para la configuración.


######################
# VARIABLES COMUNES  #
######################

variable "lz_subscription_id" {
  type        = string
  description = "ID de la susbcriptcion de los tfstate"
  default     = ""
}

variable "lz_resource_group_name" {
  type        = string
  description = "Nombre del resoruce group de los tfstate"
  default     = ""
} 

variable "lz_storage_account_name" {
  type        = string
  description = "Nombre del storage account de los tfstate"
  default     = ""
}    

variable "lz_container_name" {
  type        = string
  description = "Nombre del container name de los tfstate"
  default     = ""
}

variable "Tenant" {
  type        = string
  description = "Nombre del tenant"
  default     = ""
}

variable "Subscription" {
  type        = string
  description = "Nombre de la subscripcion"
  default     = ""
}

variable "Provider" {
  type        = string
  description = "Nombre del Provider cloud"
  default     = ""
}

variable "Environment" {
  type        = string
  description = "(Required) Specifies the Environment where the Resources should exist."
  default     = ""
}

variable "BussinessUnit" {
  type        = string
  description = "(Required) Bussiness Unit."
  default     = ""
}

variable "BussinessUnitExtended" {
  type        = string
  description = "(Required) Bussiness Unit."
  default     = ""
}

variable "ProjectName" {
  type        = string
  description = "(Required) ProjectName."
  default     = ""
}

variable "ServiceName" {
  type        = string
  description = "(Required) ServiceName."
  default     = ""
}

variable "EntityName" {
  type        = string
  description = "(Required) EntityName."
  default     = ""
}

variable "mapProjectPathKey" {
  type        = map(string)
  default     = {}
  description = "Mapa de rutas de los elementos"
}

variable "region" {
  type        = string
  description = "(Required) Region Name"
  default     = ""
}

#############################
#   VARIABLES ESPECIFICAS   #
#############################

######################
#   VARIABLE TAGS    #
######################

variable "tags" {
  type        = map(string)
  default     = {}
  description = "(Optional) A mapping of tags which should be assigned to the Resource Group."
}
  • lz_subscription_id: Esta variable almacena el ID de la suscripción de Azure que se utilizará para el estado del Terraform. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • lz_resource_group_name: Esta variable almacena el nombre del grupo de recursos de Azure que se utilizará para el estado del Terraform. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • lz_storage_account_name: Esta variable almacena el nombre de la cuenta de almacenamiento de Azure que se utilizará para el estado del Terraform. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • lz_container_name: Esta variable almacena el nombre del contenedor de almacenamiento de Azure que se utilizará para el estado del Terraform. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • Tenant: Esta variable almacena el nombre del inquilino (tenant) de Azure que se utilizará para la autenticación. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • Subscription: Esta variable almacena el nombre de la suscripción de Azure que se utilizará para la aprovisionamiento de recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • Provider: Esta variable almacena el nombre del proveedor de la nube que se utilizará para el aprovisionamiento de recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • Environment: Esta variable almacena el entorno donde se desean desplegar los recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • BussinessUnit: Esta variable almacena la unidad de negocio a la que pertenecen los recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • BussinessUnitExtended: Esta variable almacena una extensión de la unidad de negocio. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • ProjectName: Esta variable almacena el nombre del proyecto al que pertenecen los recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • ServiceName: Esta variable almacena el nombre del servicio al que pertenecen los recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • EntityName: Esta variable almacena el nombre de la entidad a la que pertenecen los recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • mapProjectPathKey: Esta variable almacena un mapa que asigna rutas a elementos del proyecto. Es de tipo map y tiene una descripción que indica su propósito. El valor predeterminado es un mapa vacío.
  • region: Esta variable almacena el nombre de la región donde se desean desplegar los recursos. Es de tipo string y tiene una descripción que indica su propósito. El valor predeterminado es una cadena vacía.
  • tags: Esta variable almacena un mapeo de etiquetas que se asignarán al grupo de recursos. Es de tipo map y tiene una descripción que indica su propósito. El valor predeterminado es un mapa vacío.

Configuración de Terragrunt

Por último, echemos un vistazo a la configuración de Terragrunt para manejar la infraestructura de manera eficiente.

terragrunt.hcl

Este archivo especifica las dependencias y configura la ejecución de Terraform.


dependencies {
  paths = [
  ]
}

include "varEnvironment" {
  path = find_in_parent_folders("varEnvironment.hcl")
  expose = true
}

include "varCommon" {
  path = find_in_parent_folders("varCommon.hcl")
  expose = true
}

include "varDataState" {
  path = find_in_parent_folders("varDataState.hcl")
  expose = true
}

locals {
  mapProjectPathKey = jsonencode(include.varEnvironment.inputs.mapProjectPathKey)
  tags = jsonencode(merge({
    Managed_By = "Terraform"
    Provider = "AZR"
  },
  include.varCommon.inputs.globalTags,
  include.varEnvironment.inputs.environmentTags
  ))
}

generate "backend"{
  path      = "backend.tfvars"
  if_exists = "overwrite" # "overwrite" "skip" "overwrite_terragrunt" 
  contents = <<EOF
subscription_id = "${include.varDataState.inputs.lz_subscription_id}"
key = "${include.varCommon.inputs.ProjectName}/${include.varCommon.inputs.ServiceName}/${get_path_from_repo_root()}/terraform.tfstate"
resource_group_name = "${include.varDataState.inputs.lz_resource_group_name}"
storage_account_name =  "${include.varDataState.inputs.lz_storage_account_name}"
container_name = "${include.varDataState.inputs.lz_container_name}"
EOF
}

generate "vars"{
  path      = "vars.tfvars"
  if_exists = "overwrite" #"skip" #"overwrite_terragrunt"
  contents = <<EOF
###############################
#    VALORES DATA DataState     #
###############################
lz_subscription_id             = "${include.varDataState.inputs.lz_subscription_id}"
lz_resource_group_name         = "${include.varDataState.inputs.lz_resource_group_name}" 
lz_storage_account_name        = "${include.varDataState.inputs.lz_storage_account_name}" 
lz_container_name              = "${include.varDataState.inputs.lz_container_name}" 

###############################
#     VALORES GENERALES       #
###############################
region  = "${include.varEnvironment.inputs.region}"
Environment = "${include.varEnvironment.inputs.Environment}"
BussinessUnit = "${include.varCommon.inputs.BussinessUnit}"
ProjectName = "${include.varCommon.inputs.ProjectName}"
ServiceName = "${include.varCommon.inputs.ServiceName}"
EntityName = "${include.varCommon.inputs.EntityName}"
Subscription = "${include.varEnvironment.inputs.Subscription}"
Tenant = "${include.varCommon.inputs.Tenant}"
# ApplicationName = null
mapProjectPathKey = ${local.mapProjectPathKey}

###############################
# Valores RG                  #
###############################

###########################
#       VALORES TAGS      #
###########################

tags = ${local.tags}

EOF
}

terraform {
  source = "../../..//code/rg/00/"

  before_hook "print_tags" {
    commands = ["plan", "apply"] #["${get_terraform_commands_that_need_vars()}"]
    execute  = ["echo", "tags", "=", "${local.tags}", ">", "vars.tfvars"]
  }

  before_hook "copy_vars" {
    commands = ["plan", "apply"] #["${get_terraform_commands_that_need_vars()}"]
    execute  = ["cp", "-f", "vars.tfvars", "${get_original_terragrunt_dir()}/vars.tfvars"]
  }

  extra_arguments "backend_vars" {
    commands = ["init"]
    arguments = [
      "-backend-config=backend.tfvars"
    ]
  }
  extra_arguments "vars_vars" {
    commands = ["plan", "apply", "destroy", "import"]

    arguments = [
      "-var-file=vars.tfvars"
    ]
  }
}
  • dependencies: Este bloque define las dependencias del Terragrunt. En este caso, no se especifican rutas de dependencias, ya que el bloque paths está vacío.
  • include: Estos bloques incluyen archivos de variables externos (varEnvironment.hcl, varCommon.hcl, varDataState.hcl) en el Terragrunt. Los archivos incluidos pueden exponer sus variables para ser utilizadas en este archivo Terragrunt.
  • locals: Este bloque define variables locales que se utilizan dentro de este archivo Terragrunt.
    • mapProjectPathKey: Codifica como JSON el mapa mapProjectPathKey del archivo varEnvironment.hcl.
    • tags: Codifica como JSON un conjunto de etiquetas combinando un conjunto fijo de etiquetas (Managed_By y Provider), las etiquetas globales definidas en varCommon.hcl y las etiquetas específicas del entorno definidas en varEnvironment.hcl.
  • generate "backend": Este bloque genera un archivo llamado backend.tfvars. Este archivo se utiliza para configurar el backend de Terraform. Contiene variables como subscription_id, key, resource_group_name, storage_account_name, y container_name. Los valores de estas variables se obtienen de los archivos incluidos (varDataState.hcl y varCommon.hcl).
  • generate "vars": Este bloque genera un archivo llamado vars.tfvars. Este archivo se utiliza para proporcionar valores de variables a Terraform. Contiene valores para las variables específicas definidas en los archivos incluidos (varDataState.hcl, varCommon.hcl, varEnvironment.hcl). Los valores se interpolan a partir de las variables incluidas.
  • terraform: Este bloque proporciona configuraciones adicionales para Terraform.
    • source: Especifica la ruta de origen del módulo de Terraform. En este caso, el origen se establece en un directorio relativo ../../..//code/rg/00/.
    • before_hook: Este bloque define ganchos de ejecución que se ejecutarán antes de ciertos comandos de Terraform, como plan y apply. En este caso, se ejecutan dos ganchos: print_tags y copy_vars.
    • extra_arguments: Este bloque especifica argumentos adicionales que se pasarán a los comandos de Terraform (init, plan, apply, destroy, import). En este caso, se especifican argumentos adicionales para la configuración del backend (backend_vars) y para las variables (vars_vars).

vars.tfvars

Este archivo especifica las dependencias y configura la ejecución de Terraform.

###############################
#    VALORES DATA DataState     #
###############################
lz_subscription_id             = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
lz_resource_group_name         = "PRO-TF-DATA-RG-01" 
lz_storage_account_name        = "protfdata" 
lz_container_name              = "openai" 

###############################
#     VALORES GENERALES       #
###############################
region  = "northeurope"
Environment = "dev"
BussinessUnit = "IT"
ProjectName = "chatgpt"
ServiceName = "chatgpt"
EntityName = "RO"
Subscription = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
Tenant = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
# ApplicationName = null
mapProjectPathKey = {"appServicePlan":"appservice/plan/00","applicationInsightFront":"appservice/insight/front","applicationInsightWorkspace":"appservice/insight/workspace","rg":"rg/00","sbnVint00":"networking/sbn/vint00","sbnVint01":"networking/sbn/vint01","sbnVint02":"networking/sbn/vint02"}

###############################
# Valores RG                  #
###############################

###########################
#       VALORES TAGS      #
###########################

tags = {"Enviroment":"PRO","Environment Tech":"IT","Managed_By":"Terraform","ProjectAlias":"chatgpt","Provider":"Azure","Service Description":"CHATGPT","ServiceAlias":"V1","Status":"Implementation","Temporal":"NO"}

Este bloque de código define valores locales y entradas para configurar variables en Terraform y Terragrunt.

locals {
  region               = "northeurope"
  Environment          = "dev"
  EnvironmentLetter    = "d"
  Subscription         = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  NetworkResourceGroup = "DEV-REDORBITA-NET-01"
  Network              = "DEV-REDORBITA-VNET-01"
  SubnetworkFront      = "DEV-REDORBITA-FRONT-SBN-01"
  SubnetworkData       = "DEV-REDORBITA-DATA-SBN-01"
  SubnetworkVint       = "DEV-REDORBITA-VINT-SBN-01"
  mapProjectPathKey = {
    rg                          = "rg/00",
    sbnVint00                   = "networking/sbn/vint00",
    sbnVint01                   = "networking/sbn/vint01",
    sbnVint02                   = "networking/sbn/vint02",
    appServicePlan              = "appservice/plan/00",
    applicationInsightWorkspace = "appservice/insight/workspace",
    applicationInsightFront     = "appservice/insight/front",
   }
}

inputs = {
  region               = local.region
  Environment          = local.Environment
  EnvironmentLetter    = local.EnvironmentLetter
  Subscription         = local.Subscription
  NetworkResourceGroup = local.NetworkResourceGroup
  Network              = local.Network
  SubnetworkData       = local.SubnetworkData
  SubnetworkFront      = local.SubnetworkFront
  SubnetworkVint      = local.SubnetworkVint
  environmentTags = {
    Enviroment       = "${upper(local.Environment)}"
    cmdbNameApp      = local.cmdbCiApp
    cmdbCiApp        = local.cmdbCiApp
  }
  mapProjectPathKey = local.mapProjectPathKey
}
  1. Valores Locales:
    • region: Nombre de la región configurada como «northeurope».
    • Environment: Nombre del entorno configurado como «dev».
    • EnvironmentLetter: Letra representativa del entorno configurada como «d».
    • Subscription: Identificación de la suscripción configurada como «XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX».
    • NetworkResourceGroup: Nombre del grupo de recursos de red configurado como «DEV-REDORBITA-NET-01».
    • Network: Nombre de la red configurada como «DEV-REDORBITA-VNET-01».
    • SubnetworkFront: Nombre del subred frontal configurado como «DEV-REDORBITA-FRONT-SBN-01».
    • SubnetworkData: Nombre del subred de datos configurado como «DEV-REDORBITA-DATA-SBN-01».
    • SubnetworkVint: Nombre del subred Vint configurado como «DEV-REDORBITA-VINT-SBN-01».
    • mapProjectPathKey: Mapa que asigna claves a rutas de proyectos específicos.
  2. Entradas:
    • region: Nombre de la región obtenido del valor local region.
    • Environment: Nombre del entorno obtenido del valor local Environment.
    • EnvironmentLetter: Letra representativa del entorno obtenida del valor local EnvironmentLetter.
    • Subscription: Identificación de la suscripción obtenida del valor local Subscription.
    • NetworkResourceGroup: Nombre del grupo de recursos de red obtenido del valor local NetworkResourceGroup.
    • Network: Nombre de la red obtenido del valor local Network.
    • SubnetworkData: Nombre del subred de datos obtenido del valor local SubnetworkData.
    • SubnetworkFront: Nombre del subred frontal obtenido del valor local SubnetworkFront.
    • SubnetworkVint: Nombre del subred Vint obtenido del valor local SubnetworkVint.
    • environmentTags: Etiquetas de entorno que incluyen el nombre del entorno en mayúsculas (Enviroment)
    • mapProjectPathKey: Mapa que contiene las rutas de los proyectos asociadas a claves específicas.

varCommon.hcl y varDataState.hcl

Estos archivos contienen variables comunes y específicas del estado de los datos para Terragrunt.

varCommon.hcl


locals {
  #common_vars = yamldecode(file(find_in_parent_folders("config.yaml")))
  EntityName              = "RedOrbita"
  ProjectName             = "OpenAI"
  ServiceName             = "OpenAI"
  BussinessUnit           = "chatgpt"
  BussinessUnitExtended   = "infra"
  Tenant                  = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  Provider                = "azr"
  required_version        = "~>0.14"
  id_project              = "XXXXXXXX"
 globalTags = {
    ProjectName           = "OpenAI"
    Company               = "RedOrbita"
    Temporal              = "NO"
    "Environment Tech"    = "IT"
    "Service Description" = "Chatbot"
    "SSR-NSSR ID"         = "XXXXXXXX"
    Compliance            = "GDPR"
    Confidentiality       = "C2-Restricted"
    Integrity             = "I2-Standard"
    Availability          = "A1-Low"
    Criticality           = "Low"
    ServiceAlias          = "V1"
  }

  storage_account          = "protfdata"
  container_name           = "enazcomitfcont"
  subscription_hub_id2     = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  location                 = "northeurope"
}



inputs = {
  EntityName              = local.EntityName
  ProjectName             = local.ProjectName
  ServiceName             = local.ServiceName
  BussinessUnit           = local.BussinessUnit
  BussinessUnitExtended   = local.BussinessUnitExtended
  Tenant                  = local.Tenant
  Provider                = local.Provider
  required_version        = local.required_version
  id_project              = local.id_project
  globalTags              = local.globalTags
}
  1. Valores Locales:
    • EntityName: Nombre de la entidad configurada como «RedOrbita».
    • ProjectName: Nombre del proyecto configurado como «OpenAI».
    • ServiceName: Nombre del servicio configurado como «OpenAI».
    • BussinessUnit: Unidad de negocio configurada como «chatgpt».
    • BussinessUnitExtended: Unidad de negocio extendida configurada como «infra».
    • Tenant: Identificación del inquilino configurada como «XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX».
    • Provider: Proveedor configurado como «azr».
    • required_version: Versión de Terraform requerida configurada como «~>0.14».
    • id_project: Identificación del proyecto configurada como «XXXXXXXX».
    • globalTags: Conjunto de etiquetas globales que incluyen metadatos sobre el proyecto, como el nombre del proyecto, la empresa, la descripción del servicio, la identificación SSR-NSSR, la conformidad, la confidencialidad, la integridad, la disponibilidad, la criticidad y el alias del servicio.
  2. Entradas:
    • EntityName: Nombre de la entidad obtenido del valor local EntityName.
    • ProjectName: Nombre del proyecto obtenido del valor local ProjectName.
    • ServiceName: Nombre del servicio obtenido del valor local ServiceName.
    • BussinessUnit: Unidad de negocio obtenida del valor local BussinessUnit.
    • BussinessUnitExtended: Unidad de negocio extendida obtenida del valor local BussinessUnitExtended.
    • Tenant: Identificación del inquilino obtenida del valor local Tenant.
    • Provider: Proveedor obtenido del valor local Provider.
    • required_version: Versión de Terraform requerida obtenida del valor local required_version.
    • id_project: Identificación del proyecto obtenida del valor local id_project.
    • globalTags: Conjunto de etiquetas globales obtenido del valor local globalTags.

 varDataState.hcl

Estos archivos contienen variables comunes y específicas del estado de los datos para Terragrunt.

locals {
  #common_vars = yamldecode(file(find_in_parent_folders("config.yaml")))
  lz_subscription_id      = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  lz_resource_group_name  = "PRO-TF-DATA-RG-01"
  lz_storage_account_name = "protfdata"
  lz_container_name       = "openai"
  path_resources_terraform_state = jsonencode({
    rg = "rg/00"

})
}

inputs = {
##############################
#  VARIABLES FOR DATA STATES #
##############################
lz_subscription_id      = local.lz_subscription_id
lz_resource_group_name  = local.lz_resource_group_name
lz_storage_account_name = local.lz_storage_account_name
lz_container_name       = local.lz_container_name
path_resources_terraform_state = local.path_resources_terraform_state
}

:wq!

Deja una respuesta

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