你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为自动化框架配置自定义命名
SAP 部署自动化框架 使用标准命名约定进行 Azure 资源命名。
Terraform 模块 sap_namegenerator
定义自动化框架部署的所有资源的名称。 在存储库中,此模块位于 /deploy/terraform/terraform-units/modules/sap_namegenerator/
中。 该框架还支持使用 参数文件为某些资源提供自己的名称。
资源的命名使用以下格式:
资源前缀 + resource_group_prefix + 分隔符 + 资源名称 + 资源后缀。
如果这些功能不够,还可以通过提供包含资源名称的自定义 JSON 文件或修改自动化使用的命名模块来使用自定义命名逻辑。
使用 JSON 文件提供名称替代
可以使用参数在 tfvars
参数文件中 name_override_file
指定自定义命名 JSON 文件。
JSON 文件包含不同资源类型的节。
部署类型为:
- DEPLOYER (控制平面)
- SDU (SAP 系统基础结构)
- WORKLOAD_ZONE (工作负荷区域)
可用性集名称
可用性集的名称在结构中 availabilityset_names
定义。 以下示例列出了部署的可用性集名称。
"availabilityset_names" : {
"app": "app-avset",
"db" : "db-avset",
"scs": "scs-avset",
"web": "web-avset"
}
密钥保管库名称
密钥保管库的名称在结构中 keyvault_names
定义。 以下示例列出了西欧环境中部署的 DEV
密钥保管库名称。
"keyvault_names": {
"DEPLOYER": {
"private_access": "DEVWEEUprvtABC",
"user_access": "DEVWEEUuserABC"
},
"SDU": {
"private_access": "DEVWEEUSAP01X00pABC",
"user_access": "DEVWEEUSAP01X00uABC"
},
"WORKLOAD_ZONE": {
"private_access": "DEVWEEUSAP01prvtABC",
"user_access": "DEVWEEUSAP01userABC"
}
}
密钥保管库名称需要在 Azure 中是唯一的。 SAP 部署自动化框架在密钥保管库名称末尾追加三个随机字符(示例中的 ABC),以减少名称冲突的可能性。
private_access
当前不使用名称。
存储帐户名称
存储帐户的名称在结构中 storageaccount_names
定义。 以下示例列出了西欧环境中部署的 DEV
存储帐户名称。
"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"
}
}
密钥保管库名称需要在 Azure 中是唯一的。 SAP 部署自动化框架在密钥保管库名称末尾追加三个随机字符 (abc in the example),以减少名称冲突的可能性。
虚拟机名称
虚拟机的名称在结构中 virtualmachine_names
定义。 可以提供计算机和虚拟机的名称。
以下示例列出了西欧环境中部署的 DEV
虚拟机名称。 部署有数据库服务器、两个应用程序服务器、一个中央服务服务器和一个 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"
]
}
配置自定义命名模块
模块中有多个用于命名资源的文件:
- 虚拟机和计算机名称在 (
vm.tf
) 中定义。 - 资源组命名在 (
resourcegroup.tf
) 中定义。 - 密钥保管库在 (
keyvault.tf
) 中定义。 - 资源后缀在 (
variables_local.tf
) 中定义。
不同的资源名称由 Terraform 代码中的前缀标识:
- SAP 部署程序部署使用前缀的资源
deployer_
名称。 - SAP 库部署使用前缀的资源
library
名称。 - SAP 横向部署使用前缀的资源
vnet_
名称。 - SAP 系统部署使用前缀的资源
sdu_
名称。
计算名称在数据字典中返回,该字典由所有 Terraform 模块使用。
使用自定义名称
可以通过在 tfvars
参数文件中提供参数来更改某些资源名称。
资源 | 参数 | 说明 |
---|---|---|
Prefix |
custom_prefix |
用作资源组中所有资源的前缀 |
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 |
更改命名模块
若要为自定义命名准备 Terraform 环境,首先需要创建自定义命名模块。 最简单的方法是复制现有模块,然后在复制的模块中进行所需的更改。
- 在 Terraform 环境中创建根级文件夹。 示例为
Azure_SAP_Automated_Deployment
。 - 转到新的根级别文件夹。
- 克隆自动化框架存储库。 此步骤将创建一个新文件夹
sap-automation
。 - 在名为
Contoso_naming
的根级文件夹中创建一个文件夹。 - 转到
sap-automation
文件夹。 - 查看 Git 中的相应分支。
- 转到
\deploy\terraform\terraform-units\modules
文件夹中sap-automation
。 - 将文件夹
sap_namegenerator
复制到Contoso_naming
文件夹。
从根 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
}
接下来,需要将其他 Terraform 模块文件指向自定义命名模块。 这些模块文件包括:
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
对于每个文件,将模块 sap_namegenerator
的源更改为指向新命名模块的位置。 例如:
module "sap_namegenerator" { source = "../../terraform-units/modules/sap_namegenerator"
变为 module "sap_namegenerator" { source = "../../../../Contoso_naming"
。
更改资源组命名逻辑
若要更改资源组的命名逻辑,请转到自定义命名模块文件夹(例如, Workspaces\Contoso_naming
)。 然后,编辑文件 resourcegroup.tf
。 使用自己的命名逻辑修改以下代码。
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)
}
更改资源后缀
若要更改资源后缀,请转到自定义命名模块文件夹(例如)。 Workspaces\Contoso_naming
然后,编辑文件 variables_local.tf
。 使用自己的资源后缀修改以下映射。
注意
仅更改映射值。 请勿更改 Terraform 代码使用的映射键。
例如,如果想要重命名管理员网络接口组件,请将 "admin-nic" = "-admin-nic"
更改为 "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"
}
}