mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-07-28 17:21:11 +00:00
71 lines
1.6 KiB
Markdown
71 lines
1.6 KiB
Markdown
# Terraform
|
|
|
|
“An open-source **infrastructure as code** software tool created by HashiCorp¹.”
|
|
|
|
- Other products in that space: Pulumi, Cloud Formation...
|
|
|
|
- Very rich ecosystem
|
|
|
|
- Supports many cloud providers
|
|
|
|
.footnote[¹Also creators of Consul, Nomad, Packer, Vagrant, Vault...]
|
|
|
|
---
|
|
|
|
## Infrastructure as code?
|
|
|
|
1. Write configuration files that describe resources, e.g.:
|
|
|
|
- some GKE and Kapsule Kubernetes clusters
|
|
- some S3 buckets
|
|
- a bunch of Linode/Digital Ocean instances
|
|
- ...and more
|
|
|
|
2. Run `terraform apply` to create all these things
|
|
|
|
3. Make changes to the configuration files
|
|
|
|
4. Run `terraform apply` again to create/update/delete resources
|
|
|
|
(Vagrant, Packer, Consul, Vault, Nomad...)
|
|
|
|
5. Run `terraform destroy` to delete all these things
|
|
|
|
---
|
|
|
|
## What Terraform *is not*
|
|
|
|
- It's not a tool to abstract the differences between cloud providers
|
|
|
|
(“I want to move my AWS workloads to Scaleway!”)
|
|
|
|
- It's not a configuration management tool
|
|
|
|
(“I want to install and configure packages on my servers!”)
|
|
|
|
- It's not an application deployment tool
|
|
|
|
(“I want to deploy a new build of my app!”
|
|
|
|
- It can be used for these things anyway (more or less succesfully)
|
|
|
|
---
|
|
|
|
## Vocabulary
|
|
|
|
- Configuration = a set of Terraform files
|
|
|
|
- typically in HCL (HashiCorp Config Language), `.tf` extension
|
|
|
|
- can also be JSON
|
|
|
|
- Resource = a thing that will be managed by Terraform
|
|
|
|
- e.g. VM, cluster, load balancer...
|
|
|
|
- Provider = plugin to manage a family of resources
|
|
|
|
- example: `google` provider to talk with GCP APIs
|
|
|
|
- example: `tls` provider to generate keys
|