AWS SNS Kurulumu
SNS ile ilk bildiriminizi göndermeden önce, her şeyi hazır hâle getirmek için birkaç kurulum adımını izlemeniz gerekir.
Adım 1: AWS hesabı oluşturma
Halihazırda bir AWS hesabınız yoksa, SNS kullanmaya başlamadan önce bir tane oluşturmanız gerekir.
Şu adrese gidin AWS ana sayfası ve sağ üst köşedeki "Create an AWS Account" düğmesine tıklayın. E-posta adresinizi sağlamanız, bir parola oluşturmanız ve bazı temel hesap bilgilerini girmeniz gerekecek. AWS ayrıca kredi kartı bilgilerinizi isteyecek — endişelenmeyin, SNS'in oldukça cömert bir ücretsiz katmanı vardır ve bu sınırları aşmadığınız sürece ücretlendirilmezsiniz.
Hesabınız kurulduktan sonra, devam etmeye hazırsınız. Ancak, kök hesabınızı kullanmak yerine özel bir IAM kullanıcısı oluşturmanızı şiddetle tavsiye ederim. Bu, bugünkü yazının kapsamı dışında, ancak ayrıntılı yönergeler için resmi talimatlara başvurun.
Adım 2: AWS yönetim konsolunda SNS'i kurma
Artık bir AWS hesabınız olduğuna göre, SNS hizmetine erişme zamanı.
Kimlik bilgilerinizle AWS Management Console'a giriş yapın ve SNS'i bulun. Bunu üç şekilde yapabilirsiniz:
- Konsolun üst kısmındaki arama çubuğuna "SNS" yazın
- Üst gezinti çubuğunda "Services"a tıklayın ve "Application Integration" kategorisi altında SNS'i bulun
- Doğrudan SNS konsoluna gidin
Yöntem fark etmeksizin, görmeniz gereken ekran şu:

Görsel 1 - AWS SNS hizmet sayfası
SNS panosuna girdiğinizde, sol tarafta "Topics", "Subscriptions" ve "Mobile" gibi seçeneklerin bulunduğu bir menü görürsünüz. Pano, SNS kaynaklarınıza ve son etkinliğe genel bir bakış sunar.
Yeni bir hesap için burası oldukça boş olacaktır — bu beklenen bir durum. Şimdi, ilk SNS konumuzu oluşturalım.
Adım 3: Bir SNS konusu oluşturma
Bir SNS konusu, temel olarak yayıncıların mesaj gönderdiği ve abonelerin dinlediği bir iletişim kanalıdır.
Bunu bir radyo istasyonu gibi düşünün — istasyon belirli bir frekanstan (konu) yayın yapar ve o frekansa ayarlı herkes yayını alır. SNS açısından, uygulamanız mesajları bir konuya yayınlar ve o konuya abone olan tüm uç noktalar bu mesajları alır.
İlk SNS konunuzu şu şekilde oluşturursunuz:
- Görsel 1'de gördüğünüz ekranda bir konu adı girin.
- "Next step" düğmesine tıklayın.
- Tür için "Standard"ı seçin (FIFO konuları farklı kullanım alanlarına sahiptir, bunları daha sonra ele alacağız).
- (İsteğe bağlı) Bir görünen ad girin. Bu, SMS veya e-posta abonelerine gönderilen mesajlara dahil edilir.
- Diğer tüm ayarları şimdilik varsayılan hâllerinde bırakın.
- "Create topic"e tıklayın.
Görselleri metne tercih ediyorsanız, ekranınızın şöyle görünmesi gerekir:

Görsel 2 - SNS konusu oluşturma
Değerlerden memnun olduğunuzda, "Create topic" düğmesini görene kadar aşağı kaydırın:

Görsel 3 - SNS konusu oluşturma (2)
Ve hepsi bu kadar! SNS konunuz artık kullanıma hazır. Konunuzu benzersiz şekilde tanımlayan konu ARN'si (Amazon Resource Name) gibi ayrıntıları göreceksiniz:

Görsel 4 - Oluşturulan konu ayrıntıları
Yeni konunuz abonelikler için hazır, ancak henüz hiç abonesi yok; yani yayımladığınız mesajlar hiçbir yere gitmeyecek. Endişelenmeyin, bir sonraki bölümde aboneler eklerken bunu çözeceksiniz.
SNS Aboneleri ve Abonelikler
Daha önce söylediğim gibi, SNS konunuz bir radyo istasyonu gibidir. Şu anda dinleyicisi yok, ancak mesajlarınızı almak üzere aboneler eklediğinizde bu değişecek.
SNS abonesi nedir?
Abone, bir mesaj yayımlandığında SNS konunuzdan bildirim alan herhangi bir uç noktadır.
Bunu bir bülten benzetmesiyle düşünün. Her yeni sayı (mesaj) yayımladığınızda, posta listenizdeki herkese iletilir. SNS bu süreci otomatik ve ölçeklenebilir hâle getirir ve tüm teslimat lojistiğini sizin için yönetir.
AWS çok çeşitli abone türlerini destekler; bu da mesajlarınızın nasıl işlendiği konusunda size esneklik sağlar. Ana türleri aşağıda sıralayacağım:
- E-posta adresleri: Düz metin bildirimlerini doğrudan e-posta gelen kutularına gönderin.
- SMS numaraları: Mobil telefonlara kısa mesaj bildirimleri iletin.
- SQS kuyrukları: Mesajları daha fazla işleme için diğer AWS hizmetlerine yönlendirin.
- Lambda işlevleri: Bildirimlere yanıt olarak sunucusuz kod yürütmeyi tetikleyin.
- HTTP/HTTPS uç noktaları: Web uygulamalarına veya API'lere mesaj gönderin.
- Mobil anlık bildirim: Bildirimleri doğrudan mobil uygulamalara iletin.
Her abone türünün kendi avantajları ve kullanım alanları vardır. Örneğin, e-posta ve SMS insan alıcılar için idealken, SQS kuyrukları ve Lambda işlevleri sistemden sisteme iletişim için daha uygundur.
Adım 1: Bir abone ekleme
Artık abonelerin ne olduğunu anladığınıza göre, konunuza bir tane ekleyelim. Bu eğitim için kurması en kolay olduğu için e-postayı kullanacağım.
SNS konunuza bir e-posta abonesi ekleme adımları şöyledir:
- Konu ayrıntıları sayfanızdan (Görsel 4'te gösterilene benzer), "Create subscription" düğmesine tıklayın.
- "Protocol" açılır menüsünde "Email"i seçin.
- "Endpoint" alanına bildirim alacak e-posta adresini girin.
- Diğer tüm ayarları varsayılan değerlerinde bırakın.
- "Create subscription"a tıklayın.
Ekranınız şöyle görünmelidir:

Görsel 5 - E-posta aboneliği oluşturma
"Create subscription"a tıkladığınızda AWS, aboneliği konunuza ekler; ancak durum "pending confirmation" olacaktır:

Görsel 6 - Onay bekleyen durum
Bu, önemli bir güvenlik özelliğidir; çünkü AWS, e-posta adresinin sahibinin gerçekten bu bildirimleri almak isteyip istemediğinden emin olmak ister.
Adım 2: Abonelikleri onaylama
Bir abone ekledikten sonra, SNS konunuzdan bildirim almak istediğini onaylaması gerekir.
E-posta abonelikleri için AWS, belirttiğiniz adrese otomatik olarak bir onay e-postası gönderir. E-postada, abonenin aboneliği etkinleştirmek için tıklaması gereken bir bağlantı bulunur. Bu gerçekleşene kadar, konuya yayımlanan hiçbir mesaj bu uç noktaya iletilmez.
Tipik bir onay e-postası şöyle görünür:

Görsel 7 - SNS onay e-postası
Alıcının e-postadaki "Confirm subscription" bağlantısına tıklaması yeterlidir. Aboneliklerinin artık etkin olduğunu onaylayan bir sayfaya yönlendirilecekler:

Görsel 8 - Abonelik onayı mesajı
Süreç SMS aboneleri için de benzerdir — AWS, alıcının takip etmesi gereken bir onay bağlantısının yer aldığı bir kısa mesaj gönderir. HTTP/HTTPS uç noktalarının AWS'den gelen bir onay isteğine yanıt vermesi gerekirken, Lambda işlevleri ve SQS kuyrukları gibi AWS kaynakları otomatik onay için yapılandırılabilir.
Aboneliklerinizin durumunu, SNS konsolunun sol kenar çubuğundaki "Subscriptions" bölümüne tıklayarak kontrol edebilirsiniz. Onaylanan abonelikler "Confirmed" durumu gösterirken, onay bekleyenler "Pending confirmation" olarak görünür.

Görsel 9 - Abonelik durumu
Aboneliğiniz onaylandığında, mesaj göndermeye hazırsınız! Konuya yayımlanan her mesaj, belirtilen protokolleri kullanarak tüm onaylı abonelere teslim edilir.
SNS aboneliklerini kurmak bu kadar. Bir sonraki bölümde, konunuza nasıl mesaj yayımlayacağınızı ve abonelerinizin bunları doğru şekilde alıp almadıklarını nasıl test edeceğinizi öğreneceksiniz.
SNS Konularına Mesaj Yayımlama
Artık SNS konunuzu kurduğunuza ve aboneler eklediğinize göre, ilk bildiriminizi gönderme zamanı.
Adım 1: Bir mesaj yayımlama
Başlamak için iyi bir yol, AWS Konsolu üzerinden bir mesaj yayımlamaktır.
İlk mesajınızı göndermek için, konu ayrıntıları sayfanıza gidin ve sağ üstteki "Publish message" düğmesine tıklayın (bkz. Görsel 4). Bu işlem, bildiriminizi hazırlayabileceğiniz mesaj yayımlama formunu açar. Mesaj konusu ve gövdesi için alanlar göreceksiniz. Konu isteğe bağlıdır, ancak e-posta bildirimleri için faydalıdır; çünkü e-posta konu satırı olur.
Basit bir test mesajı için şu gibi bir şey girebilirsiniz:

Görsel 10 - İlk mesaj içeriği
Mesajınızdan memnun olduğunuzda, formun alt kısmındaki "Publish message" düğmesine tıklamak için aşağı kaydırın:

Görsel 11 - Konsol üzerinden mesaj yayımlama
Tıkladıktan sonra SNS, mesajınızı tüm onaylı abonelere anında dağıtır. Bir e-posta aboneliği ayarladıysanız, test mesajını saniyeler içinde gelen kutunuzda görmelisiniz:

Görsel 12 - Mesajın e-postada alınması
Basitti, değil mi? Şimdi bunu daha fazla nasıl özelleştireceğinize bakalım.
Adım 2: SMS ve e-posta bildirimleri gönderme
SNS, mesajlarınızın farklı abone türlerine nasıl görüneceğini özelleştirmenize olanak tanır.
Bir mesaj yayımlarken "Message structure" seçeneğini fark edeceksiniz. Varsayılan olarak "Identical payload for all delivery protocols" olarak ayarlanmıştır; bu, tüm abonelerin aynı mesajı tam olarak aldığı anlamına gelir. Ancak, her teslimat protokolü için mesaj biçimini uyarlamanızı sağlayan "Custom payload for each delivery protocol" seçeneğini de seçebilirsiniz.
E-posta bildirimleri için iki biçim seçeneğiniz vardır:
- Email-JSON: Ham JSON yükünü e-posta uç noktasına gönderir.
- Email: Konu ve mesaj gövdesiyle biçimlendirilmiş bir e-posta gönderir.

Görsel 13 - Yük özelleştirme
SMS bildirimleri için 160 karakter sınırı olduğunu unutmayın. SNS daha uzun mesajları da iletir, ancak bunlar birden çok mesaj olarak kabul edilir. Ayrıca SMS mesaj türünü teslimat optimizasyonunu etkileyen "Promotional" veya "Transactional" olarak ayarlayabilirsiniz:

Görsel 14 - SMS seçenekleri
Artık AWS Konsolu üzerinden e-posta bildirimlerini nasıl göndereceğinizi ve özelleştireceğinizi biliyorsunuz. Sırada, aynısını CLI ve Python ile nasıl yapacağınızı öğreneceksiniz.
Adım 3: Mesaj yayımlamak için AWS CLI veya SDK kullanma
Konsol el ile testler için harikadır; ancak gerçek dünyada mesajları programatik olarak yayımlamak isteyeceksiniz.
AWS Komut Satırı Arayüzü (CLI), terminalinizden veya otomasyon betiklerinizden SNS mesajları göndermeyi kolaylaştırır.
Varsayalım ki AWS CLI'ı kurup yapılandırdınız, şu komutu CLI üzerinden bir mesaj yayımlamak için çalıştırın:
aws sns publish --topic-arn "sns-arn" --subject "CLI Notification" --message "Hello from the AWS CLI!"

Görsel 15 - AWS CLI ile mesaj yayımlama
Anında, gelen kutunuzda benzer bir mesaj göreceksiniz:

Görsel 16 - AWS CLI ile mesaj yayımlama (2)
Daha gelişmiş uygulamalar için AWS SDK'lar, birçok programlama dilinde SNS'e programatik erişim sağlar.
boto3 kütüphanesi ile Python kullanarak mesaj yayımlamak için basit bir örnek:
import boto3
# Initialize the SNS client
sns_client = boto3.client("sns", region_name="eu-central-1")
# Topic ARN (Amazon Resource Name)
topic_arn = "sns-arn"
# Publish a simple message
response = sns_client.publish(
TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification"
)
# Check if the message was sent successfully
if "MessageId" in response:
print(f"Message published successfully! Message ID: {response['MessageId']}")

Görsel 17 - Python SDK ile mesaj yayımlama
Yine, mesaj anında gelen kutuma iletildi:

Görsel 18 - Python SDK ile mesaj yayımlama (2)
SNS ile mesaj yayımlamak bu kadar! Artık basit konsol arayüzünden AWS CLI veya SDK ile programatik yayımlamaya kadar birden fazla şekilde bildirim gönderebiliyorsunuz.
> Python'da AWS Boto'ya yeni misiniz? Kursumuza kaydolun, kısa sürede yetkinleşin.
Bir sonraki bölümde, bildirimlerinizi bir üst seviyeye taşıyacak bazı gelişmiş SNS özelliklerini inceleyeceğiz.
Gelişmiş SNS Özellikleri
Şu ana kadar SNS'in temellerini öğrendiniz. Bu bölümde, SNS'i gerçekten güçlü kılan bazı gelişmiş özellikleri göreceksiniz.
SNS mesaj filtreleme
Aynı bildirimi tüm abonelere göndermek, uç noktaların ilgilenmedikleri mesajları almasına sıkça yol açar.
Mesaj filtreleme, abonelerin mesaj özniteliklerine dayalı olarak hangi mesajları alacaklarını filtrelemelerine olanak tanıyarak bu sorunu çözer. Bunu e-posta filtreleri kurmak gibi düşünün — hangi mesajların geçeceğini belirleyen kurallar oluşturursunuz. SNS için bu kurallara filtre ilkeleri denir.
Başlamak için, aboneliklerinizde yalnızca ilgili mesajları alacak şekilde filtre ilkeleri ayarlayabilirsiniz:

Görsel 19 - Bildirim filtre ilkeleri
Bu örnekte, abone yalnızca order_value özniteliği sayısal olarak 1500 ve üzeri olan mesajlar için bildirim alacaktır.
Şimdi, böyle bir bildirim göndermek için aşağıdaki Python kodunu kullanabilirsiniz:
import boto3
# Initialize the SNS client
sns_client = boto3.client("sns", region_name="eu-central-1")
# Topic ARN (Amazon Resource Name)
topic_arn = "arn:aws:sns:eu-central-1:105036517833:TestTopic"
response = sns_client.publish(
TopicArn=topic_arn,
Message="A new high-value order has been placed",
Subject="New Order Notification",
MessageAttributes={
"order_value": {"DataType": "Number", "StringValue": "2000"},
"region": {"DataType": "String", "StringValue": "EU"},
"category": {"DataType": "String", "StringValue": "Electronics"},
},
)
print(response)
Python betiğini çalıştırdıktan sonra göreceğiniz görüntü şöyledir:

Görsel 20 - Python ile bildirim gönderme
Yalnızca order_value değeri 1500 veya üzerindeyse bildirimi alırsınız:

Görsel 21 - Bildirim içeriği
Kısacası, filtre ilkeleri, yayınlama kodunuzu değiştirmeden hedefli bildirimler göndermenize olanak tanır. En iyi yanı, filtrelemenin uygulamanızda değil, AWS tarafında gerçekleşmesi; bu da verimliliği artırır ve gereksiz trafiği azaltır.
SNS dead letter kuyrukları (DLQ)
En güvenilir sistemlerde bile mesaj teslimi bazen başarısız olabilir.
Dead Letter Queue (DLQ), SNS'in abonelerine teslim edilemeyen mesajları gönderebileceği özel bir Amazon SQS kuyruğudur. Bu genellikle abonenin kullanılamaz olması veya bir hata döndürmesi durumunda gerçekleşir. Bu başarısız mesajlar kalıcı olarak kaybolmak yerine SNS tarafından DLQ'ya yönlendirilir; burada daha sonra analiz edebilir veya teslimatı yeniden deneyebilirsiniz.
Bir DLQ kurmak iki adımdan oluşur. İlk olarak, DLQ olarak hizmet verecek bir SQS kuyruğu oluşturun:

Görsel 22 - Bir SQS kuyruğu oluşturma
Ardından, teslim edilemeyen mesajlar için aboneliğinizi bu kuyruğu kullanacak şekilde yapılandırın:

Görsel 23 - SQS kuyruğuna redrive ilkesi ekleme
Bu yapılandırma doğru izinler gerektirir; çünkü SNS'in SQS kuyruğuna mesaj gönderebilmesi gerekir. AWS konsolunda bunu basit bir onay kutusuyla ayarlayabilirsiniz; ancak CloudFormation veya diğer altyapı-kod araçlarını kullanıyorsanız, uygun IAM izinlerini eklemeniz gerekir.
DLQ kurulduğunda, teslimat hatalarını izleyebilir ve gerektiğinde harekete geçebilirsiniz. Örneğin, DLQ'nuzda mesajlar görünmeye başladığında tetiklenen bir alarm kurabilir ve abonelerinizle ilgili potansiyel sorunlara karşı uyarı alabilirsiniz; ancak bu, bu bölümün kapsamı dışındadır.
SNS ile AWS Lambda kullanma
Lambda işlevleri, SNS mesajlarını işlemeye yönelik geniş olanaklar sunar.
Bir Lambda işlevini bir SNS konusuna abone ettiğinizde, bir mesaj yayımlandığında işlev otomatik olarak tetiklenir. Lambda'nın sunucusuz yaklaşımı, mesaj işlemeye yönelik herhangi bir altyapıyı yönetmenizi gerektirmez; çünkü mesaj hacmine göre otomatik olarak ölçeklenir.
Başlamak için önce bir Lambda işlevi oluşturun:

Görsel 24 - Lambda işlevi oluşturma
Ardından, şu benzeri bir kodla doldurun:
def lambda_handler(event, context):
# SNS messages come in the 'Records' array
for record in event["Records"]:
# Extract the message
message = record["Sns"]["Message"]
subject = record["Sns"]["Subject"]
timestamp = record["Sns"]["Timestamp"]
# Process the message
print(f"Received message: {message}")
print(f"Subject: {subject}")
print(f"Timestamp: {timestamp}")
# Your business logic here
# For example, store the message in a database
# or trigger another AWS service
print("ALL DONE!")
# Return success
return {"statusCode": 200, "body": "Message processed successfully"}

Görsel 25 - Lambda işlevi kodu
Kodunuz hazır olduğunda, Lambda işlevini SNS'e bağlamak için "Add trigger" düğmesine tıklayın:

Görsel 26 - SNS'i Lambda'ya bağlama
İşlev artık kuyruğa bağlı; bu da bir test bildirimi gönderebileceğiniz anlamına gelir:

Görsel 27 - Test bildirimi
Lambda işlevleri günlükleri izlemenizi sağlar; bu da yakın tarihli işlev çağrılarını — bir bildirim göndermenin sonucunu — görebileceğiniz anlamına gelir:

Görsel 28 - Lambda işlevi günlükleri
Lambda işlevleri bu mesajlarla neredeyse her şeyi yapabilir — veritabanına kaydetmek, diğer AWS hizmetlerini tetiklemek, e-posta göndermek veya harici API'leri çağırmak. Bu da SNS ve Lambda'yı olay güdümlü mimariler kurmak için güçlü bir kombinasyon hâline getirir. Lambda işlevleri hakkında daha fazla bilgiyi AWS Lambda'ya Başlangıç eğitiminde bulabilirsiniz.
Sırada, SNS etkinliğinin temel izleme ve günlükleme konularını öğreneceksiniz.
SNS Etkinliğini İzleme ve Günlükleme
SNS etkinliğinizi takip etmek, güvenilir bir bildirim sistemi sürdürmek için kritik öneme sahiptir.
SNS ile Amazon CloudWatch kullanma
Amazon CloudWatch, SNS dahil tüm AWS hizmetleriniz için kapsamlı izleme sağlar. SNS ile CloudWatch kurduğunuzda, mesaj teslimat oranları, hatalar ve API kullanım kalıpları gibi önemli operasyonel metriklere görünürlük kazanırsınız.
SNS için CloudWatch izlemesine başlamak için, AWS hesabınızdaki CloudWatch konsoluna gidin. Buradan AWS'nin sizin için otomatik olarak topladığı önceden yapılandırılmış SNS metriklerine erişebilirsiniz.
İzlenmesi en değerli SNS metrikleri şunlardır:
- NumberOfMessagesPublished: Konularınıza kaç mesajın yayımlandığını takip eder.
- NumberOfNotificationsDelivered: Abonelere başarılı mesaj teslimini gösterir.
- NumberOfNotificationsFailed: Yapılandırma sorunlarına işaret edebilecek başarısız teslimat girişimlerini vurgular.
- PublishSize: Yayımlanan mesajların boyutunu ölçer ve hizmet sınırları içinde kalmanıza yardımcı olur.

Görsel 29 - SNS için varsayılan Cloudwatch panosu
CloudWatch alarmları kurmak, kullanıcılarınızı etkilemeden önce potansiyel sorunlara hızla yanıt vermenizi sağlar. Örneğin, mesaj teslimi hataları belirli bir eşiği aştığında tetiklenecek bir alarm oluşturmak isteyebilirsiniz:
- CloudWatch konsolunda "Alarms" bölümüne gidin.
- "Create alarm"a tıklayın ve izlemek istediğiniz SNS metriğini seçin.
- Eşiğinizi tanımlayın (ör. 5 dakika içinde 5'ten fazla başarısız teslimat).
- Operasyon ekibine uyarı göndermek gibi bildirim eylemlerini yapılandırın.
Görüntüleri yönergelere tercih ediyorsanız, ilgilendiğiniz bir metrik (ör. NumberOfNotificationsFailed) için bir alarm oluşturarak başlayın. Alarmı etkinleştirecek eşikleri ayarlayın:

Görsel 30 - Alarm oluşturma
Ve hepsi bu — alarm şimdi oluşturuldu ve etkin:

Görsel 31 - Alarm oluşturma (2)
Bu alarmlar, bir sorunu proaktif olarak ele almakla mutsuz kullanıcılardan öğrenmek arasındaki farkı yaratabilir.
SNS günlüklerini inceleme
AWS CloudTrail, SNS hizmeti içinde gerçekleştirilen işlemler dahil AWS hesabınızdaki tüm API etkinliğini yakalar.
SNS konularınız üzerinde gerçekleştirilen her işlem — konsol, CLI veya SDK aracılığıyla — CloudTrail günlüklerinde bir kayıt oluşturur. Bu günlükler, güvenlik analizi, kaynak değişikliği takibi ve uygunluk denetimleri için değerli bilgiler sağlar.
CloudTrail'de SNS günlüklerine erişmek için:
- AWS hesabınızda CloudTrail konsolunu açın (muhtemelen yeni bir trail oluşturmanız gerekecek).
- Son SNS etkinliğini görmek için "Event history"e gidin.
- "Event source"u seçip "sns.amazonaws.com" yazarak olayları filtreleyin.
Yine, metin talimatları yeterli değilse aşağıdaki görsellere bakın. Yeni bir trail oluşturarak başlayın:

Görsel 32 - Yeni bir trail oluşturma
Ardından "Event history" altında, yalnızca SNS'e ait olanları içerecek şekilde olayları filtreleyin:

Görsel 33 - Günlükleri filtreleme
Günlükler otomatik olarak bir S3 kovasında saklanır; bu da bu yaklaşımın günlükleriniz için kalıcı depolama sağladığı ve daha gelişmiş sorgulama yetenekleri sunduğu anlamına gelir.
> AWS'de depolama nasıl çalışır? S3 ve EFS rehberimizi okuyun.
Sonuç olarak, CloudWatch metriklerini CloudTrail günlükleriyle birleştirerek, SNS altyapınızın güvenilir şekilde çalışmasını sağlayan kapsamlı bir izleme sistemi oluşturursunuz.
AWS SNS Kullanımı için En İyi Uygulamalar
Artık AWS SNS'in temel ve gelişmiş özelliklerini biliyorsunuz. Geride, konu oluşturma ve mesaj gönderme için en iyi uygulamaları tartışmak kalıyor.
SNS konularını güvenceye alma
SNS altyapınızı kurarken güvenlik en öncelikli konunuz olmalıdır. Uygun kontroller olmadan konularınız yetkisiz erişime açık olabilir; bu da büyük bir güvenlik riskidir.
AWS Identity and Access Management (IAM), SNS konularınızı güvenceye almak için ihtiyaç duyduğunuz araçları sunar. En az ayrıcalık ilkesini takip eden ilkeler oluşturarak başlayın — her kullanıcı veya hizmet için yalnızca gereken belirli izinleri verin. Örneğin, bazı uygulamaların yalnızca mesaj yayımlamasını, bazılarının ise yalnızca konulara abone olmasını isteyebilirsiniz.
Belirli bir konuya yayımlamayı kısıtlayan örnek bir IAM ilkesi şöyledir:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "sns-arn"
}
]
}
Ayrıca, hangi AWS hesaplarının konularınıza abone olabileceğini kontrol etmek için konu ilkelerini kullanabilirsiniz. Bu, organizasyon sınırları arasında veri paylaşıyorsanız özellikle önemlidir.
İzinleri düzenli olarak AWS CloudTrail kullanarak denetlemeyi ve artık gerekli olmayan erişimleri kaldırmayı unutmayın.
Mesaj hacmini yönetme
Yüksek mesaj hacimleri, uygun şekilde ele alınmazsa aboneleri bunaltabilir. Bu noktada SNS'i diğer AWS hizmetleriyle birleştirmek kritik önem taşır.
Popüler bir desen, birden çok SQS kuyruğunun abone olduğu bir SNS konusuna mesaj yayımladığınız "fanout" mimarisidir. Her kuyruk daha sonra farklı işleme sistemlerine kendi hızında veri sağlayabilir. Bu, yayıncılarınızı tüketicilerinizden ayrıştırır ve trafik dalgalanmaları sırasında bir tampon sağlar.
Gerçek zamanlı işleme ihtiyaçları için, konularınıza Lambda işlevleri abone etmeyi düşünün. Lambda, mesaj hacminize göre otomatik olarak ölçeklenir; böylece sunucuları sağlamak ve yönetmek zorunda kalmazsınız.
Maliyetleri azaltma
SNS maliyet etkin olsa da, mesaj hacminiz büyüdükçe masraflar hızla birikebilir. Birkaç stratejik tercih, maliyetlerinizi kontrol altında tutmanıza yardımcı olabilir.
Öncelikle abonelik protokolleriniz konusunda seçici olun. HTTP/HTTPS uç noktaları genellikle en maliyet etkin seçenektir. E-posta bildirimleri kullanışlı olsa da, mesaj başına daha yüksek maliyetlere yol açtığı için ölçülü kullanılmalıdır.
Mesaj filtreleme, bir diğer güçlü maliyet azaltma aracıdır. Aboneliklerinizde filtre ilkeleri uygulayarak, mesajların yalnızca ilgili abonelere teslim edilmesini sağlarsınız. Örneğin, tüm sistem uyarıları için bir konunuz varsa, nöbetteki mühendislerinizin vardiyaları sırasında yalnızca kritik uyarıları almasını, tüm bildirimleri değil, isteyebilirsiniz:
# Subscribe with a filter policy
response = sns.subscribe(
TopicArn="sns-arn",
Protocol="email",
Endpoint="[email protected]",
Attributes={"FilterPolicy": '{"severity": ["critical"]}'},
)
Son olarak, AWS Cost Explorer'da SNS kullanımınızı düzenli olarak gözden geçirin ve konuları birleştirme veya kullanılmayan abonelikleri kaldırma fırsatlarını arayın. Kullanılmayan veya yinelenen kaynaklar yalnızca gereksiz maliyetler eklemekle kalmaz, mimarinizi de karmaşıklaştırır.
Bu en iyi uygulamaları izleyerek, güvenli, ölçeklenebilir ve maliyet etkin bir SNS uygulaması oluşturursunuz — beklenmedik masraflar veya güvenlik endişeleri olmadan güvenilir bir bildirim hizmeti için ihtiyacınız olan her şey.
AWS SNS'i Özetlemek
Dağıtık uygulamalar genelinde gerçek zamanlı bildirimlere ihtiyacınız varsa, AWS SNS'ten başkasına bakmayın. Kullanımı kolaydır, diğer AWS hizmetleriyle iyi entegre olur ve ihtiyaçlarınıza uyacak şekilde sınırsızca ölçeklenir.
SNS'teki yayınla-abone ol modeli, aynı anda birden çok kanala ulaşabilen bildirim sistemlerini uygulamayı kolaylaştırır. Konu oluşturmaktan aboneleri yönetmeye, mesaj filtreleme ve dead letter kuyrukları gibi gelişmiş özellikleri uygulamaya kadar, artık sağlam bir bildirim altyapısı kurmak için gerekli bilgiye sahipsiniz.
Ayrıca, SNS uygulamanızın üretim ortamlarında güvenilir ve verimli kalmasını sağlayan izleme, güvenlik ve maliyet yönetiminin kritik yönlerini de öğrendiniz.
Uygulamalar olay güdümlü mimarileri benimsedikçe, SNS gibi hizmetler giderek daha değerli hâle geliyor. İster basit bir uyarı sistemi, ister karmaşık mikro hizmetler inşa ediyor olun; bu eğitimdeki desenler, sistem bileşenleriniz arasında etkili iletişim için bir temel sağlar.
AWS hakkında daha fazla bilgi edinmek için DataCamp'in şu kurslarını takip edin:
Hatta AWS sertifikasyon sınavlarına hazırlanmak için de DataCamp'i kullanabilirsiniz - AWS Cloud Practitioner (CLF-C02).
FAQs
AWS SNS nedir ve SQS'den nasıl farklıdır?
AWS SNS (Simple Notification Service), yayıncılardan birden çok aboneye bildirim göndermenizi sağlayan, tamamen yönetilen bir mesajlaşma hizmetidir. Kuyruk tabanlı bir model izleyen ve her mesajın tek bir tüketici tarafından işlendiği SQS (Simple Queue Service)'den farklı olarak, SNS tek bir mesajı eşzamanlı olarak birçok alıcıya yayınlayan bir yayınla-abone ol modeli kullanır. Bu temel fark, SNS'i olay bildirimleri için ideal, SQS'i ise görev işlemeye daha uygun kılar.
Hangi tür uç noktalar SNS konularına abone olabilir?
AWS SNS; e-posta adresleri, SMS telefon numaraları, SQS kuyrukları, Lambda işlevleri, HTTP/HTTPS uç noktaları ve mobil anlık bildirimler dahil çok çeşitli abone uç noktalarını destekler. Bu çeşitlilik, bildirimlerinizin nasıl teslim edileceği ve işleneceği konusunda size esneklik sağlar; aynı yayımlanan mesajla hem insan alıcılara (e-posta veya SMS yoluyla) hem de diğer sistemlere (Lambda, SQS veya HTTP uç noktaları aracılığıyla) ulaşmanıza olanak tanır.
SNS konularımı nasıl güvenceye alırım?
SNS konularını güvenceye almak, en az ayrıcalık ilkesini izleyen IAM ilkeleri aracılığıyla uygun erişim kontrollerinin uygulanmasını içerir. Kimlerin konulara yayımlama yapabileceğini ve abonelikleri yönetebileceğini kısıtlayabilir, ayrıca hangi AWS hesaplarının abone olabileceğini kontrol etmek için konu ilkelerini kullanabilirsiniz. Hassas veriler için AWS SNS, iletim sırasında mesaj içeriğini korumak üzere sunucu tarafı şifrelemeyi destekler. CloudTrail günlükleriyle düzenli güvenlik denetimleri, yetkisiz erişim girişimlerini veya SNS uygulamanızdaki potansiyel güvenlik açıklarını belirlemeye yardımcı olur.
SNS'de mesaj filtrelemeyi nasıl uygularım?
SNS'de mesaj filtreleme, abonelerin yalnızca kendileri için önemli olan bildirimleri almasını sağlar. Bu, abonelerin mesaj özniteliklerine dayalı olarak tanımladıkları filtre ilkeleri aracılığıyla gerçekleştirilir. Belirli özniteliklerle (ör. sipariş değeri, bölge veya öncelik düzeyi) mesajlar yayımladığınızda, SNS bu öznitelikleri her abonenin filtre ilkesiyle karşılaştırır ve yalnızca eşleşme varsa mesajı teslim eder. Filtreleme uygulamanızın içinde değil, AWS tarafında gerçekleştiğinden verimliliği artırır ve gereksiz mesaj trafiğini azaltır.
DLQ'lar (dead letter kuyrukları) SNS ile nasıl çalışır?
Dead Letter Queues (DLQ), SNS'te mesaj teslim hataları için bir güvenlik ağı görevi görür. Bir mesaj bir aboneye teslim edilemediğinde (genellikle abonenin kullanılamaz olması veya bir hata döndürmesi nedeniyle), SNS mesajı tamamen kaybetmek yerine belirlenmiş bir SQS kuyruğuna yönlendirebilir. Bu DLQ sistemi, başarısız teslimatları yakalamanıza, analiz etmenize ve potansiyel olarak yeniden denemenize olanak tanır. Mesaj kaybının önemli iş etkilerine yol açabileceği kritik bildirimler için özellikle değerlidir ve aksi hâlde fark edilmeyebilecek teslimat sorunlarına görünürlük sağlar.


Uygulamalarınız genelinde gerçek zamanlı bildirimleri yönetmek ciddi bir zorluk olabilir — en azından doğru mesajlaşma hizmeti olmadan.
Amazon Simple Notification Service (SNS), mikro hizmetleri, dağıtık sistemleri ve sunucusuz uygulamaları ayrıştırmak ve ölçeklemek için tamamen yönetilen bir mesajlaşma çözümü sunar. SNS, HTTP/S, e-posta, SMS ve mobil anlık bildirimler gibi birden çok taşıma protokolü aracılığıyla çok sayıda aboneye mesaj göndermenize olanak tanır. AWS SNS, güvenilir teslimat, yeniden denemeler ve geri çekilme (backoff) işlevselliği dahil olmak üzere mesaj teslimatının tüm ağır işlerini üstlenir ve sizin temel uygulama özelliklerinizi geliştirmeye odaklanmanızı sağlar.
AWS SNS, hem ölçeklemesi hem de anlaşılması kolay bir yayınla-abone ol modelini takip eder. Tek bir yayımlanan mesaj aynı anda birden fazla uç noktaya dağıtılabilir; bu da SNS'i olay güdümlü mimariler için ideal kılar.
Bu eğitimde, AWS SNS'i kurma ve çeşitli kanallar üzerinden bildirim göndermek için kullanma sürecinde size adım adım rehberlik edeceğim.
AWS SNS nedir?
Amazon Simple Notification Service (SNS), mikro hizmetleri, dağıtık sistemleri ve sunucusuz uygulamaları ayrıştırmanıza olanak tanıyan AWS'nin yönetilen yayınla/abone ol mesajlaşma hizmetidir.
SNS, yayıncıların mesajları konulara gönderdiği ve abonelerin bu mesajları aldığı basit bir yayınla-abone ol modeliyle çalışır. Bir SNS konusunu bir iletişim kanalı olarak düşünün — mesajları bu kanala yayımlarsınız ve abone olan herkes anında bilgilendirilir. Bu sistemin güzelliği, yayıncıların mesajlarını kimin aldığını, abonelerin ise mesajları kimin gönderdiğini bilmek zorunda olmamasıdır.
Bunun Simple Queue Service (SQS) gibi diğer AWS mesajlaşma hizmetlerinden nasıl farklılaştığını merak ediyor olabilirsiniz. Kısaca, SQS öncelikle görevleri eşzamansız olarak işlemek için tasarlanmış kuyruk tabanlı bir model kullanırken, SNS aynı anda birden çok alıcıya mesaj yaymaya odaklanır. Bu da, yeni gerçekleşen bir olay hakkında birçok sistemi bilgilendirmeniz gereken senaryolar için SNS'i mükemmel kılar. Farklarla ilgili daha fazlasını SQS vs SNS blog yazısında öğrenebilirsiniz.
SNS birden fazla teslimat protokolünü destekler; bu da abonelerinizin bildirimleri nasıl alacağı konusunda size esneklik sağlar.
AWS SNS'in temel özellikleri
SNS, ihtiyacınız olan tek bildirim hizmeti olmasını sağlayan özelliklerle gelir. Birkaçını sıralayacağım:
Ancak SNS'in en iyi yönü ölçeklenebilirlik olmalı. SNS, uygulamanızın ihtiyaçlarına göre otomatik olarak ölçeklenir. Günde on ya da on milyon bildirim göndermenizin bir önemi yok; hizmet buna göre uyum sağlar ve herhangi bir manuel müdahale gerektirmez.
Sırada, SNS'i nasıl kuracağınızı göstereceğim.