Rename Terraform setup documentation and add Azure provider documentation link

This commit is contained in:
Vincent Nuszbaum
2024-11-06 12:30:21 +01:00
parent 42b7bc639f
commit ddcdccf9b4
6 changed files with 1 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
# A. Terraform Dev omgeving opzetten
1. Azure CLI installeren ```winget install Microsoft.AzureCLI```
2. Terraform installeren ```winget install Hashicorp.Terraform```
3. Installeer je favoriete IDE.
4. Reboot nu je computer.
5. Installeer Terraform support in je IDE.
6. Maak een folder aan.
7. Voeg daar een main.tf aan toe.
8. Vul deze met een basis terraform block en provider block:
```hcl
terraform {
backend "local" {}
}
provider "azurerm" {
features {}
}
```
1. Open een terminal via de IDE of browse met een terminal naar de folder die je net hebt aangemaakt.
2. Voer de ```az login``` commando uit om in te loggen bij Azure.
3. Na het inloggen wordt je geprompt om een subscription en tennant te kiezen. Zoek hier naar de naam van de subscription.
4. Run terraform init
## Handige URL's
De Terraform language documentatie: <https://developer.hashicorp.com/terraform/language>
De Azurerm Terraform provider documentatie <https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs>

28
Workshop/B. Webapp.md Normal file
View File

@@ -0,0 +1,28 @@
# B. Webapp
Je gaat nu wat resources deployen binnen je resource group.
Dit gaan we doen doormiddel van webapps
Het eerste om te weten is dat een web app altijd een afhankelijkheid heeft naar een App service plan.
Een app service plan kun je zien als een webserver waar je meerder web apps op kan draaien.
Dus voor dit stuk moet je twee resources aanmaken.
## Tips
De naam van de webapp moet globaal uniek zijn. Dus niet binnen schiphol uniek maar over de hele wereld uniek!
Om het invullen van de location en resource group makkelijker te maken heb je een data block nodig om de info van de resource group op te halen.
Zorg dat sku_name "B1" is. Dit zorgt er voor dat je azurerm_service_plan op de basic tier komt te staan.
Zoek in de azurerm documentatie naar "azurerm_linux_web_app"
Houd er rekening mee dat je value's van andere resource blocks kunt gebruiken in je nieuwe resource blocks.
Als je het volgende output block toevoegt aan je code wordt de URL van je webapp naar de terminal geschreven na dat deze gedraaid is.
```hcl
output "url" {
value = azurerm_linux_web_app.<de naam van je webapp resource block>.default_hostname
}
```

31
Workshop/C. Variables.md Normal file
View File

@@ -0,0 +1,31 @@
# C. Variables
Je gaat nu wat variabelen toevoegen om het makkelijker te maken om je code voor meerder omgevingen te gebruiken.
Hier voor moet je twee bestanden aanmaken:
- variables.tf - In deze file zetten wij de definitie van de variabelen.
- dev.tfvars - in deze file defineren wij de waardes van de variabelen.
De namen zijn niet echt verplicht terraform kan namelijk door de syntax uitvogelen wat je wilt doen. Je zou het zelfs in je main.tf kunnen zetten. Maar dat is niet echt overzichtelijk.
Maak van de volgende value's variabelen:
- app service plan name
- webapp name
## Tips
Een voorbeeld van een variabele definitie.
```hcl
variable "variablename" {
type = string
description = "value"
default = "value"
}
```
Om de tfvars file te gebruiken moet je ```terraform apply -var-file dev.tfvars``` gebruiken.
Als je de waarden precies hebt overgenomen van de vorige runs zouden er nu geen changes moeten zijn.

27
Workshop/D. Count.md Normal file
View File

@@ -0,0 +1,27 @@
# 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.
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 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.

50
Workshop/E. For_each.md Normal file
View File

@@ -0,0 +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
}
}
}
```
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>
## 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
}
}
```

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