Dawno temu miałem problem, jak dałem ludziom dostęp do S3, to traktowali to, jak śmietnik. Bucket miał być tylko developerski, testowy do sprawdzenia, czy funkcje dobrze działają itp. Tylko że ludzie testowali różne rzeczy i zapominali usuwać pliki.
Postanowiłem zrobić porządek z tym raz na zawsze. Są buckety do testowania i takie mają zostać puste bez wrażliwych danych, najlepiej bez jakichkolwiek danych 🙂
No ale przecież nie będę się logował co chwilę na S3 i sprzątał.
Ja nie będę, ale można by taki proces zautomatyzować. Postanowiłem użyć do tego funkcji AWS Lambda.
Poradnik o tym, jak stworzyć funkcję i dać jej odpowiednie (minimalne) uprawnienia do usuwania obiektów możesz przeczytać w artykule Jak automatycznie kopiować dane z AWS S3 – Lambda events (lepczynski.it)
FUNKCJA LAMBDA
Dzisiaj szybko pokażę, jak można w prosty sposób automatycznie czyścić S3. Gdy już stworzyłem funkcję w python 3.9 i dodałem do niej odpowiednią rolę IAM, to mogę przejść do pisania kodu.
Sprawa jest prosta można użyć boto3. W kodzie Funkcji Lambda wystarczy dodać:
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('test001asde001')
bucket.objects.all().delete()
test001asde001 – to jest mój AWS S3 bucket, z którego będę usuwał wszystkie pliki.
Oczywiście nie jestem specjalistą w pisaniu kodu i nie chcę go niepotrzebnie komplikować, więc ograniczam się do minimum, które pozwoli na prawidłowe działanie oraz ułatwi zrozumienie tematu.
AUTOMATYZACJA
No dobra mam funkcję, która działa i usuwa wszystkie pliki, nie muszę tego robić ręcznie więc spoko. Jednak jestem dość leniwym człowiekiem i nie chciałbym uruchamiać tej funkcji codziennie ręcznie.
Najlepiej byłoby zlecić uruchomienie takiej funkcji do CRONA, tylko czy jest coś takiego w AWS? Oczywiście, że jest 🙂 nazywa się CloudWatch Events Rule.
Wystarczy dodać sobie nowego trigera i wybrać CloudWatch Events. Ja lubię crona, więc często go używam. Tutaj znajdziesz fajny kalkulator https://crontab.guru/ i pomocne wyjaśnienie jak ustawić crona Schedule Expressions for Rules – Amazon CloudWatch Events .
Ja chcę, żeby moja funkcja lambda uruchamiała się codziennie o 20:00, więc ustawiłem poniższą wartość:
cron(0 20 * * ? *)
Ustawiając CloudWatch Events Rule pamiętajcie o jednej bardzo ważnej rzeczy. Czas podajesz w UTC 🙂
Podsumowanie
Jak widać, funkcje lambda nie muszą być skomplikowane. Wykorzystując CloudWatch Events Rule, można wywoływać funkcję Lambda w tak prosty sposób, jak uruchamianie skryptów w CRON.
Dzięki temu prostemu tutorialowi możesz uruchomić dowolną funkcję Lambda o określonym czasie. Można np. wyłączyć EC2 na weekend i ponownie ją włączyć po weekendzie albo zaplanować wyłączanie wszystkich developerskich maszyn codziennie po pracy i włączanie ich rano przed pracą. Wpłynie to pozytywnie na twoje rachunki w AWS. Maszyny będą włączone krócej, czyli mniej zapłacisz. Jeśli jesteś ciekaw jak to zrobić, zapraszam do przeczytania tutorialu Jak automatycznie uruchomić EC2 w chmurze AWS?