Konfigurowanie niestandardowego nazewnictwa dla platformy automatyzacji

Platforma SAP Deployment Automation Framework używa standardowej konwencji nazewnictwa zasobów platformy Azure.

Moduł Terraform sap_namegenerator definiuje nazwy wszystkich zasobów wdrażanych przez platformę automatyzacji. Moduł znajduje się /deploy/terraform/terraform-units/modules/sap_namegenerator/ w repozytorium. Platforma obsługuje również podawanie własnych nazw niektórych zasobów przy użyciu plików parametrów.

Nazewnictwo zasobów używa następującego formatu:

prefiks zasobu + resource_group_prefix + separator + nazwa zasobu + sufiks zasobu.

Jeśli te możliwości nie są wystarczające, możesz również użyć niestandardowej logiki nazewnictwa, podając niestandardowy plik JSON zawierający nazwy zasobów lub modyfikując moduł nazewnictwa używany przez automatyzację.

Podaj przesłonięcia nazw przy użyciu pliku JSON

Niestandardowy plik JSON nazewnictwa można określić w tfvars pliku parametrów przy użyciu parametru name_override_file .

Plik JSON zawiera sekcje dla różnych typów zasobów.

Typy wdrożeń to:

  • DEPLOYER (płaszczyzna sterowania)
  • SDU (infrastruktura systemu SAP)
  • WORKLOAD_ZONE (strefa obciążenia)

Nazwy zestawów dostępności

Nazwy zestawów dostępności są zdefiniowane w availabilityset_names strukturze. W poniższym przykładzie wymieniono nazwy zestawów dostępności dla wdrożenia.

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

Nazwy magazynów kluczy

Nazwy magazynów kluczy są definiowane w keyvault_names strukturze. W poniższym przykładzie wymieniono nazwy magazynów kluczy dla wdrożenia w DEV środowisku w regionie Europa Zachodnia.

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

Nazwy magazynów kluczy muszą być unikatowe na platformie Azure. Struktura SAP Deployment Automation Framework dołącza trzy losowe znaki (ABC w przykładzie) na końcu nazwy magazynu kluczy, aby zmniejszyć prawdopodobieństwo konfliktów nazw.

Nazwy private_access nie są obecnie używane.

Nazwy kont magazynu

Nazwy kont magazynu są zdefiniowane w storageaccount_names strukturze. W poniższym przykładzie wymieniono nazwy kont magazynu dla wdrożenia w DEV środowisku w regionie Europa Zachodnia.

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

Nazwy magazynów kluczy muszą być unikatowe na platformie Azure. Platforma SAP Deployment Automation Framework dołącza trzy losowe znaki (abc w przykładzie) na końcu nazwy magazynu kluczy, aby zmniejszyć prawdopodobieństwo konfliktów nazw.

Nazwy maszyn wirtualnych

Nazwy maszyn wirtualnych są zdefiniowane w virtualmachine_names strukturze. Można podać nazwy komputerów i maszyn wirtualnych.

W poniższym przykładzie wymieniono nazwy maszyn wirtualnych dla wdrożenia w DEV środowisku w regionie Europa Zachodnia. Wdrożenie ma serwer bazy danych, dwa serwery aplikacji, serwer usług centralnych i dyspozytor internetowy.

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

Konfigurowanie niestandardowego modułu nazewnictwa

Istnieje wiele plików w module nazewnictwa zasobów:

  • Nazwy maszyn wirtualnych i komputerów są zdefiniowane w pliku (vm.tf).
  • Nazewnictwo grup zasobów jest definiowane w pliku (resourcegroup.tf).
  • Magazyny kluczy są zdefiniowane w pliku (keyvault.tf).
  • Sufiksy zasobów są definiowane w elemencie (variables_local.tf).

Różne nazwy zasobów są identyfikowane przez prefiksy w kodzie programu Terraform:

  • Wdrożenia programu SAP Deployer używają nazw zasobów z prefiksem deployer_.
  • Wdrożenia bibliotek SAP używają nazw zasobów z prefiksem library.
  • Wdrożenia poziome sap używają nazw zasobów z prefiksem vnet_.
  • Wdrożenia systemu SAP używają nazw zasobów z prefiksem sdu_.

Nazwy obliczeniowe są zwracane w słowniku danych, który jest używany przez wszystkie moduły programu Terraform.

Używanie nazw niestandardowych

Niektóre nazwy zasobów można zmienić, podając parametry w pliku parametrów tfvars .

Zasób Parametr Uwagi
Prefix custom_prefix Używany jako prefiks dla wszystkich zasobów w grupie zasobów
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

Zmienianie modułu nazewnictwa

Aby przygotować środowisko terraform do nazewnictwa niestandardowego, najpierw należy utworzyć niestandardowy moduł nazewnictwa. Najprostszym sposobem jest skopiowanie istniejącego modułu i wprowadzenie wymaganych zmian w skopiowanych modułach.

  1. Utwórz folder na poziomie głównym w środowisku programu Terraform. Może to być na przykład Azure_SAP_Automated_Deployment.
  2. Przejdź do nowego folderu na poziomie głównym.
  3. Sklonuj repozytorium struktury automatyzacji. W tym kroku zostanie utworzony nowy folder sap-automation.
  4. Utwórz folder w folderze na poziomie głównym o nazwie Contoso_naming.
  5. Przejdź do folderu sap-automation.
  6. Zapoznaj się z odpowiednią gałęzią w usłudze Git.
  7. Przejdź do \deploy\terraform\terraform-units\modulessap-automation folderu .
  8. Skopiuj folder sap_namegenerator do Contoso_naming folderu .

Moduł nazewnictwa jest wywoływany z folderów głównych 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
}

Następnie należy wskazać inne pliki modułów programu Terraform do niestandardowego modułu nazewnictwa. Te pliki modułów obejmują:

  • 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

Dla każdego pliku zmień źródło modułu sap_namegenerator , aby wskazywało lokalizację nowego modułu nazewnictwa. Przykład:

module "sap_namegenerator" { source = "../../terraform-units/modules/sap_namegenerator"staje się .module "sap_namegenerator" { source = "../../../../Contoso_naming"

Zmienianie logiki nazewnictwa grup zasobów

Aby zmienić logikę nazewnictwa grupy zasobów, przejdź do niestandardowego folderu modułu nazewnictwa (na przykład Workspaces\Contoso_naming). Następnie zmodyfikuj plik resourcegroup.tf. Zmodyfikuj następujący kod przy użyciu własnej logiki nazewnictwa.

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)

}

Zmienianie sufiksów zasobów

Aby zmienić sufiksy zasobów, przejdź do niestandardowego folderu modułu nazewnictwa (na przykład Workspaces\Contoso_naming). Następnie zmodyfikuj plik variables_local.tf. Zmodyfikuj poniższą mapę przy użyciu własnych sufiksów zasobów.

Uwaga

Zmień tylko wartości mapy. Nie zmieniaj klucza mapy, którego używa kod programu Terraform. Jeśli na przykład chcesz zmienić nazwę składnika interfejsu sieciowego administratora, zmień wartość "admin-nic" = "-admin-nic" na "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"

  }
}

Następny krok