Ciągła ocena odporności aplikacji za pomocą AWS Resilience Hub i AWS CodePipeline

5 lipca 2022

aws resilience hub aws codepipeline

Podczas gdy klienci zobowiązują się do podejścia DevOps i przyjmują niemal ciągły model integracji/ciągłego dostarczania, aby wdrażać zmiany z większą prędkością, ocena wpływu każdej zmiany na odporność aplikacji jest tutaj kluczowa. Za pomocą tego artykułu przedstawiono wzorzec architektury do automatyzacji oceny odporności w ramach potoku CI/CD. Przeprowadzając ocenę odporności w ramach potoków CI/CD w sposób automatyczny, zespoły programistyczne mogą szybko zawieść i szybko zrozumieć, jeśli zmiana negatywnie wpłynie na odporność aplikacji. Potok może zatrzymać wdrażanie w kolejnych środowiskach, takich jak QA/UAT i Production, dopóki problemy z odpornością nie zostaną ulepszone.

AWS Resilience Hub to zarządzana usługa, która zapewnia centralne miejsce do definiowania, weryfikowania i śledzenia odporności aplikacji AWS. Jest zintegrowana z AWS Fault Injection Simulator (FIS), usługą inżynierii chaosu, aby zapewnić symulacje wstrzykiwania błędów w rzeczywistych awariach. Korzystając z AWS Resilience Hub, możesz ocenić swoje aplikacje, aby odkryć potencjalne ulepszenia odporności. Pozwoli to zweryfikować czas odzyskiwania aplikacji (RTO), cele punktu odzyskiwania (RPO) i zoptymalizować ciągłość biznesową przy jednoczesnym obniżeniu kosztów odzyskiwania. Resilience Hub zapewnia również interfejsy API umożliwiające zintegrowanie oceny i testowania z potokami CI/CD w celu bieżącej walidacji odporności.

AWS CodePipeline to w pełni zarządzana usługa ciągłego dostarczania zapewniająca szybkie i niezawodne aktualizacje aplikacji i infrastruktury. Możesz użyć AWS CodePipeline do modelowania i automatyzacji procesów wydawania oprogramowania. Umożliwia to zwiększenie szybkości i jakości aktualizacji oprogramowania poprzez przeprowadzanie wszystkich nowych zmian w ramach spójnego zestawu kontroli jakości.

Ciągłe oceny odporności

Rysunek nr 1 przedstawia architekturę automatyzacji oceny odporności w konfiguracji z wieloma kontami. AWS CodePipeline, AWS Step Functions i AWS Resilience Hub są zdefiniowane na koncie wdrożenia, podczas gdy stosy aplikacji AWS CloudFormation są importowane z konta obciążenia. Ten wzorzec opiera się na zdolności AWS Resilience Hub do importowania stosów CloudFormation z różnych kont, regionów lub obu podczas odkrywania struktury aplikacji.

Dodawanie aplikacji do AWS Resilience Hub

Zacznij od dodania swojej aplikacji do AWS Resilience Hub i przyporządkowania wytycznych dotyczących polityki odporności. Można to zrobić za pomocą konsoli zarządzania AWS lub za pomocą CloudFormation. W tym przypadku aplikacja została utworzona za pomocą AWS Management Console. Artykuł Sebastiena Stormacqa, Measure and Improve Your Application Resilience with AWS Resilience Hub, przeprowadzi Cię przez proces dodawania aplikacji do AWS Resilience Hub.

W środowisku z wieloma kontami klienci zazwyczaj posiadają dedykowane konto obciążenia AWS na środowisko, dlatego też autorzy zalecają oddzielenie funkcji CI/CD na inne konto. W tym artykule aplikacja AWS Resilience Hub została utworzona na koncie wdrożenia, a zasoby zostały wykryte przy użyciu stosu CloudFormation z konta obciążenia. Aby używać AWS Resilience Hub do zarządzania aplikacjami na wielu kontach, wymagane są odpowiednie uprawnienia.

Tworzenie AWS Step Function w celu uruchomienia oceny odporności

Za każdym razem, gdy wprowadzasz zmianę w aplikacji CloudFormation, musisz zaktualizować i opublikować najnowszą wersję w AWS Resilience Hub, aby upewnić się, że oceniasz najnowsze zmiany. Teraz, gdy integracje AWS Step Functions SDK obsługują AWS Resilience Hub, możesz zbudować maszynę stanów do koordynowania procesu, który zostanie wywołany z AWS Code Pipeline.

AWS Step Functions to niskokodowa, wizualna usługa przepływu pracy, której programiści używają do tworzenia aplikacji rozproszonych, automatyzacji procesów IT i biznesowych oraz budowania danych i potoków uczenia maszynowego przy użyciu usług AWS. Przepływy pracy zarządzają awariami, ponawianymi próbami, równoległością, integracją usług i obserwowalnością, dzięki czemu programiści mogą skupić się na logice biznesowej o wyższej wartości.

  1. Pierwszym krokiem w sposobie organizacji pracy jest aktualizacja zasobów powiązanych z aplikacją zdefiniowaną w AWS Resilience Hub poprzez wywołanie ImportResourcesToDraftApplication.
  2. Sprawdź, czy proces importowania zakończył się, używając stanu oczekiwania, wywołania DescribeDraftAppVersionResourcesImportStatus, a następnie stanu wyboru, aby zdecydować, czy kontynuować, czy dalej czekać.
  3. Po zakończeniu opublikuj wersję roboczą aplikacji, wywołując PublishAppVersion, aby upewnić się, że oceniasz najnowszą wersję.
  4. Po opublikowaniu skontaktuj się z StartAppAssessment, aby rozpocząć ocenę odporności.
  5. Sprawdź, czy ocena została ukończona, używając stanu oczekiwania, wywołania opcji DescribeAppAssessment, a następnie stanu wyboru, aby zdecydować, czy kontynuować, czy jednak czekać.
  6. W stanie wyboru użyj statusu oceny z odpowiedzi, aby określić, czy ocena oczekuje, trwa, czy zakończyła się pomyślnie.
  7. Jeśli się powiedzie, użyj statusu zgodności z odpowiedzi, aby określić czy udało się osiągnąć cel czy też nie.
  • Status zgodności to „PolicyMet” lub „PolicyBreached”.
  1. Jeśli zasady zostały naruszone, opublikuj je w SNS, aby ostrzec zespół programistów przed przejściem do niepowodzenia.

Tworzenie etapów w potokach kodu

Teraz, gdy utworzyłeś AWS Step Function, musisz zintegrować ją ze swoim potokiem. Artykuł Fine-Grained Continuous Delivery z CodePipeline i AWS Step Functions demonstruje, w jaki sposób można uruchomić funkcję kroku z AWS Code Pipeline.

W trakcie dodawania etapu należy przekazać ARN stosu, który został wdrożony w poprzednim etapie, a także ARN aplikacji w AWS Resilience Hub. Będą one wymagane w wywołaniach AWS SDK i możesz je przekazać jako dosłowne.

Aby uzyskać więcej informacji na temat tych wywołań AWS SDK, zapoznaj się z dokumentami referencyjnymi interfejsu API AWS Resilience Hub.

Klienci często uruchamiają swoje obciążenia w niższych środowiskach w mniej odporny sposób, aby zaoszczędzić na kosztach. Ważne jest, aby dodać etap oceny w odpowiednim punkcie potoku. Autorzy zalecają dodanie tego do potoku po wdrożeniu w środowisku testowym, które odzwierciedla produkcję, ale przed wdrożeniem do samej produkcji. W ten sposób może szybko dojść do niepowodzenia i zatrzymania zmian, co z kolei obniży odporność w produkcji.

Uwaga dotycząca przydziałów usług: AWS Resilience Hub umożliwia przeprowadzanie 20 ocen miesięcznie na aplikację. Jeśli chcesz zwiększyć ten limit, wyślij zgłoszenie do pomocy technicznej AWS Support.

Podsumowanie

Na podstawie tego artykułu można zauważyć podejście do ciągłej oceny odporności jako części potoku CI/CD przy użyciu AWS Resilience Hub, AWS CodePipeline i AWS Step Functions. Takie podejście pozwoli Ci szybko zrozumieć, czy taka zmiana osłabi odporność.

AWS Resilience Hub generuje również zalecane eksperymenty AWS FIS, które możesz wdrożyć i wykorzystać do testowania odporności swojej aplikacji. Oprócz oceny odporności autorzy zalecają również zintegrowanie uruchamiania tych testów ze swoim potokiem. Artykuł Chaos Testing with AWS Fault Injection Simulator and AWS CodePipeline pokazuje, w jaki sposób możesz to aktywować.

 

Źródło: AWS

 

 

 

 

 

Case Studies
Referencje

Firma Hostersi pozwoliła nam osadzić ogólne zagadnienia programu Well Architected Framework w kontekście naszej firmy. Oszczędziło nam to wiele czasu i pozwoliło znaleźć lepiej dopasowane rozwiązania do specyfiki naszego biznesu. WAF był świetnym katalizatorem do wprowadzenie szeregu zmian w obszarze niezawodności, szybkości i bezpieczeństwa edrone. 

Piotr Stachowicz
CTO
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.