TERRAFORMER: du reverse engineering IaC de vos environnements Cloud


Cloud, Scripting / mardi, avril 6th, 2021

Vous avez déjà tous entendus parler de l’IaC (Infrastructure as a Code) pour builder vos environnements Cloud. Mais aujourd’hui je vais vous parler de comment générer de l’IaC de vos environnements Cloud automatiquement. TERRAFORMER génère des fichiers tf/json + tfstate à partir de l’infrastructure existante pour tous les objets supportés par la ressource. Petite demo avec Azure…

Terraformer utilise les providers Terraform et est conçu pour prendre facilement en charge les ressources nouvellement ajoutées. Pour mettre à niveau les ressources avec de nouveaux champs, il vous suffit de mettre à niveau les providers Terraform concernés.

Voici la syntaxe:

Import current state to Terraform configuration from a provider

Usage:
   import [provider] [flags]
   import [provider] [command]

Available Commands:
  list        List supported resources for a provider

Flags:
  -b, --bucket string         gs://terraform-state
  -c, --connect                (default true)
  -С, --compact                (default false)
  -x, --excludes strings      firewalls,networks
  -f, --filter strings        compute_firewall=id1:id2:id4
  -h, --help                  help for google
  -O, --output string         output format hcl or json (default "hcl")
  -o, --path-output string     (default "generated")
  -p, --path-pattern string   {output}/{provider}/ (default "{output}/{provider}/{service}/")
      --projects strings
  -z, --regions strings       europe-west1, (default [global])
  -r, --resources strings     firewall,networks or * for all services
  -s, --state string          local or bucket (default "local")
  -v, --verbose               verbose mode
  -n, --retry-number          number of retries to perform if refresh fails
  -m, --retry-sleep-ms        time in ms to sleep between retries

Use " import [provider] [command] --help" for more information about a command.

Bien entendu, pour Azure, il faut créer un SPN ayant les bons droits sur les souscriptions Azure.

# Configurer le provider Azure 
provider "azurerm" { 
   
# Le SPN
SUBSCRIPTION_ID="xxxxxxxxxx"
CLIENT_ID="xxxxxxxxxxxx"
CLIENT_SECRET="xxxxxxxxxxx"
TENANT_ID="xxxxxxxxxxxxxx"
}

Il vous faut ensuite télécharger GO pour Windows ici afin de compiler TERRAFORMER. Dans le répertoire Terraform, lancez un git clone de TERRAFORMER.

Ensuite, il faut builder à l’aide de GO. On peut choisir les providers à prendre en compte. Le commutateur « -v » les prends tous en compte. Sinon, il convient de lancer cette commande pour prendre en charge les providers spécifiés. Sans cela, la compilation prend 10 minutes et l’EXE pèse 250 Mo.
go run build/main.go {google,aws,azure,kubernetes and etc}

TERRAFORMER nécessite des variables, donc pour la ligne de commande, créer un fichier .BAT à lancer avant pour définir les variables nécessaires pour TERRAFORMER.

Vous pouvez ensuite lancer la commande TERRAFORMER.exe pour générer votre code IaC Terraform. Ici, j’utilise « * » pour tout générer ce qui est supporté.
./terraformer import azure -r resource_group

OU PAR EXEMPLE

./terraformer import azure -R my_resource_group -r virtual_network,resource_group
Une fois la génération terminée, voici ce que nous obtenons:
Et dans VSCODE, voici le contenu d’un fichier:
Voici la liste de ressources supportées:
analysis
azurerm_analysis_services_server
app_service
azurerm_app_service
container
azurerm_container_group
azurerm_container_registry
azurerm_container_registry_webhook
cosmosdb
azurerm_cosmosdb_account
azurerm_cosmosdb_sql_container
azurerm_cosmosdb_sql_database
azurerm_cosmosdb_table
database
azurerm_mariadb_configuration
azurerm_mariadb_database
azurerm_mariadb_firewall_rule
azurerm_mariadb_server
azurerm_mariadb_virtual_network_rule
azurerm_mysql_configuration
azurerm_mysql_database
azurerm_mysql_firewall_rule
azurerm_mysql_server
azurerm_mysql_virtual_network_rule
azurerm_postgresql_configuration
azurerm_postgresql_database
azurerm_postgresql_firewall_rule
azurerm_postgresql_server
azurerm_postgresql_virtual_network_rule
azurerm_sql_database
azurerm_sql_active_directory_administrator
azurerm_sql_elasticpool
azurerm_sql_failover_group
azurerm_sql_firewall_rule
azurerm_sql_server
azurerm_sql_virtual_network_rule
disk
azurerm_managed_disk
dns
azurerm_dns_a_record
azurerm_dns_aaaa_record
azurerm_dns_caa_record
azurerm_dns_cname_record
azurerm_dns_mx_record
azurerm_dns_ns_record
azurerm_dns_ptr_record
azurerm_dns_srv_record
azurerm_dns_txt_record
azurerm_dns_zone
load_balancer
azurerm_lb
azurerm_lb_backend_address_pool
azurerm_lb_nat_rule
azurerm_lb_probe
network_interface
azurerm_network_interface
network_security_group
azurerm_network_security_group
private_dns
azurerm_private_dns_a_record
azurerm_private_dns_aaaa_record
azurerm_private_dns_cname_record
azurerm_private_dns_mx_record
azurerm_private_dns_ptr_record
azurerm_private_dns_srv_record
azurerm_private_dns_txt_record
azurerm_private_dns_zone
azurerm_private_dns_zone_virtual_network_link
public_ip
azurerm_public_ip
azurerm_public_ip_prefix
redis
`azurerm_redis_cache
resource_group
azurerm_resource_group
scaleset
azurerm_virtual_machine_scale_set
security_center
azurerm_security_center_contact
azurerm_security_center_subscription_pricing
storage_account
azurerm_storage_account
azurerm_storage_blob
azurerm_storage_container
virtual_machine
azurerm_virtual_machine
virtual_network
azurerm_virtual_network
Partagez si ça vous plait !
0 0 votes
Évaluation de l'article
S’abonner
Notifier de
guest
0 Commentaires
Inline Feedbacks
View all comments