theme | background | title | info | class | highlighter | drawings | transition | mdc | |
---|---|---|---|---|---|---|---|---|---|
seriph |
Terraform presentatie |
## Presentatie over de basics van Terraform
|
text-center |
shiki |
|
slide-left |
true |
Basics van Terraform
Tom Lanser - 24 mei 2024
Terraform is een open-source tool waarmee je cloud infrastructuur kan beheren.
Onderdelen van Terraform:
- 🔌 Provider - Een plugin die Terraform gebruikt om te communiceren met een cloud provider.
- 🛠️ Resource - Een object binnen de cloud provider dat beheerd wordt.
- 📝 Variable - Variables kunnen worden gebruikt om waarden configureerbaar te maken.
- 📤 Output - Outputs geven informatie over de resources na het toepassen van Terraform configuraties.
- 📊 State - De huidige status van de beheerde resources.
- ⌨️ CLI - De command line interface voor interactie met Terraform.
Variables kunnen worden gebruikt om waarden configureerbaar te maken.
```hcl
variable "region" {
description = "DigitalOcean region"
type = string
default = "ams3"
}
variable "do_token" {
description = "DigitalOcean API token"
type = string
nullable = false
}
```
```hcl
variable "region" {
description = "DigitalOcean region"
type = string
default = "ams3"
}
variable "do_token" {
description = "DigitalOcean API token"
type = string
nullable = false
sensitive = true
}
```
layout: image-right image: https://cover.sli.dev?2 level: 2
Voorbeeld provider van DigitalOcean
Hierin defineer je vooral de specificaties van de cloud provider om ermee te kunnen praten en resources te beheren
```hcl
provider "digitalocean" {
token = "geheim123"
}
```
```hcl
provider "digitalocean" {
token = var.do_token
}
```
Hieronder een voorbeeld van hoe je DigitalOcean resources kunt definiëren met Terraform:
```hcl
resource "digitalocean_droplet" "presentation" {
image = "nginx"
name = "presentatie"
size = "s-1vcpu-1gb"
region = var.region
}
```
```hcl
resource "digitalocean_domain" "presentatie_domain" {
name = "${var.subdomain}.${var.domain}"
}
resource "digitalocean_certificate" "presentatie_domain_certificate" {
type = "lets_encrypt"
name = "presentation-certificate"
domains = [digitalocean_domain.presentatie_domain.name]
}
```
```hcl
resource "cloudflare_record" "presentation_ns_record" {
for_each = toset(["ns1", "ns2", "ns3"])
zone_id = var.cf_zone
proxied = false
name = var.subdomain
type = "NS"
ttl = 60
value = "${each.key}.digitalocean.com"
}
```
layout: image-right image: https://cover.sli.dev?4 level: 2
Een state bestaat uit de huidige status van de beheerde resources.
Standaard staat de state opgeslagen op schijf, maar je kan deze ook op een S3 bucket bijhouden.
Dit bied de mogelijkheid om de state makkelijk te delen binnen de CD pipeline.
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "path/to/my/key"
}
}
De cli kan je gebruiken om te werken met terraform.
De lifecylce van de cli:
terraform init
-> Dit initialiseert de terraform cli met de provider en de state.terraform plan
-> Dit toont alle resources die worden gemaakt of gewijzigd.terraform apply
-> Dit maakt de resources aan op basis van wat er verschild tussen de state en de configuratie.terraform destroy
-> Dit verwijdert alle resources die er op dit moment zijn.