Ravindra BagaleCourses & study guides English

AWS CLI SNS Commands: Topic बनवा, Subscribe आणि Publish

एक message अनेकांना: topic बनवा, email आणि SQS subscribe करा, publish, filter आणि cleanup.

या chapter मध्ये तुम्ही काय शिकाल

  • Topic बनवा
  • Email आणि SQS subscribe
  • Messages publish
  • Filter policies
  • SMS आणि cleanup

1. मोठं चित्र: WhatsApp group

हे का लागतं?

Society WhatsApp group मध्ये एकदा post केलं की सगळ्यांना मिळतं. SNS तोच group: topic ला एकदा publish, प्रत्येक subscriber ला copy.

हे काय आहे?

Commands aws sns मध्ये: create-topic, subscribe, publish, set-subscription-attributes, delete-topic.

कसं करायचं (step by step)

Pub/sub workflowcreate-topicemail / sqs / lambda subscribeemail confirm कराpublishप्रत्येक subscriber ला copy
Email confirm होईपर्यंत pending.

2. Topic बनवा

हे का लागतं?

अनेक systems ना तीच बातमी हवी: "order placed".

हे काय आहे?

Topic म्हणजे ARN असलेला channel. Standard जलद; FIFO order राखतो.

कसं करायचं (step by step)

  1. बनवा.
T=$(aws sns create-topic --name cli-alerts --query TopicArn --output text)
echo $T

अपेक्षित output:

arn:aws:sns:ap-south-1:111122223333:cli-alerts
  1. Topics list.
aws sns list-topics --query "Topics[].TopicArn" --output text

अपेक्षित output:

arn:aws:sns:ap-south-1:111122223333:cli-alerts

3. Subscribe

हे का लागतं?

लोकांना email, programs ना queue.

हे काय आहे?

subscribe protocol (email, sqs, lambda, https, sms) आणि endpoint घेतो. Email ला confirm click.

कसं करायचं (step by step)

  1. Email subscribe.
aws sns subscribe --topic-arn $T --protocol email --notification-endpoint you@example.com

अपेक्षित output:

{"SubscriptionArn": "pending confirmation"}
  1. SQS queue subscribe.
Q=arn:aws:sqs:ap-south-1:111122223333:cli-q
aws sns subscribe --topic-arn $T --protocol sqs --notification-endpoint $Q --attributes RawMessageDelivery=true --query SubscriptionArn --output text

अपेक्षित output:

arn:aws:sns:ap-south-1:111122223333:cli-alerts:5e6f...
  1. Subscriptions list.
aws sns list-subscriptions-by-topic --topic-arn $T --query "Subscriptions[].[Protocol,SubscriptionArn]" --output text

अपेक्षित output:

email  PendingConfirmation
sqs    arn:aws:sns:...:5e6f...

4. Publish

हे का लागतं?

App ने event एकदा सांगायचा, कोण ऐकतंय माहीत नसताना.

हे काय आहे?

publish message, subject आणि attributes सह पाठवतो. MessageId परत.

कसं करायचं (step by step)

  1. Message publish.
aws sns publish --topic-arn $T --subject "Order" --message "Order 101 placed" --message-attributes '{"type":{"DataType":"String","StringValue":"order"}}' --query MessageId --output text

अपेक्षित output:

b7c8d9e0-1234-5678-9abc-def012345678
  1. एक SMS.
aws sns publish --phone-number +919800000000 --message "OTP 4321" --query MessageId --output text

अपेक्षित output:

f1e2d3c4-...

5. Filter policies

हे का लागतं?

Billing queue ला फक्त payment events हवेत.

हे काय आहे?

Subscription वरची FilterPolicy matching attributes चेच messages सोडते.

कसं करायचं (step by step)

  1. Filter लावा.
S=$(aws sns list-subscriptions-by-topic --topic-arn $T --query "Subscriptions[?Protocol=='sqs'].SubscriptionArn" --output text)
aws sns set-subscription-attributes --subscription-arn $S --attribute-name FilterPolicy --attribute-value '{"type":["payment"]}'

अपेक्षित output:

(no output means success)
  1. Verify.
aws sns get-subscription-attributes --subscription-arn $S --query Attributes.FilterPolicy --output text

अपेक्षित output:

{"type":["payment"]}

6. हीच action Python, Node.js, Java, Go, .NET आणि PHP मध्ये

हे का लागतं?

Scripts CLI मध्ये सुरू होतात. Apps तोच API SDK मधून call करतात. दोन्ही माहीत असले की test केलेली command थेट code मध्ये नेता येते.

हे काय आहे?

प्रत्येक CLI command म्हणजे एक API call. उदा. aws sns publish --topic-arn $T --message "hi" म्हणजे Publish API.

कसं करायचं (step by step)

हीच action (Publish) code मधून. प्रत्येक SDK CLI सारखेच profile, region आणि credentials वाचतो.

StackCode
Python (boto3)boto3.client("sns").publish(TopicArn=T,Message="hi")
Node.js (v3)await sns.send(new PublishCommand({TopicArn:T,Message:"hi"}));
Java (v2)sns.publish(r -> r.topicArn(t).message("hi"));
Go (v2)c.Publish(ctx, &sns.PublishInput{TopicArn: aws.String(t), Message: aws.String("hi")})
.NETawait sns.PublishAsync(new PublishRequest{TopicArn=t,Message="hi"});
PHP$sns->publish(["TopicArn"=>$t,"Message"=>"hi"]);

7. काहीही खर्च चालू राहू नये म्हणून cleanup

हे का लागतं?

चालू ठेवलेले lab resources पैसे खातात आणि security risk बनतात.

हे काय आहे?

उलट्या क्रमाने delete करा: आधी children, मग parents.

कसं करायचं (step by step)

  1. Topic delete (subscriptions सोबत).
aws sns delete-topic --topic-arn $T

अपेक्षित output:

(no output means success)
  1. Verify.
aws sns list-topics --query "Topics[?contains(TopicArn,'cli-alerts')]"

अपेक्षित output:

[]

Ravindra Bagale's Tip

SNS → SQS साठी queue policy ने sns.amazonaws.com ला topic source सह SendMessage allow करायला हवं, नाहीतर messages शांतपणे येत नाहीत.

8. मुलाखत प्रश्न आणि उत्तरं

प्र. SNS vs SQS?

SNS अनेकांना push; SQS pull होईपर्यंत ठेवतो.

प्र. Fan-out काय?

एक topic अनेक queues.

प्र. Pending confirmation का?

Spam टाळायला confirm.

प्र. Filter policy काय करते?

न जुळणारे messages सोडत नाही.

प्र. RawMessageDelivery काय?

फक्त body, SNS wrapper शिवाय.

घरी करून बघा

  1. एक topic दोन queues ला, एकदा publish.
  2. एका queue ला फक्त type=payment.

थोडक्यात सांगायचं तर

  1. create-topic.
  2. subscribe protocol + endpoint.
  3. Email confirm.
  4. एकदा publish.
  5. FilterPolicy.

सराव Tasks

या scenario बद्दल

Stockholm Games हा स्टॉकहोम मधला गेमिंग व्यवसाय आहे. Erik Lindqvist त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे SEK मध्ये मोजले जातात आणि AWS resources eu-north-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 11

सोपं एका topic वर publish

का: Alerting app ला फक्त publish लागतं.

काय करायचं: फक्त arn:aws:sns:eu-north-1:124495484726:sthlmgames-alerts वर sns:Publish allow करा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

सोपं Message publish करा

का: एक publish email, SMS, SQS व Lambda subscribers ना एकदम पोचतो.

काय करायचं: arn:aws:sns:eu-north-1:124495484726:sthlmgames-alerts वर "Stock low in Stockholm" message "Stock alert" subject सह publish करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं SNS topic बनवा

का: Topic म्हणजे channel: एकदा publish, सगळ्या subscribers ना मिळतं.

काय करायचं: sthlmgames-alerts topic बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं Queue बनवा

का: Worker तयार होईपर्यंत queue काम सुरक्षित ठेवते.

काय करायचं: sthlmgames-orders queue बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम थेट SMS पाठवा

का: SNS topic शिवाय phone number वर SMS पाठवू शकतो.

काय करायचं: +919800000001 वर "Your OTP is 482913" SMS पाठवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Producer फक्त send करू शकतो

का: Web app ने jobs टाकावे पण वाचू/delete करू नये.

काय करायचं: फक्त arn:aws:sqs:eu-north-1:124495484726:sthlmgames-orders वर sqs:SendMessage allow करा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

मध्यम Email subscribe करा

का: Email subscribers नी messages मिळण्याआधी confirm link दाबावी लागते.

काय करायचं: ops@sthlmgames.se ला email ने arn:aws:sns:eu-north-1:124495484726:sthlmgames-alerts वर subscribe करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Processed message delete करा

का: Delete न केल्यास visibility timeout नंतर message परत येतो.

काय करायचं: $RH मध्ये ठेवलेल्या receipt handle चा message https://sqs.eu-north-1.amazonaws.com/124495484726/sthlmgames-orders मधून delete करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Subscription filter policy द्या

का: Filter policy subscriber ला फक्त हवे ते messages पाठवते.

काय करायचं: Subscription arn:aws:sns:eu-north-1:124495484726:sthlmgames-alerts:4b1c-77 ची FilterPolicy {"type":["refund"]} करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Queue ला topic वर subscribe करा

का: Fan-out: एक SNS message अनेक SQS queues मध्ये copy होतो.

काय करायचं: Queue arn:aws:sqs:eu-north-1:124495484726:sthlmgames-billing ला arn:aws:sns:eu-north-1:124495484726:sthlmgames-alerts वर subscribe करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Dead-letter queue जोडा

का: काही failed tries नंतर वाईट messages DLQ मध्ये जातात.

काय करायचं: attrs.json मधले attributes (RedrivePolicy) https://sqs.eu-north-1.amazonaws.com/124495484726/sthlmgames-orders वर लावा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

SNS publish. एकदा post, group मधल्या सगळ्यांना. create-topic, मग endpoints subscribe. Click पर्यंत email pending. publish MessageId देतो.
उजळणी card: SNS publish · PNG download करा · Card page उघडा
SNS filter policy. Billing ला फक्त payment events. Message attributes सह publish. Subscription वर FilterPolicy. न जुळणारे skip.
उजळणी card: SNS filter policy · PNG download करा · Card page उघडा
SNS vs SQS. अनेकांना push. / एक consumer pull.
तुलना: SNS vs SQS · PNG download करा · Card page उघडा
SNS → SQS येत नाही?. Queue policy ने sns.amazonaws.com allow. Condition aws:SourceArn = topic ARN. FilterPolicy drop करत नाही ना ते बघा.
मुलाखत card: SNS → SQS येत नाही? · PNG download करा · Card page उघडा

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