تكوين التسمية المخصصة لإطار عمل التشغيل التلقائي

يستخدم SAP Deployment Automation Framework اصطلاح تسمية قياسي لتسمية موارد Azure.

وحدة Terraform تحدد أسماء sap_namegenerator جميع الموارد التي ينشرها إطار عمل الأتمتة. توجد الوحدة في /deploy/terraform/terraform-units/modules/sap_namegenerator/ بالمستودع. يدعم إطار العمل أيضا توفير الأسماء الخاصة بك لبعض الموارد باستخدام ملفات المعلمات.

تسمية الموارد تستخدم التنسيق التالي:

بادئة المورد + resource_group_prefix + فاصل + اسم مورد + لاحقة مورد.

إذا لم تكن هذه الإمكانات كافية، يمكنك أيضا استخدام منطق تسمية مخصص إما عن طريق توفير ملف JSON مخصص يحتوي على أسماء الموارد أو عن طريق تعديل وحدة التسمية المستخدمة من قبل التنفيذ التلقائي.

توفير تجاوزات الاسم باستخدام ملف JSON

يمكنك تحديد ملف JSON مخصص للتسمية في tfvars ملف المعلمة باستخدام المعلمة 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 بثلاثة أحرف عشوائية (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_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"

  }
}

الخطوة التالية