Infrastructure as Code: koniec z klikaniem w konsoli

Wyobraź sobie, że budujesz środowisko produkcyjne klikając w konsoli AWS. VPC, subnety, security groups, EC2, RDS, Load Balancer... Godziny pracy. A teraz musisz zbudować identyczne środowisko staging. I development. I disaster recovery w innym regionie. Klikasz znowu? Pomyłka na jednym kroku i masz różnice między środowiskami, których nawet nie zauważysz.

Infrastructure as Code (IaC) to podejście, w którym definiujesz infrastrukturę w plikach tekstowych (szablonach), a narzędzie automatycznie tworzy, modyfikuje i usuwa zasoby AWS na ich podstawie.

Dlaczego IaC?

  • Powtarzalność - ten sam szablon tworzy identyczne środowisko za każdym razem
  • Wersjonowanie - szablon to plik tekstowy, można go trzymać w Git
  • Automatyzacja - nie ma ręcznych kroków, nie ma pomyłek
  • Dokumentacja - szablon JEST dokumentacją infrastruktury
  • Łatwość usuwania - usuwasz stack = usuwasz wszystkie zasoby
⚠️ Na egzaminie
Pytanie w stylu: „Jak powtarzalnie tworzyć identyczne środowiska w wielu regionach?" Odpowiedź: CloudFormation (IaC). Słowa kluczowe: „repeatable", „consistent", „automated provisioning", „infrastructure as code".

AWS CloudFormation

CloudFormation to natywna usługa IaC w AWS. Opisujesz infrastrukturę w szablonie (template), a CloudFormation tworzy i zarządza zasobami jako stack.

Template (szablon)

Szablon CloudFormation to plik JSON lub YAML, który opisuje jakie zasoby AWS chcesz utworzyć. Kluczowe sekcje szablonu:

  • Parameters - wartości wejściowe (np. typ instancji EC2, nazwa środowiska)
  • Resources - zasoby do utworzenia (jedyna wymagana sekcja!)
  • Outputs - wartości wyjściowe (np. adres Load Balancera)
  • Mappings - statyczne mapowania (np. AMI ID per region)
  • Conditions - logika warunkowa (np. „utwórz to tylko w produkcji")
💡 Zapamiętaj
Jedyna wymagana sekcja w szablonie CloudFormation to Resources. Reszta jest opcjonalna. To pytanie pojawia się na egzaminie.

Stack

Stack to jednostka wdrożenia w CloudFormation. Kiedy wdrażasz szablon, CloudFormation tworzy stack, czyli kolekcję zasobów, którymi zarządza jako całość.

Kluczowa cecha: usunięcie stacka usuwa wszystkie zasoby, które stack utworzył. To ogromna zaleta, bo nie zostawiasz „zaśmieconych" zasobów.

🏢 Scenariusz: Środowiska dev/staging/prod
Masz jeden szablon CloudFormation, który tworzy VPC, subnety, security groups, ALB, Auto Scaling Group i RDS. Używasz parametrów do różnicowania: środowisko dev dostaje t3.micro i db.t3.micro, staging dostaje t3.small i db.t3.small, produkcja dostaje t3.large i db.r5.large z Multi-AZ. Jeden szablon, trzy stacki. Każda zmiana w szablonie propaguje się do wszystkich środowisk. Zero dryfu konfiguracji.

Drift Detection

Co jeśli ktoś ręcznie zmieni zasób, który jest zarządzany przez CloudFormation? Na przykład doda regułę do security group przez konsolę?

To się nazywa drift (dryf). CloudFormation ma funkcję Drift Detection, która porównuje aktualny stan zasobu z tym, co jest zdefiniowane w szablonie. Wykrywa różnice i raportuje, które zasoby „odleciały" od definicji.

Rollback i ochrona

CloudFormation ma wbudowane mechanizmy bezpieczeństwa:

  • Automatic Rollback - jeśli tworzenie stacka się nie powiedzie, CloudFormation automatycznie usuwa już utworzone zasoby
  • Change Sets - możesz podejrzeć, co CloudFormation zamierza zmienić, zanim zatwierdzisz
  • Stack Policies - chronią krytyczne zasoby przed przypadkową aktualizacją lub usunięciem
  • Termination Protection - blokuje przypadkowe usunięcie stacka

Nested Stacks i Cross-Stack References

Dla dużych środowisk jeden szablon to za mało. CloudFormation wspiera:

  • Nested Stacks - stack, który tworzy inne stacki (szablon w szablonie). Pozwala na modularność: osobny szablon dla sieci, osobny dla compute, osobny dla baz danych.
  • Cross-Stack References - stacki mogą eksportować wartości (Outputs/Export), które inne stacki importują. Na przykład stack sieciowy eksportuje VPC ID, a stack aplikacyjny go importuje.

AWS CDK (Cloud Development Kit)

CDK to alternatywa dla pisania szablonów JSON/YAML. Zamiast deklaratywnego formatu, piszesz kod infrastruktury w swoim ulubionym języku programowania:

  • TypeScript / JavaScript
  • Python
  • Java
  • C# (.NET)
  • Go

CDK pod spodem generuje szablon CloudFormation i wdraża go. To warstwa abstrakcji nad CloudFormation, nie osobna usługa.

⚖️ CloudFormation vs CDK
AspektCloudFormation (YAML/JSON)CDK (TypeScript/Python/etc.)
FormatDeklaratywny (YAML/JSON)Imperatywny (kod programistyczny)
Krzywa uczeniaŁatwiejszy startWymaga znajomości języka
LogikaOgraniczona (Conditions)Pełna (if/for/klasy)
AbstrakcjeBrak (niski poziom)Constructs L1/L2/L3 (wysoki poziom)
Pod spodemNatywne szablonyGeneruje szablony CloudFormation
💡 CDK Constructs
CDK ma trzy poziomy abstrakcji (Constructs). L1 to bezpośrednie mapowanie zasobów CloudFormation. L2 to domyślne, wygodne abstrakcje (np. tworząc bucket S3, automatycznie konfiguruje szyfrowanie). L3 (Patterns) to gotowe wzorce architektoniczne (np. „load-balanced Fargate service" w kilku liniach kodu).

AWS SAM (Serverless Application Model)

SAM to rozszerzenie CloudFormation dedykowane aplikacjom serverless. Upraszcza definiowanie:

  • Funkcji Lambda
  • API Gateway
  • Tabel DynamoDB
  • Event source mappings

SAM dodaje specjalne typy zasobów (np. AWS::Serverless::Function), które „rozwijają się" do wielu zasobów CloudFormation. Jedna linia SAM może utworzyć funkcję Lambda, rolę IAM, API Gateway endpoint i powiązane permissions.

SAM ma też SAM CLI, który pozwala lokalnie testować i debugować funkcje Lambda.

CloudFormation, CDK i SAM to natywne narzędzia AWS, ale warto wiedzieć o alternatywach:

  • Terraform (HashiCorp) - multi-cloud IaC. Może zarządzać zasobami AWS, Azure, GCP i wielu innych providerów w jednym pliku. Używa własnego języka HCL.
  • Pulumi - jak CDK, ale multi-cloud. Kod w TypeScript/Python/Go generuje zasoby w dowolnym cloudzie.
  • AWS Elastic Beanstalk - nie jest stricte IaC, ale automatyzuje tworzenie infrastruktury dla aplikacji webowych (PaaS).

Na egzaminie Cloud Practitioner musisz znać CloudFormation. CDK i SAM pojawiają się jako opcje odpowiedzi, ale rzadziej.

✅ IaC: co musisz zapamiętać na egzamin
CloudFormation = natywne IaC AWS; szablony JSON/YAML tworzące stacki
Resources to jedyna wymagana sekcja w szablonie
Usunięcie stacka usuwa wszystkie zasoby, które stack utworzył
Drift Detection wykrywa ręczne zmiany w zasobach zarządzanych przez CF
CDK pozwala pisać infrastrukturę w kodzie (TypeScript, Python, Java) i generuje szablony CF
SAM upraszcza definiowanie aplikacji serverless (Lambda, API GW, DynamoDB)
🧠 Podsumowanie
  • Infrastructure as Code (IaC) to definiowanie infrastruktury w plikach tekstowych zamiast klikania w konsoli
  • CloudFormation to natywna usługa IaC w AWS: szablony (JSON/YAML) tworzą stacki zasobów
  • Resources to jedyna wymagana sekcja szablonu; usunięcie stacka usuwa wszystkie jego zasoby
  • Drift Detection wykrywa ręczne zmiany zasobów, które powinny być zarządzane przez CloudFormation
  • CDK pozwala pisać infrastrukturę w języku programowania i generuje szablony CloudFormation
  • SAM rozszerza CloudFormation o uproszczoną składnię dla aplikacji serverless (Lambda, API GW)
🧪 Sprawdź się

Firma chce powtarzalnie tworzyć identyczne środowiska (dev, staging, prod) w wielu regionach AWS. Jakie podejście jest najlepsze?

A Ręcznie konfigurować każde środowisko w konsoli AWS
B Używać szablonów AWS CloudFormation z parametrami
C Tworzyć AMI z każdego środowiska
CloudFormation z parametrami pozwala używać jednego szablonu do tworzenia różnych środowisk. Parametry różnicują wielkość instancji, nazwy, itp. Ręczna konfiguracja jest niepowierzalna i prowadzi do dryfu. AMI to snapshot maszyny, nie opis całej infrastruktury (VPC, LB, DB).

Inżynier ręcznie zmienił security group, który jest zarządzany przez CloudFormation. Jak to wykryć?

A CloudFormation Drift Detection
B CloudWatch Alarm
C AWS Inspector
CloudFormation Drift Detection porównuje aktualny stan zasobu z definicją w szablonie i wykrywa „dryf" (ręczne zmiany). CloudWatch monitoruje metryki, nie konfigurację zasobów. AWS Inspector skanuje pod kątem podatności bezpieczeństwa.

Zespół developerski chce definiować infrastrukturę w TypeScript zamiast YAML. Jakie narzędzie AWS to umożliwia?

A AWS SAM
B AWS CloudFormation z custom resource
C AWS CDK
AWS CDK (Cloud Development Kit) pozwala definiować infrastrukturę w TypeScript, Python, Java, C# i Go. CDK generuje szablony CloudFormation pod spodem. SAM to rozszerzenie CloudFormation dla serverless (nadal YAML). Custom resource to funkcja Lambda w szablonie CloudFormation.