Compartilhar via


Problemas ao usar extensões de VM em sistemas de máquinas virtuais Linux do Azure habilitadas para Python 3

Observação

A Microsoft incentiva os usuários a adotarem o Python 3.x em seus sistemas, a menos que sua carga de trabalho exija suporte a Python 2.x. Exemplos desse requisito podem incluir scripts de administração herdados ou extensões como Azure Disk Encryption e Azure Monitor.

Antes de instalar o Python 2.x em produção, considere a questão do suporte a longo prazo do Python 2.x, particularmente sua capacidade de receber atualizações de segurança. Como produtos, incluindo parte da extensão mencionada, atualização com suporte a Python 3.8, você deve descontinuar o uso do Python 2.x.

Algumas distribuições do Linux fizeram e transição para o Python 3.8 e removeram completamente o ponto de entrada herdado /usr/bin/python para o Python. Essa transição afeta a implantação automatizada e pronta para uso de determinadas extensões de VM (máquina virtual) com estas duas condições:

  • Extensões que ainda estão em transição para o suporte do Python 3.x
  • Extensões que usam o ponto de entrada herdado /usr/bin/python

Os usuários de distribuição do Linux que fizeram a transição para o Python 3.x devem garantir que o ponto de entrada herdado /usr/bin/python exista antes de tentarem implantar essas extensões em suas VMs. Caso contrário, a implantação da extensão poderá falhar.

  • As distribuições endossadas do Linux que são afetadas incluem o Ubuntu Server 20.04 LTS e o Ubuntu pro 20.04 LTS.

  • As extensões de VM afetadas incluem Azure Disk Encryption, Log Analytics, Acesso à VM (usado para redefinição de senha) e Diagnósticos de convidado (usados para contadores de desempenho adicionais).

As atualizações in-loco, como a atualização do Ubuntu 18.04 LTS para o Ubuntu 20.04 LTS, devem manter o /usr/bin/python symlink e permanecer inalteradas.

Resolução

Considere estas recomendações gerais antes de implantar extensões nos cenários afetados conhecidos descritos anteriormente no Resumo:

  1. Antes de implantar a extensão, restabeleça o symlink /usr/bin/python usando o método fornecido pelo fornecedor de distribuição do Linux.

    • Por exemplo, para Python 2.7, use: sudo apt update && sudo apt install python-is-python2
  2. Esta recomendação é para clientes do Azure e não tem suporte no Azure Stack:

    • Se você já tiver implantado uma instância que exibe esse problema, use a funcionalidade Executar comando na folha da VM para executar os comandos mencionados acima. A extensão Executar comando em si não é afetada pela transição para o Python 3.8.
  3. Se você estiver implantando uma nova instância e precisar definir uma extensão no tempo de provisionamento, use dados de usuário de cloud-init para instalar os pacotes mencionados acima.

    Exemplo, para Python 2.7:

    # create cloud-init config
    cat > cloudinitConfig.json <<EOF
    #cloud-config
    package_update: true
    
    runcmd:
    - sudo apt update
    - sudo apt install python-is-python2 
    EOF
    
    # create VM
    az vm create \
        --resource-group <resourceGroupName> \
        --name <vmName> \
        --image <Ubuntu 20.04 Image URN> \
        --admin-username azadmin \
        --ssh-key-value "<sshPubKey>" \
        --custom-data ./cloudinitConfig.json
    
  4. Se os administradores de política da sua organização determinarem que as extensões não devem ser implantadas nas VMs, você poderá desabilitar o suporte à extensão no momento do provisionamento:

    • API REST

      Para desabilitar e habilitar extensões quando você puder implantar uma VM com esta propriedade:

        "osProfile": {
          "allowExtensionOperations": false
        },
      

Próximas etapas

Consulte Outras alterações de sistema base desde 18.04 LTS – Python 3 por padrão para obter informações adicionais.