Azure 虛擬機器上的自訂資料和 cloud-init
適用於:✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集
在 Microsoft Azure 虛擬機器 (VM) 佈建時,您可能需要插入指令碼或其他中繼資料。 在其他雲端,此概念通常稱為「使用者資料」。 Microsoft Azure 有類似的特色,稱為「自訂資料」。
自訂資料於 VM 最初啟動或設定期間提供給 VM,這稱為「佈建」。 佈建是指提供 VM 建立參數 (例如主機名稱、使用者名稱、密碼、憑證、自訂資料和金鑰) 給 VM 的過程。 佈建代理程式 (例如 Linux 代理程式或 cloud-init) 會處理這些參數。
將自訂資料傳遞至 VM
若要使用自訂資料,除非您使用 CLI 工具替您轉換,例如 AZ CLI,否則必須先將內容進行 Base64 編碼,再將資料傳遞至 API。 大小不能超過 64 KB。
在 CLI 中,您可以將自訂資料當作檔案傳遞,如下列範例所示。 檔案會轉換成 Base64。
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image Ubuntu2204 \
--custom-data cloud-init.txt \
--generate-ssh-keys
Azure Resource Manager 中有 base64 函式:
"name": "[parameters('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-07-01",
"location": "[parameters('location')]",
"dependsOn": [
..],
"variables": {
"customDataBase64": "[base64(parameters('stringData'))]"
},
"properties": {
..
"osProfile": {
"computerName": "[parameters('virtualMachineName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"customData": "[variables('customDataBase64')]"
},
處理自訂資料
安裝在 VM 上的佈建代理程式負責與平台通訊,並將資料放在檔案系統上。
Windows
自訂資料當成二進位檔案放在 %SYSTEMDRIVE%\AzureData\CustomData.bin 中,但不會處理。 如果要處理此檔案,您需要建立自訂映像,並撰寫程式碼來處理 CustomData.bin。
Linux
在 Linux 作業系統上,自訂資料透過 ovf-env.xml 檔案傳遞至 VM。 該檔案於佈建期間複製到 /var/lib/waagent 目錄。 較新版的 Linux 代理程式會將 Base64 編碼的資料複製到 /var/lib/waagent/CustomData,以便您進行處理。
Azure 目前支援兩個佈建代理程式:
Linux 代理程式。 代理程式預設不處理自訂資料。 您需要建立自訂映像並啟用資料。 相關設定如下:
Provisioning.DecodeCustomData
Provisioning.ExecuteCustomData
啟用自訂資料並執行指令碼時,在指令碼執行完畢前,虛擬機器都不會回報成功的 VM 佈建。 如果指令碼超過 VM 佈建時間限制總計 40 分鐘,VM 建立會失敗。
如果指令碼無法執行,或在執行期間發生錯誤,則不算是嚴重的佈建失敗。 您必須建立通知路徑,以獲知指令碼的完成狀態。
若要針對自訂資料執行進行疑難排解,請檢閱 /var/log/waagent.log。
cloud-init。 此代理程式預設會處理自訂資料。 接受多種格式的自訂資料,例如 cloud-init 設定和指令碼。
類似於 Linux 代理程式,當 cloud-init 處理自訂資料時,如果在設定處理或指令碼執行期間發生錯誤,則不算是嚴重的佈建失敗。 您必須建立通知路徑,以獲知指令碼的完成狀態。
但不同於 Linux 代理程式,cloud-init 不會等待使用者的自訂資料設定完成,才向平台回報 VM 已就緒。 如需 Azure 上的 cloud-init 的詳細資訊,包括疑難排解,請參閱 Azure 中對於虛擬機器的 cloud-init 支援。
常見問題集
我可以在建立 VM 後更新自訂資料嗎?
對於單一 VM,您無法在 VM 模型中更新自訂資料。 但針對虛擬機器擴展集,您可以更新自訂資料。 如需詳細資訊,請參閱修改擴展集。 當您在模型中更新虛擬機器擴展集的自訂資料時:
- 擴展集的現有執行個體需要更新至最新模型並重新製作映像,才能取得更新的自訂資料。
- 新執行個體會收到新的自訂資料。
我可以將機密值放置在自訂資料中嗎?
建議您不要將敏感性資料儲存在自訂資料中。 如需詳細資訊,請參閱 Azure 資料安全性和加密最佳做法。
在 IMDS 中是否提供自訂資料功能?
Azure Instance Metadata Service (IMDS) 中無法使用自訂資料。 建議在 IMDS 中改用使用者資料。 如需詳細資訊,請參閱 Azure Instance Metadata Service 中的使用者資料。