你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本教程介绍如何在 Azure 自动化中创建 Python 3.8 Runbook 。 Python Runbook 在 Python 2.7 和 3.8 下编译,可以使用 Azure 门户中的文本编辑器直接编辑 Runbook 的代码。
- 创建一个简单的 Python 运行手册
- 测试并发布运行手册
- 运行 Runbook 作业并跟踪其状态
- 更新 Runbook(运行手册)以使用运行手册参数启动 Azure 虚拟机
先决条件
若要完成本教程,需要:
一份 Azure 订阅。 如果还没有帐户,可以 激活 MSDN 订阅者权益 或注册 免费帐户。
一个 自动化帐户 用于保存运行手册,并通过托管标识向 Azure 资源进行身份验证。 创建自动化帐户时,会自动创建托管标识。
Azure 虚拟机。 在本教程中,你将启动和停止此计算机,因此它不应是生产 VM。
创建新的运行手册
首先创建一个简单的 Runbook 来输出文本 Hello World。
在 Azure 门户中,打开自动化帐户。
“自动化帐户”页可快速查看此帐户中的资源。 应该已拥有某些资产。 其中大多数资产都是自动包含在新的自动化帐户中的模块。
还应启用先决条件中提到的托管标识。 可以通过在“帐户设置”下查看标识资源来验证这一点。
选择进程自动化下的 Runbook 以打开 Runbook 列表。
选择创建运行手册以创建新的运行手册。
为 Runbook 命名 MyFirstRunbook-Python。
为 Runbook 类型选择 Python。
选择 Python 3.8 作为 运行时版本。
选择创建以创建运行簿并打开文本编辑器。
将代码添加到运行手册中
现在,添加一个简单的命令来打印文本 Hello World。
print("Hello World!")
选择“保存”以保存 runbook。
测试 Runbook
在发布 Runbook 以使其在生产环境中可用之前,需要对其进行测试以确保其正常工作。 在测试运行手册时,可以运行其草稿版本,以交互方式查看其输出。
选择 “测试”窗格 以打开 “测试 ”窗格。
选择 “开始” 以启动测试。 此选项应是唯一启用的选项。
将创建 运行手册作业 并显示其状态。 作业状态一开始为“已排队”,表示正在等待云中的 runbook 辅助角色变为可用状态。 在某个辅助角色认领此作业后,作业状态将更改为“正在启动”,然后当 runbook 开始实际运行时,此状态将变为“正在运行”。
Runbook 作业完成后,会显示其输出。 在这种情况下,应会看到
Hello World。关闭 “测试 ”窗格以返回到画布。
发布和启动 Runbook
您创建的运行手册仍处于草稿状态。 需要先发布它,然后才能在生产环境中运行它。 当发布 Runbook 时,可以用草稿版本覆盖现有的已发布版本。 在此示例中,因此才创建了 Runbook,因此还没有已发布版本。
选择 “发布” 以发布 Runbook,然后在出现提示时选择 “是”。
如果关闭“MyFirstRunbook_python”窗格,则会返回到“Runbook”页,此时会看到“创作状态”为“已发布”。
在列表中选择 MyFirstRunbook-Python 名称,然后返回到 MyFirstRunbook-Python 窗格。
可以通过顶部的选项来启动 runbook、查看 runbook、编辑 runbook,或计划在将来的某个时间启动它,以及其他选项。
选择“开始”,然后在“启动 Runbook”窗格打开时选择“确定”。
此时会为你创建的 runbook 作业打开一个“作业”窗格。 可以关闭此窗格,但让我们保持打开状态,以便查看作业的进度。
作业状态显示在“概要”下的“状态”字段中。 此处的值与测试 Runbook 时的状态值匹配。
Runbook 状态显示 “已完成”后,选择“ 输出 ”选项卡。在“ 输出 ”选项卡中,可以看到
Hello World。关闭“ 输出 ”选项卡。
选择“所有日志”选项卡查看 runbook 作业的流。 在输出流中,您只应看到
Hello World。 但是,此选项卡可以显示 runbook 作业的其他流,例如“详细”流和“错误”(如果 runbook 向它们写入了内容)。关闭 “作业 ”窗格,返回到 MyFirstRunbook-Python 窗格。
选择“作业”资源以打开此 runbook 的“作业”资源页。 此页列出此 Runbook 创建的所有作业。 你应该只看到一个作业被列出,因为你只运行了该作业一次。
可以选择此作业以打开启动 Runbook 时查看的相同的 作业 窗格。 你可以随时返回到此窗格,并查看为特定 Runbook 创建的任何作业的详细信息。
添加身份验证以管理 Azure 资源
已经测试并发布 Runbook,但到目前为止它不执行任何有用的操作。 你想要让它管理 Azure 资源。 若要管理资源,脚本必须进行身份验证。
建议使用 托管标识进行身份验证。 创建 Azure 自动化帐户时,会自动创建托管标识。
若要使用这些示例,请在自动化帐户的 Python 包资源中添加以下包。 可以使用这些链接为这些包添加 WHL 文件。
添加这些包时,请选择与 Runbook 匹配的运行时版本。
注释
以下代码已使用运行时版本 3.8 进行测试。
托管标识
若要使用托管标识,请确保已启用它:
- 若要验证是否为自动化帐户启用了托管标识,请转到 自动化帐户>设置>标识 并将 状态 设置为 “打开”。
- 托管标识具有用于管理资源的角色。 在此管理虚拟机资源的示例中,在包含虚拟机的资源组上添加“虚拟机参与者”角色。 有关详细信息,请参阅 使用 Azure 门户分配 Azure 角色
配置了管理标识角色后,可以开始添加代码。
通过选择“MyFirstRunbook-Python”窗格上的“编辑”打开文本编辑器。
添加以下代码以向 Azure 进行身份验证:
#!/usr/bin/env python3
from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient
SUBSCRIPTION_ID="YOUR_SUBSCRIPTION_ID"
azure_credential = DefaultAzureCredential()
import os
import requests
# printing environment variables
endpoint = os.getenv('IDENTITY_ENDPOINT')+"?resource=https://management.azure.com/"
identityHeader = os.getenv('IDENTITY_HEADER')
payload={}
headers = {
'X-IDENTITY-HEADER' : identityHeader,
'Metadata' : True
}
response = requests.get(endpoint, headers)
print(response.text)
添加代码以创建 Python 计算客户端并启动 VM
若要使用 Azure VM,请创建一个 适用于 Python 的 Azure 计算客户端的实例。
# Initialize client with the credential and subscription.
compute_client = ComputeManagementClient(
azure_credential,
SUBSCRIPTION_ID
)
print('\nStart VM')
async_vm_start = compute_client.virtual_machines.begin_start(
"MyResourceGroup", "TestVM")
async_vm_start.wait()
print('\nFinished start.')
其中 MyResourceGroup ,包含 VM 的资源组的名称,以及 TestVM 要启动的 VM 的名称。
再次测试和运行 Runbook,以查看它是否启动 VM。
使用输入参数
Runbook 当前使用硬编码值来定义资源组和 VM 的名称。 现在,让我们添加从输入参数获取这些值的代码。
使用 sys.argv 变量获取参数值。 将以下代码添加到 Runbook,使其紧随其他 import 语句之后:
import sys
resource_group_name = str(sys.argv[1])
vm_name = str(sys.argv[2])
此代码导入 sys 模块,并创建两个变量来保存资源组和 VM 名称。 请注意,参数列表 sys.argv[0]的元素是脚本的名称,不是用户输入的。
现在,可以修改 Runbook 的最后两行,以使用输入参数值,而不是使用硬编码值:
async_vm_start = compute_client.virtual_machines.begin_start(
resource_group_name, vm_name)
async_vm_start.wait()
从“测试”窗格或作为已发布的运行手册启动 Python 运行手册时,可以在“开始运行手册”页下的“参数”中输入参数的值。
在第一个框中开始输入值后,将显示第二个值等,以便可以根据需要输入任意数量的参数值。
这些值在 sys.argv 数组中可供脚本使用,如刚刚添加的代码所示。
输入资源组的名称作为第一个参数的值,并输入要启动的虚拟机的名称作为第二个参数的值。
选择 “确定 ”以启动 Runbook。 Runbook 运行,并启动指定的 VM。
Python 中的错误处理
还可以使用以下约定从 Python Runbook 检索各种流,包括 WARNING、ERROR 和 DEBUG 流。
print("Hello World output")
print("ERROR: - Hello world error")
print("WARNING: - Hello world warning")
print("DEBUG: - Hello world debug")
print("VERBOSE: - Hello world verbose")
以下示例演示块 try...except 中使用的此约定。
try:
raise Exception('one', 'two')
except Exception as detail:
print ('ERROR: Handling run-time error:', detail)
后续步骤
若要详细了解 Runbook 类型及其优点和限制,请参阅 Azure 自动化 Runbook 类型。
若要了解如何使用 Python 为 Azure 进行开发,请参阅 适用于 Python 开发人员的 Azure。
若要查看示例 Python 3 Runbook,请参阅 Azure 自动化 GitHub 存储库。