Denna artikel presenterar 28 frågor och svar om Terraform, relevanta för jobbintervjuer, tillsammans med en sammanfattning och förklaring av viktiga kommandon som ofta tas upp under intervjuer.
Den ökande användningen av molnteknik har skapat många möjligheter inom DevOps. I framtiden kommer kunskap om molnet och ”infrastruktur som kod” (IaC)-verktyg vara grundläggande för DevOps-roller, vilket gör detta till ett vanligt samtalsämne vid jobbintervjuer.
Vad är Terraform?
Terraform är ett populärt IaC-verktyg som används flitigt av molningenjörer. Det ger möjligheten att definiera molnresurser och lokala resurser med hjälp av mänskligt läsbara konfigurationsfiler, vilket möjliggör programmatisk provisionering av dessa resurser. En betydande fördel med Terraform är dess förmåga att hantera flera molnplattformar, till skillnad från många andra IaC-verktyg som är begränsade till en enskild leverantör.
Här är en lista över tekniker som Terraform stödjer:
- Amazon Web Services (AWS)
- Microsoft Azure
- Google Cloud Platform (GCP)
- DigitalOcean
- Kubernetes
- Och många fler…
För den som siktar på en karriär som DevOps-ingenjör, molnarkitekt, utvecklare eller administratör, är det viktigt att vara väl förberedd på frågor om Terraform. Vi har därför sammanställt en lista med viktiga intervjufrågor för att hjälpa dig att förbättra dina kunskaper om verktyget.
Allmänna Terraform Intervjufrågor och Svar
#1. Vad förstår du med Terraform?
Terraform är ett open source IaC-verktyg skapat av HashiCorp. Det används för att hantera infrastrukturen i molnet. Det kan användas för att skapa, uppdatera, ta bort och versionshantera din infrastruktur på olika molnplattformar.
#2. Vilka är anledningarna till att välja Terraform för DevOps?
Genom att använda Terraform för att hantera infrastruktur minskar risken för mänskliga fel, vilket leder till ökad kvalitet, konsekvens och effektivitet i både molnbaserad och lokal infrastruktur. Terraform använder HCL (HashiCorp Configuration Language), som liknar JSON och är lätt att lära sig. Dessutom, till skillnad från leverantörsspecifika verktyg som AWS CloudFormation, kan Terraform användas på flera molnplattformar samtidigt. Det eliminerar behovet av att behärska flera IaC-verktyg och ökar möjligheten till samarbete.
#3. Hur fungerar Terraform?
Terraform använder så kallade ”providers” för att interagera med molnplattformarnas API:er och provisionera resurser. Arbetsflödet för slutanvändare består av tre steg:
- **Skriv:** Definiera infrastrukturen som kod i konfigurationsfiler.
- **Planera:** Förhandsgranska de ändringar som Terraform kommer att göra.
- **Tillämpa:** Skapa infrastrukturen och implementera ändringarna.
#4. Vad menar du med Terraform Cloud?
Terraform Cloud är en fjärrplattform optimerad för Terraforms arbetsflöde. Den tillhandahåller funktioner som arbetsytor och ”state locking” (tillståndslåsning), vilket underlättar samarbete i stora team.
#5. Vad förstår du med ”state” (tillstånd) i Terraform?
Som ett IaC-verktyg behöver Terraform känna till det aktuella läget för konfigurationerna och infrastrukturen som hanteras. Denna information sparas i en fil som kallas ”state file” (tillståndsfil).
#6. Vad är fördelen med Terraform State?
Terraform State kopplar verkliga resurser till din konfiguration, håller reda på metadata och förbättrar prestandan vid planering av ändringar i komplexa infrastrukturer. Det är en central del av Terraforms funktionalitet.
#7. Vad förstår du med Terraform Backend?
Terraform backend är plattformen där Terraform State snapshots lagras. Som standard använder Terraform en backend som kallas ”local” där tillståndet lagras som en lokal fil på din disk. Alla andra backends som stöds är olika former av fjärrlagringstjänster.
#8. Vad är en ”provider” i Terraform?
Providers i Terraform är plugins som gör det möjligt för Terraform att interagera med molnleverantörer, SaaS-leverantörer och andra API:er. Till exempel, om du vill använda Terraform för att skapa infrastruktur på AWS, måste du specificera en AWS-provider i konfigurationsfilerna.
#9. Vem underhåller Terraform providers?
Providers distribueras separat från Terraform. Vem som helst kan utveckla egna providers. Det finns även standardproviders som underhålls av HashiCorp.
#10. Vad är Sentinel?
Sentinel är ett verktyg som används för att implementera standardkonfigurationer för resurser som distribueras av Terraform. Det möjliggör efterlevnad och styrning inom organisationer.
#11. Vad förstår du med moduler i Terraform?
En Terraform-modul är en standardiserad behållare för flera resurser som används tillsammans för att distribuera och konfigurera infrastruktur. Till exempel kan du skapa en ”VPC-modul” som definierar en standard VPC med tillhörande resurser som subnät och internetgateways. Moduler kan delas offentligt via modulregistret eller privat genom ett privat register.
#12. Vad är fördelen med att använda moduler i Terraform?
Terraform-moduler ger en logisk abstraktion ovanpå en samling resurser. Moduler gör det möjligt att underhålla och återanvända standardkonfigurationer för resurser. De kan versionshanteras och delas med teammedlemmar för att skapa infrastruktur på ett enhetligt sätt.
#13. Vad är det privata modulregistret?
Det privata modulregistret är en funktion i Terraform Cloud som möjliggör delning av Terraform-moduler inom en organisation.
Avancerade Terraform Intervjufrågor och Svar
#14. Hur kan vi exportera data från en modul till en annan?
Data kan exporteras genom att definiera ”output”-block i modulens konfigurationsfiler. Den exporterade datan kan sedan användas som en parameter i målmodulen.
#15. Hur kan du definiera beroenden i Terraform?
Terraform hanterar beroenden inbyggt och har två typer av beroenden mellan resurser – implicita och explicita.
Implicita beroenden upptäcks automatiskt av Terraform när utdata från en ”resurs A” används i en ”resurs B”. Terraform kommer att förstå att ”resurs B” måste skapas efter ”resurs A”.
Explicita beroenden specificeras när två resurser är beroende av varandra utan att dela utdata. Detta kan åstadkommas genom att använda parametern `depends_on` i konfigurationsblocket.
#16. Vad är ”provisioners” i Terraform?
”Provisioners” är resurser i Terraform som används för att exekvera skript som en del av resursskapandet eller -förstörelsen. Det finns två typer av ”provisioners” i Terraform:
- `local-exec`: Kör ett skript på maskinen som kör Terraform.
- `remote-exec`: Kör ett skript på en fjärrresurs efter att den har skapats.
”Provisioners” bör ses som en sista utväg i Terraform.
#17. Vad är det externa datablocket i Terraform?
Precis som `local-exec` provisioner kan det externa datablocket användas för att köra skript på maskiner som kör Terraform. En skillnad är att skript i det externa datablocket kan returnera data i JSON-format, vilket ”provisioners” inte kan. Även externa datablock bör användas som en sista utväg.
#18. Hur kan två personer som använder Terraform Cloud skapa två olika uppsättningar av infrastruktur med samma arbetskatalog?
Genom att använda olika arbetsytor. Användarna kan köra Terraform-processer i separata arbetsytor. Varje arbetsyta har en egen tillståndsfil, vilket gör att båda kan skapa olika infrastrukturer med samma kod, så länge resurserna inte överlappar varandra.
#19. Vad händer när flera ingenjörer börjar distribuera infrastruktur med samma tillståndsfil?
Terraform har en ”tillståndslåsning”-funktion som säkerställer att inga ändringar görs i tillståndsfilen under en körning, vilket förhindrar att filen korrumperas. Alla Terraform backends stöder inte tillståndslåsning. Det är viktigt att välja rätt backend om denna funktion är ett krav.
#20. Vad är en ”null resource” (nollresurs) i Terraform?
En ”null resource” i Terraform är en konfiguration som körs som ett standard Terraform-resursblock men som inte skapar några resurser. Den kan användas för att kringgå begränsningar i Terraform.
#21. Hur kan du använda samma ”provider” i Terraform med olika konfigurationer?
Genom att använda argumentet `alias` i providerblocket.
#22. Du har en Terraform-konfigurationsfil utan resurser. Vad händer när du kör kommandot `terraform apply`?
Terraform kommer att förstöra alla resurser. En tom körning med `terraform apply` är samma sak som att köra `terraform destroy`.
#23. Vad händer om en resurs skapades framgångsrikt i Terraform, men misslyckades under provisioneringen?
Resursen kommer att markeras som ”tainted” och kan återskapas genom att starta om Terraform-processen.
#24. Vilket värde på variabeln `TF_LOG` ger den MEST utförliga loggningen?
`TRACE` ger mest utförlig loggning och är standardvärdet för variabeln `TF_LOG`.
#25. Hur kan du importera befintliga resurser under Terraform-hantering?
Genom att använda kommandot `terraform import`.
#26. Vilket kommando kan användas för att förhandsgranska Terraforms exekveringsplan?
Kommandot `terraform plan` genererar utförandeplanen för de ändringar som Terraform kommer att göra.
#27. Vilket kommando kan användas för att förena Terraform-tillståndet med den faktiska verkliga infrastrukturen?
Kommandot `terraform apply -refresh-only` används för att uppdatera Terraform-tillståndet med den faktiska infrastrukturen. Det ersätter `terraform refresh`, som nu är föråldrat.
#28. Vilket kommando kan användas för att växla mellan arbetsytor när du använder Terraform Cloud?
Kommandot `terraform workspace select
#29. Vilket kommando används för att utföra syntaxvalidering på Terraform-konfigurationsfiler?
Kommandot `terraform validate` kontrollerar om en konfiguration är syntaktiskt korrekt och internt konsekvent.
#30. Vilket kommando används för att skapa nya arbetsytor i Terraform Cloud?
Kommandot `terraform workspace new
Några andra viktiga Terraform-kommandon för tekniska intervjuer
- `terraform init`: Initierar fjärranslutningar, laddar ner providers och moduler som definierats i konfigurationen.
- `terraform init -upgrade`: Används för att uppgradera befintliga nedladdade providers.
- `terraform plan`: Genererar exekveringsplanen för att skapa eller uppdatera infrastrukturen.
- `terraform apply`: Skapar eller uppdaterar infrastrukturen efter att användaren har gett sitt godkännande.
- `terraform apply -auto-approve`: Skapar eller uppdaterar infrastrukturen utan att be om användarens godkännande.
- `terraform destroy`: Tar bort infrastrukturen efter att användaren har gett sitt godkännande.
- `terraform destroy -auto-approve`: Tar bort infrastrukturen utan att be om användarens godkännande.
- `terraform fmt`: Formaterar konfigurationsfiler enligt HashiCorp’s standardstil.
- `terraform fmt -recursive`: Formaterar konfigurationsfiler i den aktuella katalogen och alla underkataloger.
- `terraform show`: Visar läsbar information från en tillstånds- eller planfil.
Jag hoppas att den här informationen hjälper dig att lyckas med din Terraform-intervju.