Distribuire macchine virtuali in un dispositivo Azure Stack Edge Pro con GPU tramite l'interfaccia della riga di comando di Azure e Python
SI APPLICA A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
È possibile creare e gestire le macchine virtuali (VM) in un dispositivo Azure Stack Edge tramite API. Si tratta di API standard di Azure Resource Manager chiamate usando l'endpoint locale di Azure Stack Edge. Le API di Azure Resource Manager offrono un livello di gestione coerente che in questo caso consente di creare, aggiornare ed eliminare le VM in una sottoscrizione locale esistente nel dispositivo. È possibile connettersi all'istanza di Azure Resource Manager in esecuzione in Azure Stack Edge tramite cmdlet di Azure PowerShell.
Questa esercitazione descrive come creare e gestire una macchina virtuale nel dispositivo Azure Stack Edge Pro usando Python e l'API di Azure.
Flusso di lavoro di distribuzione della VM
Il flusso di lavoro di distribuzione è illustrato nel diagramma seguente.
Il riepilogo generale del flusso di lavoro di distribuzione è il seguente:
- Connettersi ad Azure Resource Manager
- Creare un gruppo di risorse
- Creare un account di archiviazione
- Aggiungere l'URI del BLOB al file hosts
- Installare i certificati
- Caricare un VHD
- Creare dischi gestiti dal disco rigido virtuale
- Creare un'immagine di VM dal disco gestito dell'immagine
- Creare una VM con le risorse create in precedenza
- Creare una rete virtuale
- Creare una scheda di interfaccia di rete virtuale usando l'ID subnet della rete virtuale
Per una spiegazione dettagliata del diagramma del flusso di lavoro, vedere Distribuire macchine virtuali nel dispositivo Azure Stack Edge Pro con Azure PowerShell. Per informazioni su come connettersi ad Azure Resource Manager, vedere Connettersi ad Azure Resource Manager con Azure PowerShell.
Prerequisiti
Prima di iniziare a creare e gestire una macchina virtuale nel dispositivo Azure Stack Edge Pro usando l'interfaccia della riga di comando di Azure e Python, è necessario assicurarsi di aver soddisfatto i prerequisiti elencati nei passaggi seguenti:
Sono state completate le impostazioni di rete nel dispositivo Azure Stack Edge Pro come descritto nel passaggio 1: Configurare il dispositivo Azure Stack Edge Pro.
È stata abilitata un'interfaccia di rete per il calcolo. L'indirizzo IP di questa interfaccia di rete viene usato per creare uno switch virtuale per la distribuzione della VM. I passaggi seguenti illustrano il processo:
Passare a Calcolo. Selezionare l'interfaccia di rete che si userà per creare uno switch virtuale.
Importante
È possibile configurare una sola porta per il calcolo.
Abilitare il calcolo nell'interfaccia di rete. Azure Stack Edge Pro crea e gestisce una rete virtuale corrispondente a tale interfaccia di rete.
Sono stati creati e installati tutti i certificati nel dispositivo Azure Stack Edge Pro e nell'archivio attendibile del client. Seguire la procedura descritta nel passaggio 2: Creare e installare i certificati.
È stato creato un certificato con estensione cer (formato PEM) e codifica Base64 per il dispositivo Azure Stack Edge Pro. Il certificato è già stato caricato come catena di firma nel dispositivo e installato nell'archivio radice attendibile nel client. Il certificato è necessario anche in formato pem per il funzionamento di Python in questo client.
Convertire il certificato in
pem
formato usando il comando certutil . È necessario eseguire questo comando nella directory che contiene il certificato.certutil.exe <SourceCertificateName.cer> <DestinationCertificateName.pem>
Ecco la sintassi di esempio di questo comando:
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>
Questo verrà aggiunto anche
pem
all'archivio Python in un secondo momento.L'indirizzo IP del dispositivo è stato assegnato nella pagina Rete dell'interfaccia utente Web locale del dispositivo. Aggiungere questo indirizzo IP a:
- Il file host nel client OPPURE
- La configurazione del server DNS
Importante
È consigliabile modificare la configurazione del server DNS per la risoluzione dei nomi di endpoint.
Avviare il Blocco note come amministratore (per salvare il file sono necessari privilegi di amministratore), quindi aprire il file hosts nella cartella
C:\Windows\System32\Drivers\etc
.Aggiungere le voci seguenti al file hosts sostituendo i valori con quelli appropriati per il dispositivo:
<Device IP> login.<appliance name>.<DNS domain> <Device IP> management.<appliance name>.<DNS domain> <Device IP> <storage name>.blob.<appliance name>.<DNS domain>
Usare l'immagine seguente come riferimento. Salvare il file hosts.
Scaricare lo script Python usato in questa procedura.
Preparare l'ambiente per l'interfaccia della riga di comando di Azure:
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Passaggio 1: Configurare l'interfaccia della riga di comando di Azure/Python nel client
Verificare il profilo e installare l'interfaccia della riga di comando di Azure
Installare l'interfaccia della riga di comando di Azure nel client. In questo esempio è stata installata l'interfaccia della riga di comando di Azure 2.0.80. Per verificare la versione dell'interfaccia della riga di comando di Azure, eseguire il comando az --version .
Di seguito è riportato l'output di esempio del comando precedente:
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>
Se non è disponibile, scaricare e installare l'interfaccia della riga di comando di Azure in Windows. È possibile eseguire l'interfaccia della riga di comando di Azure usando il prompt dei comandi di Windows o Windows PowerShell.
Prendere nota del percorso Python dell'interfaccia della riga di comando. È necessario il percorso Python per determinare il percorso dell'archivio certificati radice attendibile per l'interfaccia della riga di comando di Azure.
Per eseguire lo script di esempio usato in questo articolo, sono necessarie le versioni seguenti della libreria 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
Per installare le versioni, eseguire il comando seguente:
.\python.exe -m pip install haikunator
L'output di esempio seguente mostra l'installazione di 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>
L'output di esempio seguente mostra l'installazione di pip per
msrestazure
: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>
Considerare attendibile il certificato radice CA di Azure Stack Edge Pro
Trovare il percorso del certificato nel computer. Il percorso può variare a seconda della posizione in cui è stato installato
az cli
. Eseguire Windows PowerShell come amministratore. Passare al percorso in cuiaz cli
ha installato Python:C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe
.Per ottenere il percorso del certificato, digitare il comando seguente:
.\python -c "import certifi; print(certifi.where())"
Il cmdlet restituisce il percorso del certificato, come illustrato di seguito:
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>
Prendere nota di questo percorso perché verrà usato in un secondo momento:
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
Considerare attendibile il certificato radice CA di Azure Stack Edge Pro aggiungendolo al certificato Python esistente. Specificare il percorso in cui è stato salvato il certificato PEM in precedenza.
$pemFile = "<Path to the pem format certificate>"
Un percorso di esempio è "C:\VM-scripts\rootteam3device.pem"
Digitare quindi la serie seguente di comandi in 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"
Connettersi ad Azure Stack Edge Pro
Registrare l'ambiente Azure Stack Edge Pro eseguendo il comando az cloud register .
In alcuni scenari la connettività Internet diretta in uscita viene instradata attraverso un proxy o un firewall che impone l'intercettazione SSL. In questi casi, il
az cloud register
comando può non riuscire con un errore, ad esempio "Impossibile ottenere gli endpoint dal cloud". Per risolvere questo errore, impostare le variabili di ambiente seguenti in Windows PowerShell:$ENV:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION = 1 $ENV:ADAL_PYTHON_SSL_NO_VERIFY = 1
Impostare le variabili di ambiente per lo script per l'endpoint di Azure Resource Manager, la posizione in cui vengono create le risorse e il percorso in cui si trova il disco rigido virtuale. La posizione delle risorse è fissa in tutti i dispositivi Azure Stack Edge Pro ed è impostata su
dbelocal
. È anche necessario specificare i prefissi degli indirizzi e l'indirizzo IP privato. Tutte le variabili di ambiente seguenti sono valori basati sui valori, ad eccezioneAZURE_RESOURCE_LOCATION
di , che devono essere hardcoded in"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"
Registrare l'ambiente. Usare i parametri seguenti durante l'esecuzione di az cloud register:
valore Descrizione Esempio Nome ambiente Il nome dell'ambiente a cui connettersi Specificare un nome, ad esempio aze-environ
L'endpoint di Resource Manager L'URL è https://Management.<appliancename><dnsdomain>
.
Per ottenere questo URL, passare alla pagina Dispositivi nell'interfaccia utente Web locale del dispositivo.Ad esempio: https://management.team3device.teatraining1.com
.az cloud register -n <environmentname> --endpoint-resource-manager "https://management.<appliance name>.<DNS domain>"
Ecco un esempio di sintassi del comando precedente:
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud register -n az-new-env --endpoint-resource-manager "https://management.team3device.teatraining1.com"
Impostare l'ambiente attivo usando il comando seguente:
az cloud set -n <EnvironmentName>
Ecco un esempio di sintassi del comando precedente:
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>
Accedere all'ambiente Azure Stack Edge Pro usando il comando az login . È possibile accedere all'ambiente Azure Stack Edge Pro sia come utente che come entità servizio.
Per accedere come utente, seguire questa procedura:
È possibile specificare il nome utente e una password direttamente all'interno del comando
az login
oppure eseguire l'autenticazione tramite un browser. È necessario eseguire quest'ultima operazione se l'account dispone dell'autenticazione a più fattori abilitata.Ecco un esempio di sintassi di
az login
:PS C:\Certificates> az login -u EdgeARMuser
Dopo aver usato il comando di accesso, viene richiesta una password. Specificare la password di Azure Resource Manager.
Di seguito è riportato l'output di esempio per un accesso riuscito dopo aver specificato la password:
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": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "user": { "name": "EdgeArmUser@localhost", "type": "user" } } ] PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
Prendere nota dei
id
valori etenantId
in quanto questi valori corrispondono rispettivamente all'ID sottoscrizione di Azure Resource Manager e all'ID tenant di Azure Resource Manager e verranno usati nel passaggio successivo.Le variabili di ambiente seguenti devono essere impostate per funzionare da entità servizio:
$ENV:ARM_TENANT_ID = "aaaabbbb-0000-cccc-1111-dddd2222eeee" $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>"
L'ID client di Azure Resource Manager Client ID è hardcoded. L'ID tenant di Azure Resource Manager e l'ID sottoscrizione di Azure Resource Manager sono entrambi presenti nell'output del
az login
comando eseguito in precedenza. Il segreto client di Azure Resource Manager è la password di Azure Resource Manager impostata.Per altre informazioni, vedere Panoramica di Azure Resource Manager.
Impostare il profilo sulla versione 2019-03-01-hybrid. Per cambiare la versione del profilo, eseguire il comando seguente:
az cloud update --profile 2019-03-01-hybrid
Ecco un esempio di sintassi di
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>
Passaggio 2: Creare una macchina virtuale
Per creare una macchina virtuale, è disponibile uno script Python. A seconda del fatto che sia stato eseguito l'accesso come utente o che sia stata impostata un'entità servizio, lo script accetta l'input di conseguenza e crea una VM.
- Eseguire lo script Python dalla stessa directory in cui è installato Python.
.\python.exe example_dbe_arguments_name_https.py cli
Quando viene eseguito lo script, il caricamento del disco rigido virtuale richiede 20-30 minuti. Per visualizzare lo stato di avanzamento dell'operazione di caricamento, è possibile usare Azure Storage Explorer o AzCopy.
Ecco un esempio di output di un'esecuzione riuscita dello script. Lo script crea tutte le risorse all'interno di un gruppo di risorse, usa queste risorse per creare una VM e infine elimina il gruppo di risorse, incluse tutte le risorse create.
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>
Passaggi successivi
Comandi az comuni dell'interfaccia della riga di comando per macchine virtuali Linux