az2tf
Eine neuere Version dieses in Python geschriebenen Tools ist jetzt verfügbar und unterstützt Terraform v0.12. Es ermöglicht außerdem die Ausführung über ein Azure-Runbook sowie über die Befehlszeile https://github.com/andyt530/py-az2tf.
Die Entwicklung dieser (Bash-Shell-)Version wurde nun zugunsten der neuen Version eingestellt
Dieses Dienstprogramm „Azure to Terraform“ (az2tf) liest ein Azure-Abonnement und generiert alle erforderlichen Terraform-Konfigurationsdateien (.tf) aus jeder der zusammengesetzten Azure-Ressourcengruppen. Außerdem importiert es den Terraform-Status mithilfe von a
Befehl „terraform import ....“
Und schließlich läuft ein
„Terraform-Plan.“ Befehl
Es ist zu hoffen, dass der Befehl terraform plan keine weiteren Hinzufügungen oder Löschungen meldet, da alle entsprechenden Terraform-Konfigurationsdateien automatisch erstellt wurden.
Anforderungen und Voraussetzungen
- Das Tool ist für das Bash-Shell-Skript geschrieben und wurde auf einem MAC getestet
- Es muss Azure CLI2 Version 2.0.55 oder höher installiert sein und Sie benötigen eine Anmeldung mit mindestens „Lesen“-Berechtigungen
- Die Terraform- Version v0.11.11 muss installiert sein
- jq siehe: https://stedolan.github.io/jq/ (Auf macOS auch über $ brew install jq verfügbar)
Kurzanleitung zur Verwendung des Tools
Zum Ausführen des Tools in Ihrer lokalen Shell (Bash) waren die folgenden Schritte erforderlich:
- Entpacken oder klonen Sie dieses Git-Repo in ein leeres Verzeichnis
- Melden Sie sich bei Azure cli2 an (
az login
). - Führen Sie das Tool aus
Experimentell: Verwendung des Docker-Images
- Erstellen mit:
$ docker build --rm -f "Dockerfile" -t az2tf:latest
. - Wenn es noch nicht existiert, erstellen Sie ein „generiertes“ Verzeichnis (
$ mkdir generated
) - Führen Sie mit
$ ./runme.sh
aus
(würde mich über Feedback zur besseren Nutzung von Docker freuen)
Verwenden des Docker-Images mit Docker-Compose
Wir können Docker-Compose verwenden, um die Ausführung des Docker-Images zu vereinfachen. Führen Sie einfach docker-compose run shell bash
aus.
Nutzungsleitfaden
So generieren Sie die Terraform-Dateien für ein gesamtes Azure-Abonnement:
./az2tf.sh -s <Subscription ID>
So schließen Sie Azure-Abonnementrichtlinien sowie RBAC-Kontrollen und -Zuweisungen ein:
./az2tf.sh -s <Subscription ID> -p yes
So generieren Sie die Terraform-Dateien für eine bestimmte Ressourcengruppe in einem Abonnement:
./az2tf.sh -s <Subscription ID> -g <Resource Group>
So fügen Sie die Geheimnisse eines Schlüsseltresors in Terraform-Dateien ein (Geheimnisse werden im Klartext vorliegen):
./az2tf.sh -s <Subscription ID> -g <Resource Group> -x yes
So filtern Sie den Terraform-Ressourcentyp: (z. B. nur Verfügbarkeitssätze)
./az2tf.sh -s <Subscription ID> -g <Resource Group> -r azurerm_availability_set
Seien Sie geduldig – viele Ausgaben werden als az2tf ausgegeben:
- Schleifen für jeden Anbieter durch Ihre Ressourcengruppen und
- Erstellt die erforderlichen *.tf-Konfigurationsdateien im Verzeichnis „generated“.
- Führt die erforderlichen „Terraform-Import“-Befehle aus
- Und führt schließlich einen „Terraform-Plan“ durch
Unterstützte Ressourcentypen
Die folgenden Terraform-Ressourcentypen werden derzeit von diesem Tool unterstützt:
Basisressourcen
- azurerm_resource_group (vollständig)
Autorisierungsressourcen
- azurerm_role_definition (Abonnementebene)
- azurerm_role_assignment (Abonnementebene)
Active Directory-Ressourcen
App Service-Ressourcen (Web-Apps).
- azurerm_app_service
- azurerm_app_service_plan
Automatisierungsressourcen
- azurerm_automation_account
Rechenressourcen
- azurerm_availability_set (vollständig)
- azurerm_image
- azurerm_managed_disk (Allgemein)
- azurerm_virtual_machine (allgemein)
- azurerm_virtual_machine_scale_sets (Allgemein)
Containerressourcen
- azurerm_container_registry (vollständig)
- azurerm_kubernetes_cluster
CosmosDB (DocumentDB)-Ressourcen
- azurerm_cosmosdb_account (Allgemein)
Databricks-Ressourcen
- azurerm_databricks_resources
Wichtige Vault-Ressourcen
- azurerm_key_vault (Allgemein)
- azurerm_key_vault_secret (vollständig)
Load Balancer-Ressourcen
- azurerm_lb (voll)
- azurerm_lb_backend_address_pool (vollständig)
- azurerm_lb_rule (vollständig)
- azure_nat_rule (vollständig – weitere Tests erforderlich)
- azurerm_lb_probe (vollständig)
- azure_nat_pool (vollständig – weitere Tests erforderlich)
Managementressourcen
- azurerm_management_lock (vollständig)
Messaging-Ressourcen
- azurerm_servicebus_namespace (vollständig)
- azurerm_servicebus_queue (teilweise)
Überwachungsressourcen
- azurerm_autoscale_setting
Netzwerkressourcen
- azurerm_application_gateway
- azurerm_application_security_group (vollständig)
- azurerm_express_route_Circuit (vollständig)
- azurerm_express_route_Circuit_authorization (vollständig)
- azurerm_express_route_Circuit_peering (teilweise)
- azurerm_local_network_gateway
- azurerm_network_interface (allgemein)
- azurerm_network_security_group (vollständig)
- azurerm_network_watcher
- azurerm_public_ip (Allgemein)
- azurerm_route_table (vollständig)
- azurerm_subnet (vollständig)
- azurerm_subnet_network_security_group_association (vollständig)
- azurerm_subnet_route_table_group_association (vollständig)
- azurerm_traffic_manager_endpoint (teilweise)
- azurerm_traffic_manager_profile (teilweise)
- azurerm_virtual_network (vollständig)
- azurerm_virtual_network_gateway
- azurerm_virtual_network_gateway_connection
- azurerm_virtual_network_peering (vollständig)
Richtlinienressourcen
- azurerm_policy_definition (nur benutzerdefinierte Richtlinien)
- azurerm_policy_assignment
OMS-Ressourcen
- azurerm_log_analytics_solution (teilweise)
- azurerm_log_analytics_workspace (vollständig)
Wiederherstellungsdienste
- azurerm_recovery_services_vault (vollständig)
Speicherressourcen
- azurerm_storage_account (Häufig – TF-Vollunterstützung fehlt)
(Vollständig) = vollständige Unterstützung für alle Terraform-Attribute (Gemeinsam) = Unterstützung für die häufigsten Terraform-Attribute (Teilweise) = Unterstützung für einige der Terraform-Attribute
Geplante Ergänzungen
- PaaS-Datenbanken und Apps
- Regeln der Speicher-Firewall
- fortlaufend bessere AKS-Unterstützung im Zuge der Weiterentwicklung von AKS
- Andere Terraform-Anbieter, bei denen sich Terraform und Azure CLI2 gegenseitig unterstützen
Bekannte Probleme
Geschwindigkeit
In großen Abonnements ist es ziemlich langsam, alles in einer Schleife zu durchlaufen. Es gibt Möglichkeiten, dieses Tool zu beschleunigen (weniger Aufrufe von az cli-Befehlen durchführen), aber es würde auch das Debuggen erschweren. Ich werde dies möglicherweise in Betracht ziehen, nachdem ich mit dem Aufbau des Supports fertig bin für weitere Anbieter.
KeyVault:
Kann fehlschlagen, wenn Ihr Login/SPN keinen Zugriff auf den KeyVault hat
Virtuelle Maschinen:
Diese Attribute werden im Terraform-Plan immer gemeldet und standardmäßig auf „false“ gesetzt – möglicherweise muss sie manuell überschrieben werden
- delete_data_disks_on_termination: "" => "false"
- delete_os_disk_on_termination: "" => "false"
Speicherkonto
Warten auf Terraform-Unterstützung für VNet-Dienstendpunkte/Firewall. Kann fehlschlagen, wenn Ihr Login/SPN keinen Zugriff auf den für die Verschlüsselung verwendeten KeyVault hat. Kann auch fehlschlagen, wenn Ressourcensperren vorhanden sind
OMS
Wenn Lösungen „[“ und „]“ im Namen enthalten, werden sie ignoriert.
ExpressRoute
Keine Unterstützung für MS-Peering (habe keins zum Testen!)
Schlüsseltresor
Terraform unterstützt die Berechtigung „Alle“ nicht
Virtuelles Netzwerk-Gateway
Wenn für das VNet-Gateway keine BGP-Einstellungen angegeben sind, meldet terraform plan
eine harmlose Änderung, siehe Problem in GitHub
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>