Terraform (programari)
Tipus | programari amb la font disponible |
---|---|
Versió estable | |
Gènere | infrastructure as code (en) |
Llicència | Business Source License 1.1 (en) Llicència pública de Mozilla, versió 2.0 |
Característiques tècniques | |
Sistema operatiu | Linux, macOS i Microsoft Windows |
Escrit en | Go |
Format de fitxer de lectura | |
Format de fitxer d'escriptura | |
Equip | |
Desenvolupador(s) | HashiCorp |
Fonts de codi | |
Més informació | |
Lloc web | terraform.io (anglès) |
Stack Exchange | Etiqueta |
Seguiment d'errors | Seguiment d'errors |
| |
Terraform és un programari per gestionar automàticament els recursos en un centre de dades (Platform as a Service) com ara les màquines virtuals, espais d'emmagatzematge, subxarxes, bases de dades, grups de seguretat, etc. És programari de codi de codi obert publicat per HashiCorp.
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 Terraformterraform plan
: mostrar una vista de les diferències entre la configuració de Terraform i la configuració realterraform apply
: aplicar la configuracióterraform destroy
: destruir els recursos desplegatsterraform import
: integrar en la seva configuració els recursos desplegats fora de Terraformterraform state
: interactuar amb el fitxer d'estatterraform 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]- ↑ https://www.terraform.io/language/syntax/json
- ↑ Roesch, Dave «Now Available: Linode Terraform Provider» (en anglès). Linode, 30-10-2018 [Consulta: 2 novembre 2018].
- ↑ «Provider: Linode - Terraform by HashiCorp» (en anglès). Terraform by HashiCorp. [Consulta: 2 novembre 2018].
- ↑ «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].
- ↑ «Provider: OVH» (en anglès). Terraform by HashiCorp, 10-10-2019. Arxivat de l'original el 2019-10-10. [Consulta: 10 octubre 2019].
- ↑ «Terraform vs. Chef, Puppet, etc. - Terraform by HashiCorp» (en anglès). Terraform by HashiCorp. [Consulta: 14 març 2018].
- ↑ «HashiCorp Terraform 0.9. Released with State Locking, State Environments, and Destroy Provisioners». InfoQ. [Consulta: 23 maig 2017].
- ↑ Yevgeniy., Brikman,. Terraform Writing Infrastructure as Code.. O'Reilly Media, 2017, p. 206. ISBN 978-1-4919-7705-7. OCLC 978667796.
- ↑ Somwanshi, Sneha «Choosing the Right Tool to Provision AWS Infrastructure» (en anglès). ThoughtWorks, 01-03-2015.
- ↑ Turnbull, James. The Terraform Book, 2016, p. 315. ISBN 978-0-9888202-5-8.
- ↑ «Google Cloud Platform Provider for Terraform». [Consulta: 5 febrer 2017].
- ↑ «State». Documentation officielle. [Consulta: 9 març 2022].