共用方式為


教學課程:使用 Azure CLI 在虛擬機器擴展集中安裝應用程式

若要在擴展集中的虛擬機器 (VM) 執行個體上執行應用程式,您必須先安裝應用程式元件和必要的檔案。 在先前的教學課程中,您已瞭解如何建立及使用自訂 VM 映像來部署 VM 執行個體。 此自訂映像包含手動應用程式安裝和設定。 您也可以在部署每個 VM 執行個體之後,將應用程式自動安裝至擴展集,或更新已在擴展集上執行的應用程式。 在本教學課程中,您將了解如何:

  • 自動將應用程式安裝到擴展集
  • 使用 Azure 自訂腳本延伸模組
  • 更新在擴展集上執行的應用程式

如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶

先決條件

  • 本文需要 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 執行個體,如下列範例所示:

Nginx中的基本網頁

讓網頁瀏覽器保持開啟狀態,以便您可以在下一步中看到更新版本。

變更升級政策

在上一節中,若要將更新的應用程式套用至所有擴展集執行個體,則需要手動升級。 若要讓更新自動套用至所有現有的擴展集執行個體,請將升級原則從手動更新為自動。 如需升級原則的詳細資訊,請參閱 虛擬機器擴展集的升級原則

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

由於擴展集現在使用自動升級原則,因此更新的應用程式會自動套用至現有的擴展集執行個體。 重新載入您的瀏覽器以查看更新的應用程式。

更新了 Nginx 中的網頁

清理資源

若要移除您的擴展集與其他資源,請使用 az group delete 刪除資源群組及其所有資源。 --no-wait 參數不會等待作業完成,就會將控制項傳回給提示字元。 --yes 參數會確認您想要刪除資源,而不另外對您提示將要進行此作業。

az group delete --name myResourceGroup --no-wait --yes

後續步驟

在本教學課程中,您已瞭解如何使用 Azure CLI 在擴展集上自動安裝和更新應用程式:

  • 自動將應用程式安裝到擴展集
  • 使用 Azure 自訂腳本延伸模組
  • 更新在擴展集上執行的應用程式

前往下一個教學課程,以了解如何自動調整擴展集。