terraform prezentacja - ghdrako/doc_snipets GitHub Wiki
IaC - kod tworzy infrastrukturę i odzwierciedla ja
Zalety w porównaniu z manualna konfiguracja:
standaryzacja
kod wersjonowany w systemie kontroli wersji
możne byc zintegrowany w procesie CI/CD
szybsza zmiana i wdrażanie środowisk
Język deklaratywny imperatywny
Jak zamienić kod w infrastrukturę.
W bash można napisać skrypt ale sami musimy zarządzać stanem.
W imperatywnym definiujemy stan do którego należny doprowadzić. Nie definiujemy co utworzyć co skasować a co zmienić
Indepotentnosc
GitOps - git jako jedyne źródło prawdy
Cały stan systemów jest przechowywane w repozytorium. Dzięki temu mamy wersjonowane wszystkie elementy kluczowe do poprawnego funkcjonowania
systemów. Zyskujemy wiedzę na temat historii zmian, kto ich dokonał i dlaczego.
Terraform
.tf - pliki konfiguracyjne
main.tf
provider.tf
variables.tf
terraform - narzędzie linii komend
providers - mapuje konfiguracje terraform na wywołania API konkretnego dostawy
https://www.terraform.io/intro
https://artifactory.pkobp.pl/hashicorp/registry.terraform.io/hashicorp/google/
tfstate
plik JSON z powiązaniem konfiguracji zasobów z utworzonymi zasobami np w chmurze. Terraform tworząc zasób tworzy rekord
z unikalnym identyfikatorem zasobu.
backend - jak fizycznie przechowywany jest tfstate
workflow
kod->terraform plan->terraform apply
https://www.terraform.io/intro
https://www.terraform.io/intro/core-workflow
Język HCL - Hashicorp Configuration Language
Bloki
resource <typ> <nazwa> {
....
}
Zmienne
["a", "b", "c"] # lista
{"KEY1" = "VAL1", "KEY2" = "VAL2"} # mapa
variable "clientnetworks" {
type = list(map(string))
default = []
}
locals { vmpassword = random_string.password.result }
Outputs - wartości zwracane z resourcow, modułów
Resources - opisuja obiekty infrastruktury
If używając count
resource "google_compute_instance" "my_vm" {
count = var.use_vm == true ? 1 : 0
....
}
Pętle
for przetwarzanie elementów w liście
for key, value in var.topics_configs : key => value
if value.create_dead_letter
for-each
resource "google_compute_instance" "vmki" {
for_each = toset(var.list_nazw_vmek)
name = each.value
...
}
resource "google_sql_database_instance" "instance" {
....
dynamic "database_flags" {
iterator = flag
for_each = var.database-flags
content {
name = flag.key
value = flag.value
}
}
}
Moduły
Tworzenie: https://confluence.pkobp.pl/pages/viewpage.action?pageId=110275708
Użycie: https://confluence.pkobp.pl/pages/viewpage.action?pageId=110275695
Struktura repozytoriów teraformow
https://confluence.pkobp.pl/display/CPB/Struktura+Repozytorium
Moduły: https://code.pkobp.pl/multicloud/iac/pkobp/gcp/modules
Wykorzystanie modulu: https://confluence.pkobp.pl/pages/viewpage.action?pageId=113223532
https://confluence.pkobp.pl/pages/viewpage.action?pageId=110275695
Dla DEV ACP
ADEX https://code.pkobp.pl/multicloud/iac/pkobp/gcp/adex/dev
ACP https://code.pkobp.pl/multicloud/iac/pkobp/gcp/projects/dev/dev-biz-acp-gcp-pr