启动/停止 VM v2 概述

启动/停止 VM v2 功能可跨多个订阅启动或停止 Azure 虚拟机实例。 该功能按照用户定义的计划启动或停止虚拟机,通过 Azure Application Insights 提供见解,并使用操作组发送可选通知。 在大多数情况下,启动/停止 VM 可以管理由 Azure 资源管理器和 Azure 服务管理器(经典)部署和管理的虚拟机,后者已弃用

此新版本启动/停止 VM v2 为想要降低 VM 成本的客户提供了一个分散的低成本自动化选项。 此版本提供与 Azure 自动化的原始版本相同的所有功能,但它旨在利用 Azure 中的新技术。 启动/停止 VM v2 依赖于多个 Azure 服务,将根据已部署和使用的服务收费。

“启动/停止 VM”v2 重要更新

  • 除非需要保留支持的组件和 Azure 服务版本,否则不会继续进行启动/停止 v2 方面的开发、增强或更新。

  • TriggerAutoUpdate 和 UpdateStartStopV2 函数现已弃用,我们将在未来将其删除。 若要更新启动/停止 v2,我们建议停止站点,从我们的 GitHub 存储库安装最新版本,然后启动站点。 若要禁用自动更新功能,请将函数应用的 AzureClientOptions:EnableAutoUpdate 应用程序设置指定为 false。 没有内置通知系统可用于更新。 在提供启动/停止 v2 的更新后,我们将更新 GitHub 存储库中的 readme.md。 第三方 GitHub 文件观察程序可能会向你通知更改。

  • 截至 2024 年 8 月 19 日,启动/停止 v2 已更新为使用 .NET 8 独立辅助角色模型

概述

启动/停止 VM v2 经过重新设计,并且不依赖 Azure 自动化日志或 Azure Monitor 日志,而以前版本需要依赖这些日志。 此版本依赖 Azure Functions 处理 VM 启动和停止执行。

系统将在 Microsoft Entra ID 中为此 Azure Functions 应用程序创建托管标识,使启动/停止 VM v2 可以轻松访问其他受 Microsoft Entra 保护的资源,例如逻辑应用和 Azure VM。 有关 Microsoft Entra ID 中的托管标识的详细信息,请参阅 Azure 资源的托管标识

系统将创建 HTTP 触发器函数终结点,来为此功能随附的计划方案和序列方案提供支持,如下表所示。

名称 触发器 说明
计划 HTTP 此函数适用于计划方案和序列方案(根据有效负载架构区分)。 它是从逻辑应用调用的入口点函数,并采用有效负载来处理 VM 启动或停止操作。
AutoStop HTTP 此函数支持 AutoStop 方案,这是从逻辑应用调用的入口点函数。
AutoStopVM HTTP 当满足警报条件时,VM 警报会自动触发此函数。
VirtualMachineRequestOrchestrator 队列 此函数将从 Scheduled 函数获取有效负载信息,并协调 VM 启动请求和停止请求。
VirtualMachineRequestExecutor 队列 此函数将对 VM 执行实际的启动操作和停止操作。
CreateAutoStopAlertExecutor 队列 此函数将从 AutoStop 函数获取有效负载信息,以创建关于 VM 的警报。
HeartBeatAvailabilityTest 计时器 此函数监视主要 HTTP 函数的可用性。
CostAnalyticsFunction 计时器 Microsoft 使用此函数来估算各客户启动/停止 V2 的聚合成本。 此函数不会影响启动/停止 V2 的功能。
SavingsAnalyticsFunction 计时器 Microsoft 使用此函数来估算各客户启动/停止 V2 的聚合节省额。 此函数不会影响启动/停止 V2 的功能。
VirtualMachineSavingsFunction 队列 此函数计算在 VM 上通过启动/停止 V2 解决方案实现的实际成本节省。
TriggerAutoUpdate 计时器 已弃用。 此函数基于应用程序设置“AzureClientOptions:EnableAutoUpdate=true”启动自动更新过程。
UpdateStartStopV2 队列 已弃用。 此函数会完成实际的自动更新执行操作,它使用可用版本验证当前版本并决定最终操作。

例如,Scheduled HTTP 触发器函数用于处理计划方案和序列方案。 同样,AutoStop HTTP 触发器函数用于处理自动停止方案。

支持此功能需要基于队列的触发器函数。 所有基于计时器的触发器均用于执行可用性测试,以及监视系统的运行状况。

Azure 逻辑应用用于配置以及管理 VM 操作的启动计划和停止计划,方法是使用 JSON 有效负载来调用函数。 默认情况下,在初始部署期间,它会为下列方案创建总共 5 个逻辑应用:

  • 计划 - 启动操作和停止操作基于针对 Azure 资源管理器 VM 和经典 VM 指定的计划。 ststv2_vms_Scheduled_start 和 ststv2_vms_Scheduled_stop 分别用于配置计划的启动和计划的停止 。

  • 序列 - 启动操作和停止操作基于针对具有预定义排序标记的 VM 的计划。 仅支持两个命名标记,即 sequencestartsequencestop。 ststv2_vms_Sequenced_start 和 ststv2_vms_Sequenced_stop 分别用于配置排序启动和排序停止 。

    使用序列功能的正确方式是,在要按顺序启动的每个 VM 上创建名为 sequencestart 的标记。 对于相应范围内的每个 VM,标记值需要为范围从 1 到 N 的整数。 标记是可选的,如果不存在,VM 不会参与排序。 相同的条件适用于停止仅标记名称不同的 VM,并且在这种情况下应使用 sequencestop。 必须在每个 VM 中配置这两个标记才能进行启动和停止操作。 如果两个或两个以上 VM 具有同一标记值,这些 VM 将同时启动或停止。

    例如,下表显示了启动和停止操作均按标记值的升序进行处理。

    显示序列设置标记示例的表

    注意

    此方案仅支持 Azure 资源管理器 VM。

  • AutoStop - 此功能仅用于根据 Azure 资源管理器 VM 和经典 VM 的 CPU 使用率对它们执行停止操作。 此功能也可以是基于计划的操作,可创建关于 VM 的警报,并根据条件触发警报来执行停止操作。 ststv2_vms_AutoStop 用于配置自动停止功能。

每个启动/停止操作都支持分配一个或多个订阅、资源组或 VM 列表。

启动/停止 VM v2 也使用 Functions 所需的 Azure 存储帐户,该帐户用于以下两个目的:

  • 使用 Azure 表存储来存储执行操作元数据(即,启动/停止 VM 操作)。

  • 使用 Azure 队列存储来支持 Azure Functions 基于队列的触发器。

所有从函数应用执行的跟踪日志记录数据都会发送到已连接的 Application Insights 实例。 可以通过共享 Azure 仪表板中提供的一组预定义可视化效果查看存储在 Application Insights 中的遥测数据。

对 VM 执行操作后,系统还会发送电子邮件通知。

最新发布

当启动/停止 VM v2 的新版本发布时,实例会自动更新,你无需手动重新部署。

支持的范围选项

订阅

如果需要对整个订阅中的所有 VM 执行启动操作和停止操作,你可以使用将范围限定于订阅的功能,并且可以根据需要选择多个订阅。

你还可以指定要排除的 VM 的列表,这样就不会对排除的 VM 执行相应操作。 你还可以使用通配符来指定可同时忽略的所有 VM 的名称。

资源组

如果需要对所有 VM 执行启动操作和停止操作,你可以通过指定一个或多个资源组名称来使用将范围限定于资源组的功能,还可以跨一个或多个订阅执行启动操作和停止操作。

你还可以指定要排除的 VM 的列表,这样就不会对排除的 VM 执行相应操作。 你还可以使用通配符来指定可同时忽略的所有 VM 的名称。

VMList

如果需要对一组特定的虚拟机执行启动操作和停止操作,以及跨多个订阅执行启动操作和停止操作,你可以使用指定 VM 列表的功能。 此选项不支持指定要排除的 VM 列表。

必备条件

  • 你的 Azure 帐户必须具有有效订阅。 创建帐户

  • 若要部署解决方案,必须在订阅中向帐户授予“所有者”权限。

  • 启动/停止 VM v2 在所有 Azure 全球云区域中可用,Azure Functions 的可用产品(按区域)页中列出了这些区域。

后续步骤

若要部署此功能,请参阅部署启动/停止 VM