Azure VMSS自动缩放通知触发Azure Function多次执行问题
问题:Azure VMSS自动缩放通知触发Azure Function多次执行
当通过VMSS自动缩放通知的Webhook触发Azure Function时,函数会执行三次,导致Azure DevOps流水线和DNS更新被重复触发三次,不符合单次缩放事件仅执行一次的预期。手动执行函数代码时一切正常,仅运行一次,流水线和DNS更新均能正确触发。
VMSS配置
- 已启用自动缩放,通过监控自动缩放通知触发缩放事件(包括横向缩减和横向扩展)后的后续操作
Azure Function信息
- 语言:PowerShell 7.4
- 触发器:HTTP Trigger
- 用途:处理自动缩放通知,检查VMSS实例的预配状态,触发Azure DevOps流水线并更新DNS记录
- 预期行为:每个缩放事件(横向缩减/扩展)触发一次函数,完成一次VMSS预配检查、流水线触发和DNS更新
VMSS发送的JSON负载示例
{ "version": "1.0", "status": "Activated", "operation": "Scale Out", "context": { "timestamp": "2024-09-16T15:16:40.5377227Z", "id": "/subscriptions/sid/resourceGroups/rg-name/providers/microsoft.insights/autoscalesettings/auto-scale-set-vmss-name", "name": "auto-scale-set-vmss-name", "details": "Autoscale successfully started scale operation for resource 'vmss-name' from capacity '1' to capacity '2'", "subscriptionId": "sid", "resourceGroupName": "rg-name", "resourceName": "vmss-name", "resourceType": "microsoft.compute/virtualmachinescalesets", "resourceId": "/subscriptions/sid/resourceGroups/rg-name/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-name", "portalLink": "https://portal.azure.com/#resource/subscriptions/sid/resourceGroups/rg/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-name", "resourceRegion": "eastus", "oldCapacity": "1", "newCapacity": "2" }, "properties": {} }
推测原因
VMSS在缩放过程中会发送三个阶段的通知:"scale up initiated"、"scale up in progress"和"scale up completed",每个阶段的通知都会触发Webhook,进而导致函数多次执行。
复现步骤
- VMSS根据自动缩放规则执行横向扩展操作;
- HTTP触发的Azure Function处理自动缩放通知;
- 函数日志记录多条相同通知,单次横向扩展事件触发三次函数执行;
- Azure DevOps流水线和DNS更新操作被触发三次,不符合预期。
内容的提问来源于stack exchange,提问作者Alexandru Ene
相关产品推荐
相关产品推荐

