CloudFormation to potężna oferta AWS, która umożliwia programowe tworzenie stosów zasobów AWS, takich jak warstwa internetowa aplikacji, klaster obliczeniowy o wysokiej wydajności lub cały stos aplikacji za pomocą jednego wywołania interfejsu API. Jest niezwykle potężny. Korzystanie z niego jest z pewnością uważane za dobrą praktykę AWS, zwłaszcza w połączeniu z Chef, Puppet lub cloud-init. Debugowanie prowadzi mnie do występku.
Weźmy przykład produkcyjny: standardowe szablony klastrów mongodb nie będą działać dla mnie. Nie wiem dokładnie, dlaczego. Jestem pewien, że to coś prostego, jak prawie zawsze. Mój problem nie polega na tym, że nie potrafię zrozumieć, co jest nie tak. Chodzi o to, że uszkodzenie stosu zajmuje od 20 do 30 minut, a następnie kolejne trzy lub cztery minuty na usunięcie, zakładając, że w ogóle usuwa zasoby.
czego mi brakuje? Wiem o --disable-rollback
fladze i używam jej jak tlenu. Już dawno nauczyłem się opakowywać wiadomości o wyjściu cfn-signal
i zrzucać je jak balast z tonącego statku. Jak mogę przyspieszyć proces debugowania szablonu, czy też utknąłem na zawsze, zauważając swoje błędy pół godziny po ich popełnieniu?
źródło
Odpowiedzi:
Użyj
aws cloudformation validate-template
polecenia w narzędziu AWS CLI. Sprawdza tylko, czy Twój szablon jest prawidłowym JSON lub YAML, a nie czy twoje klucze i wartości są poprawne (na przykład nie sprawdza literówek w kluczach)źródło
aws cloudformation validate-template
w nowych narzędziach AWS CLI.aws cloudformation validate-template
i sprawdza tylko, czy twój szablon jest prawidłowy w formacie JSON lub YAML, a nie czy twoje klucze i wartości są poprawne (na przykład nie sprawdza literówek w kluczach).Property validation failure: [Length of value {XYZ} for property {/RepositoryDescription} is greater than maximum allowed length {100}]
. Zgodnie zvalidate-template
poleceniem nie był to problem, ale interfejs użytkownika zwraca ten błąd.Inną opcją, rok później, jest przeniesienie tych szablonów do biblioteki innej firmy, takiej jak troposfera . Ta biblioteka tworzy ładunek JSON za Ciebie i wykonuje wiele weryfikacji po drodze. To również rozwiązuje problem „Wow, zarządzanie 1000-wierszowym plikiem JSON z pewnością jest smutne” .
źródło
Oto kilka sugestii dotyczących sprawdzonych metod, skupiających się w szczególności na poprawie szybkości iteracji tworzenia złożonych szablonów CloudFormation:
Użyj narzędzi CloudFormation do weryfikacji szablonów i aktualizacji stosów
AWS przedstawił to już w swoim własnym dokumencie z najlepszymi praktykami , więc nie będę ich powtarzał:
Celem tego kroku jest wyłapanie oczywistych błędów składniowych lub logicznych przed faktycznym utworzeniem / aktualizacją stosu.
Zasoby testowe w izolacji
Przed użyciem dowolnego zasobu CloudFormation w złożonym stosie upewnij się, że dokładnie rozumiesz pełny zakres zachowań związanych z tworzeniem / aktualizowaniem / usuwaniem tego zasobu, w tym wszelkie ograniczenia użytkowania i typowy czas uruchamiania / rozłączania, testując ich zachowanie w mniejszych, samodzielnych stosach pierwszy.
AWS::CloudFront::Distribution
zasobu może czasami zająć 30-60 minut , podczas gdy plikAWS::EC2::SecurityGroup
aktualizacja w ciągu kilku sekund.Twórz skomplikowane stosy małymi krokami
Podczas tworzenia / aktualizacji stosu awaria dowolnego pojedynczego zasobu spowoduje wycofanie całego zestawu zmian w zasobach, co może niepotrzebnie zniszczyć inne pomyślnie utworzone zasoby i zająć bardzo dużo czasu podczas budowania skomplikowanego stosu z długim wykres zależności powiązanych zasobów.
Rozwiązaniem tego problemu jest stopniowe budowanie stosu w mniejszych partiach aktualizacji, dodając zasoby pojedynczo (lub kilka). W ten sposób, jeśli wystąpi awaria podczas tworzenia / aktualizacji zasobów, wycofanie nie spowoduje zniszczenia całego zasobu stosu, a jedynie zestaw zasobów zmieniony w ostatniej aktualizacji.
Monitoruj postęp aktualizacji stosu
Pamiętaj, aby monitorować postęp swojej aktualizacji stosu , przeglądając zdarzenia stosu podczas tworzenia / aktualizacji. Będzie to punkt wyjścia do debugowania dalszych problemów z poszczególnymi zasobami.
źródło
Czy spojrzałeś na edytor szablonów AWS CloudFormation, który jest zawarty w AWS Toolkit for Eclipse ? Ma podświetlanie składni, uzupełnianie instrukcji i wdrażanie w AWS CloudFormation.
źródło
Spóźniony na imprezę, ale dodam też, że warto poświęcić trochę czasu na konfigurację i naukę edytora. Wiem, że brzmi to śmiesznie prosto, ale spróbuj.
W moim przypadku, z vimem, spisałem się znacznie lepiej, gdy poświęciłem trochę czasu na instalację wtyczek json, a także (w końcu) zrozumiałem techniki składania, aby łatwo poruszać się po dużych plikach CF. Mój sugeruje teraz literówki (przecinki w miejscach, w których nie powinny być itp.), A podświetlenie kolorem oszczędza dużo czasu, dając wyraźne wizualne wskazówki.
Może to pomóc złagodzić błędy składniowe, ale błędy logiczne w szablonie są lepiej naprawiane przez inne narzędzia. Miejmy nadzieję, że pewnego dnia pojawi się tryb „podglądu” w CF.
źródło
AWS CloudFormation linter zapewnia dodatkowa analiza statyczna Beyond
aws cloudformation validate-template
Poinformuje Cię, które typy zasobów i typy wystąpień są niedostępne w niektórych regionach, zweryfikuje wartości właściwości pod kątem dozwolonych wartości, przechwyci cykliczne zależności zasobów, błędy składniowe, limity szablonów i wiele więcej
Oprócz CLI, jednym z najpopularniejszych mechanizmów, o których należy pamiętać, aby uruchomić lintera, jest instalacja wtyczki edytora, takiej jak rozszerzenie Visual Studio Code które działa przy każdym zapisie pliku
Inne mechanizmy, takie jak przechwyty Git przed zatwierdzeniem, są opisane tutaj
źródło
W przypadku IDE JetBrains (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio) dostępna jest wtyczka AWS CloudFormation, która obsługuje głębokie sprawdzanie szablonów JSON i YAML CFN
źródło
Jeśli masz do czynienia z maszynami EC2, polecam zalogować się do maszyny EC2 i ustawić plik boot.log (/var/log/boot.log w RHEL6 / Centos). Ten plik jest aktualizowany o wszystkie działania powłoki (czynności takie jak: instalacja, pobieranie plików, kopiowanie plików itp.).
Skorzystaj również z edytorów, takich jak http://www.jsoneditoronline.org/, aby uzyskać reprezentację TREE swojego kodu JSON. Pomaga to sprawdzić kolejność elementów JSON.
A kiedy aktualizujesz pliki, zawsze używaj narzędzi takich jak http://www.git-tower.com/blog/diff-tools-mac/ lub rzeczywistego systemu kontroli wersji, aby upewnić się, że przypadkowo nie zmienisz czegoś, co mogłoby zepsuć twój skrypt.
źródło
Oprócz
aws cloudformation validate-template
polecenia interfejsu wiersza polecenia AWS dostępne jest oparte na węzłach narzędzie cfn-check , które przeprowadza głębszą weryfikację.źródło
Niedawną nową funkcją dodaną do Cloudformation w grudniu ubiegłego roku było dodanie dodatkowych typów parametrów . Te nowe typy umożliwiają Twoim szablonom skuteczniejsze sprawdzanie danych, a także mogą „działać szybko” podczas tworzenia zasobów i zagnieżdżonych stosów Cloudformation. Masz również możliwość dostarczania bardziej czytelnych dla człowieka niestandardowych komunikatów o błędach, gdy nieprawidłowe wartości są przekazywane za pomocą nowego atrybutu ConstraintDescription .
Nowe typy są szczególnie przydatne w przypadku różnych zasobów VPC. Możesz upewnić się, że parametry dla twoich szablonów są poprawnego typu i wyraźnie mówią o oczekiwaniu pojedynczej wartości w porównaniu z listą.
Na przykład:
źródło
Sprawdź mój walidator Cloudformation pod adresem https://pypi.org/project/cloudformation-validator/
Spowoduje to walidację schematu, a następnie ponownie zweryfikuje listę reguł i zezwoli na reguły niestandardowe. Pozwala również na łatwą integrację z narzędziami wdrożeniowymi.
źródło
Możesz również skorzystać z narzędzia CloudFormation Designer dostępnego na amazon tutaj: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1
Po prostu wklej swój szablon (JSON) w okienku „Szablon”, a następnie kliknij symbol zaznaczenia, aby zatwierdzić szablon. Wszelkie błędy pojawią się w okienku „Błąd”.
Mam nadzieję że to pomoże.
źródło