在 Azure 自动化中部署基于扩展的 Windows 或 Linux 用户混合 Runbook 辅助角色

基于扩展的加入仅适用于用户混合 Runbook 辅助角色。 本文介绍如何在 Windows 或 Linux 计算机上部署用户混合 Runbook 辅助角色、如何删除辅助角色,以及如何删除混合 Runbook 辅助角色组。

对于系统混合 Runbook 辅助角色加入,请参阅在自动化中部署基于代理的 Windows 混合 Runbook 辅助角色在自动化中部署基于代理的 Linux 混合 Runbook 辅助角色

通过 Azure 自动化的用户混合 Runbook 辅助角色功能,可以直接在 Azure 或非 Azure 计算机(包括已启用 Azure Arc 的服务器)上运行 runbook。 在托管角色的计算机或服务器中,可以直接运行 runbook,并对环境中的资源运行 runbook,从而管理这些本地资源。 Azure 自动化将存储并管理 Runbook,然后将其传送到一台或多台选定的计算机。 成功部署 Runbook 辅助角色后,请查看在混合 Runbook 辅助角色上运行 Runbook,了解如何配置 Runbook,使本地数据中心或其他云环境中的过程实现自动化。

注意

混合辅助角色可与两个平台共存:“基于代理(V1)”和“基于扩展(V2)” 。 如果在已运行“基于代理(V1)”平台的混合辅助角色上安装“基于扩展(V2)”平台,则会在组中看到两个混合 Runbook 辅助角色条目 。 一个条目使用“基于扩展(V2)”平台,另一个使用“基于代理(V1)”平台 。 了解详细信息

先决条件

计算机最低要求

  • 双核
  • 4 GB RAM
  • 非 Azure 计算机必须已安装 Azure Connected Machine 代理。 若要安装 AzureConnectedMachineAgent,请参阅适用于已 Arc 的服务器文章从 Azure 门户将混合计算机连接到 Azure
  • 必须在 Azure 虚拟机或已启用 Arc 的服务器上启用系统分配的托管标识。 如果未启用系统分配的托管标识,则会在执行添加操作的过程中启用它。

支持的操作系统

Windows (x64) Linux (x64)
● Windows Server 2022(包括 Server Core)
● Windows Server 2019(包括 Server Core)
● Windows Server 2016 版本 1709 和 1803(不包括 Server Core)
● Windows Server 2012、2012 R2(不包括 Server Core)
● Windows 10 Enterprise(包括多会话)和 Pro
● Debian GNU/Linux 8、9、10 和 11
● Ubuntu 18.04 LTS, 20.04 LTS 和 22.04 LTS
● SUSE Linux Enterprise Server 15.2 和 15.3
● Red Hat Enterprise Linux Server 7 和 8
● Oracle Linux 7 和 8
混合辅助角色扩展将遵循 OS 供应商的支持时间线

其他要求

Windows (x64) Linux (x64)
Windows PowerShell 5.1(下载 WMF 5.1)。 不支持 PowerShell Core。 不得启用 Linux 强化。 
.NET Framework 4.6.2 或更高版本。 

适用于 Linux 的包要求

所需程序包 说明 最低版本
Glibc GNU C 库 2.5-12
Openssl OpenSSL 库 1.0(支持 TLS 1.1 和 TLS 1.2)
Curl cURL Web 客户端 7.15.5
Python-ctype 适用于 Python 的外部函数库 需要 Python 2.x 或 Python 3.x
PAM 可插入验证模块
可选包 说明 最低版本
PowerShell Core 若要运行 PowerShell runbook,需要安装 PowerShell Core。 有关说明,请参阅在 Linux 上安装 PowerShell Core 6.0.0

注意

虚拟机规模集 (VMSS) 目前不支持混合 Runbook 辅助角色。

网络要求

使用代理服务器

如果使用代理服务器在 Azure 自动化与运行基于扩展的混合 Runbook 辅助角色的计算机之间通信,请确保能够访问相应的资源。 来自混合 Runbook 辅助角色和自动化服务的请求的超时为 30 秒。 三次尝试后,请求失败。

注意

对于 Azure VM 和已启用 Arc 的服务器,可以使用 PowerShell cmdlet 或 API 设置代理设置。

若要使用 cmdlet 安装扩展,请执行以下操作:

  1. 使用以下 API 调用来获取自动化帐户的详细信息。

    GET https://chinaeast2.management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}?api-version=2021-06-22
    
    

    API 调用将提供带有密钥的值:AutomationHybridServiceUrl。 在下一步中使用该 URL 在 VM 上启用扩展。

  2. 通过运行以下 PowerShell cmdlet(所需模块:Az.Compute)在 VM 上安装混合辅助角色扩展。 使用上述 API 调用提供的 properties.automationHybridServiceUrl

代理服务器设置

$settings = @{
    "AutomationAccountURL"  = "<registrationurl>";    
    "ProxySettings" = @{
        "ProxyServer" = "<ipaddress>:<port>";
        "UserName"="test";
    }
};
$protectedsettings = @{
"ProxyPassword" = "password";
};

Azure VM

Set-AzVMExtension -ResourceGroupName <VMResourceGroupName> -Location <VMLocation> -VMName <VMName> -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForWindows -TypeHandlerVersion 1.1 -Settings $settings -EnableAutomaticUpgrade $true/$false

已启用 Azure Arc 的 VM

New-AzConnectedMachineExtension -ResourceGroupName <VMResourceGroupName> -Location <VMLocation> -MachineName <VMName> -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForWindows -TypeHandlerVersion 1.1 -Setting $settings -NoWait -EnableAutomaticUpgrade

防火墙使用

如果使用防火墙来限制对 Internet 的访问,则必须将防火墙配置为允许访问。 混合 Runbook 辅助角色和 Automation State Configuration 需要以下端口和 URL 才能与 Azure 自动化通信。

属性 描述
端口 443(用于出站 Internet 访问)
全局 URL *.azure-automation.cn

CPU 配额限制

配置基于扩展的 Linux 混合 runbook 辅助角色时,CPU 配额限制为 25%。 Windows 混合 Runbook 辅助角色没有此类限制。

创建混合辅助角色组

若要在 Azure 门户中创建混合辅助角色组,请执行以下步骤:

  1. 登录到 Azure 门户

  2. 转到“自动化帐户”。

  3. 在“流程自动化”下选择“混合辅助角色组”。

  4. 选择“+ 创建混合辅助角色组”。

    显示在门户中选择混合辅助角色组选项的屏幕截图。

  5. 在“ 基本信息” 选项卡上的“名称”文本框中,输入混合辅助角色组的名称。

  6. 对于使用混合辅助角色凭据选项:

    • 如果选择默认,则会使用本地系统帐户安装混合扩展。
    • 如果选择“自定义”,请从下拉列表中选择凭据资产。
  7. 选择“下一步”转到“混合辅助角色”选项卡。可以选择要添加到此混合辅助角色组的 Azure 虚拟机或已启用 Azure Arc 的服务器。 如果不选择任何计算机,系统将创建一个空的混合辅助角色组。 以后你仍可以添加计算机。

    显示在基本选项卡中输入名称和凭据的屏幕截图。

  8. 选择“添加计算机”转到“将计算机添加为混合辅助角色”页 。 你只会看到不属于任何其他混合辅助角色组的计算机。

  9. 选中要添加到混合辅助角色组的计算机旁边的复选框。 如果你的非 Azure 计算机未列出,请确保该计算机上已安装 Azure Arc Connected Machine Agent。

  10. 选择“添加”。

  11. 选择下一步转到查看 + 创建选项卡 。

  12. 选择“创建” 。

    混合辅助角色扩展将安装在该计算机上,并且混合辅助角色将注册到混合辅助角色组。 将混合辅助角色添加到组会立即发生,而安装扩展可能需要几分钟时间。 选择刷新查看新组。 选择组名以查看混合辅助角色详细信息。

    注意

    如果选定的计算机已经是另一个混合辅助角色组的一部分,则不会将它添加到混合辅助角色组中。

将计算机添加到混合辅助角色组

还可以将计算机添加到现有的混合辅助角色组。

  1. 在“流程自动化”下选择“混合辅助角色组”,然后选择现有的混合辅助角色组转到“混合辅助角色组”页 。

  2. 在“混合辅助角色组”下,选择“混合辅助角色” 。

  3. 选择“+ 添加”转到“将计算机添加为混合辅助角色”页 。 你只会看到不属于任何其他混合辅助角色组的计算机。

    显示将计算机添加到现有组的“添加”按钮的屏幕截图。

  4. 选中要添加到混合辅助角色组的计算机旁边的复选框。

    如果你的非 Azure 计算机未列出,请确保该计算机上已安装 Azure Arc Connected Machine Agent。 若要安装 AzureConnectedMachineAgent,请参阅适用于已启用 Arc 的服务器的文章:从 Azure 门户将混合计算机连接到 Azure

  5. 选择“添加”将计算机添加到组中。

    添加后,可以看到作为“Azure 虚拟机”、“服务器 - Azure Arc”的计算机类型。 “平台”字段显示辅助角色为“基于代理(V1)”或“基于扩展(V2)” 。

    显示“基于代理”或“基于扩展”的“平台”字段的屏幕截图。

将现有基于代理的混合辅助角色迁移到基于扩展的混合辅助角色

若要利用基于扩展的混合辅助角色的优势,必须将所有现有基于代理的用户混合辅助角色迁移到基于扩展的辅助角色。 混合辅助角色计算机可以在“基于代理(V1)”和“基于扩展(V2)”的平台上共存。 基于扩展的安装不会影响基于代理的辅助角色的安装或管理。

若要在现有基于代理的混合辅助角色上安装混合辅助角色扩展,请执行以下步骤:

  1. 在“流程自动化”下选择“混合辅助角色组”,然后选择现有的混合辅助角色组转到“混合辅助角色组”页。
  2. 在“混合辅助角色组”下,选择“混合辅助角色”>“+ 添加”转到“将计算机添加为混合辅助角色”页。
  3. 选中现有“基于代理(V1)”的混合辅助角色旁边的复选框。
  4. 选择“添加”将计算机附加到组中。

“平台”列会将同一混合辅助角色显示为“基于代理(V1)”和“基于扩展(V2)”。 熟练使用基于扩展的混合辅助角色体验后,可以删除基于代理的辅助角色。

要大规模迁移多个基于代理的混合辅助角色,还可以使用其他渠道,例如 Bicep、ARM 模板、PowerShell cmdlet、REST API 和 Azure CLI。

删除混合 Runbook 辅助角色

可以从门户删除混合 Runbook 辅助角色。

  1. 在“流程自动化”下选择“混合辅助角色组”,然后选择你的混合辅助角色组转到“混合辅助角色组”页 。

  2. 在“混合辅助角色组”下,选择“混合辅助角色” 。

  3. 选中要从混合辅助角色组中删除的计算机旁边的复选框。

  4. 选择“删除”。

    在“删除混合辅助角色”对话框中将会显示一条警告,指出所选的混合辅助角色将永久删除。 选择“删除”。 此操作将从门户中删除“基于扩展(V2)”辅助角色的扩展,或删除“基于代理(V1)”条目 。 但是,它会在 VM 上保留旧的混合辅助角色。 若要手动卸载代理,请参阅卸载代理

    显示从现有组中删除虚拟机的屏幕截图。

    注意

    • 混合辅助角色可与两个平台共存:“基于代理(V1)”和“基于扩展(V2)” 。 如果在已运行“基于代理(V1)”平台的混合辅助角色上安装“基于扩展(V2)”平台,则会在组中看到两个混合 Runbook 辅助角色条目 。 一个条目使用“基于扩展(V2)”平台,另一个使用“基于代理(V1)”平台 。

    • 在自动化帐户中禁用专用链接后,最多可能需要 60 分钟才能删除混合 Runbook 辅助角色。

删除混合 Runbook 辅助角色组

可以从门户删除空的混合 Runbook 辅助角色组。

  1. 流程自动化下选择混合辅助角色组,然后选择你的混合辅助角色组转到混合辅助角色组页。

  2. 选择“删除”。

    将出现警告消息,以删除在混合辅助角色组中定义为混合辅助角色的任何计算机。 如果已将某个辅助角色添加到该组,则必须先从该组中删除该辅助角色。

  3. 选择 “是”

    随即会删除该混合辅助角色组。

自动升级扩展

混合辅助角色扩展默认支持自动升级次版本。 建议启用自动升级,以利用任何安全更新或功能更新,免除人工开销。 但是,若要防止扩展自动升级(例如,如果有严格的更改时效并且只能在特定的时间更新),可以通过在 ARM、Bicep 模板、PowerShell cmdlet 中将 enableAutomaticUpgrade 属性设置为 false 来禁用此功能。 当你想要重新启用自动升级时,将该属性设置为 true 即可。

$extensionType = "HybridWorkerForLinux/HybridWorkerForWindows"
$extensionName = "HybridWorkerExtension"
$publisher = "Microsoft.Azure.Automation.HybridWorker"
Set-AzVMExtension -ResourceGroupName <RGName> -Location <Location>  -VMName <vmName> -Name $extensionName -Publisher $publisher -ExtensionType $extensionType -TypeHandlerVersion 1.1 -Settings $settings -EnableAutomaticUpgrade $true/$false

必须手动管理主版本升级。 结合最新的 TypeHandlerVersion 运行以下 cmdlet。

注意

如果在公共预览期安装了混合辅助角色扩展,请确保将其升级到最新主版本。

Azure VM

Set-AzVMExtension -ResourceGroupName <VMResourceGroupName> -Location <VMLocation> -VMName <VMName> -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForWindows -TypeHandlerVersion 1.1 -Settings $settings -EnableAutomaticUpgrade $true/$false

已启用 Azure Arc 的 VM

New-AzConnectedMachineExtension -ResourceGroupName <VMResourceGroupName> -Location <VMLocation> -MachineName <VMName> -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForWindows -TypeHandlerVersion 1.1 -Setting $settings -NoWait -EnableAutomaticUpgrade

使用 Bicep 和 ARM 模板、REST API、Azure CLI 和 PowerShell 管理混合辅助角色扩展

可以使用 Bicep 模板创建新的混合辅助角色组,创建新的 Azure Windows VM 并将其添加到现有的混合辅助角色组。 详细了解 Bicep

按照下面提到的作为示例的步骤进行操作:

  1. 创建混合辅助角色组。
  2. 创建 Azure VM 或已启用 Arc 的服务器。 也可使用现有的 Azure VM 或已启用 Arc 的服务器。
  3. 将 Azure VM 或已启用 Arc 的服务器连接到上面创建的混合辅助角色组。
  4. 生成新的 GUID 并将其作为混合辅助角色的名称传递。
  5. 在 VM 上启用系统分配的托管标识。
  6. 在 VM 上安装混合辅助角色扩展。
  7. 若要确认扩展是否已成功安装在 VM 上,请在“Azure 门户”中转到“VM”>“扩展”选项卡并检查安装在 VM 上的混合辅助角色扩展的状态。
param automationAccount string
param automationAccountLocation string
param workerGroupName string

@description('Name of the virtual machine.')
param virtualMachineName string

@description('Username for the Virtual Machine.')
param adminUsername string

@description('Password for the Virtual Machine.')
@minLength(12)
@secure()
param adminPassword string

@description('Location for the VM.')
param vmLocation string = 'China North 3'

@description('Size of the virtual machine.')
param vmSize string = 'Standard_DS1_v2'

@description('The Windows version for the VM. This will pick a fully patched image of this given Windows version.')
@allowed([
  '2008-R2-SP1'
  '2012-Datacenter'
  '2012-R2-Datacenter'
  '2016-Datacenter-with-Containers'
  '2016-Datacenter'
  '2019-Datacenter'
  '2019-Datacenter-Core'
  '2019-Datacenter-Core-smalldisk'
  '2019-Datacenter-Core-with-Containers'
  '2019-Datacenter-Core-with-Containers-smalldisk'
  '2019-Datacenter-smalldisk'
  '2019-Datacenter-with-Containers'
  '2019-Datacenter-with-Containers-smalldisk'
])
param osVersion string = '2019-Datacenter'

@description('DNS name for the public IP')
param dnsNameForPublicIP string

var nicName_var = 'myVMNict'
var addressPrefix = '10.0.0.0/16'
var subnetName = 'Subnet'
var subnetPrefix = '10.0.0.0/24'
var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName_var, subnetName)
var vmName_var = virtualMachineName
var virtualNetworkName_var = 'MyVNETt'
var publicIPAddressName_var = 'myPublicIPt'
var networkSecurityGroupName_var = 'default-NSGt'
var UniqueStringBasedOnTimeStamp = uniqueString(resourceGroup().id)

resource publicIPAddressName 'Microsoft.Network/publicIPAddresses@2020-08-01' = {
  name: publicIPAddressName_var
  location: vmLocation
  properties: {
    publicIPAllocationMethod: 'Dynamic'
    dnsSettings: {
      domainNameLabel: dnsNameForPublicIP
    }
  }
}

resource networkSecurityGroupName 'Microsoft.Network/networkSecurityGroups@2020-08-01' = {
  name: networkSecurityGroupName_var
  location: vmLocation
  properties: {
    securityRules: [
      {
        name: 'default-allow-3389'
        properties: {
          priority: 1000
          access: 'Allow'
          direction: 'Inbound'
          destinationPortRange: '3389'
          protocol: 'Tcp'
          sourceAddressPrefix: '*'
          sourcePortRange: '*'
          destinationAddressPrefix: '*'
        }
      }
    ]
  }
}

resource virtualNetworkName 'Microsoft.Network/virtualNetworks@2020-08-01' = {
  name: virtualNetworkName_var
  location: vmLocation
  properties: {
    addressSpace: {
      addressPrefixes: [
        addressPrefix
      ]
    }
    subnets: [
      {
        name: subnetName
        properties: {
          addressPrefix: subnetPrefix
          networkSecurityGroup: {
            id: networkSecurityGroupName.id
          }
        }
      }
    ]
  }
}

resource nicName 'Microsoft.Network/networkInterfaces@2020-08-01' = {
  name: nicName_var
  location: vmLocation
  properties: {
    ipConfigurations: [
      {
        name: 'ipconfig1'
        properties: {
          privateIPAllocationMethod: 'Dynamic'
          publicIPAddress: {
            id: publicIPAddressName.id
          }
          subnet: {
            id: subnetRef
          }
        }
      }
    ]
  }
  dependsOn: [

    virtualNetworkName
  ]
}

resource vmName 'Microsoft.Compute/virtualMachines@2020-12-01' = {
  name: vmName_var
  location: vmLocation
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    hardwareProfile: {
      vmSize: vmSize
    }
    osProfile: {
      computerName: vmName_var
      adminUsername: adminUsername
      adminPassword: adminPassword
    }
    storageProfile: {
      imageReference: {
        publisher: 'MicrosoftWindowsServer'
        offer: 'WindowsServer'
        sku: osVersion
        version: 'latest'
      }
      osDisk: {
        createOption: 'FromImage'
      }
    }
    networkProfile: {
      networkInterfaces: [
        {
          id: nicName.id
        }
      ]
    }
  }
}

resource automationAccount_resource 'Microsoft.Automation/automationAccounts@2021-06-22' = {
  name: automationAccount
  location: automationAccountLocation
  properties: {
    sku: {
      name: 'Basic'
    }
  }
}

resource automationAccount_workerGroupName 'Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups@2022-02-22' = {
  parent: automationAccount_resource
  name: workerGroupName
  dependsOn: [

    vmName
  ]
}

resource automationAccount_workerGroupName_testhw_UniqueStringBasedOnTimeStamp 'Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/hybridRunbookWorkers@2021-06-22' = {
  parent: automationAccount_workerGroupName
  name: guid('testhw', UniqueStringBasedOnTimeStamp)
  properties: {
    vmResourceId: resourceId('Microsoft.Compute/virtualMachines', virtualMachineName)
  }
  dependsOn: [
    vmName
  ]
}

resource virtualMachineName_HybridWorkerExtension 'Microsoft.Compute/virtualMachines/extensions@2022-03-01' = {
  name: '${virtualMachineName}/HybridWorkerExtension'
  location: vmLocation
  properties: {
    publisher: 'Microsoft.Azure.Automation.HybridWorker'
    type: 'HybridWorkerForWindows'
    typeHandlerVersion: '1.1'
    autoUpgradeMinorVersion: true
    enableAutomaticUpgrade: true
    settings: {
      AutomationAccountURL: automationAccount_resource.properties.automationHybridServiceUrl
    }
  }
  dependsOn: [
    vmName
  ]
}

output output1 string = automationAccount_resource.properties.automationHybridServiceUrl

管理混合辅助角色组和混合辅助角色的角色权限

你可以创建自定义 Azure 自动化角色,并向混合辅助角色组和混合辅助角色授予以下权限。 要详细了解如何创建 Azure 自动化自定义角色,请参阅 Azure 自定义角色

操作 说明
Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/read 读取混合 Runbook 辅助角色组。
Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/write 创建混合 Runbook 辅助角色组。
Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/delete 删除混合 Runbook 辅助角色组。
Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/hybridRunbookWorkers/read 读取混合 Runbook 辅助角色。
Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/hybridRunbookWorkers/write 创建混合 Runbook 辅助角色。
Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/hybridRunbookWorkers/move/action 将混合 Runbook 辅助角色从一个辅助角色组移到另一个组。
Microsoft.Automation/automationAccounts/hybridRunbookWorkerGroups/hybridRunbookWorkers/delete 删除混合 Runbook 辅助角色。

检查混合辅助角色的版本

检查基于扩展的混合 Runbook 辅助角色的版本:

OS 类型 路径 说明
Windows C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows\ 该路径具有包含版本信息的“版本”文件夹。
Linux /var/lib/waagent/Microsoft.Azure.Automation.HybridWorker.HybridWorkerForLinux-<version> 文件夹名称以版本信息结尾。

后续步骤