تكوين التحجيم التلقائي باستخدام Azure PowerShell

يضمن التحجيم التلقائي أن لديك الكمية المناسبة من الموارد قيد التشغيل للتعامل مع الحمل المتقلب للتطبيق الخاص بك. يمكنك تكوين التحجيم التلقائي باستخدام مدخل Azure أو Azure CLI أو Azure PowerShell أو قوالب ARM أو Bicep.

توضح هذه المقالة كيفية تكوين التحجيم التلقائي لمجموعة مقياس الجهاز الظاهري باستخدام PowerShell. تستخدم التكوينات الخطوات التالية:

  • إنشاء مجموعة مقياس يمكنك تحجيمها تلقائيا.
  • إنشاء قواعد لتوسيع نطاقها وتوسيع نطاقها.
  • إنشاء ملف تعريف يستخدم القواعد الخاصة بك.
  • تطبيق إعدادات التحجيم التلقائي.
  • قم بتحديث إعدادات التحجيم التلقائي باستخدام الإعلامات.

المتطلبات الأساسية

لتكوين التحجيم التلقائي باستخدام PowerShell، تحتاج إلى حساب Azure مع اشتراك نشط. يمكنك إنشاء حساب مجانًا.

إعداد بيئتك

ملحوظة

قم بتشغيل الأمثلة في نفس جلسة عمل PowerShell مع تحديد اشتراكك المقصود.

# Set variables
$resourceGroupName = "<ResourceGroupName>"
$vmssName = "<VirtualMachineScaleSetName>"
$autoscaleName = "<AutoscaleSettingName>"
$azureRegion = "<AzureRegion>"
$virtualNetworkName = "<VirtualNetworkName>"
$subnetName = "<SubnetName>"
$publicIpAddressName = "<PublicIpAddressName>"
$loadBalancerName = "<LoadBalancerName>"

# Get the subscription ID from the current Azure PowerShell context
$subscriptionId = (Get-AzContext).Subscription.Id

# Build virtual machine scale set resource ID
$vmssPath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$vmssProvider = "Microsoft.Compute/virtualMachineScaleSets/$vmssName"
$vmssResourceId = "$vmssPath/providers/$vmssProvider"

إنشاء مجموعة مقياس آلة افتراضية

يستخدم New-AzResourceGroup المثال Azure PowerShell التالي cmdlets وNew-AzVmss.

ملحوظة

استخدم مجموعة موارد مخصصة لهذا المثال بحيث يمكنك حذف مواردها عند الانتهاء.

ينشئ المثال عنوان IP عاما. للوصول إلى الإدارة، استخدم Azure Bastion بدلا من تعريض منافذ RDP أو SSH إلى الإنترنت.

# Create the resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location $azureRegion

# Get credentials for the virtual machine scale set
$vmCredential = Get-Credential

# Define parameters for New-AzVmss
$newAzVmssParams = @{
    ResourceGroupName   = $resourceGroupName
    Location            = $azureRegion
    VMScaleSetName      = $vmssName
    Credential          = $vmCredential
    VirtualNetworkName  = $virtualNetworkName
    SubnetName          = $subnetName
    PublicIpAddressName = $publicIpAddressName
    LoadBalancerName   = $loadBalancerName
    OrchestrationMode  = "Flexible"
}

# Create the virtual machine scale set
New-AzVmss @newAzVmssParams

إنشاء إعدادات التحجيم التلقائي

لإنشاء إعداد التحجيم التلقائي باستخدام PowerShell، اتبع التسلسل أدناه:

  1. إنشاء قواعد باستخدام New-AzAutoscaleScaleRuleObject.
  2. إنشاء ملف تعريف باستخدام New-AzAutoscaleProfileObject.
  3. إنشاء إعدادات التحجيم التلقائي باستخدام New-AzAutoscaleSetting.
  4. تحديث الإعدادات باستخدام Update-AzAutoscaleSetting.

إنشاء قواعد

إنشاء قواعد التوسيع والتوسيع، ثم إقرانها بملف تعريف.

يستخدم New-AzAutoscaleScaleRuleObject المثال Azure PowerShell التالي cmdlet.

ملحوظة

يقوم بإنشاء قاعدتين:

  • توسيع النطاق عندما تتجاوز النسبة المئوية لوحدة المعالجة المركزية 70%.
  • تحجيم عندما تكون النسبة المئوية لوحدة المعالجة المركزية أقل من 30%.
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
    MetricTriggerMetricName        = "Percentage CPU"
    MetricTriggerMetricResourceUri  = $vmssResourceId
    MetricTriggerTimeGrain          = New-TimeSpan -Minutes 1
    MetricTriggerStatistic         = "Average"
    MetricTriggerTimeWindow         = New-TimeSpan -Minutes 5
    MetricTriggerTimeAggregation    = "Average"
    MetricTriggerOperator          = "GreaterThan"
    MetricTriggerThreshold         = 70
    MetricTriggerDividePerInstance = $false
    ScaleActionDirection           = "Increase"
    ScaleActionType                = "ChangeCount"
    ScaleActionValue               = "1"
    ScaleActionCooldown            = New-TimeSpan -Minutes 5
}
$scaleOutRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams

# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
    MetricTriggerMetricName        = "Percentage CPU"
    MetricTriggerMetricResourceUri  = $vmssResourceId
    MetricTriggerTimeGrain          = New-TimeSpan -Minutes 1
    MetricTriggerStatistic         = "Average"
    MetricTriggerTimeWindow         = New-TimeSpan -Minutes 5
    MetricTriggerTimeAggregation    = "Average"
    MetricTriggerOperator          = "LessThan"
    MetricTriggerThreshold         = 30
    MetricTriggerDividePerInstance = $false
    ScaleActionDirection           = "Decrease"
    ScaleActionType                = "ChangeCount"
    ScaleActionValue               = "1"
    ScaleActionCooldown            = New-TimeSpan -Minutes 5
}
$scaleInRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams

يصف الجدول أدناه المعلمات المستخدمة في New-AzAutoscaleScaleRuleObject cmdlet.

المعلمة ‏‏الوصف‬
MetricTriggerMetricName تعيين مقياس مشغل التحجيم التلقائي
MetricTriggerMetricResourceUri تحديد المورد الذي ينتمي إليه المقياس MetricTriggerMetricName . MetricTriggerMetricResourceUri يمكن أن يكون أي مورد وليس فقط المورد الذي يتم تحجيمه. على سبيل المثال، يمكنك توسيع نطاق مجموعات مقياس الجهاز الظاهري استنادا إلى المقاييس التي تم إنشاؤها بواسطة موازن التحميل أو قاعدة البيانات أو مجموعة المقياس نفسها. MetricTriggerMetricName يجب أن يكون موجودا ل MetricTriggerMetricResourceUriالمحدد .
MetricTriggerTimeGrain تكرار أخذ العينات للمقياس الذي تراقبه القاعدة. MetricTriggerTimeGrain يجب أن تكون إحدى القيم المعرفة مسبقا للمقياس المحدد ويجب أن تتراوح بين 12 ساعة ودقيقة واحدة. على سبيل المثال، MetricTriggerTimeGrain = PT1M"* يعني أن المقاييس يتم أخذ عينات منها كل دقيقة واحدة وتجميعها باستخدام أسلوب التجميع المحدد في .MetricTriggerStatistic
MetricTriggerTimeAggregation أسلوب التجميع ضمن الفترة timeGrain. على سبيل المثال، تعني الإحصائية = "المتوسط" و timeGrain = "PT1M" أن المقاييس يتم تجميعها كل دقيقة واحدة عن طريق أخذ المتوسط.
MetricTriggerStatistic أسلوب التجميع المستخدم لتجميع المقاييس التي تم أخذ عينات منها. على سبيل المثال، يجمع TimeAggregation = "Average" المقاييس العينة عن طريق أخذ المتوسط.
MetricTriggerTimeWindow مقدار الوقت الذي يبحث فيه محرك التحجيم التلقائي مرة أخرى لتجميع المقياس. يجب أن تكون هذه القيمة أكبر من التأخير في مجموعة المقاييس، والتي تختلف حسب المورد. يجب أن يتراوح بين 5 دقائق و12 ساعة. على سبيل المثال، تعني 10 دقائق أنه في كل مرة يتم فيها تشغيل التحجيم التلقائي، فإنه يستعلم عن مقاييس للدقائق العشر الماضية. تسمح هذه الميزة لمقاييسك بالاستقرار وتتجنب التفاعل مع الارتفاعات العابرة.
MetricTriggerThreshold يحدد قيمة المقياس الذي يؤدي إلى حدث مقياس.
MetricTriggerOperator تحديد التشغيل المقارن المنطقي لاستخدامه عند تقييم قيمة المقياس.
MetricTriggerDividePerInstance عند التعيين إلى true يقسم مقياس المشغل على العدد الإجمالي للمثيلات. على سبيل المثال، إذا كان عدد الرسائل 300 وكان هناك 5 مثيلات قيد التشغيل، فإن قيمة المقياس المحسوبة هي 60 رسالة لكل مثيل. هذه الخاصية غير قابلة للتطبيق على جميع المقاييس.
ScaleActionDirection تحديد التحجيم أو التحجيم. القيم الصالحة هي Increase و Decrease.
ScaleActionType التحجيم حسب عدد معين من المثيلات، أو التحجيم إلى عدد مثيلات معين، أو التحجيم حسب النسبة المئوية لعدد المثيلات الحالية. تتضمن ChangeCountالقيم الصالحة و ExactCountو.PercentChangeCount
ScaleActionCooldown الحد الأدنى من الوقت بعد عملية المقياس التي يجب أن تمر قبل أن تكون هذه القاعدة مؤهلة لبدء إجراء مقياس آخر. يتحقق التحجيم التلقائي من تهدئة كل قاعدة بشكل مستقل. يسمح التهدئة للمقاييس بالاستقرار وتجنب الخفقان.

إنشاء ملف تعريف تحجيم تلقائي افتراضي وإقران القواعد

بعد تحديد قواعد المقياس، قم بإنشاء ملف تعريف. يحدد ملف التعريف حدود عدد المثيلات الافتراضية والعليا والدنيا والأوقات التي يمكن فيها تطبيق القواعد المقترنة.

يستخدم New-AzAutoscaleProfileObject المثال Azure PowerShell التالي cmdlet.

ملحوظة

نظرا لأن ملف التعريف هذا هو ملف تعريف افتراضي، فإنه لا يحتوي على أي معلمات جدول. يكون ملف التعريف الافتراضي نشطا في بعض الأحيان حيث لا توجد ملفات تعريف أخرى نشطة.

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name            = "default"
    CapacityDefault = "1"
    CapacityMaximum = "10"
    CapacityMinimum = "1"
    Rule            = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

يصف الجدول أدناه المعلمات المستخدمة في New-AzAutoscaleProfileObject cmdlet.

المعلمة ‏‏الوصف‬
CapacityDefault عدد المثيلات التي تكون إذا لم تكن المقاييس متاحة للتقييم. يتم استخدام الافتراضي فقط إذا كان عدد المثيلات الحالي أقل من الافتراضي.
CapacityMaximum الحد الأقصى لعدد مثيلات المورد. الحد الأقصى لعدد المثيلات مقيد بشكل أكبر بعدد الذاكرات الأساسية المتوفرة في الاشتراك.
CapacityMinimum الحد الأدنى لعدد مثيلات المورد.
FixedDateEnd وقت انتهاء ملف التعريف بتنسيق ISO 8601 ل.
FixedDateStart وقت البدء لملف التعريف بتنسيق ISO 8601.
Rule مجموعة من القواعد التي توفر المشغلات والمعلمات لإجراء التحجيم عندما يكون ملف التعريف هذا نشطا. يمكن تحديد 10 قواعد مفصولة بفواصل كحد أقصى.
RecurrenceFrequency عدد المرات التي يدخل فيها ملف التعريف المجدول حيز التنفيذ. يجب أن تكون weekهذه القيمة .
ScheduleDay مجموعة من الأيام التي يسري عليها ملف التعريف عند تحديد جدول زمني متكرر. القيم المحتملة هي من الأحد إلى السبت. لمزيد من المعلومات حول الجداول الزمنية المتكررة، راجع ملفات التعريف المتكررة باستخدام PowerShell.
ScheduleHour مجموعة من الساعات التي يسري عليها ملف التعريف. القيم المدعومة هي من 0 إلى 23.
ScheduleMinute مجموعة من الدقائق التي يسري فيها ملف التعريف.
ScheduleTimeZone المنطقة الزمنية لساعات ملف التعريف.

تطبيق إعدادات التحجيم التلقائي

بعد تحديد القواعد وملف التعريف، قم بتطبيق إعدادات التحجيم التلقائي. لتحديث إعداد مقياس تلقائي موجود، استخدم Update-AzAutoscaleSetting.

يستخدم New-AzAutoscaleSetting المثال Azure PowerShell التالي cmdlet.

# Define parameters for New-AzAutoscaleSetting
$newAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Location          = $azureRegion
    Profile           = @($defaultProfile)
    Enabled           = $true
    PropertiesName    = $autoscaleName
    TargetResourceUri = $vmssResourceId
}

# Create the autoscale setting
New-AzAutoscaleSetting @newAzAutoscaleSettingParams

إضافة إعلامات إلى إعدادات التحجيم التلقائي

أضف إعلامات إلى إعداد التحجيم التلقائي لتشغيل إخطار على الويب أو إرسال إعلامات بالبريد الإلكتروني عند حدوث حدث مقياس.

يستخدم New-AzAutoscaleWebhookNotificationObject المثال Azure PowerShell التالي cmdlet.

# Set variables
$webhookUri = "<WebhookUri>"

# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri

يستخدم New-AzAutoscaleNotificationObject المثال Azure PowerShell التالي cmdlet لتكوين إخطارات الويب والبريد الإلكتروني.

ملحوظة

استخدم نقطة نهاية HTTPS لخطاف الويب.

# Set variables
$notificationEmail = "<NotificationEmail>"

# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
    EmailCustomEmail                      = @($notificationEmail)
    EmailSendToSubscriptionAdministrator   = $true
    EmailSendToSubscriptionCoAdministrator = $true
    Webhook                               = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams

يستخدم Update-AzAutoscaleSetting المثال Azure PowerShell التالي cmdlet لتطبيق الإعلام.

# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Notification      = @($notification)
}

# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

مراجعة إعدادات التحجيم التلقائي

يستخدم Get-AzAutoscaleSetting المثال Azure PowerShell التالي cmdlet لاسترداد إعداد التحجيم التلقائي.

# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
    ResourceGroupName = $resourceGroupName
    Name              = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *

يستخدم Get-AzAutoscaleHistory المثال Azure PowerShell التالي cmdlet.

ملحوظة

يستعلم عن محفوظات إعداد التحجيم التلقائي، وليس معرف مورد مجموعة المقياس.

# Build autoscale setting resource ID
$autoscalePath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$autoscaleProvider = "Microsoft.Insights/autoscaleSettings/$autoscaleName"
$autoscaleResourceId = "$autoscalePath/providers/$autoscaleProvider"

# Retrieve the autoscale history
Get-AzAutoscaleHistory -ResourceId $autoscaleResourceId

ملفات التعريف المجدولة والمتكررة

ملحوظة

عند تحديث Profile، قم بتضمين كل ملف تعريف تريد الاحتفاظ به. تضيف الأمثلة التالية ملفات تعريف إلى الإعداد الذي تم إنشاؤه مسبقا في هذه المقالة. احتفظ بأي ملفات تعريف أخرى عند تكييفها مع إعداد مقياس تلقائي آخر.

إضافة ملف تعريف مجدول لحدث خاص

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

يستخدم New-AzAutoscaleProfileObject المثال Azure PowerShell التالي cmdlets وUpdate-AzAutoscaleSetting.

ملحوظة

يستخدم المثال التالي نفس القواعد مثل ملف التعريف الافتراضي المحدد سابقا، ولكنه يعين حدود مثيل جديدة لتاريخ معين. يمكنك أيضا تكوين قواعد مختلفة لاستخدامها مع ملف التعريف الجديد. تستخدم قيم البدء والنهاية الطوابع الزمنية ISO 8601 في UTC.

# Set variables
$startTime = "<StartTime>"
$endTime = "<EndTime>"

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name              = "High-demand-day"
    CapacityDefault   = "7"
    CapacityMaximum   = "30"
    CapacityMinimum   = "5"
    FixedDateEnd      = [datetime]::Parse($endTime)
    FixedDateStart    = [datetime]::Parse($startTime)
    FixedDateTimeZone = "UTC"
    Rule              = @($scaleOutRule, $scaleInRule)
}
$highDemandDay = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Profile           = @($defaultProfile, $highDemandDay)
}

# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

إضافة ملف تعريف مجدول متكرر

تتيح لك ملفات التعريف المتكررة جدولة ملف تعريف تغيير الحجم الذي يتكرر كل أسبوع.

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

يستخدم New-AzAutoscaleProfileObject المثال Azure PowerShell التالي cmdlets وUpdate-AzAutoscaleSetting.

ملحوظة

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

يقوم بإنشاء ملف تعريف نهاية الأسبوع وملف تعريف افتراضي متكرر لإنهاء ملف تعريف عطلة نهاية الأسبوع، مع الاحتفاظ بملفات التعريف الافتراضية والتاريخ الثابت من الخطوات السابقة.

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name                = "Weekend"
    CapacityDefault     = "1"
    CapacityMaximum     = "1"
    CapacityMinimum     = "1"
    RecurrenceFrequency = "Week"
    ScheduleDay         = @("Friday")
    ScheduleHour        = @(22)
    ScheduleMinute      = @(0)
    ScheduleTimeZone    = "Pacific Standard Time"
    Rule                = @($scaleOutRule, $scaleInRule)
}
$fridayProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name                = "default recurring profile"
    CapacityDefault     = "2"
    CapacityMaximum     = "10"
    CapacityMinimum     = "2"
    RecurrenceFrequency = "Week"
    ScheduleDay         = @("Monday")
    ScheduleHour        = @(0)
    ScheduleMinute      = @(0)
    ScheduleTimeZone    = "Pacific Standard Time"
    Rule                = @($scaleOutRule, $scaleInRule)
}
$defaultRecurringProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Profile           = @(
        $defaultProfile
        $highDemandDay
        $defaultRecurringProfile
        $fridayProfile
    )
}

# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

لمزيد من المعلومات حول ملفات التعريف المجدولة، راجع التحجيم التلقائي مع ملفات تعريف متعددة.

أوامر التحجيم التلقائي الأخرى

للحصول على قائمة كاملة ب PowerShell cmdlets للتحجيم التلقائي، راجع PowerShell Module Browser.

تنظيف الموارد

لتنظيف الموارد التي أنشأتها في هذا البرنامج التعليمي، احذف مجموعة الموارد المخصصة التي قمت بإنشائها. يحذف cmdlet التالي مجموعة الموارد وجميع مواردها.

يستخدم Remove-AzResourceGroup المثال Azure PowerShell التالي cmdlet.

# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName