Partilhar via


Implantar VMs em seu dispositivo de GPU do Azure Stack Edge Pro usando a CLI do Azure e o Python

APLICA-SE A:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro R Azure Stack Edge Mini RYes for Mini R SKU

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.

VM deployment workflow

O resumo de alto nível do fluxo de trabalho de implantação é o seguinte:

  1. Ligar ao Azure Resource Manager
  2. Criar um grupo de recursos
  3. Criar uma conta de armazenamento
  4. Adicionar URI de blob ao arquivo hosts
  5. Instalar certificados
  6. Carregar um VHD
  7. Criar discos gerenciados a partir do VHD
  8. Criar uma imagem de VM a partir do disco gerenciado pela imagem
  9. Criar VM com recursos criados anteriormente
  10. Criar uma VNet
  11. 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:

  1. 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.

  2. 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:

    1. 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.

    2. 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.

  3. 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.

  4. 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.

  5. 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.

    1. 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.

      Windows Explorer hosts file

    2. 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>
      
    3. Use a imagem a seguir para referência. Salve o arquivo hosts .

      hosts file in Notepad

  6. Faça o download do script Python usado neste procedimento.

  7. 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

  1. 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.

  2. 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.

  3. 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

  1. Encontre o local do certificado na sua máquina. O local pode variar dependendo de onde você instalou az clio . Execute o Windows PowerShell como administrador. Mude para o caminho onde az 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

  2. 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

  1. 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
    
  2. 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, exceto AZURE_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"
    
  3. Registe o 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 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"
    
  4. 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>
    
  5. 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": "c0257de7-538f-415c-993a-1b87a031879d",
             "user": {
                 "name": "EdgeArmUser@localhost",
                 "type": "user"
             }
         }
    ]
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
    

    Anote os id valores e pois esses valores correspondem à sua ID de Assinatura do Azure Resource Manager e à ID de Locatário do Azure Resource Manager, respectivamente, e tenantId 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 = "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>"
    

    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 executado 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.

  6. 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 você 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.

  1. Execute o script Python a partir do mesmo diretório onde o Python está instalado.
.\python.exe example_dbe_arguments_name_https.py cli
  1. 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>
    

Próximos passos

Comandos comuns da CLI Az para máquinas virtuais Linux