Terraform (logiciel)
Développé par | HashiCorp (en) |
---|---|
Dernière version | 1.9.8 ()[1] |
Dépôt | github.com/hashicorp/terraform |
Écrit en | Go |
Système d'exploitation | Linux, macOS et Microsoft Windows |
Type | Logiciel à sources consultables (en) |
Licence | Business Source License 1.1 (d) et MPL-2.0 |
Site web | www.terraform.io |
Terraform est un environnement logiciel d'« infrastructure as code » publié par la société HashiCorp. Cet outil permet d'automatiser la construction des ressources d'une infrastructure de centre de données comme un réseau, des machines virtuelles, un groupe de sécurité ou une base de données.
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].
Terraform permet notamment de définir des topologies cloud pour les principaux fournisseurs d'infrastructure cloud, tels qu'Amazon Web Services, IBM Cloud (anciennement Bluemix), Google Cloud Platform, Linode[3],[4], Microsoft Azure, Oracle Cloud Infrastructure, OVHcloud[5],[6] ou VMware, vSphere ainsi que OpenStack[7],[8],[9],[10],[11],[12].
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
[modifier | modifier le code]terraform init
: Permet d'initialiser le répertoire contenant la configuration Terraformterraform plan
: Permet d'afficher une vue des différences entre la configuration Terraform et la configuration effectiveterraform apply
: Permet d'appliquer la configurationterraform destroy
: Permet de détruire les ressources déployéesterraform import
: Permet d'intégrer des ressources déployées à l'extérieur de Terraform dans sa configurationterraform state
: Permet d'interagir avec le state fileterraform validate
: Permet de valider la syntaxe du code
Provider
[modifier | modifier le code]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
[modifier | modifier le code]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
[modifier | modifier le code]resource
[modifier | modifier le code]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
[modifier | modifier le code]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
[modifier | modifier le code]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 = string
default = "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
[modifier | modifier le code]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
.
output "my_database_id" {
value = data.database.my_database.engine_version
}
module
[modifier | modifier le code]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.
Un module est appelé comme ceci :
module "create_database" {
source = "./modules/database"
database_size = 1024
}
Licence
[modifier | modifier le code]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.
En septembre 2023, la Fondation Linux lance OpenTofu[15] comme alternative libre à Terraform.
Références
[modifier | modifier le code]- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « terraform (software) » (voir la liste des auteurs).
- « Release 1.9.8 », (consulté le )
- (en) « JSON Configuration Syntax - Configuration Language », sur JSON Configuration Syntax - Configuratio… (consulté le ).
- (en) Dave Roesch, « Now Available: Linode Terraform Provider », Linode, (lire en ligne, consulté le )
- (en) « Provider: Linode - Terraform by HashiCorp », Terraform by HashiCorp (consulté le )
- « Infrastructure as code: Deploying Terraform with OVH » [archive du ], Infrastructure as code: Deploying Terraform with OVH, (consulté le )
- (en) « Provider: OVH » [archive du ], Terraform by HashiCorp, (consulté le )
- (en) « Terraform vs. Chef, Puppet, etc. - Terraform by HashiCorp », Terraform by HashiCorp (consulté le )
- « HashiCorp Terraform 0.9. Released with State Locking, State Environments, and Destroy Provisioners », InfoQ (consulté le )
- Brikman, Yevgeniy., Terraform Writing Infrastructure as Code., O'Reilly Media, , 206 p. (ISBN 978-1-4919-7705-7, OCLC 978667796, lire en ligne)
- (en) Sneha Somwanshi, « Choosing the Right Tool to Provision AWS Infrastructure », ThoughtWorks, (lire en ligne)
- James Turnbull, The Terraform Book, , 315 p. (ISBN 978-0-9888202-5-8, lire en ligne)
- « Google Cloud Platform Provider for Terraform » (consulté le )
- « State », sur Documentation officielle (consulté le )
- (en) « HashiCorp adopts the Business Source License for future releases of its products »
- (en) « Linux Foundation Launches OpenTofu: A New Open Source Alternative to Terraform », sur www.linuxfoundation.org (consulté le )
Annexes
[modifier | modifier le code]Voir aussi
[modifier | modifier le code]Liens externes
[modifier | modifier le code]
- (en) Site officiel
- Terraform sur GitHub