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 コンピューターを使用して、次の手順を実行します。

  1. ソースファイル pandas-1.2.4.tar.gz をダウンロードします。
  2. pip を実行して、pip wheel --no-deps pandas-1.2.4.tar.gz コマンドでホイール ファイルを取得します。

パッケージのインポート

  1. Automation アカウントの [共有リソース][Python パッケージ] を選択します。 次に [+ Python パッケージの追加] を選択します。

    Screenshot of the Python packages page shows Python packages in the left menu and Add a Python package highlighted.

  2. [Python パッケージの追加] ページで、アップロードするローカル パッケージを選択します。 パッケージには、Python 3.8 用の .whl ファイルまたは .tar.gz ファイル、Python 3.10 (プレビュー) 用の .whl ファイルを指定できます。

  3. 名前を入力し、Python 3.8 または Python 3.10 (プレビュー) として [ランタイム バージョン] を選択します。

    Note

    現在、Python 3.10 (プレビュー) のランタイム バージョンは、オーストラリア中部 2、韓国南部、スウェーデン南部、JIO インド中部、ブラジル南東部、インド中部、インド西部、アラブ首長国連邦中部、Gov クラウドを除くすべてのパブリック リージョンで、クラウドとハイブリッドの両方のジョブに対してサポートされています。

  4. [インポート] を選択します。

    Screenshot shows the Add Python 3.8 Package page with an uploaded tar.gz file selected.

パッケージがインポートされた後、そのパッケージはお使いの Automation アカウントの [Python パッケージ] ページに一覧表示されます。 パッケージを削除するには、パッケージを選択し、 [削除] を選択します。

Screenshot shows the Python 3.8 packages page after a package has been imported.

依存関係を含むパッケージのインポート

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] に変更してください。

Screenshot shows the Python 3 runbook import page.

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 を作成する」を参照してください。