Terraform (programari)

De la Viquipèdia, l'enciclopèdia lliure
Terraform
Modifica el valor a Wikidata

Tipusprogramari lliure Modifica el valor a Wikidata
Versió estable
1.8.2 (24 abril 2024) Modifica el valor a Wikidata
Gènereinfrastructure as code (en) Tradueix Modifica el valor a Wikidata
LlicènciaBusiness Source License 1.1 (en) Tradueix Modifica el valor a Wikidata
Característiques tècniques
Sistema operatiuLinux, macOS i Microsoft Windows Modifica el valor a Wikidata
Escrit enGo Modifica el valor a Wikidata
Equip
Desenvolupador(s)HashiCorp (en) Tradueix Modifica el valor a Wikidata
Més informació
Lloc webterraform.io (anglès) Modifica el valor a Wikidata
Stack ExchangeEtiqueta Modifica el valor a Wikidata
Seguiment d'errorsSeguiment d'errors Modifica el valor a Wikidata

Terraform és un entorn de programari d'infraestructura com a codi de codi obert publicat per HashiCorp. Aquesta eina automatitza la construcció de recursos d'infraestructura dels centres de dades com ara una xarxa, màquines virtuals, un grup de seguretat o una base de dades.

La infraestructura es descriu en forma del llenguatge de configuració Hashicorp Configuration Language (HCL). També és possible utilitzar el llenguatge JSON.[1]

Terraform permet, sobretot, definir topologies de núvol per als principals proveïdors d'infraestructura cloud, com ara Amazon Web Services, IBM Cloud (abans Bluemix), Google Cloud Platform, Linode,[2][3] Microsoft Azure, Oracle Cloud Infrastructure, OVHcloud,[4][5] o VMware, vSphere i OpenStack,.[6][7][8][9][10][11]

Els recursos descrits al codi HCL Terraform depenen del proveïdor d'infraestructura del núvol. Per exemple, un recurs Terraform definit per a una topologia Amazon no es pot reutilitzar per a una topologia OpenStack o Microsoft Azure, perquè no tenen les mateixes propietats.

Ordres principals[modifica]

  • terraform init : inicialitzar el directori que conté la configuració de Terraform
  • terraform plan : mostrar una vista de les diferències entre la configuració de Terraform i la configuració real
  • terraform apply : aplicar la configuració
  • terraform destroy : destruir els recursos desplegats
  • terraform import : integrar en la seva configuració els recursos desplegats fora de Terraform
  • terraform state : interactuar amb el fitxer d'estat
  • terraform validate : validar la sintaxi del codi

Provider[modifica]

Un Provider és la representació del proveïdor d'infraestructura a Terraform. Inclou diferents recursos que es poden desplegar.

State file[modifica]

Terraform desa l'estat de la seva configuració en un fitxer pla anomenat state file. Quan s'utilitza l'ordre terraform plan o terraform apply es llegeix i es compara amb la infraestructura del moment.

Es pot emmagatzemar localment (amb la configuració de Terraform) o en un dispositiu remot.[12]

Paraules clau[modifica]

resource[modifica]

Un recurs (paraula clau resource) és un objecte Terraform que s'ha de crear a la infraestructura :

resource "database" "my_database" {
 engine = "mysql"
}

Cada recurs té un tipus (database), un nom de Terraform local definit per l'usuari (my_database), els seus arguments (en l'exemple, engine) i atributs (que es poden recuperar mitjançant la sintaxi <type>.<nom>.<attribut>).

data[modifica]

Una dada és un objecte Terraform del que en volem recuperar atributs :

data "database" "my_database" {
 database_id = "...."
}

Els atributs són accessibles mitjançant les data.<type>.<nom>.<attribut>

variable[modifica]

Es pot donar una variable (variable paraula clau) com a argument a Terraform.

En primer lloc, cal definir la variable :

variable "example" {
  description = "Aquesta és una variable d'exemple"
  type    = string
  default   = "Wikipedia"
}

Aleshores podem instanciar-ho (si no ho fem, Terraform utilitzarà el valor default o demanarà entrada quan demani terraform plan o terraform apply) :

example = "Hola, Món!"

També és possible utilitzar un fitxer de variables (per exemple, específic per a diferents entorns) i posar-lo com a argument de terraform plan o terraform apply .

Les variables de Terraform tenen noms com : var.example .

output[modifica]

Una sortida és un objecte Terraform que s'utilitza per desar un atribut d'un recurs o dades per reutilitzar-lo en un altre codi de Terraform o simplement per mostrar-lo al terminal, al final de l'ordre terraform apply .

output "my_database_id" {
 value = data.database.my_database.engine_version
}

module[modifica]

Un mòdul és una part reutilitzable del codi Terraform. Com qualsevol altre arbre de Terraform, un mòdul té recursos, dades, variables i sortides.

Per definir un mòdul :

module "create_database" {
 source = "./modules/database"

 database_size = 1024
}

Referències[modifica]

  1. [enllaç sense format] https://www.terraform.io/language/syntax/json
  2. Roesch, Dave «Now Available: Linode Terraform Provider» (en anglès). Linode, 30-10-2018 [Consulta: 2 novembre 2018].
  3. «Provider: Linode - Terraform by HashiCorp» (en anglès). Terraform by HashiCorp. [Consulta: 2 novembre 2018].
  4. «Infrastructure as code: Deploying Terraform with OVH». Infrastructure as code: Deploying Terraform with OVH, 09-10-2019. Arxivat de l'original el 2019-10-10. [Consulta: 9 octubre 2019].
  5. «Provider: OVH» (en anglès). Terraform by HashiCorp, 10-10-2019. Arxivat de l'original el 2019-10-10. [Consulta: 10 octubre 2019].
  6. «Terraform vs. Chef, Puppet, etc. - Terraform by HashiCorp» (en anglès). Terraform by HashiCorp. [Consulta: 14 març 2018].
  7. «HashiCorp Terraform 0.9. Released with State Locking, State Environments, and Destroy Provisioners». InfoQ. [Consulta: 23 maig 2017].
  8. Yevgeniy., Brikman,. Terraform Writing Infrastructure as Code.. O'Reilly Media, 2017, p. 206. ISBN 978-1-4919-7705-7. OCLC 978667796. 
  9. Somwanshi, Sneha «Choosing the Right Tool to Provision AWS Infrastructure» (en anglès). ThoughtWorks, 01-03-2015.
  10. Turnbull, James. The Terraform Book, 2016, p. 315. ISBN 978-0-9888202-5-8. 
  11. «Google Cloud Platform Provider for Terraform». [Consulta: 5 febrer 2017].
  12. «State». Documentation officielle. [Consulta: 9 març 2022].

Vegeu també[modifica]

Enllaços externs[modifica]