共用方式為


教學課程:建立 Python 3.8 Runbook

本教學課程會逐步引導您在 Azure 自動化中建立 Python 3.8 Runbook 。 Python Runbook 在 Python 2.7 和 3.8 下編譯您可以使用 Azure 入口網站中的文字編輯器直接編輯 Runbook 的程式碼。

  • 建立簡單的 Python Runbook
  • 測試並發佈運行手冊
  • 執行和追蹤 Runbook 作業的狀態
  • 更新執行手冊以使用執行手冊參數啟動 Azure 虛擬機器

先決條件

若要完成本教學課程,您需要:

  • Azure 訂用帳戶。 如果您還沒有,可以 啟用 MSDN 訂閱者權益 或註冊 免費帳戶

  • 自動化帳戶,用來保存 Runbook 並使用受控識別向 Azure 資源進行驗證。 當您建立自動化帳戶時,會自動為您建立受控識別。

  • Azure 虛擬機器。 在本教學課程中,您將啟動和停止此機器,因此它不應該是生產 VM。

建立新的工作手冊

首先,您應該建立一個簡單的流程腳本,以輸出文字Hello World

  1. 在 Azure 入口網站中,開啟您的自動化帳戶。

    [自動化帳戶] 頁面可讓您快速檢視此帳戶中的資源。 你應該已經擁有一些資產了。 其中大部分資產是自動包含在新自動化帳戶的模組。

    您也應該啟用 必要條件中提到的受控識別。 您可以檢視 [帳戶設定] 底下的 [身分識別] 資源來驗證這一點。

  2. 選取 [流程自動化] 底下的 [Runbook] 以開啟 Runbook 清單。

  3. 選取 [建立 Runbook] 以建立新的 Runbook。

  4. 將 Runbook 命名為 MyFirstRunbook-Python

  5. 選取 Python 作為 Runbook 類型

  6. 選取 Python 3.8 作為 執行階段版本

  7. 選取 建立 以建立 Runbook 並打開文字編輯器。

將程式碼新增至 Runbook

現在,您新增一個簡單的命令來列印文字 Hello World

print("Hello World!")

選取 [儲存] 以保存 Runbook。

測試運行手冊

在發佈 Runbook 以使其在生產環境中可用之前,您想要對其進行測試,以確保其正常運作。 當您測試 Runbook 時,您會執行其草稿版本,並以互動方式檢視其輸出。

  1. 選取 [ 測試窗格] 以開啟 [ 測試 ] 窗格。

  2. 選取 [ 開始] 以開始測試。 此選項應該是唯一啟用的選項。

  3. 系統會建立 Runbook 作業 ,並顯示其狀態。 作業狀態一開始為「已排入佇列」,表示正在等候雲端中的 Runbook 背景工作可供使用。 當背景工作角色宣告該作業時,狀態會變更為正在啟動,然後 Runbook 真正開始執行時再變更為執行中

  4. 當 Runbook 作業完成後,其輸出將會顯示出來。 在此情況下,您應該會看到 Hello World

  5. 關閉 [測試 ] 窗格以返回畫布。

發佈並啟動執行手冊 (Runbook)

您建立的執行手冊仍處於草稿模式。 您必須先發佈它,才能在生產環境中執行它。 當您發佈 Runbook 時,您會使用草稿版本覆寫現有的已發佈版本。 在此情況下,因為您剛剛建立 Runbook,所以還沒有已發佈的版本。

  1. 選取 [發佈] 以發佈 runbook,然後在出現提示時選取 [是]

  2. 如果您關閉 MyFirstRunbook_python 窗格,您會回到 Runbooks 頁面,應在其中看到撰寫狀態是 已發佈

  3. 選取清單中的 MyFirstRunbook-Python 名稱,您會回到 MyFirstRunbook-Python 窗格。

    整個頂端的選項可讓您啟動 Runbook、檢視 Runbook、編輯 Runbook 或將其排程為在未來的某個時間啟動,以及其他動作。

  4. 選取 開始,然後在 啟動 Runbook 窗格開啟時選取 確定

  5. 系統會針對您所建立的 Runbook 作業開啟作業窗格。 您可以關閉此窗格,但讓我們保持開啟狀態,以便您可以查看工作的進度。

  6. 工作狀態會顯示在 Essentials 下的 Status 欄位中。 此處的值符合您測試 Runbook 時的狀態值。

  7. 一旦 Runbook 狀態顯示 [已完成],請選取 [輸出] 索引標籤。在 「輸出」 標籤中,您可以看到 Hello World

  8. 關閉 輸出 索引標籤。

  9. 選取 [所有記錄] 索引標籤,以檢視 Runbook 工作的日誌串流。 您應該只會在輸出資料流中看到 Hello World 。 不過,此索引標籤可顯示 Runbook 作業的其他資料流,例如 Runbook 寫入時出現的詳細資料錯誤

  10. 關閉 Jobs 窗格以返回至 MyFirstRunbook-Python 窗格。

  11. 選取 [作業資源] 以開啟此 Runbook 的 [作業資源] 頁面。 此頁面會列出此 Runbook 所建立的所有作業。 您應該只會看到一個任務被列出,因為您只執行過一次任務。

  12. 您可以選取此作業,以開啟您在啟動 Runbook 時檢視的相同 [作業] 窗格。 此窗格可讓您回到過去,並檢視為特定 Runbook 建立之任何作業的詳細資料。

新增驗證以管理 Azure 資源

您已測試並發佈運行手冊,但到目前為止,它還沒有達成任何有用的作用。 您想要讓它管理 Azure 資源。 若要管理資源,指令碼必須進行驗證。

建議的驗證方式是使用 受控識別。 當您建立 Azure 自動化帳戶時,會自動為您建立受控識別。

若要使用這些範例,請在自動化帳戶的 Python 套件資源中新增下列套件。 您可以使用這些連結新增這些套件的 WHL 檔案。

當您新增這些套件時,請選取符合您 Runbook 的執行階段版本。

備註

下列程式碼已使用執行階段 3.8 版進行測試。

受管理的識別

若要使用受控識別,請確定已啟用:

  • 若要確認是否已啟用自動化帳戶的受控識別,請移至您的自動化帳戶>、[帳戶設定>]、[身分識別],並將 [狀態] 設定為 [開啟]。
  • 受控識別具有指派管理資源的角色。 在此管理虛擬機器資源的範例中,請在包含虛擬機器的資源群組上新增「虛擬機器參與者」角色。 如需詳細資訊,請參閱 使用 Azure 入口網站指派 Azure 角色

設定管理身分識別角色後,您可以開始新增程式碼。

  1. 選取 MyFirstRunbook-Python 窗格上的 [編輯],以開啟文字編輯器。

  2. 新增下列程式碼以向 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 變數來取得參數值。 在其他 import 陳述式之後,立即將下列程式碼加入 Runbook:

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 Runbook (在測試窗格或作為已發佈的 Runbook) 時,您可以在參數下的啟動 Runbook 頁面中輸入參數值。

開始在第一個方塊中輸入值之後,第二個方塊會出現,依此類推,以便您可以視需要輸入任意數量的參數值。

這些值可供陣列中的 sys.argv 指令碼使用,就像您剛才新增的程式碼一樣。

輸入資源群組的名稱作為第一個參數的值,並將要啟動的 VM 名稱作為第二個參數的值。

輸入參數值

選取 [ 確定 ] 以啟動 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)

後續步驟