자동화 프레임워크에 대한 사용자 지정 명명 구성
SAP 배포 자동화 프레임워크는 Azure 리소스 명명에 대한 표준 명명 규칙을 사용합니다.
Terraform 모듈 sap_namegenerator
은 자동화 프레임워크가 배포하는 모든 리소스의 이름을 정의합니다. 모듈은 리포지토리의 /deploy/terraform/terraform-units/modules/sap_namegenerator/
에 있습니다. 프레임워크는 또한 매개 변수 파일을 사용하여 일부 리소스에 대한 고유한 이름 제공을 지원합니다.
리소스 이름 지정은 다음 형식을 사용합니다.
리소스 접두사 + resource_group_prefix + 구분 기호 + 리소스 이름 + 리소스 접미사입니다.
이러한 기능이 충분하지 않은 경우 리소스 이름이 포함된 사용자 지정 JSON 파일을 제공하거나 자동화에서 사용되는 명명 모듈을 수정하여 사용자 지정 명명 논리를 사용할 수도 있습니다.
JSON 파일을 사용하여 이름 재정의 제공
name_override_file
매개 변수를 사용하여 tfvars
매개 변수 파일에 사용자 지정 명명 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 배포 자동화 프레임워크는 이름 충돌 가능성을 줄이기 위해 키 자격 증명 모음 이름 끝에 임의의 문자 3개(예: ABC)를 추가합니다.
private_access
이름은 현재 사용되지 않습니다.
Storage 계정 이름
스토리지 계정의 이름은 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 배포 자동화 프레임워크는 이름 충돌 가능성을 줄이기 위해 키 자격 증명 모음 이름 끝에 임의의 문자 3개(예: abc)를 추가합니다.
가상 머신 이름
가상 머신의 이름은 virtualmachine_names
구조에 정의됩니다. 컴퓨터와 가상 머신 이름을 모두 제공할 수 있습니다.
다음 예에서는 서유럽의 DEV
환경에 배포하기 위한 가상 머신 이름을 나열합니다. 배포에는 데이터베이스 서버, 두 개의 애플리케이션 서버, 중앙 서비스 서버 및 웹 디스패처가 있습니다.
"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에서 해당 브랜치를 체크 아웃합니다.
sap-automation
폴더 내의\deploy\terraform\terraform-units\modules
로 이동합니다.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"
}
}