Fonctionnement d’Azure Export pour Terraform
Cet article vous présente les flux de travail Azure Export pour Terraform . Dans cet article, vous allez découvrir les meilleures pratiques de l’outil, les limitations actuelles et la façon d’atténuer ces limitations.
Mode interactif
Par défaut, Azure Export pour Terraform s’exécute en mode interactif. Lorsque vous exécutez en mode interactif, les raccourcis clavier disponibles sont répertoriés en bas de l’affichage.
Tâche | Raccourcis clavier |
---|---|
Navigation | |
Sélectionnez l’élément précédent dans la liste des ressources. | ↑ -ou- k |
Sélectionnez l’élément suivant dans la liste des ressources. | ↑ -ou- j |
Accédez à la page précédente dans la liste des ressources. | ← -ou- h -ou- Page haut |
Passez à la page suivante dans la liste des ressources. | → -ou- l -ou- Page vers le bas |
Accédez au début de la liste des ressources. | g -ou- Accueil |
Passez à la fin de la liste des ressources. | G -or- End |
Sélection des ressources à ignorer | |
Ignorer la ressource (ou annuler le saut si elle est marquée comme « Skip ») | Supprimer |
Opérations de filtre | |
Définissez un filtre par texte dans la liste des ressources. | / |
Effacer n’importe quel filtre actuel | Échap |
Enregistrer les opérations | |
Enregistrez un fichier de mappage de la liste des ressources. Le fichier de sortie est affecté par l’ignorer (mais pas le filtrage). | s |
Exportez les ressources vers l’état (si --hcl-only ce n’est pas spécifié) et générez la configuration. |
w |
Expérience utilisateur | |
Affichez des recommandations pour la ressource actuelle. | r |
Afficher les erreurs d’exportation de ressources (le cas échéant). | e |
Afficher l’aide. | ? |
Quitter | |
Quittez le mode interactif. | t |
Pour chaque ressource, Azure Export pour Terraform tente de reconnaître le type de ressource Terraform correspondant. Si elle trouve une correspondance, la ligne est marquée avec l’indicateur suivant : 💡.
Si la ressource ne peut pas être résolue, vous devez entrer l’adresse de ressource Terraform sous la forme suivante : <resource type>.<resource name>
. Par exemple, azurerm_linux_virtual_machine.test
fait référence à un type de ressource Terraform de azurerm_linux_virtual_machine tandis que le test
nom de la machine virtuelle utilisée dans les fichiers de configuration.
Pour afficher le ou les types de ressources disponibles pour la ressource sélectionnée, appuyez sur r.
Dans certains cas, il existe des ressources Azure qui n’ont aucune ressource Terraform correspondante, par exemple si la ressource ne prend pas en charge Terraform. Certaines ressources peuvent également être créées en tant qu’effet secondaire de l’approvisionnement d’une autre ressource, telle que la ressource disque du système d’exploitation créée lors de l’approvisionnement d’une machine virtuelle. Dans ces cas, vous pouvez ignorer les ressources sans affecter quoi que ce soit.
Après avoir parcouru toutes les ressources à importer, appuyez sur w pour commencer à générer la configuration Terraform et (s’il --hcl-only
n’est pas sélectionné) à importer dans l’état Terraform.
Mode non interactif
Par défaut, Azure Export pour Terraform s’exécute en mode interactif. Pour spécifier que l’outil doit s’exécuter en mode non interactif, spécifiez l’indicateur --non-interactive
.
aztfexport [command] --non-interactive <scope>
Important
Si le répertoire dans lequel vous exécutez Azure Export pour Terraform n’est pas vide, vous devez ajouter l’indicateur --overwrite
pour utiliser l’indicateur --hcl-only
.
Meilleures pratiques sur les flux de travail de base
Au niveau fondamental, tout utilisateur d’Azure Export fait face à une décision entre deux options :
Les sous-sections suivantes fournissent des conseils sur l’option à prendre en fonction du scénario.
Gestion de l’infrastructure
Vous n’avez peut-être pas besoin d’exporter vers l’état si vous n’avez pas vérifié que les ressources configurées se comportent au sein de votre environnement de la manière souhaitée.
Si vous êtes sûr de vouloir gérer l’ensemble des ressources dans Terraform avec terraform init plan apply
des flux de travail, l’exportation vers l’état est essentielle.
Si vous ne savez pas encore que vous souhaitez gérer les ressources, il est recommandé de passer l’indicateur --hcl-only
.
Infrastructure existante
Dans les scénarios où vous exportez vers des environnements Terraform existants, il peut être utile de --hcl-only
considérer comme un équivalent de plan terraform, en particulier avant d’ajouter à des environnements existants.
La terraform apply
commande équivaut à exporter des ressources pendant lesquelles leur configuration est liée à l’état préexistant. Dans ce scénario, l’utilisation d’un fichier de mappage permet de gagner du temps d’exécution pour répertorier et mapper les ressources.
Découverte de l’infrastructure
Si vous ne savez pas quelles ressources existent dans un environnement, vous pouvez vérifier en spécifiant l’indicateur --generate-mapping-file
. Pour plus d’informations sur ce sujet, consultez Exploration de la sélection et du nommage des ressources personnalisées à l’aide d’Azure Export pour Terraform.
Limites
Azure Export pour Terraform est un outil complexe qui tente de convertir l’infrastructure Azure en code et état Terraform. Ses limitations connues actuelles sont expliquées dans les sous-sections suivantes.
Propriétés en écriture seule
Certaines propriétés dans AzureRM sont en écriture seule et ne sont pas incluses dans le code généré créé par Azure Export pour Terraform. Le problème est résolu en définissant la propriété après l’exportation vers le code HCL.
Contraintes inter-propriétés
Le fournisseur AzureRM peut définir deux propriétés qui sont en conflit entre elles. Lorsque l’exportation Azure pour Terraform lit les propriétés en conflit, elle peut définir les deux propriétés sur la même valeur malgré la configuration de l’utilisateur uniquement. D’autres complications apparaissent lorsque plusieurs contraintes inter-propriétés existent dans la même configuration générée. Vous devez savoir où existent les conflits entre propriétés au sein de votre configuration pour atténuer ce problème.
Infrastructure en dehors de l’étendue des ressources
Lorsque vous utilisez Azure Export pour Terraform pour cibler des étendues de ressources, les ressources requises pour la configuration peuvent exister en dehors de l’étendue spécifiée. Un exemple est une attribution de rôle. L’utilisateur doit identifier les ressources qui sont en dehors de l’étendue.
Propriétés en écriture seule
Azure Export ne peut pas générer de propriétés en écriture seule (telles que les mots de passe) dans sa configuration. Vous devez connaître les propriétés en écriture seule et les définir dans une configuration pour créer de nouveaux ensembles de ressources.
Modification du code pour correspondre aux normes de codage
Il existe quelques opérations nécessaires si l’utilisateur souhaite modifier son code pour respecter les normes de codage. Ces étapes ne sont nécessaires que si l’utilisateur envisage d’utiliser le code dans des environnements non-andbox.
Ressources définies par la propriété
Certaines ressources dans Azure peuvent être définies comme une propriété dans une ressource Terraform parente ou une ressource Terraform individuelle. Un exemple est un sous-réseau. Azure Export pour Terraform définit la ressource en tant que ressource individuelle, mais il est recommandé de faire correspondre votre configuration de codage existante.
Dépendances explicites
Azure Export pour Terraform est actuellement en mesure de déclarer uniquement des dépendances explicites. Vous devez connaître le mappage des relations entre les ressources pour refactoriser le code afin d’inclure les dépendances implicites nécessaires.
Valeurs codées en dur
Azure Export pour Terraform génère actuellement des chaînes codées en dur. En guise de bonne pratique, vous devez refactoriser ces valeurs en variables. En outre, lorsque vous utilisez l’indicateur --full-properties
pour exposer toutes les propriétés, certaines informations sensibles (telles que les secrets) sont visibles dans la configuration générée. Utilisez les pratiques recommandées pour protéger la visibilité de ce code.