排查和解决 Azure 自动化中的 Python 包问题

本文介绍如何在 Azure 沙盒环境和混合 Runbook 辅助角色上运行的 Azure 自动化中导入、管理和使用 Python 包。 要成功执行作业,应在混合 Runbook 辅助角色上下载 Python 包。 为了帮助简化 runbook,可以使用 Python 包导入所需的模块。

注释

Azure 自动化允许恢复过去 29 天内删除的 runbook。 可以通过在自动化帐户中将 PowerShell 脚本作为作业运行来还原已删除的 Runbook。 有关详细信息,请参阅还原已删除的 runbook

导入 Python 2 包

  1. 在你的自动化帐户中,在共享资源下选择 Python 程序包。 选择 + 添加 Python 程序包

  2. 添加 Python 包页中,选择要上传的本地包。 包可以是 .whl.tar.gz 文件 。

  3. 输入名称并选择运行时版本为“2.x.x”。

  4. 选择“导入” 。

导入包后,该包将列在自动化帐户的 Python 包 页上。 若要删除包,请选择包,然后选择“ 删除”。

导入具有依赖项的包

Azure 自动化在导入过程中不会解析 Python 程序包的依赖项。 使用以下方法之一导入包含其所有依赖项的包。

方法 1:手动下载

在安装了 Python 2.7 和 Python 的软件包安装工具 (pip) 的 Windows 64位计算机上,运行以下命令下载一个软件包及其所有依赖项:

C:\Python27\Scripts\pip2.7.exe download -d <output-directory> <package-name>

下载包及其所有依赖项后,即可将其导入自动化帐户。

步骤 2:使用运行手册(Runbook)

若要获取 Runbook, 请将 Python 2 包从 pypi 导入 Azure 自动化帐户

启动运行手册时,请确保执行以下操作:

  • 运行设置”下的“运行方式”选项设置为 Azure

  • 以以下参数启动运行手册,每个参数都用switch定义。

    • -s <subscriptionId>
    • -g <资源组>
    • -a <自动化帐户>
    • -m <modulePackage>

    Runbook 允许指定要下载的包。 例如,将 -m 参数设置为 Azure 下载所有 Azure 模块和所有依赖项(大约 105 个包)。

  • Runbook 需要自动化帐户的托管标识才能正常工作。

Runbook 执行完成后,可以在自动化帐户中的“共享资源”下检查 Python 包,以验证包是否已正确导入。

默认 Python 3 包

若要在自动化服务中支持 Python 3.8 Runbook,默认情况下会安装一些 Python 包。 有关详细信息,请参阅 默认 Python 包。 通过在自动化帐户中导入 Python 包,可以替代默认版本。 在您的自动化帐户中,被优先选择的是导入的版本。 若要导入单个包,请参阅 “导入 Python 3 包”。 若要导入包含多个包的包,请参阅 “导入具有依赖项的 Python 3 包”。

注释

Python 3.10 (预览版)未安装默认包。

导入 Python 3 包

  1. 在你的自动化帐户中,在共享资源下选择 Python 程序包。 然后选择 “+ 添加 Python 包”。

  2. 添加 Python 包页中,选择要上传的本地包。 该包可以是适用于 Python 3.8 的 .whl.tar.gz 文件,也可以是 Python 3.10 的 .whl 文件(预览版)。

  3. 键入名称并选择 运行时版本 作为 Python 3.8 或 Python 3.10(预览版)。

  4. 选择“导入” 。

导入包后,该包将列在自动化帐户的 Python 包页上。 若要删除包,请选择包,然后选择“ 删除”。

导入具有依赖项的 Python 3 包

可以通过将 Python 脚本 import_py3package_from_pypi.py 导入 Python 3.8 Runbook 来导入 Python 3.8 包及其依赖项。 确保为自动化帐户启用托管标识,并具有自动化参与者访问权限以成功导入包。

将脚本导入运行手册

有关导入 Runbook 的详细信息,请参阅 从 Azure 门户导入 Runbook。 在运行导入之前,将文件从 GitHub 复制到 Azure 门户可以访问的存储中。

“导入 runbook”页默认将 runbook 名称设置为与脚本名称匹配。 如果有权访问该字段,则可以更改该名称。 Runbook 类型 可能默认为 Python 2.7。 如果是这样,请确保将其更改为 Python 3.8

执行运行手册以导入程序包和依赖项

创建并发布 runbook 后,运行它来导入包。 有关执行 Runbook 的详细信息,请参阅 在 Azure 自动化中启动 Runbook

脚本 (import_py3package_from_pypi.py) 需要以下参数。

参数 DESCRIPTION
subscription_id 自动化帐户的订阅 ID
resource_group 在其中定义自动化帐户的资源组的名称
automation_account 自动化帐户名称
module_name 要从 pypi.org 导入的模块的名称
module_version 模块的版本

参数值应以以下格式作为单个字符串提供:

-s <subscription_id> -g <resource_group> -a<automation_account> -m <module_name> -v <module_version>

场景:Runbook 失败,出现“超过参数长度”错误

您的使用这些参数的运行手册失败,并出现以下错误:

Runbook 参数名称和值的总长度超过 30,000 个字符的限制。 若要避免此问题,请使用自动化变量将值传递给 Runbook。

原因

Python 2.7、Python 3.8 和 PowerShell 7.1 Runbook 对提供的所有参数的总字符长度有限制。 所有参数名称和值的总长度不能超过 30,000 个字符。

决议

若要解决此问题,请使用 Azure 自动化变量将值传递到 Runbook 或缩短参数名称和值,以便它们总共不超过 30,000 个字符。

参考文献