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.

  1. Cree una carpeta de nivel raíz en el entorno de Terraform. Un ejemplo es Azure_SAP_Automated_Deployment.
  2. Vaya a la nueva carpeta de nivel raíz.
  3. Clone 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 carpeta Contoso_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"

  }
}

Paso siguiente