共用方式為


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

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

  • 自動將應用程式安裝到擴展集
  • 使用 Azure 自訂指令碼擴充功能
  • 更新在擴展集上執行的應用程式

如果您沒有 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 頁面。

在您目前的殼層中,建立名為 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 

測試您的擴展集

若要查看作用中的 web 伺服器,可使用 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

更新應用程式部署

在您目前的殼層中,建立名為 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 自訂指令碼擴充功能
  • 更新在擴展集上執行的應用程式

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