適用於: ✔️ 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 

據以取代 myResourceGroupvmNameimageCIURN 值。 確定已選擇 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 使用者新增至虛擬機器
  • 執行套件管理員以便在初次開機時更新現有的套件
  • 變更虛擬機器本機的主機名稱
  • 安裝應用程式套件、更新組態檔案,以及插入金鑰
  •