我可以使用本地 Mac 終端機來代替 Azure 雲端 Shell 進行部署嗎?
當您在多個地區部署至 Azure 管理群組時,將您的 Mac 終端機配置為 Azure 雲端 Shell 的替代方案。
問題
當透過 Azure 雲端 Shell 在多個地區部署時,您可能會遇到由雲端 Shell 限制引起的錯誤。重試有時可以解決問題。一個更可靠的替代方法是從您本地的 Mac
終端進行部署。
請完成以下步驟以配置您的 Mac 終端機以進行部署。
解決方案
-
升級 bash。macOS 附帶的 bash 版本已過時。請安裝最新版本:
brew install bash
將新的 bash 添加到允許的 shell 列表中(假設 Homebrew 已將 bash 安裝在/opt/homebrew/bin/bash):sudo bash -c 'echo /opt/homebrew/bin/bash >> /etc/shells'
-
將新的 bash 設定為您的預設 shell:
chsh -s /opt/homebrew/bin/bash
-
開啟新的終端機並驗證 bash 版本:
which bash bash --version
輸出應類似於以下內容:/opt/homebrew/bin/bash GNU bash, version 5.2.37(1)-release (aarch64-apple-darwin24.0.0)
-
安裝
timeout命令。timeout命令在 macOS 上預設不可用。安裝coreutils套件:brew install coreutils
驗證gtimeout命令是否可用:gtimeout --version
新增別名,使timeout映射到gtimeout。打開您的~/.zprofile(或~/.bash_profile,如果使用 bash 作為預設 shell),並添加以下行:alias timeout=gtimeout
刷新您活躍的終端機會話:source ~/.zprofile
-
安裝 Azure CLI 並登入:
brew update && brew install azure-cli az login
您的 Mac 終端已準備好部署。請從您的安裝目錄執行
terraform apply。我可以使用本地 Linux 終端機來替代 Azure 雲端 Shell 進行部署嗎?
在部署至多個地區的 Azure 管理群組時,將您的 Linux 終端機配置為 Azure 雲端 Shell 的替代方案。
問題
當使用 Azure 雲端 Shell 在多個地區部署時,您可能會遇到由雲端 Shell 限制引起的錯誤。更可靠的解決方法是從您本地的 Linux 終端(Ubuntu/Debian)進行部署。
請完成以下步驟以配置您的 Linux 終端機以進行部署。
解決方案
-
安裝 Azure CLI:
sudo apt update curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
-
安裝 Terraform:
sudo apt-get install -y gnupg software-properties-common wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt-get update && sudo apt-get install -y terraform
-
安裝必要工具:
sudo apt-get install -y unzip jq
-
驗證至 Azure:
az login --use-device-code
按照螢幕上的指示使用瀏覽器完成驗證。在提示時選擇目標訂閱。
您的 Linux 終端機已準備好部署。請從您的安裝目錄執行
terraform apply。如果在部署過程中同步步驟失敗,我該如何手動同步功能應用程式?
使用手動同步腳本重新嘗試函數應用程式觸發器同步,以針對在 Azure 管理群組部署期間失敗的訂閱進行重試。
問題
當 Terraform 部署完成後,最後一步會同步管理群組中每個訂閱的函數應用觸發器。如果此步驟失敗,您可能會看到類似以下的輸出:
module.sync-function-trigger[0].null_resource.sync_triggers (local-exec): Failed to call function app xxxx after 3 attempts module.sync-function-trigger[0].null_resource.sync_triggers (local-exec): WARNING: Calling updater functions failed for one or more functions, but continuing due to management group deployment mode module.sync-function-trigger[0].null_resource.sync_triggers (local-exec): Check failure log: terraform-sync-logs/xxxxxxxxxxxxxxxxx_sync_failures.log Apply complete! Resources: 120 added, 5 changed, 2 destroyed.
當同步失敗時,功能應用程式可能無法如預期般觸發。失敗的訂閱會以日誌檔案的形式記錄在安裝目錄中的
terraform-sync-logs 資料夾,檔案名稱格式為 <subscription_id>_sync_failures.log。先決條件
-
已安裝 Azure CLI 並登入 (
az login) -
在目標訂閱中管理功能應用的適當權限
-
terraform-sync-logs資料夾存在於您安裝目錄中(在部署過程中自動建立)
解決方案
將
manual-sync-failed-subscriptions.sh 腳本複製到您的安裝目錄(與包含 terraform-sync-logs 資料夾的目錄相同),然後完成以下步驟。-
將腳本設為可執行:
chmod +x manual-sync-failed-subscriptions.sh
-
執行腳本。該腳本會自動掃描
terraform-sync-logs資料夾並同步所有失敗的訂閱:./manual-sync-failed-subscriptions.sh
此腳本會執行下列動作:-
掃描
terraform-sync-logs以查找故障日誌 -
列出所有失敗的訂閱並提示確認
-
同步每個訂閱的功能觸發器(更新器、模式更新器、虛擬網路監視器)
-
等待觸發器穩定
-
調用功能(模式更新器、vnet監視器、更新器)
-
在
terraform-sync-logs/manual-sync.log中記錄結果

注意
若要同步特定訂閱而非所有失敗的訂閱,請使用-s或--subscription標誌,並提供以逗號分隔的訂閱 ID 列表:./manual-sync-failed-subscriptions.sh -s sub-id-1,sub-id-2
要清除所有檢查點並從頭開始,請使用--reset標誌:./manual-sync-failed-subscriptions.sh --reset
-
-
在腳本完成後驗證結果:
-
檢查摘要輸出 — 腳本會列印摘要,顯示成功、跳過和失敗的同步計數。
-
檢閱
terraform-sync-logs/manual-sync.log以查看詳細結果。 -
檢查
terraform-sync-logs/sync-success/資料夾 — 每個<subscription_id>.done檔案確認同步成功。 -
如果仍有任何訂閱失敗,請重新執行腳本以重試剩餘的失敗項目。
-
腳本選項參考
|
選項
|
說明
|
|
(無參數)
|
同步所有來自
terraform-sync-logs 的失敗訂閱 |
-s, --subscription <id1,id2,...> |
同步特定訂閱
|
-r, --重置 |
清除所有檢查點並從頭重新同步
|
-h, --help |
顯示幫助訊息
|
