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 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.
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.
- Start med å logge inn i AWS Cloud9.
- Lag en klone av dette repositoryet.
- 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
Cloud9 kommer med et sett av standardrettigheter som er tilstrekkelige for mange bruksscenarioer. Men Cloud9 kan ikke opprette IAM-roller. I denne laben må vi derfor deaktivere Cloud9 Managed temporary credentials.
Trykk på "9"-ikonet øverst til venstre, og velg "Preferences". Deaktiver AWS Managed temporary credentials
.
Deretter må vi lagre egne IAM-nøkler, som vi har gjort i tidligere øvinger. I Cloud9-terminalen bruker vi kommandoen:
aws configure
- Bruk
eu-west-1
som region. - Bruk
json
som output format.
Hvis Terraform ikke allerede er installert i ditt Cloud9-miljø, installer det ved å følge instruksjonene fra forrige del.
wget https://releases.hashicorp.com/terraform/1.9.0/terraform_1.9.0_linux_amd64.zip
unzip terraform_1.9.0_linux_amd64.zip
sudo mv terraform /usr/local/bin/
terraform -v
Installer jq
som hjelper oss med å formatere JSON:
sudo yum install -y jq
Start med å opprette en fil som heter provider.tf
i ditt prosjekt. 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
}
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 viaws
-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.
- Forsøk å endre
required_version
for Terraform til en nyere versjon enn du har installert i Cloud9 og forsøk å gjøre enterraform init
. Hva skjer? Endre tilbake. - Kjør
terraform apply --auto-approve --var "prefix=<studentnavn>"
. Legg merke til at du får enterraform.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!
Du kan teste Lambda-funksjonen med følgende kommando. URL ser du etter en apply som en output:
$URL=<output fra terraform, verdien til `Terraform Function` sin URL>
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.
Legg til følgende konfigurasjon inn terraform {}
-blokken i provider.tf
:
backend "s3" {
bucket = "pgr301-2024-terraform-state"
key = "<studentnavn>-state-lab.tfstate"
region = "eu-west-1"
}
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.
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! - Sjekk state-filen i S3.
Når provisjoneringen er ferdig, kan du gå til AWS-konsollen, finne S3-bucketen du har satt opp som backend, og bekrefte at terraform.tfstate
-filen er opprettet på plassen du valgte.
Etter å ha initialisert Terraform, kan du kjøre planleggings- og provisjoneringsprosessen:
terraform plan -var "prefix=<student_name>"
terraform apply --auto-approve -var "prefix=<student_name>"
terraform plan
viser deg hva som kommer til å bli opprettet eller endret i AWS.terraform apply
vil faktisk opprette de definerte ressursene.
- Prøv å kjøre
terraform state list
- du vil se de ressursene Terraform "kjenner til" - Prøv å kjøre
terraform state rm aws_lambda_function.comprehend_lambda
- Kjør så terraform plan - hva skjer? Hvorfor vil Terraform lage Lambda på nytt?
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
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.