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

Proces CI/CD terraformow

https://confluence.pkobp.pl/pages/viewpage.action?pageId=139927543
KMS: https://confluence.pkobp.pl/pages/viewpage.action?pageId=113228532

Sieci

VM:    dev-10-223-90-0--24-eu-north1
SQL:   dev-10-223-66-0--24--eu-north1
Anthos: 
        dev-pods-10-87-40-0--21-eu-north1
        dev-services-10-87-180-0--22-eu-north1
        dev-nods-10-87-240-160--27-eu-north1
        dev-master-10-87-244-80--28-eu-north1
        F5 VS IP: 10.158.20.202
        FQDN: 10-87-244-80-28.dev.gcp.pkobp.pl

Klaster

 https://confluence.pkobp.pl/pages/viewpage.action?pageId=126561760
⚠️ **GitHub.com Fallback** ⚠️