Oficjalna dokumentacja Terraforma szczeg贸艂owo opisuje wszystkie aspekty konfiguracji. Przeczytaj j膮 uwa偶nie, aby zrozumie膰 reszt臋 tej sekcji.
Ta sekcja opisuje kluczowe poj臋cia, kt贸re s膮 u偶ywane w ksi膮偶ce.
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 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 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 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 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.
藕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 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.
Dost臋p mi臋dzy kompozycjami jest cz臋sto realizowany przy u偶yciu zdalnych 藕r贸de艂 danych stanu. Istnieje wiele sposob贸w na .
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)
}
}
}