Kann ich ein lokales Mac-Terminal anstelle von Azure Cloud Shell für die Bereitstellung verwenden?
Konfigurieren Sie Ihr Mac-Terminal als Alternative zur Azure Cloud Shell, wenn Sie in einer Azure-Verwaltungsgruppe über mehrere Regionen hinweg bereitstellen.
Problem
Beim Bereitstellen über mehrere Regionen hinweg über Azure Cloud Shell können Fehler
auftreten, die durch die Einschränkungen von Cloud Shell verursacht werden. Ein erneuter
Versuch kann manchmal das Problem lösen. Eine zuverlässigere Lösung ist die Bereitstellung
über das lokale Mac-Terminal.
Führen Sie die folgenden Schritte aus, um Ihr Mac-Terminal für die Bereitstellung
zu konfigurieren.
Lösung
-
Bash aktualisieren.macOS wird mit einer veralteten Version von bash ausgeliefert. Installieren Sie die neueste Version:
brew install bash
Fügen Sie die neue Bash zur Liste der erlaubten Shells hinzu (vorausgesetzt, Homebrew hat Bash unter/opt/homebrew/bin/bashinstalliert):sudo bash -c 'echo /opt/homebrew/bin/bash >> /etc/shells'
-
Legen Sie die neue Bash als Ihre Standardshell fest:
chsh -s /opt/homebrew/bin/bash
-
Öffnen Sie ein neues Terminal und überprüfen Sie die Bash-Version:
which bash bash --version
Die Ausgabe sollte ähnlich wie folgt aussehen:/opt/homebrew/bin/bash GNU bash, version 5.2.37(1)-release (aarch64-apple-darwin24.0.0)
-
Installieren Sie den
timeout-Befehl. Dertimeout-Befehl ist standardmäßig nicht auf macOS verfügbar.Installieren Sie das Paketcoreutils:brew install coreutils
Überprüfen Sie, ob der Befehlgtimeoutverfügbar ist:gtimeout --version
Fügen Sie ein Alias hinzu, sodasstimeoutaufgtimeoutverweist. Öffnen Sie Ihre~/.zprofile(oder~/.bash_profile, wenn bash als Standardshell verwendet wird) und fügen Sie die folgende Zeile hinzu:alias timeout=gtimeout
Aktualisieren Sie Ihre aktive Terminal-Sitzung:source ~/.zprofile
-
Azure CLI installieren und anmelden:
brew update && brew install azure-cli az login
Ihr Mac-Terminal ist bereit für die Bereitstellung. Führen Sie
terraform apply aus Ihrem Installationsverzeichnis aus.Kann ich ein lokales Linux-Terminal anstelle von Azure Cloud Shell für die Bereitstellung verwenden?
Konfigurieren Sie Ihr Linux-Terminal als Alternative zur Azure Cloud Shell, wenn Sie in einer Azure-Verwaltungsgruppe über mehrere Regionen hinweg bereitstellen.
Problem
Beim Bereitstellen über mehrere Regionen mit Azure Cloud Shell können Fehler aufgrund
von Cloud Shell-Einschränkungen auftreten. Eine zuverlässigere Lösung ist die Bereitstellung
von Ihrem lokalen Linux-Terminal (Ubuntu/Debian).
Führen Sie die folgenden Schritte aus, um Ihr Linux-Terminal für die Bereitstellung
zu konfigurieren.
Lösung
-
Installieren Sie die Azure CLI:
sudo apt update curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
-
Terraform installieren:
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
-
Die erforderlichen Werkzeuge installieren:
sudo apt-get install -y unzip jq
-
Authentifizieren Sie sich bei Azure:
az login --use-device-code
Befolgen Sie die Anweisungen auf dem Bildschirm, um die Authentifizierung mit einem Browser abzuschließen. Wählen Sie das Zielabonnement aus, wenn Sie dazu aufgefordert werden.
Ihr Linux-Terminal ist bereit für die Bereitstellung. Führen Sie
terraform apply aus Ihrem Installationsverzeichnis aus.Wie synchronisiere ich Funktions-Apps manuell, wenn der Synchronisierungsschritt während der Bereitstellung fehlschlägt?
Verwenden Sie das manuelle Synchronisierungsskript, um die Synchronisierung des Funktions-App-Triggers für Abonnements erneut zu versuchen, die während der Bereitstellung der Azure-Verwaltungsgruppe fehlgeschlagen sind.
Problem
Wenn die Terraform-Bereitstellung abgeschlossen ist, synchronisiert der letzte Schritt
die Funktions-App-Auslöser für jedes Abonnement in der Verwaltungsgruppe. Wenn dieser
Schritt fehlschlägt, sehen Sie möglicherweise eine Ausgabe ähnlich der folgenden:
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.
Wenn die Synchronisierung fehlschlägt, werden Funktions-Apps möglicherweise nicht
wie erwartet ausgelöst. Fehlgeschlagene Abonnements werden als Logdateien im Ordner
terraform-sync-logs im Installationsverzeichnis aufgezeichnet, mit Dateinamen im Format <subscription_id>_sync_failures.log.Voraussetzungen
-
Azure CLI installiert und angemeldet (
az login) -
Geeignete Berechtigungen zum Verwalten von Funktions-Apps in den Zielabonnements
-
Der Ordner
terraform-sync-logsexistiert in Ihrem Installationsverzeichnis (wurde während der Bereitstellung automatisch erstellt)
Lösung
Kopieren Sie das
manual-sync-failed-subscriptions.sh-Skript in Ihr Installationsverzeichnis (dasselbe Verzeichnis, das den terraform-sync-logs-Ordner enthält), und führen Sie dann die folgenden Schritte aus.-
Machen Sie das Skript ausführbar:
chmod +x manual-sync-failed-subscriptions.sh
-
Führen Sie das Skript aus. Das Skript scannt automatisch den Ordner
terraform-sync-logsund synchronisiert alle fehlgeschlagenen Abonnements:./manual-sync-failed-subscriptions.sh
Das Skript führt die folgenden Aktionen aus:-
Scans
terraform-sync-logsauf Fehlerprotokolle -
Listet alle fehlgeschlagenen Abonnements auf und fordert zur Bestätigung auf
-
Synchronisiert Funktionstrigger (Updater, Muster-Updater, VNet-Watcher) für jedes Abonnement
-
Wartet darauf, dass Auslöser sich stabilisieren
-
Ruft die Funktionen auf (Musteraktualisierer, VNet-Überwacher, Aktualisierer)
-
Ergebnisse in
terraform-sync-logs/manual-sync.logaufzeichnen

Hinweis
Um bestimmte Abonnements anstelle aller fehlgeschlagenen zu synchronisieren, verwenden Sie das-soder--subscriptionFlag mit einer durch Kommas getrennten Liste von Abonnement-IDs:./manual-sync-failed-subscriptions.sh -s sub-id-1,sub-id-2
Um alle Kontrollpunkte zu löschen und von vorne zu beginnen, verwenden Sie das--reset-Flag:./manual-sync-failed-subscriptions.sh --reset
-
-
Überprüfen Sie die Ergebnisse, nachdem das Skript abgeschlossen ist:
-
Überprüfen Sie die Zusammenfassungsausgabe — das Skript zeigt eine Zusammenfassung mit den Anzahlen der erfolgreichen, übersprungenen und fehlgeschlagenen Synchronisierungen an.
-
Überprüfen Sie
terraform-sync-logs/manual-sync.logfür detaillierte Ergebnisse. -
Überprüfen Sie den Ordner
terraform-sync-logs/sync-success/— jede<subscription_id>.done-Datei bestätigt eine erfolgreiche Synchronisierung. -
Falls einige Abonnements weiterhin fehlschlagen, führen Sie das Skript erneut aus, um die verbleibenden Fehler zu wiederholen.
-
Skriptoptionen Referenz
|
Optionen
|
Beschreibung
|
|
(keine Argumente)
|
Synchronisiert alle fehlgeschlagenen Abonnements von
terraform-sync-logs |
-s, --subscription <id1,id2,...> |
Synchronisiert bestimmte Abonnements
|
-r, --zurücksetzen |
Löscht alle Kontrollpunkte und synchronisiert von Grund auf neu
|
-h, --hilfe |
Zeigt Hilfenachricht an
|
