Implantar VMs em seu dispositivo de GPU do Azure Stack Edge Pro usando a CLI do Azure e o Python
APLICA-SE A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Pode criar e gerir máquinas virtuais (VMs) num dispositivo do Azure Stack Edge com APIs. Essas APIs são APIs padrão do Azure Resource Manager chamadas usando o ponto de extremidade local do Azure Stack Edge. As APIs do Azure Resource Manager proporcionam uma camada de gestão consistente que, neste caso, lhe permite criar, atualizar e eliminar VMs numa subscrição local existente no dispositivo. Pode ligar-se ao Azure Resource Manager em execução no Azure Stack Edge através dos cmdlets do Azure PowerShell.
Este tutorial descreve como criar e gerenciar uma VM em seu dispositivo Azure Stack Edge Pro usando Python e a API do Azure.
Fluxo de trabalho de implantação de VM
O fluxo de trabalho de implantação é ilustrado no diagrama a seguir.
O resumo de alto nível do fluxo de trabalho de implantação é o seguinte:
- Ligar ao Azure Resource Manager
- Criar um grupo de recursos
- Criar uma conta de armazenamento
- Adicionar URI de blob ao arquivo hosts
- Instalar certificados
- Carregar um VHD
- Criar discos gerenciados a partir do VHD
- Criar uma imagem de VM a partir do disco gerenciado pela imagem
- Criar VM com recursos criados anteriormente
- Criar uma VNet
- Criar uma VNIC usando o ID da sub-rede VNet
Para obter uma explicação detalhada do diagrama de fluxo de trabalho, consulte Implantar VMs em seu dispositivo Azure Stack Edge Pro usando o Azure PowerShell. Para obter informações sobre como se conectar ao Azure Resource Manager, consulte Conectar-se ao Azure Resource Manager usando o Azure PowerShell.
Pré-requisitos
Antes de começar a criar e gerenciar uma VM em seu dispositivo Azure Stack Edge Pro usando a CLI do Azure e o Python, você precisa ter concluído os pré-requisitos listados nas seguintes etapas:
Você concluiu as configurações de rede em seu dispositivo Azure Stack Edge Pro conforme descrito em Etapa 1: Configurar o dispositivo Azure Stack Edge Pro.
Você habilitou uma interface de rede para computação. Esse IP de interface de rede é usado para criar um comutador virtual para a implantação da VM. As etapas a seguir guiam você pelo processo:
Vá para Computação. Selecione a interface de rede que você usará para criar um comutador virtual.
Importante
Você só pode configurar uma porta para computação.
Habilite a computação na interface de rede. O Azure Stack Edge Pro cria e gerencia um comutador virtual correspondente a essa interface de rede.
Você criou e instalou todos os certificados em seu dispositivo Azure Stack Edge Pro e no armazenamento confiável do seu cliente. Siga o procedimento descrito em Etapa 2: Criar e instalar certificados.
Você criou um certificado de .cer codificado em Base-64 (formato PEM) para seu dispositivo Azure Stack Edge Pro. Esse certificado já foi carregado como cadeia de assinatura no dispositivo e instalado no armazenamento raiz confiável do seu cliente. Este certificado também é necessário em formato pem para Python trabalhar neste cliente.
Converta este certificado em
pem
formato usando o comando certutil . Você deve executar esse comando no diretório que contém seu certificado.certutil.exe <SourceCertificateName.cer> <DestinationCertificateName.pem>
A seguir mostra o uso de comandos de exemplo:
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>
Você também adicionará isso
pem
ao repositório Python mais tarde.Você atribuiu o IP do dispositivo na página Rede na interface do usuário da Web local do dispositivo. Adicione este IP a:
- O arquivo host no cliente, OU,
- A configuração do servidor DNS
Importante
Recomendamos que você modifique a configuração do servidor DNS para resolução de nomes de pontos de extremidade.
Inicie o Bloco de Notas como administrador (privilégios de administrador são necessários para salvar o arquivo) e, em seguida, abra o arquivo hosts localizado em
C:\Windows\System32\Drivers\etc
.Adicione as seguintes entradas ao seu arquivo hosts substituindo por valores apropriados para o seu dispositivo:
<Device IP> login.<appliance name>.<DNS domain> <Device IP> management.<appliance name>.<DNS domain> <Device IP> <storage name>.blob.<appliance name>.<DNS domain>
Use a imagem a seguir para referência. Salve o arquivo hosts .
Faça o download do script Python usado neste procedimento.
Prepare seu ambiente para a CLI do Azure:
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.
Etapa 1: Configurar a CLI do Azure/Python no cliente
Verificar o perfil e instalar a CLI do Azure
Instale a CLI do Azure no seu cliente. Neste exemplo, a CLI do Azure 2.0.80 foi instalada. Para verificar a versão da CLI do Azure, execute o comando az --version .
A seguir está a saída de exemplo do comando acima:
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 você não tiver a CLI do Azure, baixe e instale a CLI do Azure no Windows. Você pode executar a CLI do Azure usando o prompt de comando do Windows ou por meio do Windows PowerShell.
Anote a localização Python da CLI. Você precisa do local do Python para determinar o local do armazenamento de certificados raiz confiável para a CLI do Azure.
Para executar o script de exemplo usado neste artigo, você precisará das seguintes versões da biblioteca 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
Para instalar as versões, execute o seguinte comando:
.\python.exe -m pip install haikunator
A saída de exemplo a seguir mostra a instalação do 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>
A saída de exemplo a seguir mostra a instalação do pip para
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>
Confiar no certificado raiz da CA do Azure Stack Edge Pro
Encontre o local do certificado na sua máquina. O local pode variar dependendo de onde você instalou
az cli
o . Execute o Windows PowerShell como administrador. Mude para o caminho ondeaz cli
o Python está instalado:C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe
.Para obter o local do certificado, digite o seguinte comando:
.\python -c "import certifi; print(certifi.where())"
O cmdlet retorna o local do certificado, conforme visto abaixo:
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>
Anote este local, pois irá utilizá-lo mais tarde -
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
Confie no certificado raiz da CA do Azure Stack Edge Pro anexando-o ao certificado Python existente. Você fornecerá o caminho para onde salvou o certificado PEM anteriormente.
$pemFile = "<Path to the pem format certificate>"
Um caminho de exemplo seria "C:\VM-scripts\rootteam3device.pem"
Em seguida, digite a seguinte série de comandos no 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"
Conectar-se ao Azure Stack Edge Pro
Registre seu ambiente do Azure Stack Edge Pro executando o comando az cloud register .
Em alguns cenários, a conectividade direta de saída com a Internet é roteada por meio de um proxy ou firewall, que impõe a intercetação SSL. Nesses casos, o
az cloud register
comando pode falhar com um erro como "Não é possível obter pontos de extremidade da nuvem". Para contornar esse erro, defina as seguintes variáveis de ambiente no Windows PowerShell:$ENV:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION = 1 $ENV:ADAL_PYTHON_SSL_NO_VERIFY = 1
Defina variáveis de ambiente para o script para o ponto de extremidade do Azure Resource Manager, o local onde os recursos são criados e o caminho para onde o VHD de origem está localizado. O local dos recursos é fixo em todos os dispositivos do Azure Stack Edge Pro e está definido como
dbelocal
. Você também precisa especificar os prefixos de endereço e o endereço IP privado. Todas as variáveis de ambiente a seguir são valores baseados em seus valores, excetoAZURE_RESOURCE_LOCATION
, que deve ser codificado para"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"
Registe o seu ambiente. Use os seguintes parâmetros ao executar az cloud register:
valor Description Exemplo Nome do ambiente O nome do ambiente ao qual você está tentando se conectar Forneça um nome, por exemplo, aze-environ
Ponto de extremidade do Resource Manager Este URL é https://Management.<appliancename><dnsdomain>
.
Para obter esse URL, vá para a página Dispositivos na interface do usuário da Web local do seu dispositivo.Por exemplo, https://management.team3device.teatraining1.com
.az cloud register -n <environmentname> --endpoint-resource-manager "https://management.<appliance name>.<DNS domain>"
A seguir mostra o uso de exemplo do comando acima:
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud register -n az-new-env --endpoint-resource-manager "https://management.team3device.teatraining1.com"
Defina o ambiente ativo usando o seguinte comando:
az cloud set -n <EnvironmentName>
A seguir mostra o uso de exemplo do comando acima:
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>
Entre em seu ambiente do Azure Stack Edge Pro usando o comando az login . Você pode entrar no ambiente do Azure Stack Edge Pro como usuário ou como entidade de serviço.
Siga estes passos para iniciar sessão como utilizador:
Você pode especificar o nome de usuário e a senha diretamente no
az login
comando ou autenticar usando um navegador. Você deve fazer isso se sua conta tiver a autenticação multifator habilitada.A seguir mostra o uso de exemplo de
az login
:PS C:\Certificates> az login -u EdgeARMuser
Depois de utilizar o comando login, ser-lhe-á solicitada uma palavra-passe. Forneça a senha do Azure Resource Manager.
A seguir mostra a saída de exemplo para uma entrada bem-sucedida depois de fornecer a senha:
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>
Anote os
id
valores etenantId
pois esses valores correspondem à sua ID de Assinatura do Azure Resource Manager e à ID de Locatário do Azure Resource Manager, respectivamente, e serão usados na etapa posterior.As seguintes variáveis de ambiente precisam ser definidas para funcionar como entidade de serviço:
$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>"
Sua ID de Cliente do Azure Resource Manager é codificada. Sua ID de Locatário do Azure Resource Manager e a ID de Assinatura do Azure Resource Manager estão presentes na saída do
az login
comando que você executou anteriormente. O segredo do Cliente do Azure Resource Manager é a senha do Azure Resource Manager que você definiu.Para obter mais informações, consulte Senha do Azure Resource Manager.
Altere o perfil para a versão 2019-03-01-hybrid. Para alterar a versão do perfil, execute o seguinte comando:
az cloud update --profile 2019-03-01-hybrid
A seguir mostra o uso de exemplo de
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>
Etapa 2: Criar uma VM
Um script Python é fornecido para criar uma VM. Dependendo se você está conectado como usuário ou definido como entidade de serviço, o script usa a entrada de acordo e cria uma VM.
- Execute o script Python a partir do mesmo diretório onde o Python está instalado.
.\python.exe example_dbe_arguments_name_https.py cli
Quando o script é executado, o upload do VHD leva de 20 a 30 minutos. Para exibir o progresso da operação de carregamento, você pode usar o Gerenciador de Armazenamento do Azure ou o AzCopy.
Aqui está um exemplo de saída de uma execução bem-sucedida do script. O script cria todos os recursos dentro de um grupo de recursos, usa esses recursos para criar uma VM e, finalmente, exclui o grupo de recursos, incluindo todos os recursos que ele criou.
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>