Implantar VMs no dispositivo de GPU 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
É possível criar e gerenciar VMs (máquinas virtuais) em um dispositivo Azure Stack Edge usando APIs. Essas são APIs padrão do Azure Resource Manager, chamadas usando o ponto de extremidade do Azure Stack Edge local. As APIs de Azure Resource Manager fornecem uma camada de gerenciamento consistente que, nesse caso, permite que você crie, atualize e exclua VMs em uma assinatura local que existe no dispositivo. Com o uso de cmdlets do Azure PowerShell, é possível conectar-se ao Azure Resource Manager em execução no Azure Stack Edge.
Descreve como criar e gerenciar uma VM no dispositivo do Azure Stack Edge Pro usando Python e a API do Azure.
Fluxo de trabalho de implantação da 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:
- Conectar-se ao Azure Resource Manager
- Criar um grupo de recursos
- Criar uma conta de armazenamento
- Adicionar o URI do blob ao arquivo hosts
- Instalar certificados
- Carregar um VHD
- Criar discos gerenciados com base no VHD
- Criar uma imagem de VM com base no disco gerenciado da imagem
- Criar uma VM com os recursos criados anteriormente
- Criar uma VNET
- Criar uma vNIC usando a ID da sub-rede da VNet
Para obter uma explicação detalhada do diagrama de fluxo de trabalho, confira Implantar VMs no dispositivo Azure Stack Edge Pro usando o Azure PowerShell. Para obter informações sobre como se conectar ao Azure Resource Manager, confira Conectar-se ao Azure Resource Manager usando o Azure PowerShell.
Pré-requisitos
Antes de começar a criar e gerenciar uma VM no dispositivo Azure Stack Edge Pro usando a CLI do Azure e o Python, você precisará concluir os pré-requisitos listados nas seguintes etapas:
Você concluiu as configurações de rede em seu dispositivo do Azure Stack Edge Pro, conforme descrito na Etapa 1: Configurar o dispositivo do Azure Stack Edge Pro.
Você habilitou um adaptador de rede para computação. Esse IP do adaptador de rede é usado para criar um comutador virtual para a implantação da VM. As seguintes etapas descreverão o processo:
Acesse Computação. Selecione o adaptador de rede que será usado para criar um comutador virtual.
Importante
Você só pode configurar uma porta para computação.
Habilite a computação no adaptador de rede. O Azure Stack Edge Pro criará e gerenciará um comutador virtual correspondente a esse adaptador de rede.
Você criou e instalou todos os certificados no dispositivo Azure Stack Edge Pro e no repositório confiável do cliente. Siga o procedimento descrito na Etapa 2: Criar e instalar certificados.
Você criou um certificado .cer (formato PEM) codificado em Base-64 para o dispositivo Azure Stack Edge Pro. Esse certificado já foi carregado como uma cadeia de assinatura no dispositivo e instalado no repositório raiz confiável do cliente. Também é necessário que esse certificado esteja no formato PEM para que o Python funcione no cliente.
Converta esse certificado para o formato
pem
usando o comando certutil. Você precisará executar esse comando no diretório que contém o certificado.certutil.exe <SourceCertificateName.cer> <DestinationCertificateName.pem>
Veja um exemplo do uso do 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>
Você também adicionará esse
pem
ao repositório do Python posteriormente.Você atribuiu o IP do dispositivo na página Rede à IU da Web local do dispositivo. Adicionar este IP a:
- O arquivo de host no cliente OU
- À configuração do servidor DNS
Importante
Recomendamos que você modifique a configuração do servidor DNS para a resolução de nome do ponto de extremidade.
Inicie o Bloco de notas como administrador (é necessário ter privilégios de Administrador para salvar o arquivo) e abra o arquivo hosts localizado em
C:\Windows\System32\Drivers\etc
.Adicione as seguintes entradas ao arquivo hosts substituindo-as por valores apropriados para 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.
Baixe o script Python usado neste procedimento.
Preparar o ambiente para a CLI do Azure:
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
Etapa 1: Configurar a CLI do Azure/Python no cliente
Confirmar o perfil e instalar a CLI do Azure
Instale a CLI do Azure no 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.
Veja uma 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>
Caso você não tenha a CLI do Azure, baixe-a e instale-a no Windows. Execute a CLI do Azure usando o prompt de comando do Windows ou por meio do Windows PowerShell.
Anote a localização do Python da CLI. Você precisará da localização do Python para determinar a localização do repositório de certificados raiz confiáveis da CLI do Azure.
Para executar o script de exemplo usado neste artigo, você precisará ter as seguintes versões da biblioteca do 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 seguinte saída de exemplo 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 seguinte saída de exemplo 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 AC do Azure Stack Edge Pro
Encontre a localização do certificado no computador. Ela poderá variar dependendo do local de instalação da
az cli
. Execute o Windows PowerShell como Administrador. Alterne para o caminho em que aaz cli
instalou o Python:C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe
.Para obter a localização do certificado, digite o seguinte comando:
.\python -c "import certifi; print(certifi.where())"
O cmdlet retorna a localização do certificado, conforme mostrado 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 a localização, pois você a usará mais tarde:
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
Confie no certificado raiz da AC do Azure Stack Edge Pro acrescentando-o ao certificado existente do Python. Você fornecerá o caminho para a localização na qual o certificado PEM foi salvo anteriormente.
$pemFile = "<Path to the pem format certificate>"
Um caminho de exemplo é "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 ckoud register.
Em alguns cenários, a conectividade de saída direta com a Internet é roteada por um proxy ou um firewall, o que impõe a interceptação de SSL. Nesses casos, o comando
az cloud register
pode falhar com um erro como “Não é possível obter pontos de extremidade da nuvem”. Para resolver 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 do script no ponto de extremidade do Azure Resource Manager, no local em que os recursos foram criados e no caminho em que o VHD de origem se encontra. A localização dos recursos é fixa em todos os dispositivos Azure Stack Edge Pro e é definida 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 nos seus valores, excetoAZURE_RESOURCE_LOCATION
, que deve ser embutida em código em"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"
Registre seu ambiente. Use os seguintes parâmetros ao executar az cloud register:
Valor Descrição 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 Esta URL é https://Management.<appliancename><dnsdomain>
.
Para obter essa URL, acesse a página Dispositivos na IU da Web local do dispositivo.Por exemplo, https://management.team3device.teatraining1.com
.az cloud register -n <environmentname> --endpoint-resource-manager "https://management.<appliance name>.<DNS domain>"
Veja um exemplo do uso 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>
Veja um exemplo do uso 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 no seu ambiente do Azure Stack Edge Pro usando o comando az login. Você pode entrar no ambiente do Azure Stack Edge Pro como um usuário ou uma entidade de serviço.
Siga estas etapas para entrar nele como um usuário:
Especifique o nome de usuário e a senha diretamente no comando
az login
ou autentique-se usando um navegador. É necessário escolher a última opção caso sua conta tenha a autenticação multifator habilitada.Veja um exemplo do uso de
az login
:PS C:\Certificates> az login -u EdgeARMuser
Depois de usar o comando de logon, você precisará fornecer uma senha. Forneça a senha do Azure Resource Manager.
Veja uma saída de exemplo de uma conexão bem-sucedida após o fornecimento da 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>
Tome nota dos valores de
id
etenantId
, pois eles correspondem, respectivamente, à sua ID de assinatura do Azure Resource Manager e à ID de locatário do Azure Resource Manager, e serão usados em uma etapa posterior.As seguintes variáveis de ambiente precisarão ser definidas para que funcionem como uma 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>"
A ID de cliente do Azure Resource Manager é embutida em código. A ID de locatário do Azure Resource Manager e a ID de assinatura do Azure Resource Manager estão presentes na saída do comando
az login
executado anteriormente. O segredo do cliente do Azure Resource Manager é a senha do Azure Resource Manager definida por você.Para obter mais informações, confira 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
Veja um exemplo do uso 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 você criar uma VM. Dependendo se você estiver conectado como um usuário ou definido como uma entidade de serviço, o script usará a entrada de acordo e criará uma VM.
- Execute o script Python no mesmo diretório em que o Python está instalado.
.\python.exe example_dbe_arguments_name_https.py cli
Quando o script for executado, o upload do VHD levará de 20 a 30 minutos. Para ver o progresso da operação de upload, use o Gerenciador de Armazenamento do Azure ou o AzCopy.
Veja uma saída de exemplo de uma execução bem-sucedida do script. O script cria todos os recursos em um grupo de recursos, usa esses recursos para criar uma VM e, por fim, exclui o grupo de recursos, incluindo todos os recursos criados.
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>
Próximas etapas
Comandos comuns da CLI do Az para máquinas virtuais do Linux