Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
SAP Deployment Automation Framework usa una convención de nomenclatura estándar para los recursos de Azure que implementa. Si los nombres predeterminados no coinciden con los estándares de nomenclatura de la organización o si necesita evitar conflictos de nomenclatura en las suscripciones de Azure, puede invalidarlos con sus propios nombres.
En este artículo se muestra cómo proporcionar nombres de recursos personalizados mediante un archivo de invalidación JSON o modificando directamente el módulo de nomenclatura de Terraform.
Prerrequisitos
- Una suscripción a Azure. Si no tiene una suscripción, cree una cuenta gratuita.
- Terraform instalado en el equipo local.
- Git instalado en el equipo local.
- Acceso al repositorio de SAP Deployment Automation Framework.
- Familiaridad con la sintaxis JSON y Terraform HCL.
Proporcionar invalidaciones de nombre mediante un archivo JSON
El módulo sap_namegenerator de Terraform define los nombres de todos los recursos que implementa el marco. El módulo se encuentra en /deploy/terraform/terraform-units/modules/sap_namegenerator/ el repositorio. 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 recursos usa el siguiente formato:
resource prefix + resource_group_prefix + separator + resource name + resource suffix.
Puede especificar un archivo JSON de nomenclatura personalizado en el archivo de parámetros tfvars usando el parámetro name_override_file.
El archivo JSON tiene secciones para los distintos tipos de recursos.
Los tipos de implementación son:
- IMPLEMENTADOR (plano de control)
- SDU (infraestructura del sistema SAP)
- WORKLOAD_ZONE (zona de carga de trabajo)
Definición de nombres de conjuntos de disponibilidad
Los nombres del conjunto de disponibilidad se definen en la estructura availabilityset_names. En el siguiente ejemplo se indican los nombres de conjuntos de disponibilidad en una implementación.
"availabilityset_names" : {
"app": "app-avset",
"db" : "db-avset",
"scs": "scs-avset",
"web": "web-avset"
}
Definir nombres de almacén de claves
Los nombres de almacenes de claves vienen definidos en la estructura keyvault_names. En el ejemplo siguiente se indican los nombres de los almacenes de claves de una implementación en el entorno DEV en la región 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.
Los private_access nombres no se utilizan.
Definición de nombres de cuenta de almacenamiento
Los nombres de cuenta de almacenamiento se definen en la storageaccount_names estructura . En el ejemplo siguiente se muestran los nombres de cuenta de almacenamiento de una implementación en el entorno DEV en Europa Occidental.
"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 de cuenta de almacenamiento deben ser únicos en Azure. SAP Deployment Automation Framework anexa tres caracteres aleatorios (abc en el ejemplo) al final del nombre de la cuenta de almacenamiento para reducir la probabilidad de conflictos de nombres.
Definición de nombres de máquina virtual
Los nombres de máquina virtual se definen en la virtualmachine_names estructura. Puede proporcionar el nombre del equipo y el nombre de la máquina virtual.
En el ejemplo siguiente se muestran los nombres de máquina virtual para 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
El módulo contiene varios archivos 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 siguientes prefijos en el código de Terraform identifican los nombres de recursos:
- Las implementaciones del implementador de SAP usan nombres de recursos con el prefijo
deployer_. - Las implementaciones de la biblioteca SAP utilizan 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
Puede cambiar algunos nombres de recursos 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 |
Cambio del módulo de nomenclatura
Para preparar el entorno de Terraform para la nomenclatura personalizada, cree 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. Por ejemplo:
Azure_SAP_Automated_Deployment. - Vaya a la nueva carpeta de nivel raíz.
- Clona 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\modulesdentro de lasap-automationcarpeta . - Copie la carpeta
sap_namegeneratoren laContoso_namingcarpeta .
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, conecte los demás archivos del módulo de Terraform al módulo de estandarización de nombres. Estos archivos de módulo incluyen:
deploy\terraform\run\sap_system\module.tfdeploy\terraform\bootstrap\sap_deployer\module.tfdeploy\terraform\bootstrap\sap_library\module.tfdeploy\terraform\run\sap_library\module.tfdeploy\terraform\run\sap_deployer\module.tf
Para cada archivo, cambie el origen del módulo sap_namegenerator para que apunte a la nueva ubicación del 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). - Abra 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). - Abra el archivo
variables_local.tf. - Modifique el siguiente mapa con sus propios sufijos de recursos.
Nota:
Solo cambie los valores del mapa. No cambie la clave del mapa, que utiliza el código de Terraform.
Por ejemplo, si desea cambiar el nombre del componente de interfaz de red de 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"
}
}