Azure Automation で Python 3 パッケージを管理する
この記事では、Azure サンドボックス環境と Hybrid Runbook Worker で実行されている Azure Automation で Python 3 パッケージをインポート、管理、使用する方法について説明します。 ジョブの実行を成功させるために Hybrid Runbook workers ワーカーに Python パッケージは、ダウンロードする必要があります。 Runbook を簡略化するために、Python パッケージを使用して必要なモジュールをインポートすることができます。
Python 2 パッケージの管理については、「Azure Automation で Python 2 パッケージを管理する」をご覧ください。
Python の既定のパッケージ
Automation サービスで Python 3.8 Runbook をサポートするために、一部の Python パッケージが既定でインストールされ、これらのパッケージの一覧がここに表示されます。 お使いの Automation アカウントに Python パッケージをインポートすることで、その既定のバージョンをオーバーライドできます。
お使いの Automation アカウントにインポートされたバージョンが優先されます。 1 つのパッケージをインポートするには、「パッケージのインポート」を参照してください。 複数のパッケージを含むパッケージをインポートするには、「依存関係を含むパッケージのインポート」を参照してください。
Note
Python 3.10 (プレビュー) 用の既定のパッケージはインストールされていません。
ソース ファイルとしてのパッケージ
Azure Automation では、Python コードのみを含み、他の言語拡張や他の言語のコードを含まない Python パッケージのみがサポートされます。 ただし、Azure Sandbox 環境には C/C++ バイナリに必要なコンパイラがない場合があるため、代わりにホイール ファイルを使用することが推奨されます。
Note
現在、Python 3.10 (プレビュー) は、ホイール ファイルのみをサポートしています。
Python Package Index (PyPI) は、Python プログラミング言語用のソフトウェアのリポジトリです。 PyPI から Automation アカウントにインポートするために Python 3 パッケージを選択する場合は、次のファイル名の部分に注意してください。
Python のバージョンを選択する:
ファイル名の部分 | 説明 |
---|---|
cp38 | Automation では、クラウド ジョブ用に、Python 3.8 がサポートされています。 |
amd64 | Azure サンドボックス プロセスは Windows 64 ビット アーキテクチャです。 |
次に例を示します。
- pandas をインポートするには -
pandas-1.2.3-cp38-win_amd64.whl
のような名前のホイール ファイルを選択します。
PyPI で使用できる一部の Python パッケージでは、ホイール ファイルが提供されていないものもあります。 この場合は、ソース (.zip または .tar.gz ファイル) をダウンロードし、pip
を使用してホイール ファイルを生成します。
Python 3.8.x とホイールパッケージがインストールされた 64 ビット Windows コンピューターを使用して、次の手順を実行します。
- ソースファイル
pandas-1.2.4.tar.gz
をダウンロードします。 - pip を実行して、
pip wheel --no-deps pandas-1.2.4.tar.gz
コマンドでホイール ファイルを取得します。
パッケージのインポート
Automation アカウントの [共有リソース] で [Python パッケージ] を選択します。 次に [+ Python パッケージの追加] を選択します。
[Python パッケージの追加] ページで、アップロードするローカル パッケージを選択します。 パッケージには、Python 3.8 用の .whl ファイルまたは .tar.gz ファイル、Python 3.10 (プレビュー) 用の .whl ファイルを指定できます。
名前を入力し、Python 3.8 または Python 3.10 (プレビュー) として [ランタイム バージョン] を選択します。
Note
現在、Python 3.10 (プレビュー) のランタイム バージョンは、オーストラリア中部 2、韓国南部、スウェーデン南部、JIO インド中部、ブラジル南東部、インド中部、インド西部、アラブ首長国連邦中部、Gov クラウドを除くすべてのパブリック リージョンで、クラウドとハイブリッドの両方のジョブに対してサポートされています。
[インポート] を選択します。
パッケージがインポートされた後、そのパッケージはお使いの Automation アカウントの [Python パッケージ] ページに一覧表示されます。 パッケージを削除するには、パッケージを選択し、 [削除] を選択します。
依存関係を含むパッケージのインポート
Python 3.8 のパッケージとその依存関係をインポートするには、次の Python スクリプトを Python 3.8 Runbook にインポートします。 マネージド ID が Automation アカウントで有効になっていることを確認します。また、パッケージを正常にインポートするために、Automation 共同作成者アクセス権があることを確認します。
https://github.com/azureautomation/runbooks/blob/master/Utility/Python/import_py3package_from_pypi.py
スクリプトを Runbook にインポートする
Runbook のインポートの詳細については、「Azure portal から Runbook をインポートする」を参照してください。 GitHub から、インポートを実行する前にポータルからアクセスできるストレージにファイルをコピーします。
Note
現在、Azure ポータルからの Runbook のインポートは、Python 3.10 (プレビュー) ではサポートされていません。
[Runbook のインポート] ページでは、スクリプトの名前に合わせて Runbook 名が既定で設定されます。 フィールドにアクセスできる場合は、名前を変更できます。 [Runbook の種類] は、既定で [Python 2.7] になっている場合があります。 その場合は、必ず [Python 3.8] に変更してください。
Runbook を実行してパッケージと依存関係をインポートする
Runbook を作成して発行したら、実行してパッケージをインポートします。 Runbook の実行の詳細については、「Azure Automation で Runbook を開始する」を参照してください。
スクリプト (import_py3package_from_pypi.py
) には、次のパラメーターが必要です。
パラメーター | 説明 |
---|---|
subscription_id | Automation アカウントのサブスクリプション ID |
resource_group | Automation アカウントが定義されているリソース グループの名前 |
automation_account | Automation アカウント名 |
module_name | pypi.org からインポートするモジュールの名前 |
module_version | モジュールのバージョン |
パラメーター値は、単一の文字列として次の形式で指定する必要があります。
-s <subscription_id> -g <resource_group> -a<automation_account> -m <module_name> -v <module_version>
Runbook でのパラメーターの使用の詳細については、「Runbook のパラメーターを使用する」を参照してください。
Runbook でパッケージを使用する
パッケージがインポートされたら、それを Runbook で使用できます。 Azure サブスクリプションのすべてのリソース グループを一覧表示するには、次のコードを追加します。
#!/usr/bin/env python3
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.request("GET", endPoint, headers=headers, data=payload)
print(response.text)
Note
Python automationassets
パッケージは pypi.org では使用できないため、Windows ハイブリッド runbook worker にインポートすることはできません。
サンドボックスで使用可能なパッケージを特定する
次のコードを使用して、既定のインストール済みモジュールのリストを表示します。
#!/usr/bin/env python3
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
for package in installed_packages_list:
print(package)
Python 3.8 PowerShell コマンドレット
新しい Python 3.8 パッケージを追加する
New-AzAutomationPython3Package -AutomationAccountName tarademo -ResourceGroupName mahja -Name requires.io -ContentLinkUri https://files.pythonhosted.org/packages/7f/e2/85dfb9f7364cbd7a9213caea0e91fc948da3c912a2b222a3e43bc9cc6432/requires.io-0.2.6-py2.py3-none-any.whl
Response
ResourceGroupName : mahja
AutomationAccountName : tarademo
Name : requires.io
IsGlobal : False
Version :
SizeInBytes : 0
ActivityCount : 0
CreationTime : 9/26/2022 1:37:13 PM +05:30
LastModifiedTime : 9/26/2022 1:37:13 PM +05:30
ProvisioningState : Creating
すべての Python 3.8 パッケージを一覧表示する
Get-AzAutomationPython3Package -AutomationAccountName tarademo -ResourceGroupName mahja
Response :
ResourceGroupName : mahja
AutomationAccountName : tarademo
Name : cryptography
IsGlobal : False
Version :
SizeInBytes : 0
ActivityCount : 0
CreationTime : 9/26/2022 11:52:28 AM +05:30
LastModifiedTime : 9/26/2022 12:11:00 PM +05:30
ProvisioningState : Failed
ResourceGroupName : mahja
AutomationAccountName : tarademo
Name : requires.io
IsGlobal : False
Version :
SizeInBytes : 0
ActivityCount : 0
CreationTime : 9/26/2022 1:37:13 PM +05:30
LastModifiedTime : 9/26/2022 1:39:04 PM +05:30
ProvisioningState : ContentValidated
ResourceGroupName : mahja
AutomationAccountName : tarademo
Name : sockets
IsGlobal : False
Version : 1.0.0
SizeInBytes : 4495
ActivityCount : 0
CreationTime : 9/20/2022 12:46:28 PM +05:30
LastModifiedTime : 9/22/2022 5:03:42 PM +05:30
ProvisioningState : Succeeded
特定のパッケージに関する詳細の取得
Get-AzAutomationPython3Package -AutomationAccountName tarademo -ResourceGroupName mahja -Name sockets
Response
ResourceGroupName : mahja
AutomationAccountName : tarademo
Name : sockets
IsGlobal : False
Version : 1.0.0
SizeInBytes : 4495
ActivityCount : 0
CreationTime : 9/20/2022 12:46:28 PM +05:30
LastModifiedTime : 9/22/2022 5:03:42 PM +05:30
ProvisioningState : Succeeded
Python 3.8 パッケージを削除する
Remove-AzAutomationPython3Package -AutomationAccountName tarademo -ResourceGroupName mahja -Name sockets
Python 3.8 パッケージを更新する
Set-AzAutomationPython3Package -AutomationAccountName tarademo -ResourceGroupName mahja -Name requires.io -ContentLinkUri https://files.pythonhosted.org/packages/7f/e2/85dfb9f7364cbd7a9213caea0e91fc948da3c912a2b222a3e43bc9cc6432/requires.io-0.2.6-py2.py3-none-any.whl
ResourceGroupName : mahja
AutomationAccountName : tarademo
Name : requires.io
IsGlobal : False
Version : 0.2.6
SizeInBytes : 10109
ActivityCount : 0
CreationTime : 9/26/2022 1:37:13 PM +05:30
LastModifiedTime : 9/26/2022 1:43:12 PM +05:30
ProvisioningState : Creating
次のステップ
Python Runbook を準備するには、「Python Runbook を作成する」を参照してください。