透過 PowerShell 設定自動調整
自動調整可協助您確保執行中的資源數量正確,能夠處理變動的應用程式負載。 您可以使用 Azure 入口網站、Azure CLI、PowerShell、ARM 或 Bicep 範本來設定自動調整。
本文說明如何使用 PowerShell 為虛擬機器擴展集設定自動調整。 使用下列步驟來設定:
- 建立可以自動調整的擴展集
- 建立縮減和擴增的規則
- 建立使用規則的設定檔
- 套用自動調整設定
- 使用通知更新自動調整設定
必要條件
若要使用 PowerShell 設定自動調整,您需要具有有效訂用帳戶的 Azure 帳戶。 您可以免費建立帳戶。
設定您的環境
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
建立虛擬機器擴展集
使用下列 Cmdlet建立擴展集。 設定 $resourceGroupName
和 $vmssName
變數,以適合您的環境。
# create a new resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location "EastUS"
# Create login credentials for the VMSS
$Cred = Get-Credential
$vmCred = New-Object System.Management.Automation.PSCredential($Cred.UserName, $Cred.Password)
New-AzVmss `
-ResourceGroupName $resourceGroupName `
-Location "EastUS" `
-VMScaleSetName $vmssName `
-Credential $vmCred `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-PublicIpAddressName "myPublicIPAddress" `
-LoadBalancerName "myLoadBalancer" `
-OrchestrationMode "Flexible"
建立自動調整設定
若要使用 PowerShell 建立自動調整設定,請遵循下列順序:
- 使用
New-AzAutoscaleScaleRuleObject
建立規則 - 使用
New-AzAutoscaleProfileObject
建立設定檔 - 使用
New-AzAutoscaleSetting
建立自動調整設定 - 使用
Update-AzAutoscaleSetting
更新設定
建立規則
建立縮減和擴增的規則,然後將其與設定檔相關聯。
規則是使用 New-AzAutoscaleScaleRuleObject
建立的。
下列 PowerShell 指令碼建立兩個規則。
- 當 CPU 百分比超過 70% 時則擴增
- 當 CPU 百分比小於 30% 時則縮減
$rule1=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "GreaterThan" `
-MetricTriggerThreshold 70 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Increase" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
$rule2=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "LessThan" `
-MetricTriggerThreshold 30 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Decrease" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
下表說明了 New-AzAutoscaleScaleRuleObject
Cmdlet 中使用的參數。
參數 | 描述 |
---|---|
MetricTriggerMetricName |
設定自動調整觸發程序計量 |
MetricTriggerMetricResourceUri |
指定 MetricTriggerMetricName 計量所屬的資源。 MetricTriggerMetricResourceUri 可以是任何資源,而不僅僅是正在調整的資源。 例如,您可以根據負載平衡器、資料庫或擴展集本身所建立的計量來調整虛擬機器擴展集。 對於指定的 MetricTriggerMetricResourceUri ,MetricTriggerMetricName 必須存在。 |
MetricTriggerTimeGrain |
規則監視的計量的取樣頻率。 MetricTriggerTimeGrain 必須是指定計量的其中一個預先定義值,且必須介於 12 小時到 1 分鐘之間。 例如,MetricTriggerTimeGrain = PT1M"* 表示計量每 1 分鐘採樣一次,並使用 MetricTriggerStatistic 中指定的彙總方法進行彙總。 |
MetricTriggerTimeAggregation |
timeGrain 期間內的彙總方法。 例如,statistic = "Average" 和 timeGrain = "PT1M" 表示每隔 1 分鐘計算平均值來彙總計量。 |
MetricTriggerStatistic |
用來彙總所取樣計量的彙總方法。 例如,TimeAggregation = "Average" 會計算平均值來彙總取樣的計量。 |
MetricTriggerTimeWindow |
自動調整引擎回溯以匯總計量的時間長度。 此值必須大於指標集合中的延遲 (該延遲可能會因資源而有所不同)。 其值必須介於 5 分鐘到 12 小時之間。 例如,10 分鐘表示每次執行自動調整時,都會查詢過去 10 分鐘的計量。 使用此功能可讓您的計量穩定化,而避免對暫時性峰值做出反應。 |
MetricTriggerThreshold |
定義觸發調整事件的計量值。 |
MetricTriggerOperator |
指定評估計量值時要使用的邏輯比較作業。 |
MetricTriggerDividePerInstance |
如果設定為 true ,則會將觸發程式計量除以執行個體總數。 例如,如果訊息計數為 300,而且有 5 個執行個體正在執行,則計算的計量值是每個執行個體 60 條訊息。 此屬性並非適用於所有計量。 |
ScaleActionDirection |
指定縮減或擴增。有效值為 Increase 和 Decrease 。 |
ScaleActionType |
依特定的執行個體數目調整、調整為特定執行個體計數,或依目前執行個體計數的百分比進行調整。 有效值包括 ChangeCount 、ExactCount 和 PercentChangeCount 。 |
ScaleActionCooldown |
調整作業之間等候的最短時間。 此等候時間讓計量能夠穩定並避免擺盪。 例如,如果 ScaleActionCooldown 為 10 分鐘且剛剛發生調整作業,則自動調整在 10 分鐘內不會再次嘗試調整。 |
建立預設的自動調整設定檔並與規則相關聯
定義調整規則之後,請建立一個設定檔。 該設定檔會指定預設的執行個體計數的上限和下限,以及可以套用相關聯規則的時間。 使用 New-AzAutoscaleProfileObject
Cmdlet 來建立新的自動調整設定檔。 由於這是預設設定檔,因此沒有任何排程參數。 在沒有任何其他設定檔處於作用中時,預設設定檔會處於作用中狀態
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
下表說明了 New-AzAutoscaleProfileObject
Cmdlet 中使用的參數。
參數 | 描述 |
---|---|
CapacityDefault |
計量無法用於評估的執行個體數。 只有當目前的執行個體計數低於預設值時,才會使用預設值。 |
CapacityMaximum |
資源的最大執行個體數。 最大執行個體數進一步受到訂用帳戶中可用的核心數限制。 |
CapacityMinimum |
資源的最小執行個體數。 |
FixedDateEnd |
設定檔的結束時間,採用 ISO 8601 格式。 |
FixedDateStart |
設定檔的開始時間,採用 ISO 8601 格式。 |
Rule |
當設定檔處於作用中狀態時,為調整動作提供觸發程序和參數的規則集合。 最多可指定 10 個以逗號分隔的規則。 |
RecurrenceFrequency |
排程設定檔生效的頻率。 此值必須為 week 。 |
ScheduleDay |
指定週期性排程時,設定檔生效的天數集合。 可能的值為 Sunday 到 Saturday。 如需週期性排程的詳細資訊,請參閱使用 CLI 新增週期性設定檔 |
ScheduleHour |
設定檔生效的小時集合。 支援的值為 0 到 23。 |
ScheduleMinute |
設定檔生效的分鐘集合。 |
ScheduleTimeZone |
設定檔的小時時區。 |
套用自動調整設定
在調整規則和設定檔之後,使用 New-AzAutoscaleSetting
套用自動調整設定。 若要更新現有的自動調整設定,請使用 Update-AzAutoscaleSetting
New-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Location eastus `
-Profile $defaultProfile `
-Enabled `
-PropertiesName "vmss-autoscalesetting1" `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
在自動調整設定上新增通知
在銷售設定上新增通知,以在發生調整事件時觸發 Webhook 或傳送電子郵件通知。
如需 Webhook 通知的詳細資訊,請參閱 New-AzAutoscaleWebhookNotificationObject
使用下列 Cmdlet 設定 Webhook:
$webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"
使用 webhook 設定通知,並使用 New-AzAutoscaleNotificationObject
Cmdlet 設定電子郵件通知:
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
更新自動調整設定以套用通知
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
檢閱自動調整設定
若要檢閱自動調整設定,請使用 Get-AzAutoscaleSetting
將設定載入變數,然後輸出如下所示的變數:
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
使用 AzAutoscaleHistory
取得自動調整歷程記錄
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
排程的設定檔和週期性設定檔
為特殊事件新增排程設定檔
設定自動調整設定檔,以便針對特定事件以不同的方式進行調整。 例如,對於需求比平常更高的某個日期,建立一個具有增加最大和最小執行個體限制的設定檔。
下列範例會使用與上述定義的預設設定檔相同的規則,但針對特定日期設定新的執行個體限制。 您也可以設定要與新設定檔搭配使用的不同規則。
$highDemandDay=New-AzAutoscaleProfileObject `
-Name "High-demand-day" `
-CapacityDefault 7 `
-CapacityMaximum 30 `
-CapacityMinimum 5 `
-FixedDateEnd ([System.DateTime]::Parse("2023-12-31T14:00:00Z")) `
-FixedDateStart ([System.DateTime]::Parse("2023-12-31T13:00:00Z")) `
-FixedDateTimeZone "UTC" `
-Rule $rule1, $rule2
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile, $highDemandDay `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
新增週期性排程設定檔
週期性設定檔可讓您排程每週重複的調整設定檔。 例如,在週末 (星期五晚上到星期一早上) 調整為單一執行個體。
排程的設定檔有開始和結束日期,但週期性設定檔沒有結束時間。 設定檔會保持作用中,直到下一個設定檔的開始時間為止。 因此,在建立週期性設定檔時,必須建立週期性預設設定檔,該預設設定檔在前一個週期性設定檔完成時啟動。
例如,若要設定一個在星期五晚上啟動、在星期一早上結束的週末設定檔,請建立一個在星期五晚上啟動的設定檔,然後使用預設設定建立一個在星期一早上啟動的週期性設定檔。
下列指令碼會建立週末設定檔,並新增一個預設設定檔以結束週末設定檔。
$fridayProfile=New-AzAutoscaleProfileObject `
-Name "Weekend" `
-CapacityDefault 1 `
-CapacityMaximum 1 `
-CapacityMinimum 1 `
-RecurrenceFrequency week `
-ScheduleDay "Friday" `
-ScheduleHour 22 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $rule1, $rule2
$defaultRecurringProfile=New-AzAutoscaleProfileObject `
-Name "default recurring profile" `
-CapacityDefault 2 `
-CapacityMaximum 10 `
-CapacityMinimum 2 `
-RecurrenceFrequency week `
-ScheduleDay "Monday" `
-ScheduleHour 00 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $rule1, $rule2
New-AzAutoscaleSetting `
-Location eastus `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultRecurringProfile, $fridayProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
如需排程設定檔的詳細資訊,請參閱使用多個設定檔進行自動調整
其他自動調整命令
如需自動調整的 PowerShell Cmdlet 完整清單,請參閱 PowerShell 模組瀏覽器
清除資源
若要清除在本教學課程中建立的資源,請刪除建立的資源群組。 以下 Cmdlet 會刪除資源群組及其所有資源。
Remove-AzResourceGroup -Name $resourceGroupName