適用於:
✔️ Linux VM ✔️ 彈性擴展集
本文會示範如何在 Azure 佈建期間,使用
cloud-init
在 Linux 虛擬機器 (VM) 上或虛擬機器擴展集 (VMSS) 上執行現有的 Bash 指令碼。 一旦 Azure 佈建資源,這些 cloud-init 指令碼就會在初次開機時執行。 如需深入了解 cloud-init 如何以原生方式在 Azure 和支援的 Linux 散發版本中運作,請參閱
cloud-init 概觀
使用 cloud-init 執行 Bash 指令碼
透過 cloud-init,您不需要將現有指令碼轉換成雲端組態,cloud-init 接受多種輸入類型,其中一個就是 Bash 指令碼。
如果您已使用 Linux 自訂指令碼的 Azure 延伸模組來執行指令碼,您可以將其移轉為使用 cloud-init。 但是,Azure 延伸模組有整合的指令碼失敗警示報告,而 cloud-init 映像部署則是「不會」在指令碼失敗時失敗。
若要在實際操作中查看這項功能,可建立簡單的 Bash 指令碼進行測試。 如同 cloud-init 的
#cloud-config
檔案,此指令碼必須位於您執行 AzureCLI 命令來佈建虛擬機器的位置。 針對此案例,在 Cloud Shell 中 (而不是本機電腦上) 建立該檔案。 您可以使用任何您想要的編輯器。 請確定已正確複製整個 cloud-init 檔案,特別是第一行。
#!/bin/sh
echo "this has been written via cloud-init" + $(date) >> /tmp/myScript.txt
部署此映像前,您必須使用 az group create 命令建立資源群組。 Azure 資源群組是在其中部署與管理 Azure 資源的邏輯容器。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。
az group create --name myResourceGroup --location eastus
現在,請使用 az vm create 建立虛擬機器並以 --custom-data simple_bash.sh
指定 Bash 指令碼,如下所示:
az vm create \
--resource-group myResourceGroup \
--name vmName \
--image imageCIURN \
--custom-data simple_bash.sh \
--generate-ssh-keys
據以取代 myResourceGroup、 vmName和 imageCIURN 值。 確定已選擇 Cloud-init 的映射。
驗證已執行的 Bash 指令碼
以 SSH 連線到顯示於由上述命令所產生之輸出中的 VM 公用 IP 位址。 輸入您自己的 使用者 和 publicIpAddress ,如下所示:
ssh <user>@<publicIpAddress>
確認 /tmp/myScript.txt
檔案存在,並在其中具有適當的文字。
sudo cat /tmp/myScript
如果沒有,您可以檢查 以 /var/log/cloud-init.log
取得更多詳細資料。 搜尋下列項目:
sudo cat /var/log/cloud-init.log
Running config-scripts-user using lock Running command ['/var/lib/cloud/instance/scripts/part-001']
如需其他設定變更的 cloud-init 範例,請參閱下列文件:
將其他 Linux 使用者新增至虛擬機器
執行套件管理員以便在初次開機時更新現有的套件
變更虛擬機器本機的主機名稱
安裝應用程式套件、更新組態檔案,以及插入金鑰