オートメーション フレームワークのカスタム名前付けを構成する

SAP Deployment Automation Framework では 、Azure リソースの名前付けに標準の 名前付け規則が使用されます

Terraform モジュール sap_namegenerator は、オートメーション フレームワークがデプロイするすべてのリソースの名前を定義します。 このモジュールはリポジトリ内の /deploy/terraform/terraform-units/modules/sap_namegenerator/ にあります。 フレームワークでは、 パラメーター ファイルを使用して、一部のリソースに独自の名前を指定することもできます。

リソースの名前付けには、次の形式が使用されます。

リソース プレフィックス + resource_group_prefix + 区切り + リソース名 + リソース サフィックス。

これらの機能が十分でない場合は、リソース名を含むカスタム JSON ファイルを指定するか、自動化によって使用される名前付けモジュールを変更することで、カスタム名前付けロジックを使用することもできます。

JSON ファイルを使用して名前のオーバーライドを指定する

パラメーターを使用して、パラメーター ファイルに tfvars カスタム名前付け JSON ファイルを name_override_file 指定できます。

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 は、キー コンテナー名の末尾に 3 つのランダム文字 (例では 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 は、キー コンテナー名の末尾に 3 つのランダム文字 (例では abc) を追加して、名前の競合の可能性を減らします。

仮想マシン名

仮想マシンの名前は、 構造体で virtualmachine_names 定義されます。 コンピューター名と仮想マシン名の両方を指定できます。

次の例では、西ヨーロッパの環境でのデプロイの仮想マシン名の一覧を DEV 示します。 デプロイには、データベース サーバー、2 つのアプリケーション サーバー、中央サービス サーバー、および 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 パラメーターを指定することで変更できます。

リソース パラメーター Notes
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\modulessap-automation移動します。
  8. 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 を編集します。 独自のリソース サフィックスを使用して、次のマップを変更します。

Note

マップのを変更するだけです。 マップ キーは変更しないでください。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"

  }
}

次のステップ