Amazon DVA-C02: Wdrażanie i CI/CD (CodePipeline, CodeBuild, CodeDeploy, Elastic Beanstalk, Kontenery) — Przewodnik do nauki
Część AWS Developer Associate DVA-C02 — Przewodnik do nauki. Ćwicz ze zweryfikowanymi odpowiedziami w centrum egzaminów Amazon, albo rozwiąż testy na czas na ExamRoll.io.
Podstawy CI/CD z CodePipeline i CodeBuild: wzorce, API i częste pułapki
Projektuj potoki z wyraźnymi etapami: źródło (source), kompilacja (build), test, zatwierdzenie (approval), wdrożenie (deploy) i weryfikacja po wdrożeniu (post-deploy verification). CodePipeline koordynuje te etapy; używaj roli potoku (pipeline role), która nadaje minimalne, ograniczone uprawnienia, i konfiguruj role akcji (action roles) dla integracji z usługami firm trzecich. Uruchamiaj potoki za pomocą webhooków CodeCommit lub wywołania
undefined
(AWS SDK:
undefined
) w celu programowego wyzwalania. Do kompilacji preferuj projekty CodeBuild z plikiem
undefined
definiującym fazy (
undefined
,
undefined
,
undefined
,
undefined
); wywołuj kompilacje bezpośrednio za pomocą
undefined
lub
undefined
, gdy potrzebujesz kompilacji ad-hoc lub wsadowych. W przypadku budowania obrazów, użyj polecenia
undefined
przekazanego potokiem do
undefined
w fazie
undefined
, następnie wykonaj
undefined
do ECR i przechwyć skrót obrazu (image digest), aby tworzyć niezmienne referencje do artefaktów. Unikaj używania zmiennych tagów, takich jak „latest”; zamiast tego generuj definicje zadań (task definitions) lub pliki manifestu, które odwołują się do skrótów obrazów, aby wdrożenia były deterministyczne. Uważaj na częste pułapki: wygasłe tokeny uwierzytelniające ECR w długo działających skryptach, nieodpowiednie polityki IAM dla CodeBuild do wysyłania obrazów do ECR lub wywoływania API AWS oraz sztywne kodowanie numerów ARN. Instrumentuj kompilacje, aby przesyłały artefakty do S3 lub do magazynu artefaktów potoku, i używaj zmiennych środowiskowych oraz Parameter Store/Secrets Manager do przechowywania wrażliwych danych dostępnych tylko w czasie wykonania, zamiast zaszywać sekrety w artefaktach kompilacji.
Strategie wdrożeniowe: CodeDeploy, aliasy Lambda i opcje konfiguracyjne Elastic Beanstalk
Wybierz model wdrożenia, który odpowiada tolerancji na ryzyko i potrzebom w zakresie wycofywania zmian (rollback). Dla funkcji Lambda używaj wersji i aliasów; opublikuj wersję (
undefined
) i zaktualizuj aliasy z regułami przesuwania ruchu (traffic-shifting) za pomocą CodeDeploy, tworząc wdrożenie (
undefined
) odwołujące się do aplikacji Lambda i grupy wdrożeniowej. Używaj wbudowanych konfiguracji CodeDeploy, takich jak
undefined
, lub niestandardowego routingu ruchu dla precyzyjnych wdrożeń typu canary lub liniowych (linear). Dla aplikacji na EC2 i on-premise, CodeDeploy wspiera wdrożenia blue/green z hakami cyklu życia (lifecycle hooks) do walidacji przed przełączeniem ruchu i automatycznego wycofywania zmian w przypadku niepowodzenia kontroli kondycji. Elastic Beanstalk oferuje wiele polityk: All at Once (szybka, ryzykowna), Rolling, Rolling with Additional Batch (bezpieczniejsza) i Immutable (najbezpieczniejsza), które można zmieniać za pomocą
undefined
lub API
undefined
, określając
undefined
i
undefined
. Częste pułapki dla deweloperów to zapominanie o konfiguracji kontroli kondycji aplikacji (kondycja grupy docelowej ALB, raportowanie kondycji przez EB), co uniemożliwia automatyczne przełączenie ruchu, oraz niewystarczające uprawnienia IAM dla CodeDeploy do wywoływania funkcji Lambda lub aktualizowania ECS. W przypadku wdrożeń powiązanych z bazą danych, rozważ zmiany schematu kompatybilne wstecz oraz flagi funkcjonalności (feature toggles) wdrażane przed głównym kodem, aby uniknąć powiązania kodu i schematu w tej samej transakcji.
Potoki kontenerowe, ECR, ECS/Fargate i EKS: budowanie, wdrażanie i niezmienne referencje
Solidny potok kontenerowy buduje obrazy w CodeBuild, wysyła je do ECR i wyzwala wdrożenie na ECS, Fargate lub EKS. W CodeBuild wykonaj
undefined
, następnie
undefined
,
undefined
i przechwyć skrót obrazu za pomocą
undefined
. Dla ECS/Fargate zarejestruj nową definicję zadania (
undefined
) ze skrótem obrazu w
undefined
, a następnie zaktualizuj usługę (
undefined
), aby używała nowej definicji zadania lub ustaw
undefined
w celu wymuszenia wymiany; użyj CodeDeploy do wdrożeń blue/green na ECS z przesuwaniem ruchu na poziomie ALB. Dla EKS zaktualizuj manifesty Kubernetes, aby odwoływały się do skrótów obrazów i zastosuj zmiany za pomocą
undefined
lub użyj deklaratywnych narzędzi GitOps; CodeBuild może uruchamiać polecenia
undefined
i
undefined
. Typowe pułapki: używanie zmiennych tagów powodujące nieaktualne wdrożenia, brak aktualizacji definicji zadań uniemożliwiający ECS wdrożenie nowych obrazów, niewystarczające limity CPU/pamięci lub ENI dla zadań Fargate oraz zapominanie o nadaniu CodeBuild uprawnienia
undefined
do odczytu wysłanych obrazów.
Walidacja przed wdrożeniem, rollbacki i obserwowalność: testy, hooki i zabezpieczenia operacyjne
Zintegruj zautomatyzowane testy jednostkowe, integracyjne i typu smoke test w etapach potoku. Użyj CodeBuild do uruchamiania testów oraz AWS X-Ray lub CloudWatch Logs do śledzenia (tracing) i logów strukturalnych; dodawaj adnotacje do śladów X-Ray za pomocą PutAnnotation w SDK, aby późniejsze zapytania mogły filtrować po atrybutach użytkownika lub żądania. Przed wdrożeniem zastosuj akcje ręcznego zatwierdzania w CodePipeline lub zautomatyzowane kroki walidacyjne: uruchom testy Canary za pomocą CodeBuild, które sprawdzają wdrożony endpoint, lub wywołaj kanarki CloudWatch Synthetics w celu przeprowadzenia weryfikacji za pomocą skryptów. Użyj haków cyklu życia CodeDeploy (BeforeAllowTraffic, AfterAllowTraffic) do uruchamiania kontroli stanu (health checks) oraz logiki rejestracji/wyrejestrowania. Zaimplementuj automatyczne wyzwalacze rollbacku: skonfiguruj CodeDeploy tak, aby wycofywał zmiany w przypadku statusu wdrożenia innego niż zero lub nieudanych alarmów (alarmy CloudWatch dołączone do grupy wdrożeniowej), a dla Lambda użyj aliasów z przesuwaniem ruchu (traffic shifting), aby umożliwić szybki rollback poprzez aktualizację aliasu, by wskazywał na poprzednią wersję. Pułapki dla deweloperów obejmują niedopasowane czasy oczekiwania (timeout Lambda krótszy niż SQS visibility timeout), zapominanie o poprawnym ustawieniu haków AppSpec dla ECS/CodeDeploy oraz poleganie na sukcesie wywołań API wdrożenia bez walidacji zachowania w środowisku uruchomieniowym. Instrumentuj wdrożenia za pomocą metryk i alertów oraz używaj niezmiennych identyfikatorów w artefaktach w celu zapewnienia identyfikowalności (traceability).
Praktyczny problem: Scenariusz użycia
Scenariusz: Firma ExampleRetail prowadzi sklep internetowy oparty na mikroserwisach w AWS na kontach deweloperskich, testowych i produkcyjnych. Używają CodeCommit do kodu źródłowego, CodePipeline/CodeBuild do CI, ECR do obrazów, ECS/Fargate do usług za ALB oraz Lambda do asynchronicznych procesów roboczych.
Wyzwanie: Deweloper musi dodać bezpieczny, zautomatyzowany potok do wdrożenia nowego kontenera usługi płatności (checkout) z wykorzystaniem przesunięcia ruchu typu canary oraz zautomatyzowanej walidacji przed wdrożeniem, która w razie awarii wycofa zmiany.
Zalecane podejście:
- Stwórz projekt CodeBuild, który buduje obraz Docker, uruchamia testy jednostkowe, loguje się do ECR (aws ecr get-login-password | docker login –username AWS –password-stdin ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com), wypycha obraz i generuje artefakt JSON zawierający skrót (digest) obrazu.
- W CodePipeline dodaj etap wdrożenia, który rejestruje nową definicję zadania ECS za pomocą
ecs.registerTaskDefinition, odwołując się do skrótu obrazu, a następnie tworzy wdrożenie CodeDeploy dla ECS, wywołująccodedeploy.createDeploymentz plikiem AppSpec, który wiąże nową definicję zadania ideploymentConfigustawiony na canary (np.CodeDeployDefault.ECSCanary10Percent5Minutes). - Dodaj akcję walidacyjną opartą na CodeBuild lub kanarka CloudWatch Synthetics jako test po wdrożeniu, który wywołuje krytyczne punkty końcowe (endpoints) usługi płatności i waliduje odpowiedzi; potok powinien czekać na pomyślne zakończenie walidacji.
- Skonfiguruj opcje rollbacku w CodeDeploy oraz alarm CloudWatch powiązany z grupą wdrożeniową (np. dotyczący wskaźnika błędów 5xx lub opóźnień), aby automatycznie przerwać i wycofać wdrożenie w przypadku przekroczenia progów.
Uzasadnienie: Budowanie niezmiennych obrazów (immutable images), rejestrowanie definicji zadań z jawnymi skrótami obrazów oraz użycie mechanizmu przesuwania ruchu (traffic-shifting) CodeDeploy wraz z automatyczną walidacją zapewniają bezpieczne wdrożenia typu canary i szybki, zautomatyzowany rollback, jednocześnie gwarantując, że wdrożenia są powtarzalne i obserwowalne.
← CloudFormation i infrastruktura jako kod (SAM · Wszystkie domeny · Bezpieczeństwo →
Przećwicz te pytania → · Testy na czas na ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Zdaj egzamin →