如何使用PowerShell实现Azure Function App基于闲置时长的自动启停
Azure Function 自动启停 PowerShell 实现方案
基于闲置时长触发的实现说明
可以实现该能力,但没有原生直接触发的内置机制,需要结合Azure Monitor的指标查询做闲置判断,逻辑如下:
- 提前安装Azure PowerShell Az模块并完成Azure身份认证
- 每次执行检测时拉取目标Function App过去30分钟的
Function Invocations指标,若调用次数为0则判定为闲置,执行停止操作 - 若需要闲置后自动恢复运行,可额外搭配定时计划、上游调用前置检测等规则触发启动操作
示例代码(闲置检测+停止):
# 登录Azure(如果在Azure自动化账户中运行可使用托管身份,无需手动登录) Connect-AzAccount # 配置参数 $resourceGroupName = "你的资源组名称" $functionAppName = "你的Function App名称" $idleThresholdMinutes = 30 $endTime = Get-Date $startTime = $endTime.AddMinutes(-$idleThresholdMinutes) # 查询过去30分钟的调用次数 $invocationMetrics = Get-AzMetric -ResourceId "/subscriptions/$((Get-AzContext).Subscription.Id)/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$functionAppName" ` -MetricName "FunctionInvocations" ` -StartTime $startTime ` -EndTime $endTime ` -AggregationType Total $totalInvocations = ($invocationMetrics.Data | Measure-Object -Property Total -Sum).Sum # 调用次数为0则停止Function App if ($totalInvocations -eq 0) { Stop-AzWebApp -ResourceGroupName $resourceGroupName -Name $functionAppName -Force }
常规自动启停的PowerShell实现
可以直接实现,你可以将脚本放到Azure自动化账户、本地计划任务或其他定时触发服务中,按自定义时间执行启停操作:
# 启动Function App Start-AzWebApp -ResourceGroupName "你的资源组名称" -Name "你的Function App名称" # 停止Function App Stop-AzWebApp -ResourceGroupName "你的资源组名称" -Name "你的Function App名称" -Force
注意:如果你的Function App运行在弹性计划或消费计划下,原生会自动处理闲置实例的回收,不需要手动停止来节约成本,手动启停更适合专用App Service计划的场景
内容的提问来源于stack exchange,提问作者Sheikh Sadique
相关产品推荐
相关产品推荐

