将启动/停止 VM v2 部署到 Azure 订阅

按顺序执行本文中的步骤以安装启动/停止VMs v2功能。 完成设置过程后,请配置计划,以根据自己的要求对其进行自定义。

权限和策略注意事项

在部署之前和部署期间,请注意以下事项:

  • 该解决方案允许对启动/停止 v2 部署具有适当的基于角色的访问控制 (RBAC) 权限的用户添加、删除和管理启动/停止 VM v2 实例范围内的虚拟机计划。 此行为是设计使然。 实际上,这意味着对虚拟机没有显式权限的用户,在拥有修改管理虚拟机的启动/停止 v2 解决方案的权限时,仍然可以在该虚拟机上创建启动、停止和自动停止操作。

  • 任何有权访问启动/停止 v2 解决方案的用户都可以发现启动/停止 v2 应用程序所用的 Application Insights 实例中存储的成本、节省、操作历史记录和其他数据。

  • 管理启动/停止 v2 解决方案时,应考虑用户的启动/停止 v2 解决方案权限,特别是当用户无权直接修改目标虚拟机时。

  • 将 Start/Stop v2 解决方案部署到新的或现有的资源组时,名为 SolutionName 且值 StartStopV2 的标记会添加到资源组及其由 Start/Stop v2 部署的资源中。 这些资源上的任何其他标记均已移除。 如果有一个 Azure 策略拒绝根据资源标记进行管理操作,则必须允许仅包含此标记的资源进行管理操作。

部署功能

部署从启动/停止 VMs v2 GitHub 组织发起。 尽管此功能旨在跨订阅中单个部署的所有资源组管理订阅中的所有 VM,但你可以根据所在组织的操作模型或要求来安装其他实例。 还可以配置此功能,以跨多个订阅集中管理 VM。

为了简化管理和删除操作,建议将启动/停止 VM v2 部署到专用资源组。

注意

此解决方案目前不支持指定现有存储帐户或 Application Insights 资源。

注意

函数应用和存储帐户的命名格式已更改。 为保证全局唯一性,现在会将唯一的随机字符串追加到这些资源的名称之后。

  1. 打开浏览器并导航到启动/停止 VM v2 GitHub 组织

  2. 根据你在其中创建 Azure VM 的 Azure 云环境选择部署选项。

  3. 根据提示登录到 Azure 门户

  4. 从下拉列表框中选择相应的计划。 在选择区域冗余计划 (Start/StopV2-AZ) 时,必须在以下某一个区域中创建部署:

    • 中国北部
    • 中国北部 2
    • 中国北部 3
    • 中国东部 2
  5. 选择“创建”,这样就会在 Azure 门户中打开“自定义 Azure 资源管理器部署”页面。

  6. 输入以下值:

    名称
    区域 为新资源选择一个附近的区域。
    资源组名称 为将要包含启动/停止 VM 的单项资源的资源组指定名称。
    资源组区域 为资源组指定区域。 例如“中国北部 2”。
    Azure 函数应用名称 键入在 URL 路径中有效的名称。 将对你键入的名称进行验证,以确保其在 Azure Functions 中是唯一的。
    Application Insights 名称 为将要包含启动/停止 VM 的分析数据的 Application Insights 实例指定名称。
    Application Insights 区域 为 Application Insights 实例指定区域。
    存储帐户名称 为存储启动/停止 VM 执行遥测数据的 Azure 存储帐户指定名称。
    电子邮件地址 指定一个或多个电子邮件地址以接收状态通知,用逗号 (,) 分隔。

    启动/停止 VM 遥测部署配置

  7. 选择页面底部的“查看 + 创建”。

  8. 选择“创建”以开始部署。

  9. 选择屏幕顶部的铃铛图标(通知)可查看部署状态。 此时会看到“部署正在进行”。 等待部署完成。

  10. 从通知窗格选择“转到资源组”。 将看到类似于以下的屏幕:

    启动/停止 VM 遥测部署资源列表

注意

我们正在收集操作和检测信号遥测数据,以便在你联系支持团队进行任何故障排除时为你提供更好的帮助。 我们还正在收集虚拟机事件历史记录,用于验证服务在虚拟机上的运行时间,以及虚拟机的暂停时间,以确定服务效果。

启用多个订阅

启动/停止部署完成后,请执行以下步骤,以使启动/停止 VM v2 在多个订阅之间执行操作。

  1. 复制在部署过程中指定的 Azure 函数应用名称的值。

  2. 在 Azure 门户中,导航到二级订阅。

  3. 选择“访问控制 (IAM)”。

  4. 选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。

  5. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置
    角色 参与者
    将访问权限分配到 用户、组或服务主体
    成员 <你的 Azure 函数应用名称>

    显示 Azure 门户中的“添加角色分配”页的屏幕截图。

配置计划概述

若要管理自动化方法以控制 VM 的启动和停止,请根据需要配置一个或多个包含的逻辑应用。

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

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

    注意

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

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

如果需要其他计划,可以使用 Azure 门户中的“克隆”选项来复制所提供的其中一个逻辑应用。

选择“克隆”选项以复制逻辑应用

计划启动和停止方案

执行以下步骤,为 Azure 资源管理器和经典 VM 配置已计划的启动和停止操作。 例如,可以配置 ststv2_vms_Scheduled_start 计划,在上午上班时启动 VM,并根据 ststv2_vms_Scheduled_stop 计划,在晚上下班时停止订阅中的所有 VM。

支持将逻辑应用配置为仅启动 VM。

对于每个方案,可以针对一个或多个订阅、单个或多个资源组执行操作,并在包含或排除列表中指定一个或多个 VM。 不能在同一逻辑应用中同时指定。

  1. 登录 Azure 门户并导航到“逻辑应用”。

  2. 在逻辑应用列表中,若要配置计划的启动,请选择 ststv2_vms_Scheduled_start。 若要配置计划的停止,请选择 ststv2_vms_Scheduled_stop。

  3. 从左侧窗格中选择“逻辑应用设计器”。

  4. “逻辑应用设计器”出现后,在“设计器”窗格中,选择“定期”以配置逻辑应用计划。 若要了解具体的定期选项,请参阅计划定期任务

    为逻辑应用配置定期频率

  5. 在“设计器”窗格中,选择“函数-尝试”以配置目标设置。 在请求正文中,若要跨订阅中的所有资源组管理 VM,请修改请求正文,如以下示例中所示。

    {
      "Action": "start",
      "EnableClassic": false,
      "RequestScopes": {
        "ExcludedVMLists": [],
        "Subscriptions": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/"
        ]
     }
    }
    

    subscriptions 数组中指定多个订阅,每个值用逗号分隔,如以下示例中所示。

    "Subscriptions": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/",
          "/subscriptions/11111111-0000-1111-2222-444444444444/"
        ]
    

    在请求正文中,若要管理特定资源组的 VM,请修改请求正文,如以下示例中所示。 指定的每个资源路径必须用逗号分隔。 如果需要,可以指定一个或多个资源组。

    此示例还演示了如何排除虚拟机。 可以通过指定 VM 资源路径或按通配符来排除 VM。

    {
      "Action": "start",
      "EnableClassic": false,
      "RequestScopes": {
        "Subscriptions": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/",
          "/subscriptions/11111111-0000-1111-2222-444444444444/"
         ],
        "ResourceGroups": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/rg1/",
          "/subscriptions/11111111-0000-1111-2222-444444444444/resourceGroups/rg2/"
        ],
        "ExcludedVMLists": [
         "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/vmrg1/providers/Microsoft.Compute/virtualMachines/vm1"
        ]
      }
    }
    

    此处将对所有 VM 执行操作,但两个订阅中名称以 Az 和 Bz 开头的 VM 除外。

    {
      "Action": "start",
      "EnableClassic": false,
      "RequestScopes": {
        "ExcludedVMLists": [“Az*”,“Bz*”],
       "Subscriptions": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/",
          "/subscriptions/11111111-0000-1111-2222-444444444444/"
    
        ]
      }
    }
    

    在请求正文中,若要管理订阅中一组特定的 VM,请修改请求正文,如以下示例中所示。 指定的每个资源路径必须用逗号分隔。 如果需要,可以指定一个 VM。

    {
      "Action": "start",
      "EnableClassic": false,
      "RequestScopes": {
        "ExcludedVMLists": [],
        "VMLists": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/rg1/providers/Microsoft.Compute/virtualMachines/vm1",
          "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/rg3/providers/Microsoft.Compute/virtualMachines/vm2",
          "/subscriptions/11111111-0000-1111-2222-444444444444/resourceGroups/rg2/providers/Microsoft.ClassicCompute/virtualMachines/vm30"
    
        ]
      }
    }
    
  6. 在逻辑应用的“概述”窗格中,选择“启用”。

顺序启动和停止方案

在分布式应用程序体系结构中,如果某环境在多个 Azure 资源管理器 VM 上包含两个或更多组件,则支持按顺序启动和停止组件的序列非常重要。 在配置此方案前,请确保已按照概述页面中的说明将 sequencestart 和 sequencestop 标记应用到目标 VM 。

  1. 在逻辑应用列表中,若要配置顺序启动,请选择 ststv2_vms_Sequenced_start。 若要配置顺序停止,请选择 ststv2_vms_Sequenced_stop。

  2. 从左侧窗格中选择“逻辑应用设计器”。

  3. “逻辑应用设计器”出现后,在“设计器”窗格中,选择“定期”以配置逻辑应用计划。 若要了解具体的定期选项,请参阅计划定期任务

    为逻辑应用配置定期频率

  4. 在设计器窗格中,选择“Function-Try”配置目标设置,然后选择顶部菜单中的“</> 代码视图”按钮以编辑 Function-Try 元素的代码。 在请求正文中,若要跨订阅中的所有资源组管理 VM,请修改请求正文,如以下示例中所示。

    {
      "Action": "start",
      "EnableClassic": false,
      "RequestScopes": {
        "ExcludedVMLists": [],
        "Subscriptions": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/"
        ]
     },
       "Sequenced": true
    }
    

    subscriptions 数组中指定多个订阅,每个值用逗号分隔,如以下示例中所示。

    "Subscriptions": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/",
          "/subscriptions/11111111-0000-1111-2222-444444444444/"
        ]
    

    在请求正文中,若要管理特定资源组的 VM,请修改请求正文,如以下示例中所示。 指定的每个资源路径必须用逗号分隔。 如果需要,可以指定一个资源组。

    此示例还演示了如何根据使用通配符的计划启动/停止示例按资源路径排除虚拟机。

    {
      "Action": "start",
      "EnableClassic": false,
      "RequestScopes": {
        "Subscriptions":[
          "/subscriptions/12345678-1234-5678-1234-123456781234/",
          "/subscriptions/11111111-0000-1111-2222-444444444444/"
        ],
        "ResourceGroups": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/rg1/",
          "/subscriptions/11111111-0000-1111-2222-444444444444/resourceGroups/rg2/"
        ],
        "ExcludedVMLists": [
         "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/vmrg1/providers/Microsoft.Compute/virtualMachines/vm1"
        ]
      },
       "Sequenced": true
    }
    

    在请求正文中,若要管理订阅中一组特定的 VM,请修改请求正文,如以下示例中所示。 指定的每个资源路径必须用逗号分隔。 如果需要,可以指定一个 VM。

    {
      "Action": "start",
      "EnableClassic": false,
      "RequestScopes": {
        "ExcludedVMLists": [],
        "VMLists": [
          "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/rg1/providers/Microsoft.Compute/virtualMachines/vm1",
          "/subscriptions/12345678-1234-5678-1234-123456781234/resourceGroups/rg2/providers/Microsoft.ClassicCompute/virtualMachines/vm2",
          "/subscriptions/11111111-0000-1111-2222-444444444444/resourceGroups/rg2/providers/Microsoft.ClassicCompute/virtualMachines/vm30"
        ]
      },
       "Sequenced": true
    }
    

自动停止方案

启动/停止 VM v2 可评估在非高峰时段(如下班之后)未使用的计算机并在处理器利用率小于指定百分比时自动关闭它们,从而管理订阅中运行 Azure 资源管理器和经典 VM 的成本。

请求正文中的以下指标警报属性支持自定义:

  • AutoStop_MetricName
  • AutoStop_Condition
  • AutoStop_Threshold
  • AutoStop_Description
  • AutoStop_Frequency
  • AutoStop_Severity
  • AutoStop_Threshold
  • AutoStop_TimeAggregationOperator
  • AutoStop_TimeWindow

若要详细了解 Azure Monitor 指标警报的工作方式以及配置方式,请参阅 Azure Monitor 中的指标警报

  1. 在逻辑应用列表中,若要配置自动停止,请选择 ststv2_vms_AutoStop。

  2. 从左侧窗格中选择“逻辑应用设计器”。

  3. “逻辑应用设计器”出现后,在“设计器”窗格中,选择“定期”以配置逻辑应用计划。 若要了解具体的定期选项,请参阅计划定期任务

    为逻辑应用配置定期频率

  4. 在“设计器”窗格中,选择“函数-尝试”以配置目标设置。 在请求正文中,若要跨订阅中的所有资源组管理 VM,请修改请求正文,如以下示例中所示。

    {
      "Action": "stop",
      "EnableClassic": false,    
      "AutoStop_MetricName": "Percentage CPU",
      "AutoStop_Condition": "LessThan",
      "AutoStop_Description": "Alert to stop the VM if the CPU % falls below the threshold",
      "AutoStop_Frequency": "00:05:00",
      "AutoStop_Severity": "2",
      "AutoStop_Threshold": "5",
      "AutoStop_TimeAggregationOperator": "Average",
      "AutoStop_TimeWindow": "06:00:00",
      "RequestScopes":{        
        "Subscriptions":[
            "/subscriptions/12345678-1111-2222-3333-1234567891234/",
            "/subscriptions/12345678-2222-4444-5555-1234567891234/"
        ],
        "ExcludedVMLists":[]
      }        
    }
    

    在请求正文中,若要管理特定资源组的 VM,请修改请求正文,如以下示例中所示。 指定的每个资源路径必须用逗号分隔。 如果需要,可以指定一个资源组。

    {
      "Action": "stop",
      "AutoStop_Condition": "LessThan",
      "AutoStop_Description": "Alert to stop the VM if the CPU % falls below the threshold",
      "AutoStop_Frequency": "00:05:00",
      "AutoStop_MetricName": "Percentage CPU",
      "AutoStop_Severity": "2",
      "AutoStop_Threshold": "5",
      "AutoStop_TimeAggregationOperator": "Average",
      "AutoStop_TimeWindow": "06:00:00",
      "EnableClassic": false,
      "RequestScopes": {
        "ExcludedVMLists": [],
        "ResourceGroups": [
          "/subscriptions/12345678-1111-2222-3333-1234567891234/resourceGroups/vmrg1/",
          "/subscriptions/12345678-1111-2222-3333-1234567891234/resourceGroupsvmrg2/",
          "/subscriptions/12345678-2222-4444-5555-1234567891234/resourceGroups/VMHostingRG/"
          ]
      }
    }
    

    在请求正文中,若要管理订阅中一组特定的 VM,请修改请求正文,如以下示例中所示。 指定的每个资源路径必须用逗号分隔。 如果需要,可以指定一个 VM。

    {
      "Action": "stop",
      "AutoStop_Condition": "LessThan",
      "AutoStop_Description": "Alert to stop the VM if the CPU % falls below the threshold",
      "AutoStop_Frequency": "00:05:00",
      "AutoStop_MetricName": "Percentage CPU",
      "AutoStop_Severity": "2",
      "AutoStop_Threshold": "5",
      "AutoStop_TimeAggregationOperator": "Average",
      "AutoStop_TimeWindow": "06:00:00",
      "EnableClassic": false,
      "RequestScopes": {
        "ExcludedVMLists": [],
        "VMLists": [
          "/subscriptions/12345678-1111-2222-3333-1234567891234/resourceGroups/rg3/providers/Microsoft.ClassicCompute/virtualMachines/Clasyvm11",
          "/subscriptions/12345678-1111-2222-3333-1234567891234/resourceGroups/vmrg1/providers/Microsoft.Compute/virtualMachines/vm1"
        ]
      }
    }
    

VM 标记

还可以通过设置 VM 本身的标记,在启动和停止操作中包括或排除特定的 VM。 若要添加标记,请导航到特定 VM,从左侧菜单中选择“标记”,然后添加一个名为 ssv2excludevm 的标记。 若要从启动或停止操作中排除此 VM,请将此新标记的值设置为 true。 若要在操作中包含 VM,请将值设置为 false。 这样就能排除特定 VM,而无需更新负载配置中的 ExcludedVMLists