gpt4 book ai didi

azure - 启动/停止 -AzVM 无法与自动化正常工作

转载 作者:行者123 更新时间:2023-12-03 03:24:21 24 4
gpt4 key购买 nike

我在资源组下有一组虚拟机。我创建了一个自动化运行手册来安排虚拟机的打开和关闭。 Runbook 类型为 PowerShell Workflow,运行时版本为 5.1。运行手册代码是:

workflow VM-On-Off-ScheduleCode
{
Param(
[Parameter(Mandatory=$true)]
[String]
$TagName,
[Parameter(Mandatory=$true)]
[String]
$TagValue,
[Parameter(Mandatory=$true)]
[Boolean]
$PowerStat
)

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# Set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

$vms = Get-AzResource -ResourceType Microsoft.Compute/virtualMachines -TagName $TagName -TagValue $TagValue

Foreach -Parallel ($vm in $vms){
if($PowerStat){
Start-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName;
Write-Output "Starting $($vm.Name)";
}
else{
Stop-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force;
Write-Output "Stopping $($vm.Name)";
}
}
}

它需要的 3 个参数是标记名称、标记值和 bool 值,其中 True 表示虚拟机要打开,False 表示要关闭。我已多次检查所有虚拟机中的标签名称和值是否已正确配置。

我面临的问题是,每当它按计划运行时,大多数时候一两个虚拟机不会打开/关闭。此异常(exception)没有任何模式,因为有一天可能有 1 个虚拟机,另一天可能有 3 个虚拟机,而且虚拟机可能并不总是相同。我检查了错误并没有发现任何错误。我已经在测试 Pane 中运行了代码,发现它运行良好。如果有人能解决我的问题,我将不胜感激。

我的期望是所有上述虚拟机都应该打开或关闭,没有任何异常(exception)

最佳答案

系统身份可能存在问题。按计划执行时,Runbook 可能无法使用系统分配的托管标识连接到 Azure。您可以尝试使用用户分配托管标识而不是系统分配的托管标识来解决该问题。

创建了用户管理身份并进行连接,如下所示:

$AzureContext = (Connect-AzAccount -Identity -AccountId "UserclientID").context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
workflow new
{
Param(
[Parameter(Mandatory=$true)]
[String]
$TagName,
[Parameter(Mandatory=$true)]
[String]
$TagValue,
[Parameter(Mandatory=$true)]
[Boolean]
$PowerState
)

$AzureContext = (Connect-AzAccount -Identity -AccountId "Userclient_ID").context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
$vms = Get-AzResource -ResourceType Microsoft.Compute/virtualMachines -TagName $TagName -TagValue $TagValue
Foreach -Parallel ($vm in $vms){
if($PowerState){
Start-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName;
Write-Output "Starting $($vm.Name)";
}
else{
Stop-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force;
Write-Output "Stopping $($vm.Name)";
}
}
}

如图所示,从设置的用户管理身份中获取用户客户端 ID

enter image description here

输出:

我测试了 powerstate 运行的两种场景,反之亦然。它按预期工作。

enter image description here

enter image description here

以下是对此类问题的一些担忧:

  • 为虚拟机添加超时。因为如果虚拟机启动或停止的时间比预期时间长,则虚拟机可能会超时。因此,通过使用 start-AZVM 添加超时,您可以增加虚拟机的超时值。
  • 作业运行完成后,请检查自动化帐户流程自动化>>作业下的作业日志。有时它可以帮助确定原因。

如果问题仍然存在,您可以通过使用 Azure 函数触发来安排启动/停止 VM,如本 article 中明确给出的那样。作者:@Charbel Nemnom。

关于azure - 启动/停止 -AzVM 无法与自动化正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76004466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com