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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# requirements: pip install azure msrestazure | |
import os | |
''' | |
AZURE_PUBLIC_CLOUD | |
AZURE_CHINA_CLOUD | |
AZURE_US_GOV_CLOUD | |
AZURE_GERMAN_CLOUD | |
''' | |
from msrestazure.azure_cloud import AZURE_GERMAN_CLOUD as cloud_environment | |
from msrestazure.azure_active_directory import UserPassCredentials | |
from msrestazure.azure_active_directory import ServicePrincipalCredentials | |
from azure.mgmt.resource import ResourceManagementClient | |
from azure.mgmt.compute import ComputeManagementClient | |
# Prefered way for Azure connection is the use of ServicePrincipalCredentials | |
# in environment variables. When they are not existing, then we ask for | |
# username and password | |
if os.environ.has_key("AZURE_CLIENT_ID"): | |
credentials = ServicePrincipalCredentials( | |
client_id=os.environ['AZURE_CLIENT_ID'], | |
secret=os.environ['AZURE_CLIENT_SECRET'], | |
tenant=os.environ['AZURE_TENANT_ID'], | |
cloud_environment=cloud_environment | |
) | |
else: | |
credentials = UserPassCredentials( | |
username=raw_input('Username: '), | |
password=raw_input('Password: '), | |
tenant=raw_input('Tenant (AD Identifier): '), | |
cloud_environment=cloud_environment | |
) | |
if os.environ.has_key("AZURE_SUBSCRIPTION_ID"): | |
subscription_id = os.environ.get('AZURE_SUBSCRIPTION_ID') | |
else: | |
subscription_id = raw_input('Subscription (ID): ') | |
client = ResourceManagementClient( | |
credentials, | |
subscription_id, | |
base_url=cloud_environment.endpoints.resource_manager | |
) | |
compute_client = ComputeManagementClient( | |
credentials, | |
subscription_id, | |
base_url=cloud_environment.endpoints.resource_manager | |
) | |
try: | |
# List VMs in subscription | |
print('\nList VMs in subscription') | |
for vm in compute_client.virtual_machines.list_all(): | |
print("\tVM: {}".format(vm.name)) | |
pass | |
except Exception as e: | |
print e | |
raise | |
finally: | |
print ('done') | |
pass |