Terraform Infrastructure as Code · Lekcja

Tworzenie własnych providerów

Rozszerz Terraform poza istniejące integracje, poznając działanie providerów i tworząc własny provider za pomocą Terraform Plugin Framework.

Lekcja 4 z 413 kroki

Tworzenie własnych providerów to bezpłatna lekcja Terraform Infrastructure as Code na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Terraform Infrastructure as Code, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.

Gdy istniejący provider nie wystarcza

Registry obejmuje większość platform, ale przedsiębiorstwa często korzystają z wewnętrznych interfejsów API, dla których nie ma providera. Custom provider pozwala zarządzać tymi zasobami za pomocą Terraform, z zachowaniem tego samego cyklu plan/apply.

Jak działają providery

Provider jest osobnym binarnym pluginem, który Terraform uruchamia i z którym komunikuje się przez gRPC. Plugin tłumaczy operacje CRUD Terraform na wywołania API docelowego systemu.

Plugin Framework

Nowoczesny Terraform Plugin Framework firmy HashiCorp (Go) to zalecany sposób tworzenia providerów, zastępujący starszy SDKv2. Providery są pisane w Go.

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

Definiowanie providera

Typ providera deklaruje jego nazwę oraz oferowane zasoby i źródła danych.

type widgetProvider struct{}

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

Schemat zasobu

Każdy zasób deklaruje schemat atrybutów wraz z ich typami i metadanymi. To właśnie te wartości użytkownicy ustawiają w swoim HCL.

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

Implementowanie CRUD

Zasób implementuje operacje Create, Read, Update i Delete. Każda metoda wywołuje API i zapisuje wynik z powrotem w stanie Terraform.

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

Read utrzymuje zgodność stanu z rzeczywistością

Metoda Read odświeża stan na podstawie rzeczywistego API. Jeśli zdalny zasób nie istnieje, usuń go ze stanu, aby Terraform zaplanował jego ponowne utworzenie.

Testy akceptacyjne

Providery korzystają z testów akceptacyjnych, które wykonują rzeczywiste cykle plan/apply w środowisku testowym. Są one chronione zmienną środowiskową, aby nie uruchomiły się przypadkowo.

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

Lokalne zastępowanie podczas tworzenia

Aby przetestować providera przed opublikowaniem, użyj dev override w konfiguracji CLI, dzięki czemu Terraform załaduje lokalny plik binarny zamiast pobierać go z registry.

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

Publikowanie providera

Opublikuj providera w registry, oznaczając wydanie tagiem i podpisując pliki binarne kluczem GPG. Użytkownicy deklarują go następnie w required_providers.

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

Kwestie związane z utrzymaniem

Provider jest zobowiązaniem długoterminowym: zmianami API, zgodnością wersji i dokumentacją trzeba stale zarządzać. W przypadku jednorazowych potrzeb prostsze od pełnego providera może być źródło danych external lub skrypt.

Szybki test

Sprawdź swoją wiedzę na temat custom providerów.

Podsumowanie: rozszerzanie Terraform

Nauczył się Pan/Nauczyła się Pani tworzyć custom providery:

  • Providery to pluginy Go komunikujące się z rdzeniem przez gRPC.
  • Plugin Framework definiuje schematy i metody CRUD.
  • Dev overrides umożliwiają testowanie lokalne, a testy akceptacyjne weryfikują działanie.
  • Publikowanie wymaga tagów i podpisanych plików binarnych.
Bezpłatny start

Ucz się Terraform Infrastructure as Code dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
12
Lekcje
48

Często zadawane pytania

Czy lekcja „Tworzenie własnych providerów” jest bezpłatna?

Tak — pełny tekst „Tworzenie własnych providerów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Terraform Infrastructure as Code, przejdź na CoddyKit PRO. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.

Co nauczysz się w „Tworzenie własnych providerów”?

Rozszerz Terraform poza istniejące integracje, poznając działanie providerów i tworząc własny provider za pomocą Terraform Plugin Framework. Ćwiczysz Terraform Infrastructure as Code z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Terraform Infrastructure as Code?

Nie wymagamy żadnego doświadczenia. Terraform Infrastructure as Code w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Tworzenie własnych providerów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Terraform Infrastructure as Code?

Tak. Każda lekcja Terraform Infrastructure as Code zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wzorce środowisk wielochmurowych i hybrydowych
  2. Zasady Sentinel na potrzeby zarządzania
  3. Terraform Cloud i Enterprise
  4. Tworzenie własnych providerów
← Powrót do Terraform Infrastructure as Code