Add initial Terraform documentation and setup guides
This commit is contained in:
30
Praktijk/A. Terraform dev omgeving opzetten.md
Normal file
30
Praktijk/A. Terraform dev omgeving opzetten.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# 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
Praktijk/B. Webapp.md
Normal file
28
Praktijk/B. Webapp.md
Normal 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
Praktijk/C. Variables.md
Normal file
31
Praktijk/C. Variables.md
Normal 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.
|
||||
22
Praktijk/D. Count.md
Normal file
22
Praktijk/D. Count.md
Normal file
@@ -0,0 +1,22 @@
|
||||
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 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
|
||||
}
|
||||
```
|
||||
|
||||
## 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.
|
||||
43
Praktijk/E. For_each.md
Normal file
43
Praktijk/E. For_each.md
Normal file
@@ -0,0 +1,43 @@
|
||||
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 een https_only setting.
|
||||
|
||||
In het geval van een map variabelen is het dus alleen nodig om de eerste variabelen de definiëren.
|
||||
|
||||
## 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
|
||||
}
|
||||
}
|
||||
```
|
||||
0
Praktijk/F. Remote state.md
Normal file
0
Praktijk/F. Remote state.md
Normal file
Reference in New Issue
Block a user