Update Terraform documentation: refine variable usage, add remote state configuration, and enhance examples

This commit is contained in:
Vincent Nuszbaum
2024-11-06 12:26:44 +01:00
parent 46f26d04ab
commit 42b7bc639f
4 changed files with 88 additions and 32 deletions

View File

@@ -77,7 +77,6 @@ Een aantal opties zijn:
- Local
- AWS S3
- Azure storage accounts
- Remote
- Terraform cloud
## variablen

View File

@@ -1,3 +1,5 @@
# D. Count
Zoals al eerder opgemerkt kunnen er meerdere web apps bestaan onder dezelfde app service plan.
Je gaat nu met een simpele loop meerdere web apps aanmaken.
We zullen dit op basis van een lijst van namen doen.
@@ -5,18 +7,21 @@ We zullen dit op basis van een lijst van namen doen.
Maak 5 webapps aan door middel van een loop.
Wat moet je doen:
- Verander de data type van de app naam variabelen naar list(string)
- maak in je tfvars file een lijst van namen die je web apps moeten hebben.
- Voeg de count meta-argument toe aan je web_app resource block.
- Check de count documentatie voor details https://developer.hashicorp.com/terraform/language/meta-arguments/count
- Als je een output block hebt zal die nu niet meer werken aanegzien er meer outputs zijn.
- verander deze naar het volgende om het werkend te houden
```hcl
output "url" {
value = azurerm_linux_web_app.<de naam van je webapp resource block>.*.default_hostname
}
```
- Voeg de count meta-argument toe aan je webapp resource block.
- Check de count documentatie voor details <https://developer.hashicorp.com/terraform/language/meta-arguments/count>
- Als je een output block hebt, zal die nu niet meer werken aangezien er meer outputs zijn.
- Verander deze naar het volgende om het werkend te houden
```hcl
output "url" {
value = azurerm_linux_web_app.<de naam van je webapp resource block>.*.default_hostname
}
```
## Experiment
Verwijder web app 3 uit je lijst en run ```terraform apply -var-file dev.tfvars``` opnieuw.
Kijk goed welke web app er is verwijderd. En welke niet.
Kijk goed welke web app er is verwijderd. En welke niet.

View File

@@ -1,43 +1,50 @@
# E. For_each
Het is mooi dat je nu meerdere webapps kunt maken, maar de app service plan die we gebruiken heeft daar eigenlijk helemaal de resources niet voor. Dus we moeten nu toch een app service plan per webapp gaan maken.
Daar kun je for_each goed voor gebruiken in combinatie met een map variabelen.
## Variabelen
Als eerste ga je een map variabelen maken.
- Voeg in je variables.tf een nieuwe variabelen toe met het type map(any)
- Je kunt nu ook de app service plan naam en app naam variabelen verwijderen, die hebben we nu namelijk niet meer nodig.
- Ga nu naar je dev.tfvars file, verwijder hier ook de app service plan naam en app naam variabelen.
- Nu kun je de waardes van je map variabelen toe gaan voegen. Zie hieronder een voorbeeld:
```hcl
asps = {
terraform101-asp1 = {
asp_tier = "B1"
app = {
app_name = "asp1-webapp"
https_only = true
}
}
terraform101-asp2 = {
asp_tier = "B1"
app = {
app_name = "asp2-webapp"
https_only = true
}
}
terraform101-asp1 = {
asp_tier = "B1"
app = {
app_name = "asp1-webapp"
https_only = true
}
}
terraform101-asp2 = {
asp_tier = "B1"
app = {
app_name = "asp2-webapp"
https_only = true
}
}
}
```
Zoals je ziet hebben we de naam van de app service plan als de key en daaronder weer een map als value. Deze map heeft asp_tier en app als key-value pairs. De asp_tier variabelen geeft ons de mogelijkheid om dit per app service plan in te stellen. Voor nu houden we het gewoon op B1. App is zelf ook weer een map met twee key-value pairs. De naam van onze web app een https_only setting.
In het geval van een map variabelen is het dus alleen nodig om de eerste variabelen de definiëren.
Zoals je ziet hebben we de naam van de app service plan als de key en daaronder weer een map als value. Deze map heeft asp_tier en app als key-value pairs. De asp_tier variabelen geeft ons de mogelijkheid om dit per app service plan in te stellen. Voor nu houden we het gewoon op B1. App is zelf ook weer een map met twee key-value pairs. De naam van onze web app en een https_only setting.
## Code
Check voor de code de documentatie ;P https://developer.hashicorp.com/terraform/language/meta-arguments/for_each
Check voor de code de documentatie ;P <https://developer.hashicorp.com/terraform/language/meta-arguments/for_each>
## Output block
Als je een output block hebt moet je de volgende wijziging aan brengen:
```hcl
output "url" {
value = {
for r, wa in azurerm_linux_web_app.<de naam van je webapp resource block> : r => wa.default_hostname
}
value = {
for r, wa in azurerm_linux_web_app.<de naam van je webapp resource block> : r => wa.default_hostname
}
}
```
```

View File

@@ -0,0 +1,45 @@
# Remote state
Voor nu hebben we de hele tijd gebruik gemaakt van een remote state.
Maar aangezien jullie allemaal onderdeel zijn van een team wat samen werkt is het beter om een remote state te gaan gebruiken, zodat jullie collega's ook updates kunnen deployen voor de infrastructuur.
Er zijn natuurlijk meerdere backend opties die je kunt gebruiken zoals:
- S3
- OSS
- GCS
- en nog veel meer.
Maar wij gaan voor vandaag gebruik maken van azurerm.
## Config
Een remote state configureren is gellukig heel simpel.
- Ga naar je main.tf en zoek naar het terraform block.
- verander het block naar het volgende:
```terraform
terraform {
backend "azurerm" {
resource_group_name = "Naam van de resource group waar het storage account staat."
storage_account_name = "Naam van het storage account"
container_name = "naam van de container"
key = "de naam van het bestand."
}
}
```
<https://developer.hashicorp.com/terraform/language/backend/azurerm>
Omdat we nu al een local state hebben zullen we de configuratie moeten herinitializeren.
Dit doe je door ```terraform init``` met de ```-reconfigure``` of ```-migrate-state"``` flag uit te voeren.
Check <https://developer.hashicorp.com/terraform/cli/commands/init#backend-initialization> voor uitleg over de verschillen.
Wij gebruiken voor nu ```-migrate-state```.
## Tips
- Er is een storage account gedeployed in je resource group, deze heeft ook al een container die je kunt gebruiken.
- Zorg dat de key eindigd met .tfstate