다음을 통해 공유


자동화 프레임워크에 대한 사용자 지정 이름 지정 구성

SAP Deployment Automation Framework 는 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 Deployment Automation Framework는 이름 충돌 가능성을 줄이기 위해 키 자격 증명 모음 이름의 끝에 세 개의 임의의 문자(예제의 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 Deployment Automation Framework는 이름 충돌 가능성을 줄이기 위해 키 자격 증명 모음 이름의 끝에 임의의 세 문자(예: '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 환경을 준비하려면 먼저 사용자 지정 명명 모듈을 만들어야 합니다. 가장 쉬운 방법은 기존 모듈을 복사하고 복사한 모듈에서 필요한 변경을 수행하는 것입니다.

  1. Terraform 환경에서 루트 수준 폴더를 만듭니다. 예제는 Azure_SAP_Automated_Deployment입니다.
  2. 새 루트 수준 폴더로 이동합니다.
  3. 자동화 프레임워크 리포지토리를 복제합니다. 이 단계에서는 새 폴더 sap-automation를 만듭니다.
  4. 루트 수준 폴더 내에 .라는 Contoso_naming폴더를 만듭니다.
  5. sap-automation 폴더로 이동합니다.
  6. Git에서 적절한 브랜치를 체크아웃합니다.
  7. \deploy\terraform\terraform-units\modules 폴더 내의 sap-automation로 이동하세요.
  8. 폴더 sap_namegeneratorContoso_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"

  }
}

다음 단계