L'infrastructure est décrite sous forme du langage de configuration Hashicorp Configuration Language (HCL). Il est aussi possible d'utiliser le langage JSON[2].
Les ressources décrites dans le code HCL Terraform sont dépendantes du fournisseur (« provider ») de l'infrastructure cloud. Par exemple, une ressource Terraform définie pour une topologie Amazon ne peut pas être réutilisée pour une topologie OpenStack ou Microsoft Azure puisqu'elle n'ont pas les mêmes propriétés.
Commandes principales
terraform init : Permet d'initialiser le répertoire contenant la configuration Terraform
terraform plan : Permet d'afficher une vue des différences entre la configuration Terraform et la configuration effective
terraform apply : Permet d'appliquer la configuration
terraform destroy : Permet de détruire les ressources déployées
terraform import : Permet d'intégrer des ressources déployées à l'extérieur de Terraform dans sa configuration
terraform state : Permet d'interagir avec le state file
terraform validate : Permet de valider la syntaxe du code
Provider
Un Provider est la représentation du fournisseur de l'infrastructure dans Terraform. Il englobe différentes ressources qui peuvent être déployées.
State file
Terraform enregistre l'état de sa configuration dans un ficher plat dit state file. À l'utilisation de la commande terraform plan ou terraform apply il est lu et comparé à l'infrastructure effective.
Il peut être stocké soit localement (avec la configuration Terraform), soit dans un dépôt distant[13].
Mots-clefs
resource
Une ressource (mot clef resource) est un objet Terraform à créer dans l'infrastructure :
resource"database""my_database"{engine="mysql"}
Chaque ressource possède un type (database), un nom local à Terraform défini par l'utilisateur (my_database), ses arguments (dans l'exemple, engine) et des attributs (que l'on peut récupérer via la syntaxe <type>.<nom>.<attribut>).
data
Une donnée (mot clef data) est un objet Terraform dont on veut récupérer des attributs :
data"database""my_database"{database_id="...."}
Les attributs sont accessibles via la syntaxe data.<type>.<nom>.<attribut>
variable
Une variable (mot clef variable) peut être donnée en argument à Terraform.
Il faut dans un premier temps définir la variable :
variable"example"{description="This variable is an example"type=stringdefault="Wikipedia"}
On peut ensuite l'instancier (si on ne le fait pas, Terraform utilisera la valeur default ou demandera la saisie lors de la commande terraform plan ou terraform apply) :
example="Hello, World!"
Il est aussi possible d'utiliser un fichier de variables (par exemple spécifiques à différents environnements) et le mettre en argument de terraform plan ou terraform apply.
Une variable Terraform est appelée de cette manière : var.example.
output
Une sortie (mot clef output) est un objet Terraform permettant de sauvegarder un attribut d'une ressource ou d'une donnée pour la réutiliser dans un autre code Terraform ou simplement pour l'afficher dans le terminal, à la fin de la commande terraform apply.
Un module (mot clef module) est une portion de code Terraform réutilisable. Comme toute autre arborescence Terraform, un module possède des ressources, des données, des variables et des sorties.
Terraform a initialement été rendu disponible sous une licence MPL 2.0. Le , Hashicorp annonce sur son site un changement de licence, passant les produits de l'entreprise à une licence open source non libre, la Business Source License 1.1 (BUSL-1.1)[14], ne permettant pas l'utilisation par un concurrent.