Ansichten:

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

  1. 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/bash installiert):
    sudo bash -c 'echo /opt/homebrew/bin/bash >> /etc/shells'
  2. Legen Sie die neue Bash als Ihre Standardshell fest:
    chsh -s /opt/homebrew/bin/bash
  3. Ö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)
  4. Installieren Sie den timeout-Befehl. Der timeout-Befehl ist standardmäßig nicht auf macOS verfügbar.
    Installieren Sie das Paket coreutils:
    brew install coreutils
    Überprüfen Sie, ob der Befehl gtimeout verfügbar ist:
    gtimeout --version
    Fügen Sie ein Alias hinzu, sodass timeout auf gtimeout verweist. Ö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
  5. 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

  1. Installieren Sie die Azure CLI:
    sudo apt update
    curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
  2. 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
  3. Die erforderlichen Werkzeuge installieren:
    sudo apt-get install -y unzip jq
  4. 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-logs existiert 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.
  1. Machen Sie das Skript ausführbar:
    chmod +x manual-sync-failed-subscriptions.sh
  2. Führen Sie das Skript aus. Das Skript scannt automatisch den Ordner terraform-sync-logs und synchronisiert alle fehlgeschlagenen Abonnements:
    ./manual-sync-failed-subscriptions.sh
    Das Skript führt die folgenden Aktionen aus:
    • Scans terraform-sync-logs auf 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.log aufzeichnen
    Hinweis
    Hinweis
    Um bestimmte Abonnements anstelle aller fehlgeschlagenen zu synchronisieren, verwenden Sie das -s oder --subscription Flag 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
  3. Ü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.log fü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