Terraform som Infrastructure as Code · leksjon

Hente data med datakilder

Bruk datakilder til å hente informasjon om eksisterende infrastruktur eller eksterne tjenester, slik at du kan lage mer dynamiske og tilpasningsdyktige konfigurasjoner.

Leksjon 1 av 411 trinn

Hente data med datakilder er en gratis leksjon i Terraform som Infrastructure as Code på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Terraform som Infrastructure as Code, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Terraform som Infrastructure as Code inneholder totalt 4 leksjoner.

Hva er datakilder?

I Terraform trenger vi ofte å referere til eksisterende infrastruktur eller eksterne data som ikke administreres av den gjeldende konfigurasjonen.

Det er her datakilder kommer inn! De lar Terraform hente informasjon om ressurser som allerede er opprettet, eller om eksterne tjenester.

Datakilder kontra ressurser

Det er viktig å skille datakilder fra ressurser.

  • Ressurser definerer infrastruktur som Terraform skal opprette, oppdatere eller slette.
  • Datakilder henter bare informasjon om eksisterende infrastruktur eller data. De oppretter eller endrer ingenting.

Tenk på dem som skrivebeskyttede spørringer mot infrastrukturen Deres.

Praktiske bruksområder

Datakilder er svært nyttige for:

  • Finne ID-en til en eksisterende Virtual Private Cloud (VPC).
  • Hente den nyeste Amazon Machine Image (AMI) for en EC2-instans.
  • Hente hemmeligheter fra en tjeneste for hemmelighetshåndtering.
  • Slå opp DNS-poster eller nettverkskonfigurasjoner.

De gjør konfigurasjonene mer dynamiske og mindre avhengige av hardkodede verdier.

Definere en datakilde

En datakildeblokk ligner på en ressursblokk. Den begynner med nøkkelordet data, etterfulgt av leverandør og type, og deretter et lokalt navn.

data "aws_vpc" "selected" {
  filter {
    name   = "tag:Name"
    values = ["my-existing-vpc"]
  }
}

Bruke innhentede data

Når en datakilde har hentet informasjon, blir attributtene tilgjengelige for andre deler av konfigurasjonen. De kan referere til dem med syntaksen: data.<TYPE>.<NAME>.<ATTRIBUTE>.

For eksempel for å hente ID-en til VPC-en vi valgte:

output "vpc_id" {
  value = data.aws_vpc.selected.id
}

Hent den nyeste AMI-en

En vanlig oppgave er å finne den nyeste Amazon Machine Image (AMI) for en EC2-instans. Dette unngår hardkoding av AMI-ID-er og gjør konfigurasjonen mer robust.

Slik henter De den nyeste Amazon Linux 2 AMI-en:

provider "aws" {
  region = "us-east-1"
}

data "aws_ami" "amazon_linux_2" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}

output "latest_ami_id" {
  value = data.aws_ami.amazon_linux_2.id
}

Dynamisk S3-policy-dokument

Datakilder brukes ikke bare for skyressurser. Datakilden aws_iam_policy_document bidrar til å bygge komplekse IAM-policyer på en strukturert måte.

Den oppretter ikke en policy, men genererer JSON-dokumentet som De deretter kan bruke på en ressurs, for eksempel en S3-bøtte.

provider "aws" {
  region = "us-east-1"
}

data "aws_iam_policy_document" "s3_read_only_policy" {
  statement {
    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::123456789012:user/example-user"]
    }
    actions = [
      "s3:GetObject",
      "s3:ListBucket"
    ]
    resources = [
      "arn:aws:s3:::my-example-bucket",
      "arn:aws:s3:::my-example-bucket/*"
    ]
  }
}

output "policy_json" {
  value = data.aws_iam_policy_document.s3_read_only_policy.json
}

Forfin søket

Mange datakilder støtter filter-blokker. Disse lar Dem angi kriterier for å begrense resultatene og sikre at De henter riktig ressurs eller riktige data.

Filtre tar vanligvis imot et name (attributtet det skal filtreres etter) og values (en liste over tillatte verdier for dette attributtet).

data "aws_instance" "web" {
  instance_state_names = ["running"]
  filter {
    name   = "tag:Environment"
    values = ["production"]
  }
  filter {
    name   = "instance-type"
    values = ["t2.micro", "t3.micro"]
  }
}

Beste praksis for datakilder

For å holde konfigurasjonene ryddige og effektive:

  • Vær spesifikk: Bruk filtre for å sikre at De henter nøyaktig dataene De trenger, og unngå tvetydighet.
  • Idempotens: Datakilder er iboende idempotente, noe som betyr at flere kjøringer gir samme resultat.
  • Minimer kall: Hent bare data når det er nødvendig, slik at terraform plan-operasjoner går raskere.
  • Kombiner med outputs: Bruk outputs for å eksponere innhentede data som andre konfigurasjoner eller brukere kan trenge.

Test om datakilder

Hvilke av følgende påstander om Terraform-datakilder er SANNE?

Oppsummering: Spørring etter data

De har lært hvordan Terraform-datakilder lar konfigurasjonene Deres spørre etter og hente informasjon om eksisterende infrastruktur eller eksterne tjenester.

Denne kraftige funksjonen gir dynamiske, fleksible og robuste konfigurasjoner ved å unngå hardkodede verdier og tilpasse seg den aktuelle tilstanden i miljøet Deres. Husk at datakilder bare leser; de oppretter eller endrer aldri noe!

Gratis å komme i gang

Lær deg Terraform som Infrastructure as Code med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Hente data med datakilder» gratis?

Ja – hele teksten i «Hente data med datakilder» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Terraform som Infrastructure as Code-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Terraform som Infrastructure as Code inneholder totalt 4 leksjoner.

Hva lærer jeg i «Hente data med datakilder»?

Bruk datakilder til å hente informasjon om eksisterende infrastruktur eller eksterne tjenester, slik at du kan lage mer dynamiske og tilpasningsdyktige konfigurasjoner. Du øver på Terraform som Infrastructure as Code med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Terraform som Infrastructure as Code?

Ingen tidligere erfaring er nødvendig. Terraform som Infrastructure as Code på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Hente data med datakilder»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Terraform som Infrastructure as Code-leksjonen?

Ja. Alle Terraform som Infrastructure as Code-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hente data med datakilder
  2. Lokale og eksterne exec-provisioners
  3. Null-ressurser og utløsere
  4. Bruk av eksterne data og maler
← Tilbake til Terraform som Infrastructure as Code