Skip to content

glennbechdevops/terraform-state

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Øvelse: Terraform-konfigurasjon med AWS S3, Providers, og State Management

Mål

I denne øvelsen vil du lære hvordan du konfigurerer Terraform, inkludert både provider og backend.

Som et eksempel finner du også i dette repoet Terraform-kode som oppretter en AWS Lambda-funksjon. Denne Lambda-funksjonen kaller på AWS-tjenesten Comprehend for å analysere tekst.

Vi vil også bruke AWS S3 for å lagre Terraform state-filen ved å konfigurere en "backend" i Terraform.

AWS Comprehend

AWS Comprehend er en språkforståelsestjeneste som bruker maskinlæring for å avdekke innsikt og relasjoner i tekst. Tjenesten kan automatisk analysere tekst for å identifisere sentiment, nøkkelbegreper, språk, emner og entiteter som navn, steder eller organisasjoner, noe som gjør den nyttig for alt fra kundeserviceanalyse til innholdsklassifisering og tekstforståelse.

Beskrivelse av lambda-funksjonen i dette repositoriet

Denne Lambda-funksjonen er konfigurert til å bruke Amazon Comprehend for tekstanalyse, spesielt sentimentanalyse. Lambda-funksjonen kjører i Python 3.8, og benytter en IAM-rolle som tillater full tilgang til Comprehend gjennom policyen comprehend:*. Funksjonen eksponeres via en Lambda URL med offentlig tilgang uten autentisering, og logger sendes til CloudWatch med en oppbevaringsperiode på 7 dager. Kildekoden pakkes som en ZIP-fil og lastes opp via Terraform. Etter deploy får du URL-en som output, slik at funksjonen kan testes med POST-forespørsler for å analysere tekst ved hjelp av Amazon Comprehend.

Denne Lambda-funksjonen bruker mekanismen Function URL, som gir en enkel HTTP-endepunkt for å kalle funksjonen direkte, uten behov for en HTTP API Gateway trigger. Dette forenkler oppsettet og reduserer kompleksiteten, samtidig som det gir en rask måte å eksponere funksjonen på for testing og integrasjon.

Del 1: Oppsett av GitHub Codespaces

Åpne repository i GitHub Codespaces

  • Gå til dette repositoryet på GitHub.
  • Klikk på den grønne Code-knappen og velg Codespaces.
  • Klikk på Create codespace on main for å starte et nytt Codespaces-miljø.

GitHub Codespaces vil automatisk starte et Ubuntu-basert utviklingsmiljø i nettleseren din.

Se på koden

  • Se på lambda.tf Se på ressursene. Kopier gjerne hele filen inn i ChatGPT og be om en forklaring. Spør foreleser om noe er uklart.
  • Se på comprehend.py og forsikre deg om at du forstår koden

Konfigurer AWS-credentials

I Codespaces-terminalen må vi konfigurere AWS-credentials for å få tilgang til AWS-tjenestene.

Kjør følgende kommando i terminalen:

aws configure

Du blir bedt om å oppgi:

  • AWS Access Key ID: Din AWS access key
  • AWS Secret Access Key: Din AWS secret key
  • Default region name: Bruk eu-west-1
  • Default output format: Bruk json

Del 2: Konfigurasjon av provider

Required Providers og provider-versjonering

Start med å opprette en fil som heter provider.tf. Denne filen definerer Terraform-konfigurasjonen din, inkludert hvilken provider som skal brukes, og spesifiserer providerens versjon.

terraform {
  required_version = ">= 1.0"  # Krever minst versjon 1.0 av Terraform
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"  # Bruker AWS-provider versjon 4.x
    }
  }
}

provider "aws" {
  region = "eu-west-1"  # Velg ønsket region
}

Forklaring:

  • required_version definerer hvilken versjon av Terraform som er nødvendig.
  • required_providers definerer hvilke providere Terraform trenger for å kjøre konfigurasjonen. I dette tilfellet bruker vi aws-provider fra HashiCorp.
  • version = "~> 4.0" sørger for at Terraform bruker versjon 4.x av AWS-provideren, men vil tillate oppdateringer innenfor denne store versjonen (altså opp til, men ikke inkludert, 5.0). Dette sikrer stabilitet i konfigurasjonen.

Oppgaver

  • Finn ut hvilke terraform versjon terraform -version

  • Forsøk å endre required_version for Terraform til en nyere versjon enn du har installert og forsøk å gjøre en terraform init. Hva skjer? Endre tilbake.

  • Kjør terraform apply --auto-approve --var "prefix=<studentnavn>". Legg merke til at du får en terraform.tfstate fil i katalogen din, forsikre deg om at du vet hvorfor. Spør gjerne ChatGPT 😊.

  • Vær sikker på at du forstår --var argumentet!

  • Kopier eller noter verdien fra output: detter er URL'en til lambdafunksjonen din

  • Du kan teste Lambda-funksjonen med følgende kommando.
URL=<lambda url from output>
curl -X POST $URL -H "Content-Type: application/json" -d '{"text": "Ladies and gentlemen, brace yourselves for the most groundbreaking cinematic experience in the history of humankind—*Sharknado*! This film is not just a movie; it is a transcendent work of art that redefines the very essence of filmmaking."}' | jq

viktig

  • Kjør terraform destroy -var "prefix=<studentnvn>" før du går videre.

Del 3: Bruk S3 som backend for Terraform state

Konfigurer S3 som backend for Terraform state

  • Legg til følgende konfigurasjon inn terraform {}-blokken i provider.tf:
  • Husk å bytte verdien i "key" med ditt studentnavn
backend "s3" {
  bucket = "pgr301-2024-terraform-state"
  key    = "<studentnavn>-state-lab.tfstate"
  region = "eu-west-1"
}

Forklaring:

  • backend "s3" konfigurerer Terraform til å bruke S3 som backend for state-filen.
  • bucket refererer til navnet på S3-bucketen som skal lagre state-filen. Denne finnes fra før, og vi deler alle på denne.
  • key spesifiserer stien til state-filen i S3-bucketen. Dette er filnavnet Terraform bruker for å lagre tilstanden (bytt ut <studentnavn>).
  • region spesifiserer hvilken AWS-region som brukes for S3-bucketen.

Initialiser Terraform

For å unngå at tidligere Terraform-konfigurasjoner forstyrrer, kjør følgende kommandoer for å slette all tidligere Terraform-konfigurasjon:

rm -rf .terraform 
rm terraform.tfstate*

Kjør deretter følgende kommando for å konfigurere Terraform til å bruke den definerte S3-backenden:

terraform init
  • Legg merke til at du ikke har noen terraform.tfstate-fil på ditt lokale filsystem!
  • Gå til S3, finn bucket med Navn pgr301-2024-terraform-state - og se at det er blitt opprettet et objekt med navn -state-lab.tfstate

Lag AWS Lambda-funksjonen på nytt

Etter å ha initialisert Terraform, kan du kjøre plan- og apply:

terraform plan -var "prefix=<student_name>"
terraform apply --auto-approve -var "prefix=<student_name>"

Forklaring:

  • terraform plan viser deg hva som kommer til å bli opprettet eller endret i AWS.
  • terraform apply vil faktisk opprette de definerte ressursene.

Terraform avanserte state kommandoer

  • Prøv å kjøre terraform state list - du vil se de ressursene Terraform "kjenner til"

Del 4: Rydd opp

Når du er ferdig med øvelsen, er det viktig å rydde opp ressursene for å unngå unødvendige kostnader. Du kan slette ressursene ved å kjøre:

terraform destroy --auto-approve

Oppsummering

I denne øvelsen har du lært hvordan du konfigurerer Terraform med required_providers, hvordan du bruker versjonering av providere for å sikre stabilitet, hvordan du provisjonerer en S3-bucket, og hvordan du bruker S3 som backend for Terraform state-filer. Du har nå en bedre forståelse av hvordan Terraform håndterer infrastruktur som kode på en sikker og skalerbar måte.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published