Azure CLI und Azure SDK - Verbindung mit der deutschen Azure Cloud

Wenn ihr gerne mit der Azure CLI arbeitet und euch nun entschlossen habt eure Daten und VMs in einem deutsch Rechnezentrum zu Verwalten, kommt ziemlich schnell nur die Deutsche Azure Cloud in Frage.

Die deutsche Azure Cloud wird von Microsoft angeboten, jedoch von deutschen Unternehmen nach deutschen Datenschutzrecht, betrieben und überwacht. Ihr findet viele Informationen dazu im Netz.

Da es eine vollständige Trennung der deutschen Azure Cloud von der globalen Cloud gibt, können die meisten Tools nicht "einfach so" mit der kleinen deutschen Schwester reden. Alle API - Endpunkte sind auf einer anderen URL, meist mit der Endung ".de" zu finden. Der Azure CLI kann
ohne großen Aufwand beigebracht werden eine Verbindung mit der deutschen Cloud aufzunehmen.
Die Entwickler haben analog zur Azure China und US Government Cloud auch für den deutschen Ableger alle notwendigen URLs im Code hinterlegt.

Ein "Umbiegen" der Endpunkte erfolgt mit folgendem Konfigurationsbefehl:

az cloud set --name AzureGermanCloud


Ganz ähnlich verhält es sich (endlich) mit dem Python SDK für Azure.

Seit wenigen Wochen ist nun endlich eine Implementierung in der Bibliothek "msrestazure" vorhanden, welche es erlaubt sich ohne Hacks mit der deutschen Azure Cloud zu verbinden.

Hier ein Codesample:

Azure CLI - Warum und Wie?

Warum Azure CLI, ich kann doch auch die Poweshell benutzen?

Für mich ist ein wichtiger Grund die Verfügbarkeit auf Betriebssystemen die ohne weiteres keine Powershell anbieten. Zum Beispiel MacOS und Linux. Speziell Continous Integration System für NodeJS oder Web Anwendungen laufen häufig auf günstigen Linux Slaves.

Das Azure CLI ist eine einfache Möglichkeit auch von diesen Linux Systemen ein Deployment oder eine Rekonfiguration der Azure Systeme vorzunehmen.

Das Command Line Interface kann auf verschiedene Arten installiert werden. Ich bevorzuge die Installation via NPM für automatisierte Systeme oder die Nutzung eines vorbereiteten Docker - Containers.

Der folgende Befehl lädt das Image herunter, startet einen Container namens "azure" und verbindet sich zu dessen Shell.
docker run -it --name azure microsoft/azure-cli

Schon kann es mit dem Befehl "azure login" losgehen.

Um den einmal heruntergeladenen Container nach dem schließen der Befehlszeile wieder zu verwenden genügt ein "docker start -i azure".

Das war dann auch schon der schwierigste Teil.

Das Azure CLI unterstützt zwei verschiedene Betriebsmodi. Den Ressourcemanager basierten und den Servicemanager basierten.

Falls Sie ein Azure Deployment Script habe bei dem die Befehlszeile
"azure sites list" eine Fehlermeldung wie "error:   'site' is not an azure command. See 'azure help'.", ausgibt, dann sind sie im falschen, im Ressourcemanager - Modus. Der Ressoucemanagermodus ist im Standard aktiv.

Der Ressourcemanagermodus unterstützt folgende Befehle:
help:    Commands:
help:      account          Commands to manage your account information and publish settings
help:      acs              Commands to manage your container service.
help:      ad               Commands to display Active Directory objects
help:      appserviceplan   Commands to manage your Azure appserviceplans
help:      availset         Commands to manage your availability sets.
help:      batch            Commands to manage your Batch objects
help:      cdn              Commands to manage Azure Content Delivery Network (CDN)
help:      config           Commands to manage your local settings
help:      datalake         Commands to manage your Data Lake objects
help:      feature          Commands to manage your features
help:      group            Commands to manage your resource groups
help:      hdinsight        Commands to manage HDInsight clusters and jobs
help:      insights         Commands related to monitoring Insights (events, alert rules, autoscale settings, metrics)
help:      iothub           Commands to manage your Azure IoT hubs
help:      keyvault         Commands to manage key vault instances in the Azure Key Vault service
help:      lab              Commands to manage your DevTest Labs
help:      location         Commands to get the available locations
help:      network          Commands to manage network resources
help:      policy           Commands to manage your policies on ARM Resources.
help:      powerbi          Commands to manage your Azure Power BI Embedded Workspace Collections
help:      provider         Commands to manage resource provider registrations
help:      quotas           Command to view your aggregated Azure quotas
help:      rediscache       Commands to manage your Azure Redis Cache(s)
help:      resource         Commands to manage your resources
help:      role             Commands to manage role definitions
help:      servermanagement Commands to manage Azure Server Managment resources
help:      servicefabric    Commands to manage your Azure Service Fabric
help:      storage          Commands to manage your Storage objects
help:      tag              Commands to manage your resource manager tags
help:      usage            Command to view your aggregated Azure usage data
help:      vm               Commands to manage your virtual machines
help:      vmss             Commands to manage your virtual machine scale sets.
help:      vmssvm           Commands to manage your virtual machine scale set vm.
help:      webapp           Commands to manage your Azure webapps

Umschalten zum Servicemanagermodus kann man via: "azure config mode asm".
Zurück gehts mit "azure config mode arm"


Im Servicemanager Mode gibt es dann folgende Befehle:
help:      mobile         Commands to manage your Mobile Services
help:      network        Commands to manage your networks
help:      sb             Commands to manage your Service Bus configuration
help:      service        Commands to manage your Cloud Services
help:      servicefabric  Commands to manage your Azure Service Fabric
help:      site           Commands to manage your Web Sites
help:      sql            Commands to manage your SQL Server accounts
help:      storage        Commands to invoke service management operations.
help:      vm             Commands to manage your Virtual Machines

Für alle Services und Deployments die Ihr neu aufsetzt würde ich den ARM empfehlen. Der Ressourcemanager bietet viele Vorteile gegenüber dem Servicemanager.

Mehr Informationen zu den unterstützten CLI Befehlen findet Ihr hier:




Docker - Cleanup

Auf seinen Spiel und Testsystemen kann es passieren das sich "mal eben" eine ganze liste an nicht mehr benötigten Docker Containern findet.

Die zu löschen kann relativ aufwendig sein.

Nicht aber mit folgender Befehlssequenz:

docker ps --filter "status=exited" | grep 'months ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Damit werden alle Container die heruntergefahren sind und den Status Erstellt oder Beendet "vor Monaten" haben, gelöscht.

Um alle nicht laufenden Container zu entfernen schaut bitte hier:
docker rm $(docker ps -q -f status=exited)

Auch ungetaggte Images können so einfach entfernt werden:

docker images | grep "" | awk '{print $3}' | xargs docker rmi





Die Befehlsketten habe ich im Docker GitHub unter Issue 928 entdeckt. Hier der Link und weiterführende Diskussionen: https://github.com/docker/docker/issues/928


Xcode Playground mit asynchronen Methoden

Will man mit dem Xcode Playground ein wenig expirimentieren und dabei asynchrone Methoden verwenden, stößt man sehr schnell an seine Grenzen.
Es kommen keine Callbacks an und damit ist das Testen schwierig.

Der Grund dafür ist einfach: Wurde die aktuelle Seite im Playground einmal abgearbeitet, werden auch alle parallel laufenden Threads beendet bzw. pausiert.

Abhilfe ist ganz einfach. Man kann der aktuellen Playground - Seite sagen das die Ausführungen weiter laufen soll.
Dafür muss die Eigenschaft "needsIndefiniteExecution" der aktuellen Playground Seite auf true gesetzt werden.

Hier die komplette Anweisung:
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

Nun kommen auch Callbacks von anderen Threads zurück.
Damit die Seite nicht durchgehend ausgeführt wird, kann die Ausführung mit folgender Anweisung beendet werden:
XCPlaygroundPage.currentPage.finishExecution()


Hier ein komplettes Beispiel für einen WebRequest im Xcode Playground:

//: Sample for HTTP Request

import UIKit
import XCPlayground

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

var str = "Hello, playground"

let url = NSURL(string: "http://danielbedarf.blogspot.com")

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {
    (data, response, error) in
   
    print(NSString(data: data!, encoding: NSUTF8StringEncoding))
   
    //stop the execution
    XCPlaygroundPage.currentPage.finishExecution()

}

//start the http request
task.resume()


Hinweis: die Property needIndefiniteExecution ist der Nachfolger der Funktion "XCPSetExecutionShouldContinueIndefinitely()".


Mac OS Benutzernamen und Pfad ändern

Hat man sich bei der Einrichtung seines Mac vertan oder im Benutzernamen (Shortname) einen Schreibfehler, so ist es ganz einfach möglich dies zu korrigieren.

Hier eine Liste von Schritten die zum Erfolg führt:

  1. Neuen Admin Account unter Benutzerverwaltung anlegen
  2. Mit dem neuen Admin anmelden und ein Terminal öffnen
  3. Im Terminal durch Eingabe von "cd .." in das übergeordnete Verzeichnis wechseln
    Ob du im richtigen Verzeichnis bist kannst du durch "ls" prüfen
  4. Durch "sudo mv alterShortName neuerShortName" das Verzeichnis umbenennen
    alterShortName und neuerShortName müssen natürlich durch deine Angaben ersetzt werden. Normalerweise wirst du auch zur Eingabe deines Passwortes aufgefordert.
  5. In die Benutzerverwaltung wechseln und dort:
    1. die erweiterten Einstellungen des Benutzers aufrufen
    2.  den Shortname sowie den Pfad zum Benutzerverzeichnis ändern
  6. Abmelden und mit dem eigenen Account wieder anmelden
  7. ggf. den zusätzlichen Administrator wieder löschen


Fertig