Czy istnieje sposób na przyspieszenie AWS CodeDeploy

15

Używam AWS CodeDeploy do wdrażania moich stron i zauważyłem, że nie jest to bardzo spójne pod względem szybkości; czasami jest to dość szybkie, ale innym razem każdy krok wdrożenia może zająć minuty. Jest to dość denerwujące, gdy wdrożenie powinno być wykonane szybko, w przypadku błędów lub awarii.

Nie mogę jednak znaleźć żadnej dokumentacji dotyczącej szybkości CodeDeploy, a także nie mogę znaleźć logiki, gdy jest on wolny lub szybki. Czy jest jakiś sposób, aby go przyspieszyć i czy jest jakiś sposób, aby wiedzieć, co trwa tak długo?

Jasper Kennis
źródło

Odpowiedzi:

10

CodeDeploy robi bardzo niewiele domyślnie - to chwyta kod z S3 lub Github, następnie uruchamia swoje skrypty na w appspec.ymlinstrukcji pliku.

Jeśli Twoje wdrożenia pobierają gigabajty danych z S3, przekonasz się, że przeniesienie danych zajmuje trochę czasu (szczególnie w mniejszych instancjach EC2 o ograniczonej przepustowości), ale poza tym opóźnienia wdrażania są znacznie bardziej prawdopodobne z powodu robię w twoich skryptach wdrażania.

Kroki we wdrożeniu CodeDeploy to:

  • ApplicationStop - kontrolujesz ten hak
  • DownloadBundle - CodeDeploy pobiera kod z S3 / Github
  • BeforeInstall - kontrolujesz ten hak
  • Zainstaluj - CodeDeploy kopiuje kod z lokalizacji tymczasowej do miejsca docelowego
  • AfterInstall - kontrolujesz ten hak
  • ApplicationStart - kontrolujesz ten hak
  • ValidateService - kontrolujesz ten hak

Odważni są zależni od CodeDeploy, inni zależą od ciebie. Jeśli widzisz różne opóźnienia w pogrubieniu, skontaktuj się z pomocą techniczną AWS, ale w przeciwnym razie możesz sprawdzić swoje haki.

ceejayoz
źródło
Tak, moje własne skrypty są proste i szybkie. Jest to krok pakietu pobierania, który często zajmuje kilka minut, a mój projekt nie jest taki duży; równie często zajmuje to sekundy. Nie mam jeszcze planu wsparcia dla programistów i nie jestem skłonny zapłacić za to tylko za to, więc po prostu na to pozwolę.
Jasper Kennis
Sprawdziłem to jeszcze raz, problemem musi być przepustowość; używamy małego typu instancji dla naszego serwera pomostowego, a raz większego do produkcji, i zawsze pomostowanie jest powolne.
Jasper Kennis
@JasperKennis Tak, mniejsze typy wystąpień mogą być dość ograniczone, szczególnie jeśli jesteś na hoście z hałaśliwymi sąsiadami. To miałoby sens.
ceejayoz
21

BlockTraffic i AllowTraffic

Po prostu dostosowanie ustawień kontroli zdrowia grupy docelowej może potrwać kilka minut.

Przed

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Po

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Wyjaśnienie

To działa, ponieważ BlockTraffici AllowTrafficoba czekają na pomyślne kontrole zdrowia. Domyślny interwał sprawdzania kondycji to 1 sprawdzanie co 30 sekund, a pomyślna kontrola wymaga 5 kolejnych 200 odpowiedzi. Dlatego domyślnie zajmuje to więcej niż 2 min. 30 sekund. I to jest dla każdej instancji EC2. Skrócenie interwału sprawdzania kondycji i ograniczenie liczby wymaganych sprawdzeń poprawi skrócenie czasu wdrażania.

Peter Tao
źródło
Po dokonaniu tej zmiany dostaję Script at specified location: ... failed to complete in 5 seconds. (jest ustawiony w appspec.yml-> haki: -> BeforeInstall :) (proszę powiedz mi dlaczego)
Jewgienij Afanasyjew
Czy istnieje limit czasu ustawiony w konfiguracji BeforeInstall? docs.aws.amazon.com/codedeploy/latest/userguide/…
Peter Tao
Dziękuję, teraz widzę, że to nie jest powiązane, ale raczej przypadek.
Jewgienij Afganijew
2

Innym ustawieniem do sprawdzenia jest „opóźnienie wyrejestrowania” grupy docelowej. Moje ustawienia sprawdzania kondycji były już niskie i w moim przypadku było to wąskie gardło.

Aaron
źródło