NAT Gateway to bramka, przez którą serwery bez publicznego adresu łączą się z internetem. Według cennika AWS na dzień 28 października 2026 jedna bramka we Frankfurcie kosztuje ok. 42 USD miesięcznie, zanim przejdzie przez nią pierwszy bajt. Za każdy gigabajt, który przez nią przejdzie, AWS dolicza 0,052 USD, także za ruch do S3.
Zacznij od Cost Explorer. Odfiltruj usługę EC2-Other, pogrupuj ją po Usage type i porównaj EUC1-NatGateway-Hours z EUC1-NatGateway-Bytes. Jeśli więcej kosztują godziny, szukasz zbędnych bramek, a jeśli bajty, serwera z największym ruchem.
Godziny i publiczny adres bramki
AWS liczy każdą godzinę, w której bramka istnieje i jest dostępna, a zaczętą godzinę traktuje jak pełną. Miesiąc jednej bramki we Frankfurcie to ok. 38 USD. Do tego bramka ma publiczny adres IPv4, za który AWS bierze 3,65 USD miesięcznie, jak za każdy adres w użyciu.
AWS w instrukcji tworzenia VPC zaleca na produkcji bramkę w każdej strefie, w której stoją zasoby potrzebujące internetu, i sam dopisuje, że to kosztuje. Przy trzech strefach wychodzi ok. 125 USD miesięcznie, nawet gdy nie płynie żaden ruch.
Gigabajt do internetu kosztuje przez bramkę 0,142 USD
AWS nalicza 0,052 USD za każdy gigabajt przetworzony przez bramkę, bez względu na to, skąd i dokąd płynie. Przy ruchu do internetu dochodzi zwykły transfer danych z AWS, we Frankfurcie 0,09 USD za GB po wykorzystaniu 100 GB darmowych w miesiącu.
Druga dopłata pojawia się, gdy serwer stoi w innej strefie niż bramka. Za transfer między strefami płacisz wtedy 0,01 USD za GB. Ruch w obrębie jednej strefy jest bezpłatny, dlatego AWS w dokumentacji radzi trzymać serwery, które wysyłają dużo danych, w strefie swojej bramki.
Kto w VPC generuje ruch przez bramkę
Najpierw ustal, która bramka ma ruch. W CloudWatch każda bramka ma metryki BytesOutToDestination i BytesInFromDestination. Ze statystyką Sum pokażą, ile danych wysłała i odebrała.
Który serwer stoi za tym ruchem, metryki już nie powiedzą. Do tego potrzebujesz VPC Flow Logs zapisywanych do CloudWatch Logs, a według AWS re:Post wystarczy je włączyć na interfejsach sieciowych bramek. Logi zbierają ruch dopiero od włączenia i same są płatne, więc zostaw je na kilka zwykłych dni i potem wyłącz.
W CloudWatch Logs Insights wybierz tę grupę logów i uruchom zapytanie z tego samego artykułu. Wpisz w miejsce przykładowych adresów prywatne adresy swoich bramek z listy NAT gateways w konsoli VPC i zakres adresów swojego VPC.
filter (dstAddr in ["10.0.1.25", "10.0.2.25", "10.0.3.25"]
AND isIpv4InSubnet(srcAddr, "10.0.0.0/16"))
OR (srcAddr in ["10.0.1.25", "10.0.2.25", "10.0.3.25"]
AND isIpv4InSubnet(dstAddr, "10.0.0.0/16"))
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
Zapytanie sumuje ruch od serwerów do bramki i od bramki do serwerów, dlatego widać w nim też pobieranie paczek i obrazów. Na górze wyniku są pary adresów, które przesłały najwięcej bajtów. Adres spoza listy bramek wyszukasz w konsoli EC2 na stronie Network Interfaces, gdzie są też interfejsy zadań ECS i funkcji Lambda.
Ruch do S3 w tym samym regionie puścisz obok bramki przez bezpłatny gateway endpoint. Jak go dodać i czego pilnować w politykach bucketów, opisałem we wpisie o EC2-Other. Przez ten sam endpoint pójdzie też większość ruchu przy pobieraniu obrazów z ECR, bo według dokumentacji ECR serwer pobiera warstwy obrazów z S3. Jeśli endpoint ma własną politykę, musi zezwalać na dostęp do bucketu z warstwami ECR.
Bramki, których nikt nie używa
Compute Optimizer od listopada 2025 i Trusted Advisor od lutego 2026 wskazują bramki NAT bez ruchu przez 32 dni. Kontroli kosztów w Trusted Advisorze nie ma jednak w planach wsparcia Basic i Developer, więc w nich zostaje Compute Optimizer, który trzeba raz włączyć na koncie.
Bez tych narzędzi sprawdź w CloudWatch dwie metryki za ostatnie 32 dni: maksimum ActiveConnectionCount i sumę BytesOutToDestination. Pierwsza liczy tylko połączenia TCP, więc dopiero zero w obu znaczy, że z bramki nikt nie korzysta.
Zanim usuniesz bramkę, usuń trasy, które na nią wskazują, albo przepnij je na inną bramkę. Inaczej zostaną w tablicach routingu w stanie blackhole, a serwery z tych podsieci stracą wyjście do internetu. Zostaje też jej adres Elastic IP, którego AWS nie zwalnia z konta. Dalej kosztuje 3,65 USD miesięcznie, teraz jako adres bezczynny. Zwolnij go osobno, jeśli nie ma go na żadnej liście dozwolonych adresów.
NAT na własnej instancji EC2
Zamiast bramki ruch z prywatnych podsieci może wyprowadzać zwykła instancja EC2, która stoi w publicznej podsieci i przekazuje pakiety dalej. Gotowy obraz NAT od AWS nie ma wsparcia od końca 2023 roku, więc instancję budujesz sam na Amazon Linux 2023 według instrukcji AWS, z włączonym przekazywaniem pakietów i wyłączonym sprawdzaniem source/destination.
W jednej strefie we Frankfurcie bramka bez ruchu kosztuje ok. 42 USD miesięcznie, a instancja t4g.micro z publicznym adresem i małym dyskiem według cennika EC2 ok. 11 USD. Przy 1 TB ruchu miesięcznie opłata za przetwarzanie podnosi koszt bramki do ok. 95 USD. Instancja zostaje przy ok. 11 USD, bo AWS liczy ją tylko za czas pracy i rozmiar. Do tego w obu przypadkach płacisz tak samo za transfer do internetu, 0,09 USD za GB.
Jedna instancja nie przełącza się sama przy awarii, więc gdy padnie, serwery w prywatnych podsieciach tracą internet, dopóki ktoś jej nie podniesie. Instancja t4g daje pełną prędkość sieci tylko chwilowo, na kredytach, a gdy je wyczerpie, wraca do swojej przepustowości bazowej. Łatki systemu też instalujesz Ty, a każdy restart odcina prywatne serwery od internetu. Dlatego AWS w porównaniu obu rozwiązań poleca bramkę.
Instancja ma sens w środowisku testowym i deweloperskim oraz przy kilku serwerach ze spokojnym ruchem, ale dopiero po przeniesieniu ruchu do S3 na bezpłatny gateway endpoint. Gdy brak wyjścia do internetu zatrzymuje sprzedaż albo płatności, zostań na produkcji przy bramce.
Co to znaczy dla małej firmy
Jeśli w Cost Explorer przeważa NatGateway-Hours, płacisz głównie za samo istnienie bramek. Policz bramki, usuń te bez ruchu razem z adresami i w środowisku testowym zostaw jedną bramkę albo instancję NAT. Gdy rośnie NatGateway-Bytes, niczego nie zmieniaj na ślepo. Najpierw kilka dni Flow Logs i zapytanie z tego wpisu, a dopiero potem endpoint, jeśli najwięcej danych idzie do usługi AWS.
Jeśli nie chcesz klikać w Cost Explorerze, wczytaj do analizy CSV eksport całego rachunku pogrupowany po Usage type. Gdy NAT i transfer są znaczącą częścią rachunku, narzędzie pokaże osobno godziny bramek, dane przez nie przetworzone i transfer do internetu.
Każda bramka, przez którą od 32 dni nic nie przeszło, to ok. 42 USD miesięcznie, które przestajesz płacić po jej usunięciu i zwolnieniu adresu.
3 sposoby, w jakie mogę pomóc
- Jak ustawić alert kosztów w 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.