Configuración de la nomenclatura personalizada para SAP Deployment Automation Framework

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

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.

  1. Cree una carpeta de nivel raíz en el entorno de Terraform. Por ejemplo: Azure_SAP_Automated_Deployment.
  2. Vaya a la nueva carpeta de nivel raíz.
  3. Clona el repositorio del marco de automatización. Este paso crea una nueva carpeta sap-automation.
  4. Cree una carpeta dentro de la carpeta de nivel raíz denominada Contoso_naming.
  5. Vaya a la carpeta sap-automation.
  6. Consulte la rama adecuada en Git.
  7. Vaya a \deploy\terraform\terraform-units\modules dentro de la sap-automation carpeta .
  8. Copie la carpeta sap_namegenerator en la Contoso_naming carpeta .

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.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 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:

  1. Vaya a la carpeta del módulo de nomenclatura personalizada (por ejemplo, Workspaces\Contoso_naming).
  2. Abra el archivo resourcegroup.tf .
  3. 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:

  1. Vaya a la carpeta del módulo de nomenclatura personalizada (por ejemplo, Workspaces\Contoso_naming).
  2. Abra el archivo variables_local.tf .
  3. 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"

  }
}