共用方式為


在已啟用 Python 3 的 Linux Azure 虛擬機器系統中使用 VM 延伸模組的問題

注意

Microsoft 鼓勵使用者在其系統中採用 Python 3.x,除非您的 工作負載需要 Python 2.x 支援。 此需求的範例可能包括舊版系統管理指令碼,或 Azure 磁碟加密Azure 監視器等延伸模組。

在 生產環境中安裝 Python 2.x 之前,請考慮 Python 2.x 的長期支援問題,特別是其接收安全性更新的能力。 產品,包括一些所述的延伸模組,使用 Python 3.8 支援進行更新,您應該停止使用 Python 2.x。

某些 Linux 發行版本已轉換成 Python 3.8,並已完全移除 Python 的舊版 /usr/bin/python 輸入點。 此轉換會影響具有下列兩個條件的特定虛擬機器 (VM) 延伸模組的現用自動化部署:

  • 仍在轉換至 Python 3.x 支援的延伸模組
  • 使用舊版 /usr/bin/python 進入點的延伸模組

已轉換至 Python 3.x 的 Linux 發行版本使用者必須確保舊版 /usr/bin/python 進入點存在,然後再嘗試將這些延伸模組部署至其 VM。 否則,延伸模組部署可能會失敗。

  • 受影響的已背書 Linux 發行版包括 Ubuntu Server 20.04 LTSUbuntu Pro 20.04 LTS

  • 受影響的 VM 延伸模組包括 Azure 磁碟加密Log AnalyticsVM 存取 (用於密碼重設),以及客體診斷 (用於其他效能計數器)。

就地升級,例如從 Ubuntu 18.04 LTS 升級至 Ubuntu 20.04 LTS,應該保留 /usr/bin/python 符號連結,而且不會受到影響。

解決方法

在先前在摘要中所述的已知受影響案例中部署延伸模組之前,請先考量下列一般建議:

  1. 在部署延伸模組之前,請先使用Linux散發廠商提供的方法,恢復 /usr/bin/python 符號連結。

    • 例如,針對 Python 2.7,請使用:sudo apt update && sudo apt install python-is-python2
  2. 此建議適用於 Azure 客戶,而且 Azure Stack 不支援:

    • 如果您已部署顯示此問題的執行個體,請使用 VM 刀鋒視窗中的「執行命令」功能來執行上述命令。 執行命令延伸模組本身不會受到轉換至 Python 3.8 的影響。
  3. 如果您要部署新的執行個體,而且需要在佈建階段設定延伸模組,請使用 cloud-init 使用者資料來安裝上述套件。

    例如,針對 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. 如果您的組織原則管理員判斷不應該在 VM 中部署延伸模組,您可以在佈建階段停用延伸模組支援:

    • REST API

      若要在您可以使用此屬性部署 VM 時停用並啟用延伸模組:

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

下一步

如需其他資訊,請參閱自 18.04 LTS - Python 3 以來的其他基底系統變更