DevOps-bootcamp · leksjon

Bygging av egendefinerte providere

Utvid Terraform utover eksisterende integrasjoner ved å forstå hvordan providere fungerer, og utvikle en egendefinert provider med Terraform Plugin Framework.

Leksjon 4 av 413 trinn

Bygging av egendefinerte providere er en gratis leksjon i DevOps-bootcamp på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i DevOps-bootcamp, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Når eksisterende providere ikke strekker til

Registeret dekker de fleste plattformer, men virksomheter bruker ofte interne API-er uten en provider. En egendefinert provider lar Terraform administrere disse ressursene med den samme plan/apply-livssyklusen.

Slik fungerer providere

En provider er en separat plugin-binærfil som Terraform starter og kommuniserer med via gRPC. Pluginen oversetter CRUD-operasjonene i Terraform til API-kall mot målsystemet.

Plugin Framework

HashiCorps moderne Terraform Plugin Framework (Go) er den anbefalte måten å bygge providere på og erstatter den eldre SDKv2. Providere skrives i Go.

import (
  "github.com/hashicorp/terraform-plugin-framework/provider"
)

Definere provideren

Provider-typen deklarerer navnet sitt samt ressursene og datakildene den tilbyr.

type widgetProvider struct{}

func (p *widgetProvider) Metadata(_ context.Context, _ provider.MetadataRequest, resp *provider.MetadataResponse) {
  resp.TypeName = "widget"
}

Ressursskjemaet

Hver ressurs deklarerer et skjema med attributter, typer og metadata. Dette er det brukerne angir i HCL-koden sin.

resp.Schema = schema.Schema{
  Attributes: map[string]schema.Attribute{
    "name": schema.StringAttribute{Required: true},
    "id":   schema.StringAttribute{Computed: true},
  },
}

Implementere CRUD

En ressurs implementerer Create, Read, Update og Delete. Hver metode kaller API-et Deres og skriver resultatet tilbake til Terraform-tilstanden.

func (r *widgetResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
  // call API, then save state
}

Read holder tilstanden korrekt

Metoden Read oppdaterer tilstanden fra det faktiske API-et. Hvis den eksterne ressursen er borte, fjerner De den fra tilstanden slik at Terraform planlegger å opprette den på nytt.

Akseptansetesting

Providere bruker akseptansetester som kjører ekte plan/apply-sykluser mot et testmiljø. De styres av en miljøvariabel slik at de ikke kjøres ved et uhell.

TF_ACC=1 go test ./... -v

Overstyring for lokal utvikling

For å teste en provider før publisering bruker De en dev override i CLI-konfigurasjonen, slik at Terraform laster den lokale binærfilen Deres i stedet for å laste den ned fra et register.

provider_installation {
  dev_overrides {
    "acme/widget" = "/home/dev/go/bin"
  }
  direct {}
}

Publisere provideren

Publiser til registeret ved å merke en release og signere binærfilene med en GPG-nøkkel. Forbrukere deklarerer den deretter i required_providers.

terraform {
  required_providers {
    widget = {
      source  = "acme/widget"
      version = "~> 1.0"
    }
  }
}

Vedlikeholdshensyn

En provider er en langsiktig forpliktelse: API-endringer, versjonskompatibilitet og dokumentasjon må vedlikeholdes. For engangsbehov kan datakilden external eller et skript være enklere enn en fullverdig provider.

Hurtigsjekk

Test kunnskapene Deres om egendefinerte providere.

Oppsummering: Utvide Terraform

De har lært å bygge egendefinerte providere:

  • Providere er Go-pluginer som kommuniserer med kjernen via gRPC.
  • Plugin Framework definerer skjemaer og CRUD-metoder.
  • Dev overrides muliggjør lokal testing, mens akseptansetester verifiserer oppførselen.
  • Publisering krever tagger og signerte binærfiler.
Gratis å komme i gang

Lær deg DevOps-bootcamp 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
142
Leksjoner
568

Ofte stilte spørsmål

Er leksjonen «Bygging av egendefinerte providere» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien DevOps-bootcamp, inkludert «Bygging av egendefinerte providere», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Hva lærer jeg i «Bygging av egendefinerte providere»?

Utvid Terraform utover eksisterende integrasjoner ved å forstå hvordan providere fungerer, og utvikle en egendefinert provider med Terraform Plugin Framework. Du øver på DevOps-bootcamp 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 DevOps-bootcamp?

Ingen tidligere erfaring er nødvendig. DevOps-bootcamp 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 4 av 4.

Hvor lang tid tar leksjonen «Bygging av egendefinerte providere»?

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 DevOps-bootcamp-leksjonen?

Ja. Alle DevOps-bootcamp-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. Mønstre for multisky og hybrid sky
  2. Sentinel-policyer for styring
  3. Terraform Cloud og Enterprise
  4. Bygging av egendefinerte providere
← Tilbake til DevOps-bootcamp