Azure CLI と Python を使用して Azure Stack Edge Pro GPU デバイスに VM をデプロイする
適用対象: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
API を使用して Azure Stack Edge デバイスに仮想マシン (VM) を作成し、管理することができます。 これらの API は、ローカルの Azure Stack Edge エンドポイントを使用して呼び出される標準の Azure Resource Manager API です。 Azure Resource Manager API は、一貫した管理レイヤーを提供します。このケースでは、その管理レイヤーを通じて、デバイスに存在するローカル サブスクリプション内の VM を作成、更新、削除することができます。 Azure Stack Edge で実行されている Azure Resource Manager には、Azure PowerShell コマンドレットから接続することができます。
このチュートリアルでは、Python および Azure API を使用して、Azure Stack Edge Pro デバイスに VM を作成し、それを管理する方法について説明します。
VM デプロイのワークフロー
次の図にデプロイのワークフローを示します。
デプロイの大まかなワークフローは次のとおりです。
- Azure Resource Manager に接続する
- リソース グループを作成する
- ストレージ アカウントの作成
- hosts ファイルに BLOB の URI を追加する
- 証明書をインストールする
- VHD のアップロード
- VHD からマネージド ディスクを作成する
- イメージのマネージド ディスクから VM イメージを作成する
- 事前に作成しておいたリソースを使用して VM を作成する
- VNet を作成する
- VNet のサブネット ID を使用して VNIC を作成する
ワークフロー図の詳しい説明については、Azure PowerShell を使用して Azure Stack Edge Pro デバイスに VM をデプロイする方法に関するページを参照してください。 Azure Resource Manager に接続する方法については、Azure PowerShell を使用して Azure Resource Manager に接続する方法に関するページを参照してください。
前提条件
Azure CLI と Python を使用して、Azure Stack Edge Pro デバイスに VM を作成して管理する前に、次の手順に記載された前提条件をすべて満たしていることを確認する必要があります。
手順 1: Azure Stack Edge Pro デバイスを構成するに関するセクションで説明されているように、Azure Stack Edge Pro デバイスでネットワーク設定を完了してください。
ネットワーク インターフェイスでコンピューティングを有効にしました。 このネットワーク インターフェイスの IP を使用して、VM デプロイ用の仮想スイッチを作成します。 このプロセスは、次の手順で実行します。
[コンピューティング] に移動します。 仮想スイッチの作成に使用するネットワーク インターフェイスを選択します。
重要
コンピューティング用に構成できるポートは 1 つだけです。
そのネットワーク インターフェイスでコンピューティングを有効にします。 そのネットワーク インターフェイスに対応する仮想スイッチが Azure Stack Edge Pro によって作成、管理されます。
すべての証明書を作成し、Azure Stack Edge Pro デバイスと、お使いのクライアントの信頼されたストアにインストールします。 「手順 2: 証明書を作成してインストールする」で説明されている手順に従ってください。
自分の Azure Stack Edge Pro デバイス用に、Base-64 でエンコードされた .cer 証明書 (PEM 形式) を作成します。 この証明書が署名チェーンとしてあらかじめデバイスにアップロードされ、クライアントの信頼されたルート ストアにインストールされている必要があります。 また、このクライアントで Python が正しく動作するためには、この証明書が pem 形式になっている必要があります。
certutil コマンドでこの証明書を
pem
形式に変換します。 このコマンドは、証明書が格納されているディレクトリで実行する必要があります。certutil.exe <SourceCertificateName.cer> <DestinationCertificateName.pem>
コマンドの使用例を次に示します。
PS C:\Certificates> certutil.exe -encode aze-root.cer aze-root.pem Input Length = 2150 Output Length = 3014 CertUtil: -encode command completed successfully. PS C:\Certificates>
さらに、後でこの
pem
を Python ストアに追加します。デバイスのローカル Web UI の [ネットワーク] ページで、デバイスに IP を割り当てます。 この IP を次の場所に追加します。
- クライアント上のホスト ファイル、または
- DNS サーバーの構成
重要
エンドポイントの名前解決には、DNS サーバーの構成を変更することをお勧めします。
メモ帳を管理者として起動し (hosts ファイルを保存するには管理者特権が必要です)、
C:\Windows\System32\Drivers\etc
にある hosts ファイルを開きます。hosts ファイルに次のエントリを追加します。値は、実際のデバイスに合わせて置き換えてください。
<Device IP> login.<appliance name>.<DNS domain> <Device IP> management.<appliance name>.<DNS domain> <Device IP> <storage name>.blob.<appliance name>.<DNS domain>
次の画像を参照してください。 hosts ファイルを保存します。
この手順で使用した Python スクリプトをダウンロードします。
Azure CLI の環境を準備する:
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
手順 1: クライアントに Azure CLI と Python を設定する
プロファイルを確認して Azure CLI をインストールする
お使いのクライアントに Azure CLI をインストールします。 この例では、Azure CLI 2.0.80 がインストールされています。 Azure CLI のバージョンを確認するには、az --version コマンドを実行します。
次に示すのは、前述したコマンドのサンプル出力です。
PS C:\windows\system32> az --version azure-cli 2.0.80 command-modules-nspkg 2.0.3 core 2.0.80 nspkg 3.0.4 telemetry 1.0.4 Extensions: azure-cli-iot-ext 0.7.1 Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe' Extensions directory 'C:\.azure\cliextensions' Python (Windows) 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 02:47:15) [MSC v.1900 32 bit (Intel)] Legal docs and information: aka.ms/AzureCliLegal Your CLI is up-to-date. Please let us know how we are doing: https://aka.ms/clihats PS C:\windows\system32>
Azure CLI をお持ちでない場合は、Windows に Azure CLI をダウンロードしてインストールしてください。 Azure CLI は、Windows コマンド プロンプトまたは Windows PowerShell を使用して実行できます。
CLI の Python の場所を書き留めておきます。 Azure CLI の信頼されたルート証明書ストアの場所を特定するためには Python の場所が必要です。
この記事で使用されているサンプル スクリプトを実行するには、次のバージョンの Python ライブラリが必要となります。
azure-common==1.1.23 azure-mgmt-resource==2.1.0 azure-mgmt-network==2.7.0 azure-mgmt-compute==5.0.0 azure-mgmt-storage==1.5.0 azure-storage-blob==1.2.0rc1 haikunator msrestazure==0.6.2
これらのバージョンをインストールするには、次のコマンドを実行します。
.\python.exe -m pip install haikunator
次のサンプル出力は、haikunator のインストールを示しています。
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe -m pip install haikunator Collecting haikunator Downloading https://files.pythonhosted.org/packages/43/fa/130968f1a1bb1461c287b9ff35c630460801783243acda2cbf3a4c5964a5/haikunator-2.1.0-py2.py3-none-any.whl Installing collected packages: haikunator Successfully installed haikunator-2.1.0 You are using pip version 10.0.1, however version 20.0.1 is available. You should consider upgrading using the 'python -m pip install --upgrade pip' command. PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
次のサンプル出力は、
msrestazure
の pip インストールを示しています。PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe -m pip install msrestazure==0.6.2 Requirement already satisfied: msrestazure==0.6.2 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (0.6.2) Requirement already satisfied: msrest<2.0.0,>=0.6.0 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from msrestazure==0.6.2) (0.6.10) === CUT =========================== CUT ================================== Requirement already satisfied: cffi!=1.11.3,>=1.8 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from cryptography>=1.1.0->adal<2.0.0,>=0.6.0->msrestazure==0.6.2) (1.13.2) Requirement already satisfied: pycparser in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from cffi!=1.11.3,>=1.8->cryptography>=1.1.0->adal<2.0.0,>=0.6.0->msrestazure==0.6.2) (2.18) You are using pip version 10.0.1, however version 20.0.1 is available. You should consider upgrading using the 'python -m pip install --upgrade pip' command. PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
Azure Stack Edge Pro の CA ルート証明書を信頼する
マシンで証明書の場所を探します。 この場所は、
az cli
をインストールした場所に応じて異なる場合があります。 Windows PowerShell を管理者として実行します。az cli
による Python のインストール先パスに切り替えます (C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe
)。証明書の場所の種類を取得するには、次のコマンドを入力します。
.\python -c "import certifi; print(certifi.where())"
このコマンドレットから、次のように証明書の場所が返されます。
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python -c "import certifi; print(certifi.where())" C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
この場所は、後で使用するので、書き留めておいてください (
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
)。Azure Stack Edge Pro の CA ルート証明書を Python の既存の証明書に追加して信頼します。 先ほど PEM 証明書を保存した場所のパスを指定してください。
$pemFile = "<Path to the pem format certificate>"
たとえば、"C:\VM-scripts\rootteam3device.pem" のようなパスになります。
Windows PowerShell に、次の一連のコマンドを入力します。
$root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $root.Import($pemFile) Write-Host "Extracting required information from the cert file" $md5Hash = (Get-FileHash -Path $pemFile -Algorithm MD5).Hash.ToLower() $sha1Hash = (Get-FileHash -Path $pemFile -Algorithm SHA1).Hash.ToLower() $sha256Hash = (Get-FileHash -Path $pemFile -Algorithm SHA256).Hash.ToLower() $issuerEntry = [string]::Format("# Issuer: {0}", $root.Issuer) $subjectEntry = [string]::Format("# Subject: {0}", $root.Subject) $labelEntry = [string]::Format("# Label: {0}", $root.Subject.Split('=')[-1]) $serialEntry = [string]::Format("# Serial: {0}", $root.GetSerialNumberString().ToLower()) $md5Entry = [string]::Format("# MD5 Fingerprint: {0}", $md5Hash) $sha1Entry= [string]::Format("# SHA1 Fingerprint: {0}", $sha1Hash) $sha256Entry = [string]::Format("# SHA256 Fingerprint: {0}", $sha256Hash) $certText = (Get-Content -Path $pemFile -Raw).ToString().Replace("`r`n","`n") $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + ` $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText Write-Host "Adding the certificate content to Python Cert store" Add-Content "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem" $rootCertEntry Write-Host "Python Cert store was updated to allow the Azure Stack Edge Pro CA root certificate"
Azure Stack Edge Pro に接続する
az cloud register コマンドを実行して、Azure Stack Edge Pro 環境を登録します。
一部のシナリオでは、インターネットへの直接送信接続がプロキシまたはファイアウォール経由でルーティングされ、SSL インターセプトが適用されます。 これらの場合、“クラウドからエンドポイントを取得できません” などのエラーが出て、
az cloud register
コマンドが失敗する可能性があります。このエラーを回避するには、Windows PowerShell で次の環境変数を設定します。$ENV:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION = 1 $ENV:ADAL_PYTHON_SSL_NO_VERIFY = 1
Azure Resource Manager のエンドポイント、リソースの作成先、ソース VHD の保存先のパスについて、スクリプトの環境変数を設定します。 リソースの場所は、すべての Azure Stack Edge Pro デバイスで固定であり、
dbelocal
に設定されます。 さらに、アドレス プレフィックスとプライベート IP アドレスも指定する必要があります。 以下の環境変数は、実際の値に基づいて設定してください。ただしAZURE_RESOURCE_LOCATION
は、"dbelocal"
としてハードコーディングする必要があります。$ENV:ARM_ENDPOINT = "https://management.team3device.teatraining1.com" $ENV:AZURE_RESOURCE_LOCATION = "dbelocal" $ENV:VHD_FILE_PATH = "C:\Downloads\Ubuntu1604\Ubuntu13.vhd" $ENV:ADDRESS_PREFIXES = "5.5.0.0/16" $ENV:PRIVATE_IP_ADDRESS = "5.5.174.126"
お客様の環境を登録します。 次のパラメーターを使用して az cloud register を実行します。
値 説明 例 環境名 接続しようとしている環境の名前 名前を指定します (例: aze-environ
)。Resource Manager エンドポイント この URL は https://Management.<appliancename><dnsdomain>
です。
この URL を取得するには、自分のデバイスのローカル Web UI で [デバイス] ページに移動します。たとえば、 https://management.team3device.teatraining1.com
のようにします。az cloud register -n <environmentname> --endpoint-resource-manager "https://management.<appliance name>.<DNS domain>"
次に示すのは、前述したコマンドの使用例です。
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud register -n az-new-env --endpoint-resource-manager "https://management.team3device.teatraining1.com"
次のコマンドでアクティブな環境を設定します。
az cloud set -n <EnvironmentName>
次に示すのは、前述したコマンドの使用例です。
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud set -n az-new-env Switched active cloud to 'az-new-env'. Use 'az login' to log in to this cloud. Use 'az account set' to set the active subscription. PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
az login コマンドで Azure Stack Edge Pro 環境にサインインします。 Azure Stack Edge Pro 環境には、ユーザーまたはサービス プリンシパルとしてサインインできます。
これらの手順に従い、"ユーザー" としてサインインします。
az login
コマンド内で直接ユーザー名とパスワードを指定するか、ブラウザーを使用して認証できます。 多要素認証が有効になっているアカウントの場合は、後者を実行する必要があります。az login
の使用例を次に示します。PS C:\Certificates> az login -u EdgeARMuser
login コマンドの使用後、パスワードを入力するように求められます。 Azure Resource Manager のパスワードを入力してください。
パスワードの入力後にサインインに成功した場合のサンプル出力を次に示します。
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az login -u EdgeARMuser Password: [ { "cloudName": "az-new-env", "id": "A4257FDE-B946-4E01-ADE7-674760B8D1A3", "isDefault": true, "name": "Default Provider Subscription", "state": "Enabled", "tenantId": "c0257de7-538f-415c-993a-1b87a031879d", "user": { "name": "EdgeArmUser@localhost", "type": "user" } } ] PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
id
とtenantId
の値をメモしておきます。これらの値はそれぞれ Azure Resource Manager サブスクリプション ID と Azure Resource Manager テナント ID に対応し、後の手順で使用されるためです。"サービス プリンシパル" として機能するためには、次の環境変数が設定されている必要があります。
$ENV:ARM_TENANT_ID = "c0257de7-538f-415c-993a-1b87a031879d" $ENV:ARM_CLIENT_ID = "cbd868c5-7207-431f-8d16-1cb144b50971" $ENV:ARM_CLIENT_SECRET - "<Your Azure Resource Manager password>" $ENV:ARM_SUBSCRIPTION_ID = "<Your subscription ID>"
Azure Resource Manager クライアント ID はハードコーディングされています。 Azure Resource Manager Tenant ID と Azure Resource Manager Subscription ID はどちらも、前に実行した
az login
コマンドの出力に表示されます。 Azure Resource Manager のクライアント シークレットは、自分が設定した Azure Resource Manager のパスワードです。詳細については、Azure Resource Manager のパスワードに関するページを参照してください。
プロファイルをバージョン 2019-03-01-hybrid に変更します。 プロファイルのバージョンを変更するには、次のコマンドを実行します。
az cloud update --profile 2019-03-01-hybrid
az cloud update
の使用例を次に示します。PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud update --profile 2019-03-01-hybrid PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
手順 2: VM を作成する
VM を作成するための Python スクリプトが用意されています。 ユーザーとしてサインインするか、サービス プリンシパルとして設定されるかに応じて適切な入力をスクリプトに渡すことにより、VM が作成されます。
- Python のインストール先と同じディレクトリから Python スクリプトを実行します。
.\python.exe example_dbe_arguments_name_https.py cli
スクリプトの実行時、VHD のアップロードには 20 分から 30 分かかります。 アップロード操作の進行状況を確認するには、Azure Storage Explorer または AzCopy を使用できます。
以下に示すのは、スクリプトの実行に成功した場合のサンプル出力です。 このスクリプトによって、すべてのリソースが 1 つのリソース グループ内に作成され、それらのリソースを使用して VM が作成されます。そして最後に、作成されたすべてのリソースを含むリソース グループが削除されます。
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe example_dbe_arguments_name_https.py cli Create Resource Group Create a storage account Uploading to Azure Stack Storage as blob: ubuntu13.vhd Listing blobs... ubuntu13.vhd VM image resource id: /subscriptions/.../resourceGroups/azure-sample-group-virtual-machines118/providers/Microsoft.Compute/images/UbuntuImage Create Vnet Create Subnet Create NIC Creating Linux Virtual Machine Tag Virtual Machine Create (empty) managed Data Disk Get Virtual Machine by Name Attach Data Disk Detach Data Disk Deallocating the VM (to prepare for a disk resize) Update OS disk size Start VM Restart VM Stop VM List VMs in subscription VM: VmName118 List VMs in resource group VM: VmName118 Delete VM All example operations completed successfully! Delete Resource Group Deleted: azure-sample-group-virtual-machines118 PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>