Continuous Delivery na AWS. Jak przejść od pipeline'u CI do wdrożenia produkcyjnego.

Jerzy Kopaczewski 27 października 2022 9 min czytania
Contents

Continuous Delivery na AWS - od pipeline CI do wdrożenia na produkcję

Continuous delivery oznacza, że Twoja główna gałąź kodu jest zawsze gotowa do wdrożenia na produkcję - nie "gotowa w teorii", ale faktycznie wdrażalna w dowolnym momencie, przez dowolną osobę z zespołu. Na AWS oznacza to GitHub Actions (lub CodePipeline), ECR, ECS lub EKS i wzorce promocji środowisk, połączone w pipeline przenoszący kod od commita do produkcji bezpiecznie i powtarzalnie. Ten przewodnik opisuje etapy pipeline'u, promocję środowisk, strategie wdrażania, wzorce rollbacku i realne koszty automatyzacji CD na AWS.

Ten przewodnik opisuje, jak wdrażamy continuous delivery dla produkcyjnych obciążeń na AWS - etapy pipeline’u, wzorce promocji środowisk, strategie rollbacku i koszty prawidłowej automatyzacji.

 

Czym naprawdę jest continuous delivery w praktyce

W branży panuje ustawiczne zamieszanie między ciągłą integracją, ciągłym dostarczaniem a ciągłym wdrażaniem. W praktyce wygląda to tak:

  • Continuous integration (ciągła integracja) — każdy commit uruchamia automatyczny build i testy. Deweloperzy mergują do main’a często. Zepsute buildy naprawia się natychmiast.
  • Continuous delivery (ciągłe dostarczanie) — pipeline produkuje artefakt gotowy do produkcji przy każdym commicie. Wdrożenie na produkcję wymaga świadomej decyzji człowieka (bramka zatwierdzenia), ale techniczna możliwość istnieje cały czas.
  • Continuous deployment (ciągłe wdrażanie) — każdy commit, który przejdzie wszystkie etapy pipeline’u, jest automatycznie wdrażany na produkcję. Bez bramki ludzkiej.

Kluczowa różnica: continuous delivery oznacza, że wdrożenie jest decyzją biznesową, a nie wydarzeniem technicznym. Pipeline jest zawsze gotowy. Ty decydujesz, kiedy wydać release.

Dla większości zespołów, z którymi pracujemy — szczególnie w fintech, healthtech i regulowanym SaaS — continuous delivery z manualną bramką promocji to właściwy wybór. Zapewnia szybkość bez rezygnacji z kontroli.

Ogólny przegląd terminologii CI/CD, narzędzi i podstaw pipeline’ów znajdziesz w naszym przewodniku po CI/CD w DevOps.

 

Etapy pipeline’u continuous delivery na AWS

Produkcyjny pipeline continuous delivery na AWS realizuje następującą sekwencję:

1. Build i testy jednostkowe (GitHub Actions)

Każdy push do main’a uruchamia workflow, który:

  • Checkout kodu
  • Linting i statyczna analiza
  • Testy jednostkowe
  • Build obrazu kontenera (multi-stage Docker)
  • Tagowanie obrazu SHA commita dla pełnej traceability

Używamy GitHub Actions jako domyślnego silnika CI ze względu na natywną integrację z Git, silny ekosystem i OIDC authentication do AWS (bez długowiecznych credentials). Dla zespołów na Azure Azure DevOps jest prawidłową alternatywą — ale wzorce pipeline’u pozostają te same.

2. Skanowanie bezpieczeństwa i push do ECR

Zanim obraz opuści CI, przechodzi przez:

  • Skanowanie podatności (Trivy lub natywne skanowanie ECR)
  • Podpis obrazu (cosign / Sigstore)
  • Push do Amazon ECR z niezmiennymi tagami

Ten sam artefakt obrazu jest wdrażany na każde środowisko. Nigdy nie przebudowujesz na potrzeby stagingu czy produkcji. Eliminuje to drift „u mnie działa” między środowiskami.

3. Wdrożenie na staging (automatyczne)

Gdy obraz jest w ECR, pipeline automatycznie wdraża na staging:

  • Na ECS Fargate: aktualizacja task definition nowym tagiem obrazu, trigger service deployment
  • Na EKS: aktualizacja manifestu Kubernetes (tag obrazu) i aplikacja przez ArgoCD lub Helm

Staging korzysta z tego samego Infrastructure as Code (Terraform) co produkcja, z konfiguracją specyficzną dla środowiska z AWS Systems Manager Parameter Store lub Secrets Manager. Ten sam layout VPC, te same security groups, inna skala.

4. Testy integracyjne na stagingu

Automatyczne testy walidują wdrożenie:

  • Testy kontraktowe API (czy serwis odpowiada poprawnie?)
  • Testy integracyjne z rzeczywistymi usługami AWS (RDS, SQS, S3)
  • Smoke testy krytycznych ścieżek użytkownika

Jeśli testy failują, pipeline się zatrzymuje. Brak promocji na produkcję.

5. Promocja na produkcję (bramka zatwierdzenia)

Tu continuous delivery różni się od continuous deployment. Pipeline czeka na jawne zatwierdzenie:

  • W GitHub Actions: environment protection rule wymagający zatwierdzenia przez członka zespołu
  • W CodePipeline: manual approval action
  • W ArgoCD: sync wymagający manualnego triggera

Po zatwierdzeniu dokładnie ten sam obraz kontenera (ten sam SHA, ten sam artefakt) jest wdrażany na produkcję tym samym mechanizmem co staging.

6. Walidacja po wdrożeniu

Po wdrożeniu produkcyjnym:

  • Health checki potwierdzają, że nowa wersja obsługuje ruch
  • Alarmy CloudWatch monitorują error rate przez pierwsze 5-10 minut
  • Jeśli błędy przekroczą próg, automatyczny rollback

 

Promocja środowisk: dev → staging → produkcja

Fundamentalna zasada: ten sam artefakt, inna konfiguracja.

Obraz kontenera jest budowany raz. Przechodzi przez środowiska bez zmian. Co się zmienia:

WarstwaDevStagingProdukcja
Źródło konfiguracjiSSM Parameter StoreSSM Parameter StoreSSM Parameter Store
Baza danychRDS (t3.micro)RDS (t3.small)RDS (r6g.large, Multi-AZ)
Skalowanie1 task / 1 pod2 taski / 2 podyAuto-scaling (2-10)
Domenadev.internalstaging.example.comapp.example.com
SekretySecrets Manager (dev)Secrets Manager (stg)Secrets Manager (prod)

Ten wzorzec zapobiega klasycznemu problemowi „na stagingu działało”, ponieważ staging uruchamia ten sam build, tę samą konfigurację i tę samą infrastrukturę.

Strategie wdrażania na AWS

Rolling deployment (domyślny ECS): Nowe taski startują, zanim stare się zdrenują. Zero downtime, ale obie wersje serwują ruch jednocześnie podczas rolloutu. Dobre dla serwisów bezstanowych.

Blue-green deployment (ECS z CodeDeploy): Zupełnie nowa target group otrzymuje nową wersję. Ruch przełącza się cały naraz (lub stopniowo). Natychmiastowy rollback — wystarczy przełączyć z powrotem na starą target group. Wyższy koszt (podwójna pojemność podczas wdrożenia), ale maksymalne bezpieczeństwo.

Canary deployment (EKS z ArgoCD/Argo Rollouts): Nowa wersja otrzymuje 5-10% ruchu. Metryki są monitorowane automatycznie. Jeśli error rate pozostaje poniżej progu, ruch stopniowo przesuwa się do 100%. Jeśli nie — automatyczny rollback.

Dla zespołów uruchamiających workloady Kubernetes na EKS, ArgoCD z GitOps to naturalny wybór mechanizmu dostarczania. Git staje się jedynym źródłem prawdy o tym, co powinno działać w klastrze.

 

Continuous delivery vs continuous deployment: kiedy co wybrać

CzynnikContinuous DeliveryContinuous Deployment
Kontrola wydaniaBramka ludzkiego zatwierdzeniaW pełni zautomatyzowane
Tolerancja ryzykaKonserwatywnaWysokie zaufanie do testów
Wymogi complianceRegulowane branże, SOC 2Wewnętrzne narzędzia, wczesna faza
Dojrzałość zespołuDowolny poziomWymaga doskonałego pokrycia testami
Częstotliwość wdrożeńWiele razy dziennie (kiedy zdecydujesz)Każdy commit
RollbackManualny lub semi-automatycznyMusi być w pełni automatyczny

Wybierz continuous delivery, gdy:

  • Przetwarzasz transakcje finansowe, dane zdrowotne lub dane osobowe
  • Twój zestaw testów nie pokrywa jeszcze wystarczająco wiele edge case’ów do pełnej automatyzacji
  • Compliance wymaga udokumentowanego zatwierdzenia przed zmianami produkcyjnymi
  • Wiele zespołów wdraża na współdzieloną infrastrukturę

Wybierz continuous deployment, gdy:

  • Masz 90%+ pokrycie testami, włącznie z testami integracyjnymi
  • Operujesz na wewnętrznych narzędziach z małym blast radius
  • Masz automatyczny rollback, który trigguje się w sekundach
  • Twój zespół ma wysokie zaufanie do quality gates pipeline’u

Większość zespołów, z którymi konsultujemy, zaczyna od continuous delivery, a następnie „promuje” poszczególne serwisy do continuous deployment w miarę dojrzewania pokrycia testowego i monitoringu.

 

Koszt wdrożenia continuous delivery na AWS

Koszt infrastruktury pipeline’u na AWS jest relatywnie niski. Realny koszt to czas inżynierski na zbudowanie i utrzymanie.

Koszty infrastruktury (miesięcznie, typowy setup)

KomponentUsługaSzacowany koszt
CI computeGitHub Actions (3000 min/mies.)$0 - $48
Rejestr kontenerówECR (50 GB stored, 100 GB transfer)~$7
Środowisko stagingECS Fargate (2 taski)~$30-60
Zarządzanie sekretamiSSM Parameter Store + Secrets Manager~$5
MonitoringCloudWatch (dashboardy + alarmy)~$10-20

Łączny overhead pipeline’u: $50–140/miesiąc — pomijalny w porównaniu do oszczędzonego czasu inżynierskiego.

Koszt czasu inżynierskiego

Zbudowanie produkcyjnego pipeline’u CD od zera zajmuje senior DevOps engineerowi 2-4 tygodnie. Obejmuje to workflow CI, setup ECR, automatyzację wdrożeń ECS/EKS, promocję środowisk, zarządzanie sekretami, monitoring i runbooki.

Jeśli Twój zespół nie posiada takiej ekspertyzy in-house, projekt konsultingowy CI/CD dostarcza ten sam rezultat w 3-4 tygodnie z pełnym knowledge transfer. Koszt takiego projektu (EUR 3000–6000) jest typowo odzyskiwany w ciągu 2-3 miesięcy dzięki redukcji incydentów wdrożeniowych i odzyskanemu czasowi deweloperów.

 

Najczęstsze problemy w pipeline’ach continuous delivery

Po audycie dziesiątek pipeline’ów CD w zespołach od 5 do 200 inżynierów, oto wzorce, które konsekwentnie powodują problemy:

Brak strategii rollbacku. Pipeline wdraża tylko „do przodu”. Gdy coś się psuje, „plan rollbacku” to revert commita i czekanie 15 minut na nowy build. Na AWS używaj ECS deployment circuit breakers lub automatycznego rollbacku CodeDeploy — odzyskanie w sekundach, nie minutach.

Staging, który driftuje od produkcji. Staging został ustawiony 6 miesięcy temu i nikt go nie aktualizuje. Konfiguracja się różni, schemat bazy jest w tyle, infrastruktura jest inna. Rozwiązanie: staging i produkcja współdzielą te same moduły Terraform ze zmiennymi specyficznymi dla środowiska. Drift jest niemożliwy, gdy oba środowiska są zadeklarowane w kodzie.

Sekrety w zmiennych środowiskowych lub repozytorium. AWS credentials hardcoded w plikach workflow. Klucze API w .env commitowane do Gita. Używaj OIDC dla autentykacji GitHub Actions → AWS. Używaj Secrets Manager dla sekretów aplikacyjnych. Nigdy nie przechowuj credentials jako długowiecznych tokenów.

Testy, które nie testują wdrożenia. Testy jednostkowe przechodzą, ale nikt nie testuje, czy wdrożony serwis faktycznie odpowiada poprawnie w docelowym środowisku. Dodaj post-deployment smoke testy, które uderzają w realne endpointy na stagingu, zanim pozwolisz na promocję.

Manualne kroki ukryte w „automatyzacji”. Pipeline jest „zautomatyzowany”, ale ktoś musi ręcznie zaktualizować parametr, uruchomić migrację bazy osobno, albo kliknąć przycisk w konsoli AWS. Jeśli nie ma tego w YAML-u pipeline’u, zostanie zapomniane o 2 w nocy podczas incydentu.

 

Kiedy warto zlecić konsulting CI/CD

Jeśli Twój zespół identyfikuje się z trzema lub więcej z poniższych sytuacji, ustrukturyzowany projekt konsultingowy CI/CD szybko się zwróci:

  • Wdrożenia wymagają konkretnej osoby, która „wie, jak to zrobić”
  • Zespół unika piątkowych release’ów, bo nikt nie ufa procesowi
  • Buildy trwają 15+ minut i deweloperzy przestają je uruchamiać lokalnie
  • Nie ma środowiska stagingowego, albo staging jest tygodnie za produkcją
  • Nie potrafisz odpowiedzieć na pytanie „jaka wersja działa teraz na produkcji?”
  • Rollback oznacza „zrevertuj commit i miej nadzieję”

Projektujemy i wdrażamy pipeline’y continuous delivery, które Twój zespół może samodzielnie utrzymywać. Bez proprietarnych narzędzi, bez vendor lock-in — tylko dobrze ustrukturyzowany pipeline-as-code commitowany do Twojego repozytorium.

Dowiedz się więcej o naszych usługach CI/CD →

CI/CD continuous delivery AWS GitHub Actions ArgoCD ECS EKS DevOps

Przeczytaj również:

Poprzedni post Następny post