このチュートリアルでは、Azure Automation で Python 3.8 Runbook を 作成する手順について説明します。 Python Runbook は Python 2.7 および 3.8 でコンパイルされます。Azure portal のテキスト エディターを使用して、Runbook のコードを直接編集できます。
- 単純な Python Runbook を作成する
- 「Runbook」をテストし、発行する
- Runbook ジョブを実行し、その状態を追跡する
- Runbook パラメーターを使用して Azure 仮想マシンを起動するように Runbook を更新する
[前提条件]
このチュートリアルを完了するには、次のものが必要です。
Azure サブスクリプション。 まだお持ちでない場合は、 MSDN サブスクライバー特典をアクティブ化 するか、 無料アカウントにサインアップできます。
Runbook を保持し、マネージド ID を使用して Azure リソースに対して認証を行う Automation アカウント 。 Automation アカウントを作成すると、マネージド ID が自動的に作成されます。
Azure 仮想マシン。 このチュートリアルでは、このマシンの起動と停止を行います。そのため、運用環境の VM にすることはできません。
新しいランブックを作成する
まず、 Hello World というテキストを出力する単純な Runbook を作成します。
Azure portal で Automation アカウントを開きます。
Automation アカウント ページでは、このアカウント内のリソースをすばやく表示できます。 いくつかの資産を既に持っているはずです。 これらの資産のほとんどは、新しい Automation アカウントに自動的に含まれるモジュールです。
前提条件に記載されているマネージド ID も有効にする必要 があります。 これは、[アカウント設定] で ID リソースを表示することで確認できます。
[プロセス オートメーション] で [Runbook] を選択して、Runbook の一覧を開きます。
[ Runbook の作成 ] を選択して新しい Runbook を作成します。
Runbook に MyFirstRunbook-Python という名前を付けます。
Runbook の種類として Python を選択します。
ランタイム バージョンとして Python 3.8 を選択します。
[ 作成] を選択して Runbook を作成し、テキスト エディターを開きます。
Runbook にコードを追加する
次に、テキスト Hello Worldを印刷する簡単なコマンドを追加します。
print("Hello World!")
[ 保存] を 選択して Runbook を保存します。
Runbook をテストする
Runbook を発行して運用環境で使用できるようにする前に、Runbook をテストして正しく動作することを確認する必要があります。 Runbook をテストするときは、下書きバージョンを実行し、その出力を対話形式で表示します。
[ テスト] ウィンドウ を選択して、[ テスト ] ウィンドウを開きます。
[ 開始] を選択してテストを開始します。 このオプションは、有効な唯一のオプションである必要があります。
Runbook ジョブが作成され、その状態が表示されます。 ジョブの状態は Queued から始まり、クラウド内のランブックワーカーが利用可能になるまで待機していることを示します。 worker がジョブを要求すると状態は [Starting]\(開始中\) に変わり、Runbook が実際に実行を開始すると [Running]\(実行中\) に変わります。
Runbook ジョブが完了すると、その出力が表示されます。 この場合、
Hello Worldが表示されます。[テスト] ウィンドウを閉じてキャンバスに戻ります。
Runbook を発行して開始する
作成した Runbook は引き続きドラフト モードです。 運用環境で実行する前に、公開する必要があります。 Runbook を発行するときは、既存の発行済みバージョンをドラフト バージョンで上書きします。 この場合、Runbook を作成したばかりのため、発行済みのバージョンはまだありません。
[ 発行] を選択して Runbook を発行し、メッセージが表示されたら [はい ] を選択します。
MyFirstRunbook_python ペインを閉じると、Runbooks ページに戻り、作成状況 に 発行済み と表示されているはずです。
一覧で MyFirstRunbook-Python 名を選択すると、 MyFirstRunbook-Python ペインに戻ります。
上部のオプションを使用すると、Runbook を開始したり、Runbook を表示したり、Runbook を編集したり、将来開始するようにスケジュールしたり、その他のアクションを実行したりできます。
[スタート] を選択し、[Runbook の開始] ウィンドウが開いたら [OK] を選択します。
作成した Runbook ジョブの [ ジョブ ] ウィンドウが開きます。 このウィンドウは閉じても、ジョブの進行状況を確認できるように開いたままにしておきます。
ジョブの状態は、[要点] の [状態] フィールドに表示されます。 ここでの値は、Runbook をテストしたときに状態の値と一致します。
Runbook の状態が [完了] と表示されたら、[ 出力 ] タブを選択します。[ 出力 ] タブには、
Hello Worldが表示されます。[出力] タブを閉じます。
Runbook ジョブのストリームを表示するには、すべてのログタブを選択します。 出力ストリームには
Hello Worldのみが表示されます。 ただし、このタブには Runbook ジョブの他の (詳細やエラーなどの) ストリームも表示される可能性があります (Runbook でそれらのストリームの書き込みが行われている場合)。[ジョブ] パインを閉じて、MyFirstRunbook-Python ペインに戻ります。
ジョブ リソースを選択して、この Runbook の ジョブ リソース ページを開きます。 このページには、この Runbook によって作成されたすべてのジョブが一覧表示されます。 ジョブを 1 回だけ実行したので、一覧に表示されるジョブは 1 つだけです。
このジョブを選択すると、Runbook の開始時に表示したのと同じ ジョブ ウィンドウを開くことができます。 このウィンドウを使用すると、特定の Runbook に対して作成されたジョブの詳細を過去にさかのぼって表示できます。
Azure リソースを管理するための認証を追加する
Runbook をテストして発行しましたが、これまでのところ役に立つことは何もしていません。 Azure リソースを管理させたいです。 リソースを管理するには、スクリプトを認証する必要があります。
認証には、 マネージド ID を使用することをお勧めします。 Azure Automation アカウントを作成すると、マネージド ID が自動的に作成されます。
これらのサンプルを使用するには、Automation アカウントの Python パッケージ リソースに次のパッケージを追加します。 これらのリンクを使用して、これらのパッケージの WHL ファイルを追加できます。
これらのパッケージを追加するときに、Runbook に一致するランタイム バージョンを選択します。
注
次のコードは、ランタイム バージョン 3.8 でテストされました。
マネージド ID
マネージド ID を使用するには、それが有効になっていることを確認します。
- Automation アカウントでマネージド ID が有効になっているかどうかを確認するには、 Automation アカウント>Account Settings>Identity に移動し、[ 状態] を [オン] に設定します。
- マネージド ID には、リソースを管理するためのロールが割り当てられます。 この仮想マシン リソースの管理例では、仮想マシンを含むリソース グループに "仮想マシン共同作成者" ロールを追加します。 詳細については、Azure portal を使用した Azure ロールの割り当てに関するページを参照してください。
ID 管理ロールが構成された状態で、コードの追加を開始できます。
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 Compute クライアントのインスタンスを作成します。
# 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 名を保持する 2 つの変数を作成します。 引数リストの要素 sys.argv[0]はスクリプトの名前であり、ユーザーによる入力ではないことに注意してください。
これで、ハードコーディングされた値を使用する代わりに、入力パラメーター値を使用するように Runbook の最後の 2 行を変更できます。
async_vm_start = compute_client.virtual_machines.begin_start(
resource_group_name, vm_name)
async_vm_start.wait()
Python Runbook を開始する場合は、[テスト] ウィンドウから、または発行済みの Runbook として、[パラメーター] の [Runbook の開始] ページでパラメーターの値を入力できます。
最初のボックスに値の入力を開始すると、必要な数のパラメーター値を入力できるように、2 つ目のボックスが表示されます。
値は、先ほど追加したコードと同様に、 sys.argv 配列内のスクリプトで使用できます。
リソース グループの名前を最初のパラメーターの値として入力し、2 番目のパラメーターの値として起動する VM の名前を入力します。
[ OK] を 選択して Runbook を開始します。 Runbook が実行され、指定した VM が開始されます。
Python でのエラー処理
次の規則を使用して、WARNING、ERROR、DEBUG ストリームなど、Python Runbook からさまざまなストリームを取得することもできます。
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 Automation Runbook の種類に関するページを参照してください。
Python を使用した Azure の開発については、Python 開発者向けの Azure を参照してください。
Python 3 Runbook のサンプルを表示するには、 Azure Automation GitHub リポジトリを参照してください。