az2tf
Ahora está disponible una versión más nueva de esta herramienta escrita en Python que admite terraform v0.12. También permite la ejecución desde un runbook de Azure, así como desde la línea de comandos https://github.com/andyt530/py-az2tf.
El desarrollo de esta versión (bash shell) ahora se ha detenido en favor de la nueva versión.
Esta utilidad 'Azure to Terraform' (az2tf) lee una suscripción de Azure y genera todos los archivos de configuración de terraform necesarios (.tf) de cada uno de los grupos de recursos de Azure compuestos. También importa el estado de terraform mediante un
comando "importación de terraforma ..."
Y finalmente ejecuta un
"plan de terraformación". dominio
Es de esperar que el comando terraform plan no informe de adiciones o eliminaciones posteriores, ya que todos los archivos de configuración de terraform apropiados se habrán creado automáticamente.
Requisitos y requisitos previos
- La herramienta está escrita para el script de shell bash y ha sido probada en una MAC.
- Es necesario instalar Azure cli2 versión 2.0.55 o superior y necesita iniciar sesión con al menos privilegios de "Lectura"
- Es necesario instalar la versión terraform v0.11.11.
- jq ver: https://stedolan.github.io/jq/ (En macOS también disponible a través de $ brew install jq)
Guía de inicio rápido para usar la herramienta
Ejecutar la herramienta en su shell local (bash) requirió estos pasos:
- Descomprima o clone este repositorio de git en un directorio vacío
- inicie sesión en Azure cli2 (
az login
) - ejecutar la herramienta
Experimental: usando la imagen de la ventana acoplable
- Compile con:
$ docker build --rm -f "Dockerfile" -t az2tf:latest
. - Si aún no existe, cree un directorio "generado" (
$ mkdir generated
) - Ejecutar con
$ ./runme.sh
(agradecería comentarios sobre cómo utilizar mejor la ventana acoplable)
Usando la imagen de Docker con Docker-Compose
Podemos usar docker-compose para simplificar la ejecución de la imagen de Docker. Ejecución simple de docker-compose run shell bash
.
Guía de uso
Para generar los archivos terraform para una suscripción completa de Azure:
./az2tf.sh -s <Subscription ID>
Para incluir políticas de suscripción de Azure y controles y asignaciones de RBAC:
./az2tf.sh -s <Subscription ID> -p yes
Para generar los archivos de Terraform para un grupo de recursos específico en una suscripción:
./az2tf.sh -s <Subscription ID> -g <Resource Group>
Para incluir los secretos de Key Vault en archivos de Terraform (los secretos estarán en texto sin formato):
./az2tf.sh -s <Subscription ID> -g <Resource Group> -x yes
Para filtrar el tipo de recurso de terraform: (por ejemplo: solo conjuntos de disponibilidad)
./az2tf.sh -s <Subscription ID> -g <Resource Group> -r azurerm_availability_set
Tenga paciencia: muchos resultados se proporcionan como az2tf:
- Bucles para cada proveedor a través de sus grupos de recursos y
- Crea los archivos de configuración *.tf necesarios en el directorio "generado"
- Realiza los comandos necesarios de 'importación de terraforma'
- Y por fin ejecuta un 'plan terraformación'
Tipos de recursos admitidos
Esta herramienta admite los siguientes tipos de recursos de Terraform en este momento:
Recursos básicos
- azurerm_resource_group (completo)
Recursos de autorización
- azurerm_role_definition (nivel de suscripción)
- azurerm_role_assignment (nivel de suscripción)
Recursos de Directorio Activo
Recursos de App Service (aplicaciones web)
- azurerm_app_service
- azurerm_app_service_plan
Recursos de automatización
- azurerm_automation_account
Recursos informáticos
- azurerm_availability_set (completo)
- imagen_azurerm
- azurerm_managed_disk (común)
- azurerm_virtual_machine (común)
- azurerm_virtual_machine_scale_sets (común)
Recursos de contenedores
- azurerm_container_registry (completo)
- azurerm_kubernetes_cluster
Recursos de CosmosDB (DocumentDB)
- azurerm_cosmosdb_account (común)
Recursos de ladrillos de datos
- azurerm_databricks_resources
Recursos clave del almacén
- azurerm_key_vault (común)
- azurerm_key_vault_secret (completo)
Recursos del equilibrador de carga
- azurerm_lb (completo)
- azurerm_lb_backend_address_pool (completo)
- azurerm_lb_rule (completo)
- azure_nat_rule (completo - necesita más pruebas)
- azurerm_lb_probe (completo)
- azure_nat_pool (completo - necesita más pruebas)
Recursos de gestión
- azurerm_management_lock (completo)
Recursos de mensajería
- azurerm_servicebus_namespace (completo)
- azurerm_servicebus_queue (parcial)
Monitoreo de recursos
- azurerm_autoscale_setting
Recursos de red
- azurerm_application_gateway
- azurerm_application_security_group (completo)
- azurerm_express_route_circuit (completo)
- azurerm_express_route_circuit_authorization (completo)
- azurerm_express_route_circuit_peering (parcial)
- azurerm_local_network_gateway
- azurerm_network_interface (común)
- azurerm_network_security_group (completo)
- azurerm_network_watcher
- azurerm_public_ip (común)
- azurerm_route_table (completo)
- azurerm_subnet (completo)
- azurerm_subnet_network_security_group_association (completo)
- azurerm_subnet_route_table_group_association (completo)
- azurerm_traffic_manager_endpoint (parcial)
- azurerm_traffic_manager_profile (parcial)
- azurerm_virtual_network (completo)
- azurerm_virtual_network_gateway
- azurerm_virtual_network_gateway_connection
- azurerm_virtual_network_peering (completo)
Recursos de políticas
- azurerm_policy_definition (solo políticas personalizadas)
- azurerm_policy_assignment
Recursos de OMS
- azurerm_log_analytics_solution (parcial)
- azurerm_log_analytics_workspace (completo)
Servicios de recuperación
- azurerm_recovery_services_vault (completo)
Recursos de almacenamiento
- azurerm_storage_account (Común: falta soporte completo para tf)
(Completo) = soporte total para todos los atributos de terraform (Común) = soporte para los atributos de terraform más comunes (Parcial) = soporte para algunos de los atributos de terraform
Adiciones planificadas
- Bases de datos y aplicaciones PaaS
- Reglas de firewall de almacenamiento
- Mejor soporte continuo de AKS a medida que AKS evoluciona
- Otros proveedores de terraform donde terraform y Azure cli2 se admiten mutuamente
Problemas conocidos
Velocidad
Es bastante lento recorrer todo en suscripciones grandes, hay formas de acelerar esta herramienta (realizar menos llamadas al comando az cli) pero también haría que sea más difícil depurar, puedo considerar hacer esto después de terminar de desarrollar el soporte. para más proveedores.
Bóveda de claves:
Puede fallar si su inicio de sesión/SPN no tiene acceso a KeyVault
Máquinas virtuales:
Estos atributos siempre se informan en el plan de Terraform configurado en falso de forma predeterminada; es posible que sea necesario anularlos manualmente
- delete_data_disks_on_termination: "" => "falso"
- delete_os_disk_on_termination: "" => "falso"
Cuenta de almacenamiento
en espera de soporte de terraform para puntos finales de servicio VNet/firewalling Puede fallar si su inicio de sesión/SPN no tiene acceso al KeyVault utilizado para el cifrado También puede fallar si los bloqueos de recursos están implementados
OMS
Si las soluciones tienen '[' & ']' en sus nombres, serán ignoradas.
RutaExpresa
No hay soporte para el emparejamiento de MS (¡no tengo uno para probar!)
Bóveda de claves
Terraform no admite el permiso "Todos"
Puerta de enlace de red virtual
Si no se especifica ninguna configuración de BGP para VNet Gateway, terraform plan
informará un cambio benigno. Consulte el problema en GitHub.
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>