Terraform Best Practices
Terraform consultingTwitter @antonbabenkoTerraform Weekly
Polski (Polish)
Polski (Polish)
  • Cześć!
  • Kluczowe koncepty
  • Struktura kodu
  • Przykłady kodu
    • Terragrunt
    • Terraform
      • Mała infrastruktura z Terraform
      • Infrastruktura średniej wielkości Terraform
      • Infrastruktura wielkogabarytowa z Terraform
  • Konwencje nazewnictwa
  • Stylizacja kodu
  • FAQ
  • Źródła i dalsze materiały
  • Pisanie konfiguracji Terraform
  • Warsztaty
Powered by GitBook
On this page
  • Zasób (resource)
  • Moduł zasobu (resource module)
  • Moduł infrastruktury (infrastructure module)
  • Kompozycja (composition)
  • Źródło danych (data source)
  • Zdalny zapis stanu infrastruktury (remote state)
  • Dostawca (provider, provisioner)
  • Skąd te trudności?
Export as PDF

Kluczowe koncepty

PreviousCześć!NextStruktura kodu

Last updated 3 years ago

Oficjalna dokumentacja Terraforma szczegółowo . Przeczytaj ją uważnie, aby zrozumieć resztę tej sekcji.

Ta sekcja opisuje kluczowe pojęcia, które są używane w książce.

Zasób (resource)

Przykładowe zasoby to aws_vpc, aws_db_instance, itd. Zasób należy do dostawcy (provider), może przyjmować argumenty (parameters) oraz zwracać różne atrybuty (outputs) i ma swój cykl życia (lifecycle). Może on być tworzony, pobierany, aktualizowany i usuwany.

Moduł zasobu (resource module)

Moduł zasobu to zbiór połączonych zasobów, które razem wykonują wspólną akcję (np. moduł tworzy VPC, podsieci, bramę NAT itp.). Jest on zależny od konfiguracji dostawcy, którą można zdefiniować w nim lub w strukturach na wyższym poziomie (np. w module infrastruktury).

Moduł infrastruktury (infrastructure module)

Moduł infrastruktury to zbiór modułów zasobów, które nie muszą być ze sobą logicznie połączone, ale mogą, współpracując ze sobą służyć temu samemu celowi. Definiuje konfigurację dla dostawców, która jest następnie przekazywana do modułów zasobów podrzędnych i do samodzielnych zasobów. Zwykle ogranicza się on do pracy w pojedynczej encji na każdy logiczny separator (np. region AWS, projekt Google).

Na przykład moduł wykorzystuje moduły zasobów, takie jak i , do zarządzania infrastrukturą wymaganą do uruchomienia na .

Innym przykładem jest moduł , w którym wiele modułów jest używanych razem do zarządzania infrastrukturą, a także do tworzenia, wypychania i wdrażania obrazów platformy Docker. Wszystko w jednym miejscu.

Kompozycja (composition)

Kompozycja to zbiór modułów infrastruktury, które mogą obejmować kilka logicznie oddzielonych obszarów (np. regiony AWS, kilka kont AWS). Kompozycja służy do opisania kompletnej infrastruktury wymaganej dla całej organizacji lub projektu.

Kompozycja składa się z modułów infrastruktury, na które składają się moduły zasobów, które realizują poszczególne zasoby

Źródło danych (data source)

Źródło danych wykonuje operacje tylko do odczytu (read-only) i jest zależne od konfiguracji dostawcy. Jest ono używane w module zasobów i module infrastruktury.

Źródło danych terraform_remote_state działa jako spoiwo dla modułów i kompozycji wyższego poziomu.

Zdalny zapis stanu infrastruktury (remote state)

Dostawca (provider, provisioner)

Skąd te trudności?

Dostęp do danych oraz wymiana między nimi (moduły zasobów i moduły infrastruktury) jest realizowany z wykorzystaniem wyjść modułów (module output) i źródeł danych.

Starając się przedstawić opisane powyżej pojęcia przy pomocy pseudorelacji uzyskamy następującą strukturę:

composition-1 {
  infrastructure-module-1 {
    data-source-1 => d1

    resource-module-1 {
      data-source-2 => d2
      resource-1 (d1, d2)
      resource-2 (d2)
    }

    resource-module-2 {
      data-source-3 => d3
      resource-3 (d1, d3)
      resource-4 (d3)
    }
  }

}

źródło danych umożliwia, aby zewnętrzny program działał jako źródło danych, udostępniając dowolne dane do użycia w innym miejscu w konfiguracji Terraform. Oto przykład z modułu , w którym nazwa pliku jest uzyskiwana poprzez wywołanie zewnętrznego skryptu Python.

Źródło danych wysyła żądanie HTTP GET do podanego adresu URL i zwraca informacje o odpowiedzi. Jest to często przydatne w uzyskiwaniu informacji z punktów końcowych (endpoints), dla których nie istnieje natywny dostawca Terraform.

Moduły infrastruktury i kompozycje powinny zachowywać swój w zdalnej lokalizacji, gdzie mogą być pobierane przez inne osoby w kontrolowany sposób (np. z ACL, wersjonowaniem, rejestrowaniem).

Dostawca jest bardzo dobrze . Nie ma więc sensu tego tutaj powtarzać. Moim zdaniem ma on niewiele wspólnego z pisaniem dobrych modułów w Terraform.

Podczas gdy poszczególne zasoby są jak atomy w infrastrukturze, moduły zasobów są molekułami. Moduł jest najmniejszą jednostką, którą wersjonujemy i możemy udostępniać innym. Ma dokładną listę argumentów i implementuje podstawową logikę. Na przykład moduł tworzy zasoby aws_security_group oraz aws_security_group_rule na podstawie danych wejściowych. Może on być użyty razem z innymi modułami do stworzenia modułu infrastruktury.

Dostęp między kompozycjami jest często realizowany przy użyciu zdalnych źródeł danych stanu. Istnieje wiele sposobów na .

opisuje wszystkie aspekty konfiguracji
AWS VPC Terraform
terraform-aws-atlantis
terraform-aws-vpc
terraform-aws-security-group
Atlantis
AWS Fargate
terraform-aws-cloudquery
terraform-aws-modules
Zewnętrzne
terraform-aws-lambda
http
stan Terraform
opisany w oficjalnej dokumentacji
terraform-aws-security-group
udostępnianie danych między konfiguracjami
Prosta kompozycja infrastruktury