使用Azure Logic Apps接收虚拟机大小变更通知的问题
Azure Logic Apps接收虚拟机大小变更通知的问题
嗨,我来帮你梳理并解决这几个问题:
问题1:如何获取虚拟机变更前后的大小
当Microsoft.Compute/virtualMachines/write事件触发时,事件数据里其实包含了变更前的旧资源状态和变更后的新资源状态,你可以通过以下表达式获取:
- 旧虚拟机大小:
@triggerBody()?['data']['previousResource']['properties']['hardwareProfile']['vmSize'] - 当前(新)虚拟机大小:
@triggerBody()?['data']['resource']['properties']['hardwareProfile']['vmSize']
问题2:只在虚拟机大小变更时触发通知
你现在的触发器会捕获所有VM的写入操作(比如修改标签、添加磁盘等),要实现仅在大小变更时触发,需要在Logic Apps的条件判断里同时满足两个条件:
- 操作名称是
Microsoft.Compute/virtualMachines/write - 旧的VM大小不等于新的VM大小
问题3:修正你的条件表达式
你原来的表达式只判断了操作名称,没有加入大小对比的逻辑,所以无法过滤出仅大小变更的场景。这里给你修正后的完整If操作表达式:
{ "type": "If", "expression": { "and": [ { "equals": [ "@triggerBody()?['data']['operationName']", "Microsoft.Compute/virtualMachines/write" ] }, { "notEquals": [ "@triggerBody()?['data']['previousResource']['properties']['hardwareProfile']['vmSize']", "@triggerBody()?['data']['resource']['properties']['hardwareProfile']['vmSize']" ] } ] }, "actions": { // 这里放你发送邮件/Slack通知的操作,同时可以把新旧大小变量插入到通知内容里 }, "else": { // 可以留空,或者加入其他处理逻辑 } }
需要注意的是:确保你的Logic Apps触发器是Azure Event Grid触发器,并且订阅了虚拟机的Write事件,这样才能获取到包含previousResource的完整事件数据。如果用的是其他触发器(比如HTTP触发器),可能需要调整数据源的获取方式。
备注:内容来源于stack exchange,提问作者gotothesky
相关产品推荐
相关产品推荐

