Update Terraform documentation: refine variable usage, add remote state configuration, and enhance examples
This commit is contained in:
@@ -77,7 +77,6 @@ Een aantal opties zijn:
|
||||
- Local
|
||||
- AWS S3
|
||||
- Azure storage accounts
|
||||
- Remote
|
||||
- Terraform cloud
|
||||
|
||||
## variablen
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user