az2tf
Uma versão mais recente desta ferramenta escrita em Python já está disponível com suporte para terraform v0.12. Também permite a execução a partir de um runbook do Azure, bem como da linha de comando https://github.com/andyt530/py-az2tf .
O desenvolvimento desta versão (bash shell) foi interrompido em favor da nova versão
Este utilitário 'Azure to Terraform' (az2tf) lê uma assinatura do Azure e gera todos os arquivos de configuração do terraform (.tf) necessários de cada um dos grupos de recursos do Azure compostos. Ele também importa o estado do terraform usando um
"importação terraform ...." comando
E finalmente executa um
"plano de terraforma." comando
Esperamos que não haja adições ou exclusões subsequentes relatadas pelo comando terraform plan, pois todos os arquivos de configuração do terraform apropriados terão sido criados automaticamente.
Requisitos e pré-requisitos
- A ferramenta foi escrita para o script bash shell e foi testada em um MAC
- O Azure cli2 versão 2.0.55 ou superior precisa ser instalado e você precisa de um login com pelo menos privilégios de "Leitura"
- A versão v0.11.11 do terraform precisa ser instalada
- jq, consulte: https://stedolan.github.io/jq/ (no macOS também disponível via $ brew install jq)
Guia de início rápido para usar a ferramenta
A execução da ferramenta em seu shell local (bash) exigiu estas etapas:
- Descompacte ou clone este repositório git em um diretório vazio
- faça login no Azure cli2 (
az login
) - execute a ferramenta
Experimental: usando a imagem docker
- Construa com:
$ docker build --rm -f "Dockerfile" -t az2tf:latest
. - Se ainda não existir, crie um diretório "gerado" (
$ mkdir generated
) - Execute com
$ ./runme.sh
(agradeceríamos comentários sobre como usar melhor o docker)
Usando a imagem docker com docker-compose
Podemos usar docker-compose para simplificar a execução da imagem do docker. Simples execução docker-compose run shell bash
.
Guia de uso
Para gerar os arquivos terraform para uma assinatura inteira do Azure:
./az2tf.sh -s <Subscription ID>
Para incluir Políticas de Assinatura do Azure e controles e atribuições de RBAC:
./az2tf.sh -s <Subscription ID> -p yes
Para gerar os arquivos terraform para um grupo de recursos específico em uma assinatura:
./az2tf.sh -s <Subscription ID> -g <Resource Group>
Para incluir os segredos de um Key Vault em arquivos terraform (os segredos estarão em texto simples):
./az2tf.sh -s <Subscription ID> -g <Resource Group> -x yes
Para filtrar o tipo de recurso terraform: (por exemplo: apenas conjuntos de disponibilidade)
./az2tf.sh -s <Subscription ID> -g <Resource Group> -r azurerm_availability_set
Seja paciente - muitos resultados são fornecidos como az2tf:
- Loops para cada provedor por meio de seus grupos de recursos e
- Cria os arquivos de configuração *.tf necessários no diretório "gerado"
- Executa os comandos necessários de 'importação de terraform'
- E finalmente executa um 'plano de terraformação'
Tipos de recursos suportados
Os seguintes tipos de recursos terraform são suportados por esta ferramenta no momento:
Recursos básicos
- azurerm_resource_group (completo)
Recursos de autorização
- azurerm_role_definition (nível de assinatura)
- azurerm_role_assignment (nível de assinatura)
Recursos do Active Directory
Recursos do serviço de aplicativo (aplicativos Web)
- azurerm_app_service
- azurerm_app_service_plan
Recursos de automação
- azurerm_automation_account
Recursos de computação
- azurerm_availability_set (completo)
- azurerm_image
- azurerm_owned_disk (comum)
- azurerm_virtual_machine (comum)
- azurerm_virtual_machine_scale_sets (comum)
Recursos de contêiner
- azurerm_container_registry (completo)
- azurerm_kubernetes_cluster
Recursos do CosmosDB (DocumentDB)
- azurerm_cosmosdb_account (comum)
Recursos de blocos de dados
- azurerm_databricks_resources
Recursos do Key Vault
- azurerm_key_vault (Comum)
- azurerm_key_vault_secret (completo)
Recursos do balanceador de carga
- azurerm_lb (completo)
- azurerm_lb_backend_address_pool (completo)
- azurerm_lb_rule (completo)
- azure_nat_rule (completo – precisa de mais testes)
- azurerm_lb_probe (completo)
- azure_nat_pool (completo – precisa de mais testes)
Recursos de gerenciamento
- azurerm_management_lock (completo)
Recursos de mensagens
- azurerm_servicebus_namespace (completo)
- azurerm_servicebus_queue (parcial)
Recursos de monitoramento
- azurerm_autoscale_setting
Recursos de rede
- 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 (comum)
- azurerm_network_security_group (completo)
- azurerm_network_watcher
- azurerm_public_ip (comum)
- 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ítica
- azurerm_policy_definition (somente políticas personalizadas)
- azurerm_policy_assignment
Recursos OMS
- azurerm_log_analytics_solution (parcial)
- azurerm_log_analytics_workspace (completo)
Serviços de recuperação
- azurerm_recovery_services_vault (completo)
Recursos de armazenamento
- azurerm_storage_account (Comum - falta suporte total tf)
(Completo) = suporte completo para todos os atributos de terraform (Comum) = suporte para os atributos de terraform mais comuns (Parcial) = suporte para alguns dos atributos de terraform
Adições planejadas
- Bancos de dados e aplicativos PaaS
- Regras de firewall de armazenamento
- Melhor suporte contínuo ao AKS à medida que o AKS evolui
- Outros provedores de terraform onde o terraform e o Azure cli2 oferecem suporte mútuo
Problemas conhecidos
Velocidade
É muito lento fazer um loop em tudo em assinaturas grandes, há maneiras de acelerar essa ferramenta (fazer menos chamadas de comando az cli), mas também tornaria mais difícil a depuração. Posso tentar fazer isso depois de terminar de construir o suporte para mais provedores.
KeyVault:
Pode falhar se o seu login/SPN não tiver acesso ao KeyVault
Máquinas virtuais:
Esses atributos sempre são relatados no plano terraform definido como falso por padrão - pode ser necessário substituir manualmente
- delete_data_disks_on_termination: "" => "falso"
- delete_os_disk_on_termination: "" => "falso"
Conta de armazenamento
aguardando suporte do terraform para endpoints de serviço/firewalling da VNet Pode falhar se seu login/SPN não tiver acesso ao KeyVault usado para criptografia Também pode falhar se os bloqueios de recursos estiverem em vigor
seguro médico obrigatório
Se as soluções tiverem '[' & ']' em seus nomes, elas serão ignoradas.
Rota Expressa
Não há suporte para peering MS (não tenho um para testar!)
Cofre de chaves
terraform não suporta a permissão "Todos"
Gateway de rede virtual
se nenhuma configuração de BGP for especificada para o VNet Gateway, terraform plan
relatará uma alteração benigna, consulte o problema no github
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>