W audycie kosztów AWS zaczynam od sześciu miejsc: rozmiaru instancji EC2, Savings Plans, dysków EBS, publicznych adresów IPv4, NAT Gateway i logów CloudWatch. Pięć z nich to zasoby, które zostały po teście albo działają na ustawieniach domyślnych, a szóste to rabat za stałe obciążenie, z którego nikt nie skorzystał.
Każde z tych miejsc zobaczysz sam. Otwórz Cost Explorer, ustaw ostatnie trzy miesiące i pogrupuj koszty według Usage type. Typy użycia są w tabeli, a Savings Plans mają osobny raport, opisany niżej. We Frankfurcie typy użycia mają przedrostek EUC1-.
| Co sprawdzasz | Typ użycia w Cost Explorer |
|---|---|
| Instancje EC2 | BoxUsage:<typ instancji> |
| Dyski i snapshoty | EBS:VolumeUsage.gp2, EBS:SnapshotUsage |
| Adresy IPv4 | PublicIPv4:IdleAddress, PublicIPv4:InUseAddress |
| NAT Gateway | NatGateway-Hours, NatGateway-Bytes |
| Logi CloudWatch | DataProcessing-Bytes, TimedStorage-ByteHrs |
Eksport z Cost Explorer możesz też wczytać do analizy CSV, która wskaże większość tych pozycji. Plik zostaje w Twojej przeglądarce. Ceny niżej to stawki on-demand we Frankfurcie według cennika AWS na dzień 8 października 2026.
Instancje EC2 większe, niż wymaga ruch
Instancję zwykle dobiera się na start, z zapasem, i potem nikt do tego nie wraca. Włącz w konsoli AWS Compute Optimizer. Jest bezpłatny i na podstawie metryk z ostatnich 14 dni pokaże, które instancje są za duże. Pamięć bierze jednak pod uwagę tylko wtedy, gdy na instancji działa agent CloudWatch.
Sprawdź też, czy aplikacja zadziała na Gravitonie, czyli procesorach ARM od AWS. We Frankfurcie m7g.large z Gravitonem jest o 19% tańszy od m7i.large z procesorem Intela. Zmiana rozmiaru wymaga zatrzymania instancji, ale na ARM nie przejdziesz samą zmianą typu. Potrzebna jest nowa instancja z obrazu arm64, a przy kontenerach także build na arm64 w CI.
Środowisko testowe często działa całą dobę, a zespół korzysta z niego 10 godzin dziennie od poniedziałku do piątku, czyli przez 50 ze 168 godzin tygodnia. Instance Scheduler od AWS włącza i wyłącza EC2 i RDS według harmonogramu, który przypisujesz instancji tagiem.
Serwery na stałe, rozliczane on-demand
Jeśli część instancji działa bez przerwy od miesięcy, a płacisz za nie stawkę on-demand, płacisz więcej, niż musisz. Compute Savings Plans obniżają stawkę nawet o 66% w zamian za zobowiązanie na rok albo trzy lata.
W Cost Explorer otwórz Savings Plans, a w nim raport Coverage. Pokazuje, jaka część kosztów jest objęta planem. Plan kupuj tylko na tę moc, która pracuje zawsze, i dopiero po zmniejszeniu instancji. Kupiony wcześniej zobowiąże Cię do płacenia za zapas przez cały okres planu.
Dyski gp2, wolumeny bez instancji i stare snapshoty
Dysk gp3 jest we Frankfurcie o 20% tańszy od gp2, a typ zmienisz bez odłączania wolumenu. Duże dyski gp2 są jednak szybsze niż gp3 w podstawowej cenie: od 334 GiB mają dwa razy większą przepustowość, a powyżej 1 000 GiB więcej IOPS. Przy takich dyskach dokup w gp3 brakującą wydajność, bo inaczej dysk zwolni.
Wolumen w stanie available nie jest podłączony do żadnej instancji, a płacisz za niego tak samo. Polecenie działa w jednym regionie, więc uruchom je z --region dla każdego, którego używasz:
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query "Volumes[].[VolumeId,Size,VolumeType,CreateTime]" \
--output table
Przed usunięciem wolumenu zrób jego snapshot. Kosztuje 0,054 USD za GB miesięcznie, mniej niż wolumen, a pozwoli odtworzyć dane.
Snapshotów przybywa, gdy kopie robi skrypt, który niczego nie usuwa. Zastąp go polityką w Data Lifecycle Manager, która sama usuwa stare kopie. Starsze kopie ze skryptu usuń ręcznie, bo DLM ich nie rusza.
Publiczne adresy IPv4
Od lutego 2024 AWS liczy za każdy publiczny adres IPv4 3,65 USD miesięcznie, także za adres podłączony do działającej instancji.
IdleAddress na rachunku to adresy, z których nic nie korzysta. Zwolnij każdy z nich, którego nie ma w DNS ani na liście dozwolonych adresów u klienta czy dostawcy. Bezpłatne Public IP Insights pokażą, do czego jest przypięty każdy adres. Instancja za load balancerem zwykle nie potrzebuje własnego publicznego IP. Jeśli jednak sama łączy się z internetem, bez adresu potrzebny będzie NAT Gateway, który kosztuje więcej niż dziesięć adresów.
Ruch przez NAT Gateway
NAT Gateway to bramka, przez którą serwery bez publicznego adresu wychodzą do internetu. We Frankfurcie kosztuje około 38 USD miesięcznie plus 0,052 USD za każdy GB, który przez nią przejdzie. Gdy taki serwer czyta i zapisuje pliki w S3, cały ten ruch domyślnie idzie przez bramkę.
Jeśli za NatGateway-Bytes płacisz więcej niż za NatGateway-Hours, sprawdź, dokąd aplikacja wysyła ruch. Ruch do S3 i DynamoDB w tym samym regionie przejmie gateway endpoint, za który AWS nic nie liczy. To wpis w tablicy routingu, więc kodu aplikacji nie zmieniasz.
Logi CloudWatch
We Frankfurcie przyjęcie gigabajta logów kosztuje 0,63 USD, a CloudWatch Logs domyślnie trzyma je bezterminowo.
W konsoli CloudWatch otwórz Log groups i posortuj je po rozmiarze. Grupom z Never Expire w kolumnie Retention ustaw okres, którego naprawdę potrzebujesz, na przykład 30 dni dla logów aplikacji. Jeśli DataProcessing-Bytes kosztuje więcej niż TimedStorage-ByteHrs, zmniejsz objętość logów w samej aplikacji.
Co zrobić w tym tygodniu
Załóż budżet w AWS Budgets z alertem na e-mail. Budżety i powiadomienia są bezpłatne, a alert przyjdzie, gdy wydatki lub prognoza na ten miesiąc przekroczą ustaloną kwotę. Potem aktywuj tagi z nazwą środowiska jako tagi kosztowe, żeby w Cost Explorer oddzielić staging od produkcji.
Zmiany w instancjach, dyskach i NAT zostaw programiście, bo każdą trzeba przetestować. Przykładowy raport pokazuje, jak wygląda lista takich zmian z miesięczną kwotą przy każdej z nich. Dane w nim są przykładowe i nie pochodzą od żadnego klienta.
3 sposoby, w jakie mogę pomóc
- Co to jest EC2-Other na rachunku AWS
Przeczytaj też ten wpis.
- Audyt kosztów AWS
Audyt kosztów AWS w stałej cenie pakietu. Dostajesz listę zmian z kwotą oszczędności przy każdej pozycji, a do konta potrzebuję tylko dostępu do odczytu.
- Napisz do mnie
Albo wprost na przemek@codelevel.pl. Odpowiadam w ciągu 1 dnia roboczego.