AWS SDK SNS Examples: Topics, Subscriptions, Publish आणि Filters (Python, PHP, Node.js)
SNS एक message एकाच वेळी अनेक listeners ना पाठवतो: email, SMS, SQS queues आणि Lambda. Topic बनवू, email आणि SQS queue subscribe करू, attributes सह publish करू, कोणाला काय मिळेल ते filter करू, आणि SMS पाठवू — Python, PHP आणि Node.js मधून. Example: Manchester मधली Emma आणि मुंबईचा Arjun यांच्यासाठी train delay alerts.
या chapter मध्ये तुम्ही काय शिकाल
- Topic बनवा
- Email व SQS subscribe
- Attributes सह publish
- Filter policies लावा
- थेट SMS पाठवा
1. मोठं चित्र: station announcement
हे का लागतं?
Train उशिरा आली की एक announcement प्रत्येक speaker, app आणि display board वर एकदम जाते. Announcer प्रत्येक प्रवाशाला फोन करत नाही. SNS topic म्हणजे announcement system; subscribers म्हणजे speakers.
हे काय आहे?
TopicArn ला एकदा Publish; SNS प्रत्येक confirmed subscription ला पोचवतो. Subscription वरची filter policy message attributes match करते म्हणजे प्रत्येकाला हवं तेच मिळतं.
कसं करायचं (step by step)
2. Topic बनवा
हे का लागतं?
Emma Manchester–Leeds line आणि Arjun मुंबई suburban trains चे operations बघतात; दोघांना एक alerts channel हवा.
हे काय आहे?
CreateTopic idempotent आहे: तेच नाव तोच TopicArn देतं.
कसं करायचं (step by step)
- Python (boto3).
import boto3, json
sns = boto3.client("sns", region_name="eu-west-2")
arn = sns.create_topic(Name="train-delays", Tags=[{"Key": "team", "Value": "ops"}])["TopicArn"]
print(arn)
अपेक्षित output:
arn:aws:sns:eu-west-2:123456789012:train-delays
- Node.js (v3).
import { SNSClient, CreateTopicCommand } from "@aws-sdk/client-sns";
const sns = new SNSClient({ region: "eu-west-2" });
const { TopicArn } = await sns.send(new CreateTopicCommand({ Name: "train-delays" }));
console.log(TopicArn);
अपेक्षित output:
arn:aws:sns:eu-west-2:123456789012:train-delays
- PHP (v3).
<?php
require "vendor/autoload.php";
$sns = new Aws\Sns\SnsClient(["region" => "eu-west-2"]);
$arn = $sns->createTopic(["Name" => "train-delays"])["TopicArn"];
echo $arn, PHP_EOL;
अपेक्षित output:
arn:aws:sns:eu-west-2:123456789012:train-delays
- Verify: topics list.
aws sns list-topics --region eu-west-2 --query "Topics[?contains(TopicArn,'train')].TopicArn" --output text
अपेक्षित output:
arn:aws:sns:eu-west-2:123456789012:train-delays
3. Email आणि queue subscribe
हे का लागतं?
Emma ला email हवा; मुंबई passenger app SQS queue मधून वाचतं.
हे काय आहे?
Email subscription link click होईपर्यंत PendingConfirmation. Queue policy sns.amazonaws.com ला परवानगी देत असेल तर SQS लगेच confirm.
कसं करायचं (step by step)
- Python: email subscribe.
r = sns.subscribe(TopicArn=arn, Protocol="email",
Endpoint="emma@rail.example.co.uk", ReturnSubscriptionArn=True)
print(r["SubscriptionArn"])
अपेक्षित output:
arn:aws:sns:eu-west-2:123456789012:train-delays:4a1b... (pending until Emma clicks Confirm)
- Node.js: raw delivery सह SQS queue.
import { SubscribeCommand } from "@aws-sdk/client-sns";
const r = await sns.send(new SubscribeCommand({
TopicArn, Protocol: "sqs",
Endpoint: "arn:aws:sqs:eu-west-2:123456789012:mumbai-app",
Attributes: { RawMessageDelivery: "true" }, ReturnSubscriptionArn: true,
}));
console.log(r.SubscriptionArn);
अपेक्षित output:
arn:aws:sns:eu-west-2:123456789012:train-delays:9c7d...
- PHP: topic ला queue मध्ये send ची परवानगी.
<?php
$sqs = new Aws\Sqs\SqsClient(["region" => "eu-west-2"]);
$policy = ["Version" => "2012-10-17", "Statement" => [[
"Effect" => "Allow", "Principal" => ["Service" => "sns.amazonaws.com"],
"Action" => "sqs:SendMessage", "Resource" => "arn:aws:sqs:eu-west-2:123456789012:mumbai-app",
"Condition" => ["ArnEquals" => ["aws:SourceArn" => $arn]]]]];
$sqs->setQueueAttributes(["QueueUrl" => $queueUrl, "Attributes" => ["Policy" => json_encode($policy)]]);
echo "policy set", PHP_EOL;
अपेक्षित output:
policy set
- Verify: topic च्या subscriptions.
aws sns list-subscriptions-by-topic --topic-arn $ARN --query "Subscriptions[].[Protocol,SubscriptionArn]" --output text
अपेक्षित output:
email PendingConfirmation
sqs arn:aws:sns:eu-west-2:123456789012:train-delays:9c7d...
4. Publish आणि filter
हे का लागतं?
मुंबई प्रवाशांना Manchester delays नकोत, आणि फक्त 10 मिनिटांपेक्षा जास्त delays Emma ला email व्हावेत.
हे काय आहे?
MessageAttributes सह publish; प्रत्येक subscription वर FilterPolicy. Numeric आणि string matching चालतं.
कसं करायचं (step by step)
- Python: email subscription वर filter.
sns.set_subscription_attributes(SubscriptionArn=email_sub,
AttributeName="FilterPolicy",
AttributeValue=json.dumps({"city": ["manchester"], "minutes": [{"numeric": [">", 10]}]}))
print("filter ok")
अपेक्षित output:
filter ok
- Node.js: मुंबई delay publish.
import { PublishCommand } from "@aws-sdk/client-sns";
const r = await sns.send(new PublishCommand({
TopicArn, Subject: "Delay",
Message: JSON.stringify({ train: "Virar fast 08:12", minutes: 15 }),
MessageAttributes: {
city: { DataType: "String", StringValue: "mumbai" },
minutes: { DataType: "Number", StringValue: "15" } },
}));
console.log(r.MessageId);
अपेक्षित output:
e2a1c0d4-5b6f-5a0e-9d7c-1f2e3d4c5b6a (queue gets it, Emma does not)
- PHP: Manchester delay publish.
<?php
$r = $sns->publish(["TopicArn" => $arn, "Subject" => "Delay: 07:45 to Leeds",
"Message" => "The 07:45 to Leeds is 22 minutes late. Refund up to £8.40.",
"MessageAttributes" => [
"city" => ["DataType" => "String", "StringValue" => "manchester"],
"minutes" => ["DataType" => "Number", "StringValue" => "22"]]]);
echo $r["MessageId"], PHP_EOL;
अपेक्षित output:
7b3f... (Emma gets the email)
- Verify: queue वरचा message वाचा.
aws sqs receive-message --queue-url $MUMBAI_URL --wait-time-seconds 10 --query "Messages[0].Body" --output text
अपेक्षित output:
{"train":"Virar fast 08:12","minutes":15}
5. SMS पाठवा
हे का लागतं?
फोनवर booking केलेल्या पुण्यातल्या एका प्रवाशाला text, topic नको.
हे काय आहे?
E.164 format मध्ये PhoneNumber सह publish. Accounts SMS sandbox मध्ये सुरू होतात, आधी number verify करा; alerts साठी SMSType Transactional.
कसं करायचं (step by step)
- Python.
r = sns.publish(PhoneNumber="+919800012345",
Message="Deccan Queen delayed 20 min. New dep 07:35.",
MessageAttributes={"AWS.SNS.SMS.SMSType": {"DataType": "String", "StringValue": "Transactional"}})
print(r["MessageId"])
अपेक्षित output:
0c9a2f1e-...
- Node.js.
const r = await sns.send(new PublishCommand({ PhoneNumber: "+447700900123", Message: "Your 07:45 to Leeds is now 08:07." }));
console.log(r.MessageId);
अपेक्षित output:
3d8e...
- PHP: sandbox number verify साठी जोडा.
<?php
$sns->createSMSSandboxPhoneNumber(["PhoneNumber" => "+919800012345", "LanguageCode" => "en-US"]);
echo "OTP sent", PHP_EOL;
अपेक्षित output:
OTP sent
- Verify: sandbox status.
aws sns get-sms-sandbox-account-status --region eu-west-2
अपेक्षित output:
{"IsInSandbox": true}
6. हाच call Java, Go, .NET आणि CLI मध्ये
हे का लागतं?
Teams अनेकदा भाषा मिसळतात. Python, PHP आणि Node.js मध्ये call समजला की बाकीचे SDKs म्हणजे तोच API, फक्त syntax वेगळा.
हे काय आहे?
सगळे Publish API call करतात. Terminal मधून पटकन test करायला CLI ओळ वापरा.
कसं करायचं (step by step)
| Stack | Code |
|---|---|
| AWS CLI | aws sns publish --topic-arn $ARN --message "07:45 late" --message-attributes '{"city":{"DataType":"String","StringValue":"manchester"}}' |
| Java v2 | sns.publish(b -> b.topicArn(arn).message("07:45 late")); |
| Go v2 | client.Publish(ctx, &sns.PublishInput{TopicArn: aws.String(arn), Message: aws.String("07:45 late")}) |
| .NET | await sns.PublishAsync(new PublishRequest { TopicArn = arn, Message = "07:45 late" }); |
7. काहीही खर्च चालू राहू नये म्हणून cleanup
हे का लागतं?
चालू ठेवलेले lab resources पैसे खातात आणि security risk बनतात.
हे काय आहे?
उलट्या क्रमाने delete करा: आधी children, मग parents.
कसं करायचं (step by step)
- Topic delete करा (subscriptions पण जातात).
aws sns delete-topic --topic-arn $ARN --region eu-west-2
अपेक्षित output:
(no output means success)
Ravindra Bagale's Tip
Filter consumer code मध्ये नको, subscription वर ठेवा; मग SNS नको ते पाठवत नाही आणि खर्च कमी.
8. मुलाखत प्रश्न आणि उत्तरं
प्र. SNS vs SQS?
Push to many vs pull by one.
प्र. Fan-out म्हणजे?
एक topic → अनेक queues.
प्र. Email subscription pending का?
Confirm link click करायची.
प्र. RawMessageDelivery काय करतं?
SNS envelope शिवाय फक्त body.
प्र. Filter policies कशावर match?
Message attributes (किंवा body).
घरी करून बघा
- प्रत्येक delay log करणारा Node.js Lambda subscriber जोडा.
- Manchester साठी दुसरी queue बनवून एका publish ने fan-out दाखवा.
थोडक्यात सांगायचं तर
- CreateTopic → TopicArn.
- Email/SQS/Lambda subscribe.
- Attributes सह publish.
- Subscriptions वर FilterPolicy.
- PhoneNumber ने SMS.
सराव Tasks
Latur Coaching Classes हा लातूर मधला कोचिंग व्यवसाय आहे. Pooja Jadhav त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 11
सोपं एका topic वर publish
का: Alerting app ला फक्त publish लागतं.
काय करायचं: फक्त arn:aws:sns:ap-south-1:123666135775:laturcoaching-alerts वर sns:Publish allow करा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
सोपं Message publish करा
का: एक publish email, SMS, SQS व Lambda subscribers ना एकदम पोचतो.
काय करायचं: arn:aws:sns:ap-south-1:123666135775:laturcoaching-alerts वर "Stock low in Latur" message "Stock alert" subject सह publish करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं SNS topic बनवा
का: Topic म्हणजे channel: एकदा publish, सगळ्या subscribers ना मिळतं.
काय करायचं: laturcoaching-alerts topic बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं Queue बनवा
का: Worker तयार होईपर्यंत queue काम सुरक्षित ठेवते.
काय करायचं: laturcoaching-orders queue बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम थेट SMS पाठवा
का: SNS topic शिवाय phone number वर SMS पाठवू शकतो.
काय करायचं: +919800000001 वर "Your OTP is 482913" SMS पाठवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Producer फक्त send करू शकतो
का: Web app ने jobs टाकावे पण वाचू/delete करू नये.
काय करायचं: फक्त arn:aws:sqs:ap-south-1:123666135775:laturcoaching-orders वर sqs:SendMessage allow करा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम Email subscribe करा
का: Email subscribers नी messages मिळण्याआधी confirm link दाबावी लागते.
काय करायचं: ops@laturcoaching.in ला email ने arn:aws:sns:ap-south-1:123666135775:laturcoaching-alerts वर subscribe करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Processed message delete करा
का: Delete न केल्यास visibility timeout नंतर message परत येतो.
काय करायचं: $RH मध्ये ठेवलेल्या receipt handle चा message https://sqs.ap-south-1.amazonaws.com/123666135775/laturcoaching-orders मधून delete करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Subscription filter policy द्या
का: Filter policy subscriber ला फक्त हवे ते messages पाठवते.
काय करायचं: Subscription arn:aws:sns:ap-south-1:123666135775:laturcoaching-alerts:4b1c-77 ची FilterPolicy {"type":["refund"]} करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Queue ला topic वर subscribe करा
का: Fan-out: एक SNS message अनेक SQS queues मध्ये copy होतो.
काय करायचं: Queue arn:aws:sqs:ap-south-1:123666135775:laturcoaching-billing ला arn:aws:sns:ap-south-1:123666135775:laturcoaching-alerts वर subscribe करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Dead-letter queue जोडा
का: काही failed tries नंतर वाईट messages DLQ मध्ये जातात.
काय करायचं: attrs.json मधले attributes (RedrivePolicy) https://sqs.ap-south-1.amazonaws.com/123666135775/laturcoaching-orders वर लावा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.




अजून cards: Ravi Sir's Cards.