Configuración de la nomenclatura personalizada para el marco de automatización
SAP Deployment Automation Framework usa una convención de nomenclatura estándar para la nomenclatura de recursos de Azure.
El módulo sap_namegenerator
de Terraform define los nombres de todos los recursos que implementa el marco de automatización. En el repositorio, el módulo se encuentra en /deploy/terraform/terraform-units/modules/sap_namegenerator/
. El marco también admite proporcionar sus propios nombres para algunos de los recursos mediante el uso de los archivos de parámetros.
La nomenclatura de los recursos usa el formato siguiente:
resource prefix + resource_group_prefix + separator + resource name + resource suffix.
Si estas funcionalidades no son suficientes, también puede usar la lógica de nomenclatura personalizada proporcionando un archivo JSON personalizado que contenga los nombres de recursos o modificando el módulo de nomenclatura usado por la automatización.
Proporcionar invalidaciones de nombre mediante un archivo JSON
Puede especificar un archivo JSON de nomenclatura personalizado en tfvars
el archivo de parámetros mediante el name_override_file
parámetro .
El archivo JSON tiene secciones para los distintos tipos de recursos.
Los tipos de implementación son:
- DEPLOYER (plano de control)
- SDU (infraestructura del sistema SAP)
- WORKLOAD_ZONE (zona de carga de trabajo)
Nombres de conjunto de disponibilidad
Los nombres de los conjuntos de disponibilidad se definen en la availabilityset_names
estructura . En el ejemplo siguiente se enumeran los nombres del conjunto de disponibilidad para una implementación.
"availabilityset_names" : {
"app": "app-avset",
"db" : "db-avset",
"scs": "scs-avset",
"web": "web-avset"
}
Nombres de key vault
Los nombres de los almacenes de claves se definen en la keyvault_names
estructura . En el ejemplo siguiente se enumeran los nombres del almacén de claves para una implementación en el DEV
entorno de Oeste de Europa.
"keyvault_names": {
"DEPLOYER": {
"private_access": "DEVWEEUprvtABC",
"user_access": "DEVWEEUuserABC"
},
"SDU": {
"private_access": "DEVWEEUSAP01X00pABC",
"user_access": "DEVWEEUSAP01X00uABC"
},
"WORKLOAD_ZONE": {
"private_access": "DEVWEEUSAP01prvtABC",
"user_access": "DEVWEEUSAP01userABC"
}
}
Los nombres del almacén de claves deben ser únicos en Azure. SAP Deployment Automation Framework anexa tres caracteres aleatorios (ABC en el ejemplo) al final del nombre del almacén de claves para reducir la probabilidad de conflictos de nombres.
Actualmente no se usan los private_access
nombres.
Nombres de cuentas de almacenamiento
Los nombres de las cuentas de almacenamiento se definen en la storageaccount_names
estructura . En el ejemplo siguiente se enumeran los nombres de cuenta de almacenamiento de una implementación en el DEV
entorno de Oeste de Europa.
"storageaccount_names": {
"DEPLOYER": "devweeudiagabc",
"LIBRARY": {
"library_storageaccount_name": "devweeusaplibabc",
"terraformstate_storageaccount_name": "devweeutfstateabc"
},
"SDU": "devweeusap01diagabc",
"WORKLOAD_ZONE": {
"landscape_shared_transport_storage_account_name": "devweeusap01sharedabc",
"landscape_storageaccount_name": "devweeusap01diagabc",
"witness_storageaccount_name": "devweeusap01witnessabc"
}
}
Los nombres del almacén de claves deben ser únicos en Azure. SAP Deployment Automation Framework anexa tres caracteres aleatorios (abc en el ejemplo) al final del nombre del almacén de claves para reducir la probabilidad de conflictos de nombres.
Nombres de las máquinas virtuales
Los nombres de las máquinas virtuales se definen en la virtualmachine_names
estructura . Se pueden proporcionar tanto los nombres del equipo como los de la máquina virtual.
En el ejemplo siguiente se enumeran los nombres de máquina virtual de una implementación en el DEV
entorno de Oeste de Europa. La implementación tiene un servidor de bases de datos, dos servidores de aplicaciones, un servidor de servicios centrales y un distribuidor web.
"virtualmachine_names": {
"ANCHOR_COMPUTERNAME": [],
"ANCHOR_SECONDARY_DNSNAME": [],
"ANCHOR_VMNAME": [],
"ANYDB_COMPUTERNAME": [
"x00db00l0abc"
],
"ANYDB_SECONDARY_DNSNAME": [
"x00dhdb00l0abc",
"x00dhdb00l1abc"
],
"ANYDB_VMNAME": [
"x00db00l0abc"
],
"APP_COMPUTERNAME": [
"x00app00labc",
"x00app01labc"
],
"APP_SECONDARY_DNSNAME": [
"x00app00labc",
"x00app01labc"
],
"APP_VMNAME": [
"x00app00labc",
"x00app01labc"
],
"DEPLOYER": [
"devweeudeploy00"
],
"HANA_COMPUTERNAME": [
"x00dhdb00l0af"
],
"HANA_SECONDARY_DNSNAME": [
"x00dhdb00l0abc"
],
"HANA_VMNAME": [
"x00dhdb00l0abc"
],
"ISCSI_COMPUTERNAME": [
"devsap01weeuiscsi00"
],
"OBSERVER_COMPUTERNAME": [
"x00observer00labc"
],
"OBSERVER_VMNAME": [
"x00observer00labc"
],
"SCS_COMPUTERNAME": [
"x00scs00labc"
],
"SCS_SECONDARY_DNSNAME": [
"x00scs00labc"
],
"SCS_VMNAME": [
"x00scs00labc"
],
"WEB_COMPUTERNAME": [
"x00web00labc"
],
"WEB_SECONDARY_DNSNAME": [
"x00web00labc"
],
"WEB_VMNAME": [
"x00web00labc"
]
}
Configuración del módulo de nomenclatura personalizado
Hay varios archivos en el módulo para asignar nombres a los recursos:
- Los nombres de máquina virtual y equipo se definen en (
vm.tf
). - La nomenclatura del grupo de recursos se define en (
resourcegroup.tf
). - Los almacenes de claves se definen en (
keyvault.tf
). - Los sufijos de recursos se definen en (
variables_local.tf
).
Los distintos nombres de recursos se identifican mediante prefijos en el código de Terraform:
- Las implementaciones del implementador de SAP usan nombres de recursos con el prefijo
deployer_
. - Las implementaciones de biblioteca sap usan nombres de recursos con el prefijo
library
. - Las implementaciones horizontales de SAP usan nombres de recursos con el prefijo
vnet_
. - Las implementaciones del sistema SAP usan nombres de recursos con el prefijo
sdu_
.
Los nombres calculados se devuelven en un diccionario de datos, que se usa en todos los módulos de Terraform.
Uso de nombres personalizados
Algunos de los nombres de recursos se pueden cambiar proporcionando parámetros en el tfvars
archivo de parámetros.
Recurso | Parámetro | Notas |
---|---|---|
Prefix |
custom_prefix |
Se usa como prefijo para todos los recursos del grupo de recursos. |
Resource group |
resourcegroup_name |
|
admin subnet name |
admin_subnet_name |
|
admin nsg name |
admin_subnet_nsg_name |
|
db subnet name |
db_subnet_name |
|
db nsg name |
db_subnet_nsg_name |
|
app subnet name |
app_subnet_name |
|
app nsg name |
app_subnet_nsg_name |
|
web subnet name |
web_subnet_name |
|
web nsg name |
web_subnet_nsg_name |
|
admin nsg name |
admin_subnet_nsg_name |
Cambio del módulo de nomenclatura
Para preparar el entorno de Terraform para la nomenclatura personalizada, primero debe crear un módulo de nomenclatura personalizado. La manera más fácil es copiar el módulo existente y realizar los cambios necesarios en el módulo copiado.
- Cree una carpeta de nivel raíz en el entorno de Terraform. Un ejemplo es
Azure_SAP_Automated_Deployment
. - Vaya a la nueva carpeta de nivel raíz.
- Clone el repositorio del marco de automatización. Este paso crea una nueva carpeta
sap-automation
. - Cree una carpeta dentro de la carpeta de nivel raíz denominada
Contoso_naming
. - Vaya a la carpeta
sap-automation
. - Consulte la rama adecuada en Git.
- Vaya a
\deploy\terraform\terraform-units\modules
dentro de lasap-automation
carpeta . - Copie la carpeta
sap_namegenerator
en la carpetaContoso_naming
.
Se llama al módulo de nomenclatura desde las carpetas raíz terraform
:
module "sap_namegenerator" {
source = "../../terraform-units/modules/sap_namegenerator"
environment = local.infrastructure.environment
location = local.infrastructure.region
codename = lower(try(local.infrastructure.codename, ""))
random_id = module.common_infrastructure.random_id
sap_vnet_name = local.vnet_logical_name
sap_sid = local.sap_sid
db_sid = local.db_sid
app_ostype = try(local.application.os.os_type, "LINUX")
anchor_ostype = upper(try(local.anchor_vms.os.os_type, "LINUX"))
db_ostype = try(local.databases[0].os.os_type, "LINUX")
db_server_count = var.database_server_count
app_server_count = try(local.application.application_server_count, 0)
web_server_count = try(local.application.webdispatcher_count, 0)
scs_server_count = local.application.scs_high_availability ? 2 * local.application.scs_server_count : local.application.scs_server_count
app_zones = local.app_zones
scs_zones = local.scs_zones
web_zones = local.web_zones
db_zones = local.db_zones
resource_offset = try(var.options.resource_offset, 0)
custom_prefix = var.custom_prefix
}
A continuación, debe apuntar los demás archivos del módulo de Terraform al módulo de nomenclatura personalizado. Estos archivos del módulo incluyen:
deploy\terraform\run\sap_system\module.tf
deploy\terraform\bootstrap\sap_deployer\module.tf
deploy\terraform\bootstrap\sap_library\module.tf
deploy\terraform\run\sap_library\module.tf
deploy\terraform\run\sap_deployer\module.tf
Para cada archivo, cambie el origen del módulo sap_namegenerator
para que apunte a la ubicación del nuevo módulo de nomenclatura. Por ejemplo:
module "sap_namegenerator" { source = "../../terraform-units/modules/sap_namegenerator"
se convierte en module "sap_namegenerator" { source = "../../../../Contoso_naming"
.
Cambio de la lógica de nomenclatura del grupo de recursos
Para cambiar la lógica de nomenclatura del grupo de recursos, vaya a la carpeta del módulo de nomenclatura personalizada (por ejemplo, Workspaces\Contoso_naming
). Después, edite el archivo resourcegroup.tf
. Modifique el código siguiente con su propia lógica de nomenclatura.
locals {
// Resource group naming
sdu_name = length(var.codename) > 0 ? (
upper(format("%s-%s-%s_%s-%s", local.env_verified, local.location_short, local.sap_vnet_verified, var.codename, var.sap_sid))) : (
upper(format("%s-%s-%s-%s", local.env_verified, local.location_short, local.sap_vnet_verified, var.sap_sid))
)
deployer_name = upper(format("%s-%s-%s", local.deployer_env_verified, local.deployer_location_short, local.dep_vnet_verified))
landscape_name = upper(format("%s-%s-%s", local.landscape_env_verified, local.location_short, local.sap_vnet_verified))
library_name = upper(format("%s-%s", local.library_env_verified, local.location_short))
// Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only. The name must be unique.
deployer_storageaccount_name = substr(replace(lower(format("%s%s%sdiag%s", local.deployer_env_verified, local.deployer_location_short, local.dep_vnet_verified, local.random_id_verified)), "/[^a-z0-9]/", ""), 0, var.azlimits.stgaccnt)
landscape_storageaccount_name = substr(replace(lower(format("%s%s%sdiag%s", local.landscape_env_verified, local.location_short, local.sap_vnet_verified, local.random_id_verified)), "/[^a-z0-9]/", ""), 0, var.azlimits.stgaccnt)
library_storageaccount_name = substr(replace(lower(format("%s%ssaplib%s", local.library_env_verified, local.location_short, local.random_id_verified)), "/[^a-z0-9]/", ""), 0, var.azlimits.stgaccnt)
sdu_storageaccount_name = substr(replace(lower(format("%s%s%sdiag%s", local.env_verified, local.location_short, local.sap_vnet_verified, local.random_id_verified)), "/[^a-z0-9]/", ""), 0, var.azlimits.stgaccnt)
terraformstate_storageaccount_name = substr(replace(lower(format("%s%stfstate%s", local.library_env_verified, local.location_short, local.random_id_verified)), "/[^a-z0-9]/", ""), 0, var.azlimits.stgaccnt)
}
Cambio de sufijos de recursos
Para cambiar los sufijos de recursos, vaya a la carpeta del módulo de nomenclatura personalizada (por ejemplo, Workspaces\Contoso_naming
). Después, edite el archivo variables_local.tf
. Modifique la siguiente asignación con sus propios sufijos de recursos.
Nota
Cambie solo los valores de la asignación. No cambie la clave de asignación que usa el código de Terraform.
Por ejemplo, si desea cambiar el nombre del componente de la interfaz de red del administrador, cambie "admin-nic" = "-admin-nic"
a "admin-nic" = "yourNICname"
.
variable resource_suffixes {
type = map(string)
description = "Extension of resource name"
default = {
"admin_nic" = "-admin-nic"
"admin_subnet" = "admin-subnet"
"admin_subnet_nsg" = "adminSubnet-nsg"
"app_alb" = "app-alb"
"app_avset" = "app-avset"
"app_subnet" = "app-subnet"
"app_subnet_nsg" = "appSubnet-nsg"
"db_alb" = "db-alb"
"db_alb_bepool" = "dbAlb-bePool"
"db_alb_feip" = "dbAlb-feip"
"db_alb_hp" = "dbAlb-hp"
"db_alb_rule" = "dbAlb-rule_"
"db_avset" = "db-avset"
"db_nic" = "-db-nic"
"db_subnet" = "db-subnet"
"db_subnet_nsg" = "dbSubnet-nsg"
"deployer_rg" = "-INFRASTRUCTURE"
"deployer_state" = "_DEPLOYER.terraform.tfstate"
"deployer_subnet" = "_deployment-subnet"
"deployer_subnet_nsg" = "_deployment-nsg"
"iscsi_subnet" = "iscsi-subnet"
"iscsi_subnet_nsg" = "iscsiSubnet-nsg"
"library_rg" = "-SAP_LIBRARY"
"library_state" = "_SAP-LIBRARY.terraform.tfstate"
"kv" = ""
"msi" = "-msi"
"nic" = "-nic"
"osdisk" = "-OsDisk"
"pip" = "-pip"
"ppg" = "-ppg"
"sapbits" = "sapbits"
"storage_nic" = "-storage-nic"
"storage_subnet" = "_storage-subnet"
"storage_subnet_nsg" = "_storageSubnet-nsg"
"scs_alb" = "scs-alb"
"scs_alb_bepool" = "scsAlb-bePool"
"scs_alb_feip" = "scsAlb-feip"
"scs_alb_hp" = "scsAlb-hp"
"scs_alb_rule" = "scsAlb-rule_"
"scs_avset" = "scs-avset"
"scs_ers_feip" = "scsErs-feip"
"scs_ers_hp" = "scsErs-hp"
"scs_ers_rule" = "scsErs-rule_"
"scs_scs_rule" = "scsScs-rule_"
"sdu_rg" = ""
"tfstate" = "tfstate"
"vm" = ""
"vnet" = "-vnet"
"vnet_rg" = "-INFRASTRUCTURE"
"web_alb" = "web-alb"
"web_alb_bepool" = "webAlb-bePool"
"web_alb_feip" = "webAlb-feip"
"web_alb_hp" = "webAlb-hp"
"web_alb_inrule" = "webAlb-inRule"
"web_avset" = "web-avset"
"web_subnet" = "web-subnet"
"web_subnet_nsg" = "webSubnet-nsg"
}
}