Skończyliśmy z dużą ilością migawek AWS EC2, w których usunięto AMI, ale migawka pozostawia się do zgnilizny. Chciałbym nie-ręczny sposób identyfikowania i usuwania tych sierot, aby zaoszczędzić nam pieniądze i miejsce.
Idealnie myślę o skrypcie bash wykorzystującym CLI , ale mój AWS-fu jest słaby. Zakładam, że ktoś już to zrobił, ale nie mogę znaleźć skryptu, który faktycznie działa.
W najlepszym przypadku sprawdzi to również woluminy i je wyczyści, ale to może być lepiej dostosowane do drugiego pytania.
Odpowiedzi:
W dużym stopniu zainspirowany postami na blogu i treściami już linkowanymi w innych odpowiedziach, oto moje podejście do problemu.
Użyłem zawiłych funkcji JMESpath, aby uzyskać listę migawek i nie wymagałem
tr
.Oświadczenie : Użyj na własne ryzyko , dołożyłem wszelkich starań, aby uniknąć problemów i zachować rozsądne wartości domyślne, ale nie będę winien, jeśli będzie to powodować problemy.
Mam nadzieję, że sam skrypt jest wystarczająco skomentowany.
Domyślne użycie (bez parametrów) wyświetli listę poleceń usuwania osieroconych migawek dla rachunku bieżącego i regionu eu-west-1, wypakuj:
Możesz przekierować to wyjście do pliku w celu przejrzenia przed uzyskaniem go w celu wykonania wszystkich poleceń.
Jeśli chcesz, aby skrypt wykonywał polecenie zamiast je drukować, zamień
print(cmd)
nasystem(cmd)
.Sposób użycia jest następujący: skrypt o nazwie
snap_cleaner
:dla poleceń suchobiegu w regionie us-west-1
dla użytecznych poleceń w eu-central-1
Trzeci parametr może być wykorzystany do uzyskania dostępu do innego konta (wolę wcześniej zmienić rolę na inne konto).
Skrócona wersja skryptu ze skryptem awk jako oneliner:
źródło
Użyłem następującego skryptu na GitHub autorstwa Rodrigue Koffi (bonclay7) i działa całkiem dobrze.
https://github.com/bonclay7/aws-amicleaner
Dowództwo:
Z posta na blogu dokumentacji robi jeszcze kilka rzeczy:
źródło
Oto jeden skrypt, który może pomóc Ci znaleźć osierocone migawki
( stąd )
Możesz również sprawdzić ten artykuł przed awarią serwera
PS Oczywiście możesz zmienić region, aby odzwierciedlić swój
PPS Oto zaktualizowany kod:
Przykładowe egzaplanacje tego, co robi kod:
wyślij do STDOUT listę migawek. ta konstrukcja:
utwórz wirtualny tymczasowy moduł obsługi plików, aby
comm
odczytać polecenie z dwóch „plików” i porównać jeźródło
Oto fragment kodu GitHub Gist dokładnie tego, o co prosił Daniil Yaroslavtsev.
Wykorzystuje listę wszystkich obrazów i ich migawek i porównuje identyfikatory z listą wszystkich identyfikatorów migawek. Cokolwiek pozostaje, to osierocone. Kod działa na tej samej zasadzie co powyższa odpowiedź, ale jest lepiej sformatowany i nieco bardziej czytelny.
Kod korzysta z JMESPath z
--query Snapshots[*].SnapshotId
opcją (możesz również użyć do tego narzędzia wiersza poleceń jp, jeśli jest już w twojej dystrybucji. Formatuje dane wyjściowe jako tekst--output text
. Oto link do odwołania API i kilka przykładów. Jest nieco bardziej elegancki niż długi łańcuch rur grep / awk / sort / uniq / tr.Ostrzeżenie Todda Waltona : nie pomyl się z narzędziem „jq”, które używa innego języka zapytań do parsowania dokumentów json.
źródło
Napisałem skrypt snapshots.py, który iteruje wszystkie migawki (na zdefiniowanej liście regionów) i generuje
report.csv
. Ten plik zawiera informacje o instancji, AMI i woluminie, do których odnoszą się wszystkie migawki.Istnieje również polecenie interaktywnego usuwania wiszących migawek.
źródło