Amazon SNS
Amazon Simple Notification Service
W pełni zarządzany serwis powiadomień pub/sub. Wysyłaj wiadomości do milionów subskrybentów jednocześnie - e-mail, SMS, HTTP, Lambda, SQS.
Amazon SNS (Simple Notification Service) to serwis pub/sub (publish-subscribe) do wysyłania wiadomości i powiadomień. Tworzysz temat (topic), subskrybenci rejestrują się do niego, a gdy opublikujesz wiadomość - SNS automatycznie dostarcza ją do wszystkich subskrybentów. Subskrybentami mogą być kolejki SQS, funkcje Lambda, endpointy HTTP, adresy e-mail, numery SMS, a nawet aplikacje mobilne.
SNS jest fundamentem wzorca fan-out na AWS: jeden event trafia do SNS topic, a stamtąd rozchodzi się do wielu odbiorców jednocześnie. Np. zamówienie w sklepie online publikuje event do SNS, który jednocześnie: wysyła potwierdzenie e-mail klientowi, uruchamia Lambda do przetwarzania płatności, wrzuca wiadomość do SQS dla systemu magazynowego i loguje event w S3. Wszystko asynchronicznie i niezależnie.
Amazon SNS dostarczył ponad 100 trylionów wiadomości. Serwis obsługuje do 30 milionów subskrypcji na jeden temat i może wysyłać SMS-y do ponad 200 krajów. CloudWatch Alarms używają SNS pod spodem do wysyłania powiadomień e-mail.
Używaj SNS Filter Policies, żeby subskrybenci otrzymywali tylko interesujące ich wiadomości. Zamiast tworzyć osobne tematy dla każdego typu eventu, utwórz jeden temat i filtruj po atrybutach. Np. filter {"event_type": ["order_created"]} na jednej subskrypcji i {"event_type": ["order_shipped"]} na drugiej.
Koszty SMS przez SNS bardzo sie roznia w zaleznosci od kraju ($0.00645/SMS w USA, $0.0365 w Polsce, $0.0930 w Japonii). HTTP/HTTPS endpointy nie maja wbudowanego retry z backoff. Jesli subscriber nie odpowiada, SNS ponawia wedlug ustalonej polityki i moze pominac wiadomosci. Max rozmiar wiadomosci to 256 KB. Dla duzych payloadow uzyj referencji do S3.
Amazon SNS to w pelni zarzadzany serwis pub/sub (publish-subscribe), ktory rozglasza wiadomosci do wielu subskrybentow jednoczesnie. Zamiast punkt-do-punkt (jak SQS), SNS realizuje wzorzec fan-out - jedna wiadomosc trafia do wielu odbiorcow naraz: Lambda, SQS, HTTP, email, SMS czy aplikacji mobilnych.
Tworzenie tematu (Topic)
Topic to kanal komunikacji - logiczny punkt, do ktorego publikujesz wiadomosci. Tworzysz Standard Topic (wysoka przepustowosc, best-effort ordering) lub FIFO Topic (scisla kolejnosc, dokladnie jednokrotne dostarczenie). Nazwa FIFO topicu musi konczyc sie na .fifo. Kazdy topic ma unikalny ARN, ktorego uzywasz do publikowania i subskrypcji.
Dodawanie subskrypcji
Subskrybujesz endpointy na topic: Lambda, SQS, HTTP/HTTPS webhook, email, SMS, aplikacja mobilna (push) lub Kinesis Data Firehose. Jeden topic moze miec do 12.5 miliona subskrypcji (Standard) lub 100 (FIFO). HTTP i email wymagaja potwierdzenia subskrypcji przez odbiorcow. Kazda subskrypcja moze miec wlasne ustawienia filtrowania i formatu.
Publikowanie wiadomosci
Producent wywoluje Publish z trescia (do 256 KB) i atrybutami wiadomosci. Mozesz publikowac do konkretnego topicu lub bezposrednio na numer telefonu (SMS). PublishBatch pozwala wyslac do 10 wiadomosci naraz. Wiadomosc moze zawierac rozne tresc dla roznych protokolow (np. krotki SMS i dlugi email) za pomoca MessageStructure=json.
SNS rozglasza wiadomosc (fan-out)
SNS dostarcza kopie wiadomosci do wszystkich aktywnych subskrypcji rownoczesnie. Dostarczenie do Lambda i SQS jest praktycznie natychmiastowe (milisekundy). Endpointy zarzadzane przez AWS (SQS, Lambda) maja polityke do 100,015 prob przez 23 dni; endpointy HTTP domyslnie maja tylko 3 proby (konfigurowalne). Kolejnosc dostarczenia miedzy subskrybentami nie jest gwarantowana.
Filtrowanie wiadomosci (Subscription Filter Policy)
Filter Policy pozwala subskrybentowi otrzymywac tylko wiadomosci spelniajace okreslone kryteria - na podstawie atrybutow wiadomosci lub body. Np. Lambda przetwarza tylko zamowienia z regionu "EU", a SQS kolejkuje tylko zamowienia powyzej 1000 PLN. Bez filter policy kazdy subskrybent dostaje kazda wiadomosc - filtrowanie po stronie SNS jest tansze niz filtrowanie w Lambda.
Dostarczenie i obsluga bledow
SNS stosuje rozne polityki retransmisji w zaleznosci od protokolu: Lambda i SQS maja 3 proby natychmiast, HTTP - progresywne backoff. Nieudane dostarczenia mozesz przekierowac do DLQ (kolejka SQS przypisana do subskrypcji). Delivery Status Logging do CloudWatch pozwala monitorowac procentowy sukces dostarczenia na kazdy protokol.
SNS jest prosty w uzyciu, ale kilka zaawansowanych funkcji moze znaczaco zredukowac koszty i uproscic architekture. Ponizej sprawdzone wzorce z produkcyjnych systemow.
Filtrowanie wiadomosci - redukuj niepotrzebne invocations
Bez filter policy Lambda subskrybujaca topic dostaje kazda wiadomosc i musi sama decydowac czy ja przetworzyc - platisz za kazda invokacje. Z filter policy na atrybutach SNS nie wywoluje Lambdy dla nieinteresujacych wiadomosci. Przy 1 miliona wiadomosci dziennie, gdzie Lambda potrzebuje tylko 10%, oszczedzasz 900k invocations dziennie. Filtruj po atrybutach, nie body - to szybsze.
PoczatkujacyFIFO Topics - gdy kolejnosc ma znaczenie
FIFO Topics gwarantuja scisla kolejnosc i dokladnie jednokrotne dostarczenie. Wspieraja tylko SQS FIFO jako subskrybentow (nie Lambda bezposrednio). Limit to 300 publikacji/s (lub 3000 z batchingiem). Idealny wzorzec: FIFO Topic -> FIFO SQS -> Lambda. Uzywaj MessageGroupId do rownoleglego przetwarzania niezaleznych grup z zachowaniem kolejnosci wewnatrz grupy.
ZaawansowanyKonfiguracja retransmisji (Delivery Retry Policy)
Domyslna polityka HTTP to tylko 3 proby retransmisji - dla webhookow skonfiguruj wlasna politike (do 50 prob). Dla webhookow skonfiguruj wlasna politike: np. 5 prob z progresywnym backoff (1s, 2s, 4s, 8s, 16s). Dodaj DLQ do subskrypcji zeby lapac trwale nieudane dostarczenia. Dla Lambda i SQS polityka retransmisji jest prostsza - 3 natychmiastowe proby.
ZaawansowanyCross-region - replikacja zdarzen
SNS nie ma wbudowanej replikacji miedzy regionami, ale mozesz to latwo zbudowac: SNS Topic w regionie A -> SQS w regionie B (cross-region subscription) -> Lambda w regionie B. Alternatywnie: SNS -> Lambda -> SNS w drugim regionie. To kluczowe dla architektur multi-region i disaster recovery. Pamietaj o kosztach transferu danych miedzy regionami.
ZaawansowanyRaw Message Delivery - unikaj podwojnej serializacji
Domyslnie SNS opakowuje wiadomosc w JSON envelope z metadanymi (MessageId, TopicArn, Timestamp). Dla subskrypcji SQS i HTTP mozesz wlaczyc Raw Message Delivery - konsument dostaje oryginalna tresc bez opakowania. Zmniejsza rozmiar wiadomosci i upraszcza parsowanie. Szczegolnie przydatne gdy producent wysyla juz sformatowany JSON.
PoczatkujacyArchiwizacja wiadomosci z Kinesis Data Firehose
SNS moze dostarczac wiadomosci bezposrednio do Kinesis Data Firehose, ktory automatycznie zapisuje je do S3 w formacie JSON, Parquet lub ORC. To najtanszy sposob na dlugoterminowa archiwizacje wszystkich zdarzen bez budowania wlasnego pipeline. Mozesz pozniej analizowac je za pomoca Athena. Firehose buforuje dane i zapisuje w batchach co 1-5 minut.
ZaawansowanyScreenshoty z AWS Console
Wkrotce pojawia sie tu zrzuty ekranu pokazujace jak korzystac z Amazon SNS bezposrednio w konsoli AWS.
Do czego sluzy Amazon SNS?
Powiadomienia systemowe (alarmy)
CloudWatch alarm wykrywa wysoki CPU na EC2 i publikuje do SNS topic. SNS wysyła e-mail do admina, SMS do dyżurnego i wiadomość do Slacka przez Lambda. Wielokanałowe powiadomienia.
Fan-out do wielu systemów
Jeden event (np. nowe zamówienie) trafia do SNS topic i rozchodzi się do: SQS dla fulfillment, Lambda dla e-maila, S3 dla audytu, Kinesis dla analityki. Luźno powiązane komponenty.
Powiadomienia push mobilne
Wysyłaj push notifications do aplikacji iOS (APNs) i Android (FCM) przez SNS Mobile Push. Obsługuje miliony urządzeń z jednym API.
Wysyłka SMS
Masowa wysyłka SMS-ów do klientów - potwierdzenia zamówień, kody weryfikacyjne (OTP), powiadomienia marketingowe. Obsługa ponad 200 krajów.
Co musisz wiedziec?
Topic (Temat)
Kanał komunikacji, do którego publikujesz wiadomości. Subskrybenci rejestrują się do tematu i automatycznie otrzymują wszystkie opublikowane wiadomości. Dwa typy: Standard i FIFO.
Subscription (Subskrypcja)
Połączenie między tematem a endpointem (e-mail, SQS, Lambda, HTTP, SMS). Jedna wiadomość w temacie = dostarczenie do WSZYSTKICH aktywnych subskrypcji.
Publisher (Wydawca)
Serwis lub aplikacja wysyłająca wiadomość do tematu SNS. Może to być Twój kod (SDK/CLI), alarm CloudWatch, event S3, event CloudFormation itp.
Fan-out
Wzorzec, w którym jedna wiadomość SNS jest dostarczana do wielu subskrybentów jednocześnie. Kluczowy pattern w architekturze event-driven i mikrousługach.
Filter Policy
Filtr JSON na subskrypcji, który decyduje które wiadomości dostarczyć. Pozwala subskrybentom otrzymywać tylko interesujące ich eventy z jednego tematu.
Architektura event-driven z SNS fan-out
Wzorzec fan-out, gdzie SNS rozglasza zdarzenia do wielu konsumentow jednoczesnie. Kazdy subskrybent przetwarza zdarzenie niezaleznie.
Porownanie SNS vs SQS vs EventBridge
| Cecha | SNS | SQS | EventBridge |
|---|---|---|---|
| Wzorzec | Pub/Sub (push) | Queue (pull) | Event bus (push, rules) |
| Dostarczanie | Push do subscribentow | Consumer pobiera | Push do targetow |
| Filtrowanie | Subscription filter policies | Brak (consumer filtruje) | Zaawansowane event patterns |
| Retencja | Brak (fire-and-forget) | Do 14 dni | Do 24h (replay) |
| Fan-out | Natywny (wiele subscribentow) | Jeden consumer (lub z DLQ) | Wiele targetow per rule |
| Najlepsze dla | Powiadomienia, fan-out | Buforowanie, decoupling | Event-driven architecture, SaaS integracje |
Ile kosztuje Amazon SNS?
Publikacja wiadomości
Płacisz za liczbę opublikowanych wiadomości (Publish API). Pierwszych 1 milion/miesiąc GRATIS.
$0.50 za milion wiadomości (po Free Tier)
Dostarczanie (HTTP/SQS/Lambda)
Dostarczanie do HTTP, SQS i Lambda jest DARMOWE. Płacisz tylko za Publish.
$0.00 za dostarczenie do SQS/Lambda
SMS
Płacisz za wysłane SMS-y. Ceny zależą od kraju docelowego i typu (transakcyjny vs promocyjny).
Polska: ~$0.04-0.07 za SMS
Free Tier
1 milion publikacji SNS + 1000 e-maili + 100 000 HTTP dostarczeń miesięcznie - permanentnie za darmo. SMS-y są płatne od pierwszej wiadomości.
Wystarczy na większość projektów dev i małe produkcje
Przyklady AWS CLI
Utwórz temat SNS
Tworzy nowy SNS topic i wyświetla jego ARN
aws sns create-topic --name moje-powiadomienia
Subskrybuj e-mail
Dodaje adres e-mail jako subskrybenta (wymaga potwierdzenia)
aws sns subscribe \
--topic-arn arn:aws:sns:eu-central-1:123456789012:moje-powiadomienia \
--protocol email \
--notification-endpoint [email protected]
Opublikuj wiadomość
Wysyła wiadomość do wszystkich subskrybentów tematu
aws sns publish \
--topic-arn arn:aws:sns:eu-central-1:123456789012:moje-powiadomienia \
--subject "Alert: Wysoki CPU" \
--message "Instancja i-0123abc ma CPU > 90% od 10 minut."
Quiz: Amazon SNS
Sprawdz czy dobrze rozumiesz podstawy. Kliknij odpowiedz — feedback pojawi sie od razu.
1. Jaki wzorzec architektoniczny realizuje SNS?
2. Czy dostarczanie z SNS do SQS jest płatne?
3. Co to jest SNS Filter Policy?
Czesto uzywane razem z Amazon SNS
Czytaj więcej o Amazon SNS
Chcesz poznac Amazon SNS w praktyce?
Darmowy kurs "AWS od podstaw" pokazuje jak uzywac Amazon SNS krok po kroku. Teoria + praktyka od zera.