Posprzątaj swoją subskrypcję

Azure - Posprzątaj swoją subskrypcje - optymalizacja

Artykuł na temat usuwania niepotrzebnych zasobów na platformie Azure. Jeśli też tak macie, że czasem na szybko tworzycie/zmieniacie/aktualizujecie zasoby na platformie Microsoft Azure, to czasem zostają po nich śmieci. Mówiąc “śmieci” mam namyśli zapomniane dyski, adresy IP, albo interfejsy sieciowe, których zapomnieliśmy usunąć od razu, a one leżą nieużywane. W takim przypadku dobrze jest co jakiś czas posprzątać swoją subskrypcję na Azure. Czyszczenie Subskrypcji Azure może także wpłynąć pozytywnie na nasz portfel. Nikt nie lubi płacić za coś czego nie używa.

Dzisiaj pokażę sposób który pozwoli łatwo znaleźć i posprzątać takie nieużywane zasoby.

Artykuł dostępny jest także w na YOUTUBE.

Disks


Na początek zajmiemy się dyskami, które nie są podpięte do żadnych maszyn. Dzieje się tak np. gdy podmieniamy dyski na naszych wirtualnych maszynach na inne albo, gdy usuwamy całe maszyny.
Zdarza się, że zostają wtedy same dyski które nie mają swoich właścicieli. Na portalu Azure bardzo łatwo można zlokalizować takie zasoby.

Wystarczy otworzyć spis wszystkich dysków i spojrzeć na kolumnę OWNER. Powinna tam być nazwa maszyny do której są przypisane. Jeśli wartość jest pusta oznacza to że dysk nie jest podłączony do żadnej maszyny. Ja takie dyski usuwam.

Portal - spis dysków z właścicielem (disks witch owner)

*Jeśli nie widzicie kolumny OWNER to kliknijcie na ‘Edit columns‘. W nowym oknie wybierzcie pozycję ‘OWNER’ i kliknijcie na strzałkę by dodać tą pozycję to kolumny po prawej stronie.
Na koniec zatwierdźcie wszystko ‘apply’ i nowa kolumna się wam pokaże.

Portal - spis dysków (disks)
Portal  - edit columns

Public IP address


Adresy IP to kolejna grupa zasobów którą warto posprzątać, bo ona także generuje nam dodatkowe koszty. Chyba nikt nie chce płacić za coś czego nie używa.

Przejdźmy sobie do publicznych adresów IP(‘Public IP address’). Tutaj szukamy kolumny ‘Associated to‘. Jeśli jej nie widzicie to tak jak w poprzednim przykładzie z dyskami należy ją dodać za pomocą ‘Edit columns’.
W tej kolumnie widzimy do jakich zasobów są przypisane nasze publiczne adresy IP. Jeśli brak wpisu to ja usuwam takie nie używane adresy.

Portal  - Public IP address list

Network interfaces


Nieużywane interfejsy sieciowe znajdujemy w podobny sposób, jak publiczne adresy IP. Wyszukujemy sobie ‘Network interfaces‘ i także szukamy kolumny ‘Associated to‘. Jeśli jej nie widzicie to tak jak w poprzednim przykładzie należy ją dodać za pomocą ‘Edit columns’.

W tej kolumnie widzimy do jakich zasobów są przypisane nasze interfejsy sieciowe. Jeśli brak wpisu to ja usuwam takie nie używane interfejsy sieciowe.

Portal Microsoft Azure - Network interfaces

Nieużywane interfejsy sieciowe można także zlokalizować na inny bardziej graficzny sposób. Otwieramy sobie dowolną wirtualną sieć i z opcji ‘Monitoring‘ wybieramy ‘Diagram‘.

Teraz możemy wybrać interesującą nas sieć i zobaczyć jakie interfejsy sieciowe są do niej przypięte. Łatwo zauważyć że na poniższym przykładzie interfejs o nazwie ‘demo_int_001’ nie ma żadnych podpiętych zasobów więc wiecie co można z nim zrobić 😉

Portal Microsoft Azure - Virtual networks - Diagram

Usuwanie całego środowiska


Jeśli używamy TAGów to można w prosty sposób usuwać całe środowiska rozrzucone po różnych grupach zasobów. Czyszczenie subskrypcji Azure w ten sposób jest zalecane tylko, jeśli dbamy o to by zawsze nadawać prawidłowe TAGi.

Klikamy na wszystkie zasoby.

Portal Microsoft  - PANEL wszystkie zasoby (all resources))

Teraz dodajemy filtr ‘Add filter‘. By wyświetlić zasoby tylko z określonego środowiska wybieramy nazwę tagu który stworzyliśmy przy tworzeniu zasobów i wartość jaka nas interesuje. W moim przypadku jest to environment i wartość demo.

Portal Microsoft Azure - wszystkie zasoby (all resources) add filter TAG
Portal Microsoft Azure - wszystkie zasoby (all resources))

Automatyczne czyszczenie zasobów na Azure za pomocą Automation account

Jeśli chcesz by środowisko demo było usuwane codziennie, to najlepiej dodać skrypt, który będzie tego pilnował. Jeśli czasem tworzymy różne rzeczy testowo/ demonstracyjnie i boimy się, że zapomnimy ich usunąć po skończonej prezentacji/ testach i będzie nas to drogo kosztować. Automatyczne czyszczenie Azure to dobry sposób, żeby upewnić się, że zasoby zostaną usunięte po skończonej pracy. W poniższym przykładzie pokażę jak dodać taki skrypt do Automation account.


Jeśli nie mamy, to tworzymy Automation Account. W nowym okienku podajemy nazwę, wybieramy subskrypcję, tworzymy lub wybieramy grupę zasobów, lokalizację i bardzo ważne by zaznaczona była opcja ‘Create Azure Run As account‘. Teraz możemy kliknąć na Create.

Portal Microsoft Azure add Automation Account
Portal Microsoft  - create Automation Account

Gdy Mamy utworzone ‘Automation Account’ otwieramy je. Z ‘Process Automation‘ wybieramy ‘Runbooks‘ i plusikiem ‘Create Runbook‘. Teraz możemy wkleić nasz skrypt i dostosować go do swoich potrzeb.

Portal Microsoft Azure - Automation account - add Runbooks

PowerShell script 1

Skrypt nr1 na początku wypisuje wszystkie zasoby z określonym tagiem (environment=test), a potem je usuwa. Trzeba być bardzo ostrożnym żeby się nie pomylić.

$DeleteResources = Get-AzureRmResource -TagName environment -TagValue test
$DeleteResources

foreach ($resource in $DeleteResources) {
    Remove-AzResource -ResourceId $resource.id -Force -WhatIf
}

Skrypt zawiera opcję -WhatIf która nie usunie zasobów, a tylko pokaże co się stanie gdy wykonamy polecenie.

!!! Po usunięciu opcji -WhatIf zasoby zostaną bezpowrotnie usunięte !!!

PowerShell script 2

Skrypt nr2 czyści całą ‘grupę zasobów’, po prostu usuwa z niej wszystko. Na początku wypisuje wszystkie zasoby, jakie znajdują się we wskazanej grupie zasobów(test). W drugiej części dla każdego zasobu wykonuje komendę usunięcia.

$DeleteResources = Get-AzureRmResource -ResourceGroupName test
$DeleteResources

foreach ($resource in $DeleteResources) {
    Remove-AzResource -ResourceId $resource.id -Force -WhatIf
}

Skrypt zawiera opcję -WhatIf która nie usunie zasobów, a tylko pokaże co się stanie gdy wykonamy polecenie.

!!! Po usunięciu opcji -WhatIf zasoby zostaną bezpowrotnie usunięte !!!

Zaplanowanie czyszczenia

Gdy dodaliśmy nasz skrypt do ‘Runbook’ i uruchomiliśmy go ręcznie sprawdzając czy działa, to musimy jeszcze zaplanować jego uruchamianie. W tym celu w naszym Runbooku klikamy na ‘Schedules‘ i wybieramy ‘Add a schedule‘.

Automation account - runbooks - add a schedule

Następnie w nowym oknie wybieramy ‘Schedule‘ i ‘Create a new schedule’

Automation account - runbooks -  schedule
Automation account - runbooks - schedule - create new schedule

W nowym oknie podajemy nazwę, opis, datę oraz godzinę pierwszego wykonania zadania. Należy zwrócić uwagę czy strefa czasowa jest dobrze ustawiona i zaznaczyć opcję ‘Recurring‘. Pojawią nam się nowe opcje z których wybieramy jak często zadanie ma być powtarzane zaczynając od daty i godziny którą ustaliliśmy. Ja wybrałem wykonywanie skryptu raz dziennie o godzinie 17:00.

Automation account -create new schedule

Gdy wszystko ustawimy klikamy na ‘create‘. Tak jak w moim przypadku powinniście widzieć najważniejsze informacje czyli: nazwę, strefę czasową, informację kiedy ponownie zadanie zostanie wykonane i o tym czy jest aktywne czy nie.

Automation account - runbooks - chose a schedule

Lock

Jeszcze jedna porada na koniec jak się bronić przed przypadkowym usunięciem zasobów. Można używać czegoś takiego jak lock. Możemy założyć zabezpieczenie na konkretny zasób, albo całą grupę zasobów.

Portal Microsoft Azure - Automation account - Lock resources

Żeby usunąć zasób z takim zabezpieczeniem będzie trzeba pierw zdjąć zabezpieczenie, a dopiero potem będzie można usunąć zasób.

Więcej na temat zabezpieczenia LOCK przeczytasz w dokumentacji Microsoftu na stronie https://docs.microsoft.com/pl-pl/azure/azure-resource-manager/management/lock-resources.

Jeśli podobał Ci się wpis to pozostałe artykuły związane z Azurem znajdziesz w kategorii azure.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *