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.hcl
, varCommon.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 bloquebackend
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 atributoversion
. La URL de origen (source
) indica dónde Terraform puede encontrar este proveedor. En este caso, se espera encontrarlo enhashicorp/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ónjoin
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ónupper
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 tipoazurerm_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 localrg_name
definida anteriormente. Esta variable local se calcula dinámicamente utilizando la funciónjoin
yupper
, 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 variableregion
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 variabletags
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 atributoid
del recurso de grupo de recursosazurerm_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 atributoid
del recurso de grupo de recursosazurerm_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 localrg_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 variableSubscription
, 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 variableTenant
, 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 bloquepaths
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 mapamapProjectPathKey
del archivovarEnvironment.hcl
.tags
: Codifica como JSON un conjunto de etiquetas combinando un conjunto fijo de etiquetas (Managed_By
yProvider
), las etiquetas globales definidas envarCommon.hcl
y las etiquetas específicas del entorno definidas envarEnvironment.hcl
.
generate "backend"
: Este bloque genera un archivo llamadobackend.tfvars
. Este archivo se utiliza para configurar el backend de Terraform. Contiene variables comosubscription_id
,key
,resource_group_name
,storage_account_name
, ycontainer_name
. Los valores de estas variables se obtienen de los archivos incluidos (varDataState.hcl
yvarCommon.hcl
).generate "vars"
: Este bloque genera un archivo llamadovars.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, comoplan
yapply
. En este caso, se ejecutan dos ganchos:print_tags
ycopy_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
}
- 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.
- Entradas:
region
: Nombre de la región obtenido del valor localregion
.Environment
: Nombre del entorno obtenido del valor localEnvironment
.EnvironmentLetter
: Letra representativa del entorno obtenida del valor localEnvironmentLetter
.Subscription
: Identificación de la suscripción obtenida del valor localSubscription
.NetworkResourceGroup
: Nombre del grupo de recursos de red obtenido del valor localNetworkResourceGroup
.Network
: Nombre de la red obtenido del valor localNetwork
.SubnetworkData
: Nombre del subred de datos obtenido del valor localSubnetworkData
.SubnetworkFront
: Nombre del subred frontal obtenido del valor localSubnetworkFront
.SubnetworkVint
: Nombre del subred Vint obtenido del valor localSubnetworkVint
.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
}
- 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.
- Entradas:
EntityName
: Nombre de la entidad obtenido del valor localEntityName
.ProjectName
: Nombre del proyecto obtenido del valor localProjectName
.ServiceName
: Nombre del servicio obtenido del valor localServiceName
.BussinessUnit
: Unidad de negocio obtenida del valor localBussinessUnit
.BussinessUnitExtended
: Unidad de negocio extendida obtenida del valor localBussinessUnitExtended
.Tenant
: Identificación del inquilino obtenida del valor localTenant
.Provider
: Proveedor obtenido del valor localProvider
.required_version
: Versión de Terraform requerida obtenida del valor localrequired_version
.id_project
: Identificación del proyecto obtenida del valor localid_project
.globalTags
: Conjunto de etiquetas globales obtenido del valor localglobalTags
.
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!