若要在擴展集中的虛擬機器 (VM) 執行個體上執行應用程式,您必須先安裝應用程式元件和必要的檔案。 在先前的教學課程中,您已瞭解如何建立及使用自訂 VM 映像來部署 VM 執行個體。 此自訂映像包含手動應用程式安裝和設定。 您也可以在部署每個 VM 執行個體之後,將應用程式自動安裝至擴展集,或更新已在擴展集上執行的應用程式。 在本教學課程中,您將了解如何:
- 自動將應用程式安裝到擴展集
- 使用 Azure 自訂腳本延伸模組
- 更新在擴展集上執行的應用程式
如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶 。
先決條件
使用 Azure Cloud Shell 中的 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱 如何在 Docker 容器中執行 Azure CLI。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文需要 2.0.29 版或更新版本的 Azure CLI。 如果使用 Azure Cloud Shell,則已安裝最新版本。
什麼是 Azure 自訂腳本延伸模組?
自訂腳本延伸模組會在 Azure VM 上下載並執行腳本。 此擴充功能適用於部署後設定、軟體安裝或任何其他設定/管理工作。 腳本可以從 Azure 儲存體或 GitHub 下載,或在延伸模組執行階段提供給 Azure 入口網站。
自訂指令碼延伸模組會與 Azure Resource Manager 範本整合,也可以與 Azure CLI、Azure PowerShell、Azure 入口網站或 REST API 搭配使用。 如需詳細資訊,請參閱 自訂指令碼延伸概觀。
若要搭配 Azure CLI 使用自訂腳本延伸模組,您可以建立 JSON 檔案,以定義要取得的檔案和要執行的命令。 這些 JSON 定義可以在規模設定部署中重複使用,以套用一致的應用程式安裝。
建立自訂腳本延伸模組定義
若要查看作用中的自訂指令碼擴充功能,可建立擴展集來安裝 NGINX Web 伺服器,並輸出 VM 執行個體的主機名稱。 下列自訂指令碼延伸模組定義會從 GitHub 下載範例指令碼、安裝必要的套件,然後將 VM 執行個體主機名稱寫入基本 HTML 頁面。
在目前的 shell 中,建立名為 customConfig.json 的檔案,並貼上下列組態。 例如,在 Cloud Shell 中建立檔案,而不是在本機電腦上。 您可以使用任何您想要的編輯器。 在本教程中,我們將使用 Vi。 在 Cloud Shell 中輸入vi 。 將下列 JSON 貼到編輯器中,然後輸入 :w customConfig.json。
{
"fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx.sh"],
"commandToExecute": './automate_nginx.sh'
}
備註
如果您決定在下面的 --settings 參數中直接參考 JSON (而不是參考 customConfig.json 檔案),則可能需要反轉 JSON 區塊內單引號 (') 和雙引號 (“) 的使用。
建立擴展集
這很重要
自 2023 年 11 月起,如果未指定協調流程模式,則使用 PowerShell 和 Azure CLI 建立的 VM 擴展集會預設為彈性協調流程模式。 如需此變更的詳細資訊,以及您應該採取的動作,請前往針對 VMSS PowerShell/CLI 客戶的重大改變 - Microsoft 社群中樞
使用 az group create 來建立資源群組。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組:
az group create --name myResourceGroup --location eastus
現在使用 az vmss create 建立虛擬機器規模集。 下列範例會建立名為 myScaleSet 的擴展集,以及產生 SSH 金鑰 (如果不存在)︰
az vmss create \
--resource-group myResourceGroup \
--name myScaleSet \
--image Ubuntu2204 \
--orchestration-mode Flexible \
--admin-username azureuser \
--generate-ssh-keys
建立及設定所有擴展集資源和 VM 需要幾分鐘的時間。
套用自訂指令碼延伸模組
使用 az vmss extension set,將自訂指令碼延伸組態套用到擴展集中的 VM 執行個體。 下列範例會將 customConfig.json 設定套用至名為 myResourceGroup 的資源群組中的 myScaleSet VM 執行個體:
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings customConfig.json
謹慎
檔案名稱區分大小寫。 使用這些說明中所述的確切檔案名稱以避免失敗。
將延伸模組套用至現有的擴展集執行個體
升級所有執行個體以套用自訂指令碼。 升級可能需要幾分鐘的時間。
az vmss update-instances --resource-group myResourceGroup --name myScaleSet --instance-ids "*"
允許流量至端口 80
若要允許流量流經負載平衡器至虛擬機器,必須更新預設網路安全性群組。
az network nsg rule create --name AllowHTTP --resource-group myResourceGroup --nsg-name myScaleSetNSG --access Allow --priority 1010 --destination-port-ranges 80
測試您的擴展集
若要查看網頁伺服器的運作情況,請使用 az network public-ip show 取得負載平衡器的公用 IP 位址。 下列範例會取得建立作為擴展集一部分的 myScaleSetLBPublicIP IP 位址︰
az network public-ip show \
--resource-group myResourceGroup \
--name myScaleSetLBPublicIP \
--query [ipAddress] \
--output tsv
在網頁瀏覽器中輸入負載平衡器的公用 IP 位址。 負載平衡器會將流量分配至其中一個 VM 執行個體,如下列範例所示:
讓網頁瀏覽器保持開啟狀態,以便您可以在下一步中看到更新版本。
變更升級政策
在上一節中,若要將更新的應用程式套用至所有擴展集執行個體,則需要手動升級。 若要讓更新自動套用至所有現有的擴展集執行個體,請將升級原則從手動更新為自動。 如需升級原則的詳細資訊,請參閱 虛擬機器擴展集的升級原則。
az vmss update \
--name myScaleSet \
--resource-group myResourceGroup \
--set upgradePolicy.mode=automatic
更新應用程式部署
在目前的 shell 中,建立名為 customConfigv2.json 的檔案,並貼上下列組態。 此定義會執行更新的 v2 版本的應用程式安裝指令碼:
{
"fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx_v2.sh"],
"commandToExecute": "./automate_nginx_v2.sh"
}
使用 az vmss extension set,再次將自訂指令碼延伸模組設定套用至擴展集。 customConfigv2.json 用於應用應用程序的更新版本:
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings @customConfigv2.json
由於擴展集現在使用自動升級原則,因此更新的應用程式會自動套用至現有的擴展集執行個體。 重新載入您的瀏覽器以查看更新的應用程式。
清理資源
若要移除您的擴展集與其他資源,請使用 az group delete 刪除資源群組及其所有資源。
--no-wait 參數不會等待作業完成,就會將控制項傳回給提示字元。
--yes 參數會確認您想要刪除資源,而不另外對您提示將要進行此作業。
az group delete --name myResourceGroup --no-wait --yes
後續步驟
在本教學課程中,您已瞭解如何使用 Azure CLI 在擴展集上自動安裝和更新應用程式:
- 自動將應用程式安裝到擴展集
- 使用 Azure 自訂腳本延伸模組
- 更新在擴展集上執行的應用程式
前往下一個教學課程,以了解如何自動調整擴展集。