Condividi tramite


Configurare la denominazione personalizzata per SAP Deployment Automation Framework

SAP Deployment Automation Framework usa una convenzione di denominazione standard per le risorse di Azure distribuite. Se i nomi predefiniti non corrispondono agli standard di denominazione dell'organizzazione o se è necessario evitare conflitti di denominazione tra sottoscrizioni di Azure, è possibile eseguirne l'override con i propri nomi.

Questo articolo illustra come fornire nomi di risorse personalizzati usando un file di override JSON o modificando direttamente il modulo di denominazione Terraform.

Prerequisiti

Fornire ridefinizioni dei nomi utilizzando un file JSON

Il modulo sap_namegenerator Terraform definisce i nomi di tutte le risorse distribuite dal framework. Il modulo si trova /deploy/terraform/terraform-units/modules/sap_namegenerator/ nel repository. Il framework supporta anche la fornitura di nomi personalizzati per alcune delle risorse usando i file di parametri.

La denominazione delle risorse usa il formato seguente:

resource prefix + resource_group_prefix + separator + resource name + resource suffix.

È possibile specificare un file JSON di denominazione personalizzato nel tfvars file di parametri usando il name_override_file parametro .

Il file JSON include sezioni per i diversi tipi di risorse.

I tipi di distribuzione sono:

  • DEPLOYER (piano di controllo)
  • SDU (infrastruttura di sistema SAP)
  • WORKLOAD_ZONE (zona del carico di lavoro)

Definire i nomi dei set di disponibilità

I nomi dei set di disponibilità sono definiti nella availabilityset_names struttura. Nell'esempio seguente vengono illustrati i nomi dei set di disponibilità per una distribuzione.

  "availabilityset_names" : {
        "app": "app-avset",
        "db" : "db-avset",
        "scs": "scs-avset",
        "web": "web-avset"
    }

Definire i nomi del key vault

I nomi dell'insieme di chiavi sono definiti nella keyvault_names struttura. L'esempio seguente mostra i nomi del Key Vault per una distribuzione nell'ambiente DEV in Europa Occidentale.

"keyvault_names": {
        "DEPLOYER": {
            "private_access": "DEVWEEUprvtABC",
            "user_access": "DEVWEEUuserABC"
        },
        "SDU": {
            "private_access": "DEVWEEUSAP01X00pABC",
            "user_access": "DEVWEEUSAP01X00uABC"
        },
        "WORKLOAD_ZONE": {
            "private_access": "DEVWEEUSAP01prvtABC",
            "user_access": "DEVWEEUSAP01userABC"
        }
    }

I nomi dell'insieme di chiavi devono essere univoci in tutto Azure. SAP Deployment Automation Framework aggiunge tre caratteri casuali (ABC nell'esempio) alla fine del nome del key vault per ridurre la probabilità di conflitti di denominazione.

I private_access nomi non vengono usati.

Definire i nomi degli account di archiviazione

I nomi degli account di archiviazione sono definiti nella storageaccount_names struttura. L'esempio seguente mostra i nomi degli account di archiviazione per una distribuzione nell'ambiente DEV in Europa occidentale.

"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"
        }
    }

I nomi degli account di archiviazione devono essere univoci in Azure. SAP Deployment Automation Framework aggiunge tre caratteri casuali (abc nell'esempio) alla fine del nome dell'account di archiviazione per ridurre la probabilità di conflitti di nomi.

Definire i nomi delle macchine virtuali

I nomi delle macchine virtuali sono definiti nella virtualmachine_names struttura. È possibile specificare sia il nome del computer che il nome della macchina virtuale.

L'esempio seguente mostra i nomi delle macchine virtuali per una distribuzione nell'ambiente DEV in Europa occidentale. La distribuzione include un server di database, due server applicazioni, un server servizi centrali e un dispatcher 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"
        ]
    }

Configurare il modulo di denominazione personalizzato

Il modulo contiene più file per la denominazione delle risorse:

  • I nomi delle macchine virtuali e dei computer sono definiti in vm.tf.
  • La denominazione dei gruppi di risorse è definita in resourcegroup.tf.
  • Gli insiemi di credenziali delle chiavi sono definiti in keyvault.tf.
  • I suffissi delle risorse sono definiti in variables_local.tf.

I prefissi seguenti nel codice Terraform identificano i nomi delle risorse:

  • Le distribuzioni del deployer SAP usano nomi di risorse con il prefisso deployer_.
  • Le distribuzioni di librerie SAP usano nomi di risorse con il prefisso library.
  • Le distribuzioni orizzontale di SAP usano nomi di risorse con il prefisso vnet_.
  • Le distribuzioni di sistema SAP usano nomi di risorse con il prefisso sdu_.

I nomi calcolati vengono restituiti in un dizionario dati, che viene usato da tutti i moduli Terraform.

Usare nomi personalizzati

È possibile modificare alcuni nomi di risorse specificando i parametri nel file di tfvars parametri.

Conto risorse Parametro Note
Prefix custom_prefix Usato come prefisso per tutte le risorse nel gruppo di risorse
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

Modificare il modulo di denominazione

Per preparare l'ambiente Terraform per la denominazione personalizzata, creare un modulo di denominazione personalizzato. Il modo più semplice consiste nel copiare il modulo esistente e apportare le modifiche necessarie nel modulo copiato.

  1. Creare una cartella a livello radice nell'ambiente Terraform. Ad esempio: Azure_SAP_Automated_Deployment.
  2. Passare alla nuova cartella a livello di radice.
  3. Clona il repository del framework di automazione. Questo passaggio crea una nuova cartella sap-automation.
  4. Creare una cartella all'interno della cartella a livello radice denominata Contoso_naming.
  5. Passare alla cartella sap-automation.
  6. Vedere il ramo appropriato in Git.
  7. Vai a \deploy\terraform\terraform-units\modules nella cartella sap-automation.
  8. Copiare la cartella sap_namegenerator nella Contoso_naming cartella .

Il modulo di denominazione viene chiamato dalle cartelle radice 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
}

Indirizzare quindi gli altri file di moduli Terraform al vostro modulo di denominazione personalizzato. Questi file di modulo includono:

  • 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

Per ogni file, modificare l'origine del modulo sap_namegenerator in modo che punti al percorso del nuovo modulo di gestione dei nomi. Per esempio:

module "sap_namegenerator" { source = "../../terraform-units/modules/sap_namegenerator" diventa module "sap_namegenerator" { source = "../../../../Contoso_naming".

Modificare la logica di denominazione del gruppo di risorse

Per modificare la logica di denominazione del gruppo di risorse:

  1. Vai alla cartella del modulo di denominazione personalizzata (ad esempio Workspaces\Contoso_naming).
  2. Apri il file resourcegroup.tf.
  3. Modificare il codice seguente con la logica di denominazione personalizzata:
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)

}

Modificare i suffissi delle risorse

Per modificare i suffissi delle risorse:

  1. Vai alla cartella del modulo di denominazione personalizzata, ad esempio Workspaces\Contoso_naming.
  2. Apri il file variables_local.tf.
  3. Modificare la mappa seguente con i suffissi di risorse personalizzati.

Annotazioni

Modificare solo i valori della mappa. Non modificare la chiave della mappa usata dal codice Terraform. Ad esempio, se si vuole rinominare il componente dell'interfaccia di rete dell'amministratore, passare "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"

  }
}