Azure WebApp:如何通过PowerShell或API重启单个实例
逐个重启Azure WebApp实例的自动化方案
我刚好处理过类似的场景,咱们可以通过PowerShell或者REST API来实现单个实例的重启,完全能配合cron作业定时执行,下面是具体的实现方法:
方案1:使用Azure PowerShell模块
这个方案适合已经配置好Azure PowerShell环境的场景,步骤很直观:
先确保安装并登录Azure PowerShell
如果还没配置,先运行:Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force Connect-AzAccount(如果是在cron作业里执行,建议用服务主体登录,避免交互式验证)
编写逐个重启实例的脚本
下面的脚本会先获取目标WebApp的所有实例,然后逐个重启,每次重启后可加个延迟(防止操作太频繁触发平台限制):# 配置你的资源组和WebApp名称 $resourceGroupName = "你的资源组名称" $webAppName = "你的WebApp名称" # 获取WebApp的所有实例 $instances = Get-AzWebAppInstance -ResourceGroupName $resourceGroupName -Name $webAppName # 逐个重启实例 foreach ($instance in $instances) { Write-Host "正在重启实例: $($instance.Identity)" Restart-AzWebAppInstance -ResourceGroupName $resourceGroupName -Name $webAppName -InstanceId $instance.Identity # 可选:等待30秒再处理下一个实例 Start-Sleep -Seconds 30 }这个脚本里的
Restart-AzWebAppInstance就是对应你手动重启单个实例的操作,完全复刻了手动流程的逻辑。
方案2:使用Azure REST API
如果更倾向于用REST API(比如在非Windows环境的cron作业里执行),可以按照以下步骤来:
获取Azure访问令牌
你需要通过服务主体获取访问令牌,示例用curl实现:TENANT_ID="你的租户ID" CLIENT_ID="你的服务主体ID" CLIENT_SECRET="你的服务主体密钥" RESOURCE="https://management.azure.com/" TOKEN=$(curl -X POST "https://login.microsoftonline.com/$TENANT_ID/oauth2/token" \ -F "grant_type=client_credentials" \ -F "client_id=$CLIENT_ID" \ -F "client_secret=$CLIENT_SECRET" \ -F "resource=$RESOURCE" | jq -r '.access_token')获取WebApp实例列表
调用API获取所有实例:SUBSCRIPTION_ID="你的订阅ID" RESOURCE_GROUP="你的资源组名称" WEBAPP_NAME="你的WebApp名称" INSTANCES=$(curl -X GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Web/sites/$WEBAPP_NAME/instances?api-version=2023-01-01" \ -H "Authorization: Bearer $TOKEN" | jq -r '.value[].name')逐个重启实例
循环遍历实例,调用重启API:for INSTANCE in $INSTANCES; do echo "正在重启实例: $INSTANCE" curl -X POST "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Web/sites/$WEBAPP_NAME/instances/$INSTANCE/restart?api-version=2023-01-01" \ -H "Authorization: Bearer $TOKEN" # 可选:等待30秒 sleep 30 done这个REST调用和你手动点击重启单个实例时Azure后台执行的操作完全一致。
不管用哪种方案,都可以把脚本配置到cron作业里,设置夜间的定时任务,就能自动完成逐个重启的需求啦。
内容的提问来源于stack exchange,提问作者Kent Rozenberg
相关产品推荐
相关产品推荐

