Ravindra BagaleCourses & study guides English

AWS CLI SQS Commands: Messages Send, Receive आणि Delete करा

कामासाठी रांग: standard व FIFO queues, send, receive, delete, visibility timeout, dead-letter queues आणि purge.

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

  • Standard आणि FIFO queues
  • Messages send, receive
  • Process नंतर delete
  • Visibility timeout, long polling
  • Dead-letter queues, purge

1. मोठं चित्र: clinic मधली token system

हे का लागतं?

Clinic मध्ये token घेऊन थांबता. Doctor एक-एक token बोलावतो; doctor busy असला तरी कोणी हरवत नाही. Worker तयार होईपर्यंत SQS messages सांभाळतो.

हे काय आहे?

Commands aws sqs मध्ये: create-queue, send-message, receive-message, delete-message, set-queue-attributes, purge-queue.

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

Message चा प्रवासsend-messagequeue मध्ये थांबतोreceive-message लपवतोworker process करतोReceiptHandle ने delete-message
Delete नाही केलं तर visibility timeout नंतर परत येतो.

2. Queues बनवा

हे का लागतं?

Orders process पेक्षा जलद येतात. Buffer हवा.

हे काय आहे?

Standard queues जवळपास unlimited, कधी दोनदा किंवा क्रम बदलून. FIFO (.fifo) क्रम राखतो, duplicates काढतो.

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

  1. Standard queue.
Q=$(aws sqs create-queue --queue-name cli-q --query QueueUrl --output text)
echo $Q

अपेक्षित output:

https://sqs.ap-south-1.amazonaws.com/111122223333/cli-q
  1. FIFO queue.
F=$(aws sqs create-queue --queue-name cli-q.fifo --attributes FifoQueue=true,ContentBasedDeduplication=true --query QueueUrl --output text)
echo $F

अपेक्षित output:

https://sqs.ap-south-1.amazonaws.com/111122223333/cli-q.fifo

3. Send, receive आणि delete

हे का लागतं?

Worker ने job घ्यायचा, करायचा, done करायचा.

हे काय आहे?

receive-message body आणि ReceiptHandle देतो. त्याच handle ने delete-message केल्यावरच कायमचा जातो.

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

  1. Send.
aws sqs send-message --queue-url $Q --message-body "order 101" --query MessageId --output text

अपेक्षित output:

4c5d6e7f-8a9b-0c1d-2e3f-405060708090
  1. FIFO ला group सह.
aws sqs send-message --queue-url $F --message-body "order 101" --message-group-id shop1 --query SequenceNumber --output text

अपेक्षित output:

18887000000000000000
  1. Long polling ने receive.
aws sqs receive-message --queue-url $Q --wait-time-seconds 10 --max-number-of-messages 1 --query "Messages[0].[Body,ReceiptHandle]" --output text

अपेक्षित output:

order 101  AQEBzW8k...
  1. Delete.
RH=$(aws sqs receive-message --queue-url $Q --visibility-timeout 0 --query "Messages[0].ReceiptHandle" --output text)
aws sqs delete-message --queue-url $Q --receipt-handle "$RH"
aws sqs get-queue-attributes --queue-url $Q --attribute-names ApproximateNumberOfMessages --query Attributes --output text

अपेक्षित output:

0

4. Visibility timeout

हे का लागतं?

Worker मध्येच crash झाला तर job हरवू नये.

हे काय आहे?

Receive नंतर message VisibilityTimeout seconds लपतो. वेळेत delete नाही तर परत दिसतो.

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

  1. 60 seconds.
aws sqs set-queue-attributes --queue-url $Q --attributes VisibilityTimeout=60
aws sqs get-queue-attributes --queue-url $Q --attribute-names VisibilityTimeout --query Attributes.VisibilityTimeout --output text

अपेक्षित output:

60

5. Dead-letter queue आणि purge

हे का लागतं?

कायम fail होणारा message रांग अडवू नये.

हे काय आहे?

RedrivePolicy maxReceiveCount tries नंतर message DLQ ला हलवते. purge-queue queue रिकामी करते.

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

  1. DLQ बनवून जोडा.
D=$(aws sqs create-queue --queue-name cli-dlq --query QueueUrl --output text)
DA=$(aws sqs get-queue-attributes --queue-url $D --attribute-names QueueArn --query Attributes.QueueArn --output text)
cat > rp.json <<J
{"RedrivePolicy":"{\"deadLetterTargetArn\":\"$DA\",\"maxReceiveCount\":\"3\"}"}
J
aws sqs set-queue-attributes --queue-url $Q --attributes file://rp.json
aws sqs get-queue-attributes --queue-url $Q --attribute-names RedrivePolicy --query Attributes.RedrivePolicy --output text

अपेक्षित output:

{"deadLetterTargetArn":"arn:aws:sqs:ap-south-1:111122223333:cli-dlq","maxReceiveCount":"3"}
  1. Queue purge.
aws sqs purge-queue --queue-url $Q

अपेक्षित output:

(no output means success)
  1. DLQ messages परत.
aws sqs start-message-move-task --source-arn $DA --query TaskHandle --output text

अपेक्षित output:

eyJ0YXNr...

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

हे का लागतं?

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

हे काय आहे?

प्रत्येक CLI command म्हणजे एक API call. उदा. aws sqs send-message --queue-url $Q --message-body hi म्हणजे Send message API.

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

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

StackCode
Python (boto3)boto3.client("sqs").send_message(QueueUrl=q,MessageBody="hi")
Node.js (v3)await sqs.send(new SendMessageCommand({QueueUrl:q,MessageBody:"hi"}));
Java (v2)sqs.sendMessage(r -> r.queueUrl(q).messageBody("hi"));
Go (v2)c.SendMessage(ctx, &sqs.SendMessageInput{QueueUrl: aws.String(q), MessageBody: aws.String("hi")})
.NETawait sqs.SendMessageAsync(q,"hi");
PHP$sqs->sendMessage(["QueueUrl"=>$q,"MessageBody"=>"hi"]);

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

हे का लागतं?

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

हे काय आहे?

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

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

  1. Queues delete.
for u in $Q $F $D; do aws sqs delete-queue --queue-url $u; done

अपेक्षित output:

(no output means success)
  1. Verify (60 s पर्यंत).
aws sqs list-queues --queue-name-prefix cli --query QueueUrls

अपेक्षित output:

null

Ravindra Bagale's Tip

--wait-time-seconds 20 (long polling) वापरा. Short polling बऱ्याचदा रिकामं देतं आणि प्रत्येक call चे पैसे.

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

प्र. Standard vs FIFO?

Standard जलद, कधी duplicate; FIFO क्रम, एकदाच.

प्र. Visibility timeout?

Receive नंतर लपण्याचा वेळ.

प्र. ReceiptHandle?

Delete साठी लागणारा token.

प्र. DLQ का?

सतत fail होणारे बाजूला.

प्र. Long vs short polling?

Long 20 s थांबतो; कमी cost.

घरी करून बघा

  1. 5 messages पाठवा, delete न करता receive, timeout नंतर परत येतात ते बघा.
  2. maxReceiveCount 2 लावून message DLQ मध्ये जाताना बघा.

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

  1. create-queue.
  2. Receive मग delete.
  3. VisibilityTimeout.
  4. RedrivePolicy ने DLQ.
  5. Long polling.

सराव Tasks

या scenario बद्दल

Hyderabad Biryani Hub हा हैदराबाद मधला क्लाउड किचन व्यवसाय आहे. Syed Imran त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-2 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 12

सोपं Queue बनवा

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

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

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

सोपं Message पाठवा

का: Producer job queue मध्ये टाकतो व पुढे जातो.

काय करायचं: https://sqs.ap-south-2.amazonaws.com/130300927383/hydbiryani-orders वर body {"orderId":"o-101"} पाठवा.

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

सोपं Queue URL शोधा

का: बहुतेक SQS commands ना URL लागतो, नाव नाही.

काय करायचं: hydbiryani-orders queue चा URL मिळवा.

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

सोपं एक function invoke

का: Caller ने फक्त लागणारा function invoke करावा.

काय करायचं: फक्त arn:aws:lambda:ap-south-2:130300927383:function:hydbiryani-orders-fn वर lambda:InvokeFunction allow करा.

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

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

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

काय करायचं: फक्त arn:aws:sqs:ap-south-2:130300927383:hydbiryani-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 दाबा.

मध्यम Processed message delete करा

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

काय करायचं: $RH मध्ये ठेवलेल्या receipt handle चा message https://sqs.ap-south-2.amazonaws.com/130300927383/hydbiryani-orders मधून delete करा.

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

मध्यम Long polling ने messages घ्या

का: Long polling messages ची वाट पाहतो, empty calls कमी.

काय करायचं: https://sqs.ap-south-2.amazonaws.com/130300927383/hydbiryani-orders मधून 20 seconds पर्यंत थांबून कमाल 10 messages घ्या.

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

मध्यम Test queue रिकामी करा

का: Purge सगळे messages एकदम काढतो, फक्त test queues साठी.

काय करायचं: https://sqs.ap-south-2.amazonaws.com/130300927383/hydbiryani-test queue purge करा.

कसं करायचं:
  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.ap-south-2.amazonaws.com/130300927383/hydbiryani-orders वर लावा.

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

अवघड FIFO queue बनवा

का: FIFO queues order राखतात व duplicates काढतात, उदा. payments.

काय करायचं: FifoQueue=true सह hydbiryani-payments.fifo FIFO queue बनवा.

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

अवघड SQS queue Lambda ला जोडा

का: Event source mapping मुळे Lambda queue poll करून batches मध्ये messages process करतो.

काय करायचं: Queue arn:aws:sqs:ap-south-2:130300927383:hydbiryani-orders पासून hydbiryani-orders-fn ला batch size 10 सह event source mapping बनवा.

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

अवघड Lambda GB-seconds

का: Lambda memory × time bill करतो.

काय करायचं: 1,000,000 invocations, 512 MB, प्रत्येकी 200 ms. किती GB-seconds?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

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

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

SQS message cycle. Clinic token रांगेसारखं. send, receive, मग ReceiptHandle ने delete. Delete नाही तर timeout नंतर परत. Long polling ने पैसे वाचवा.
उजळणी card: SQS message cycle · PNG download करा · Card page उघडा
SQS dead-letter queue. खराब message रांग अडवू नये. maxReceiveCount सह RedrivePolicy. start-message-move-task ने परत. purge-queue रिकामं, queue राहतो.
उजळणी card: SQS dead-letter queue · PNG download करा · Card page उघडा
Standard queue vs FIFO queue. Best-effort. / Group नुसार strict.
तुलना: Standard queue vs FIFO queue · PNG download करा · Card page उघडा
Visibility timeout काय?. Receive नंतर message लपण्याचा वेळ. Processing वेळेपेक्षा जास्त ठेवा. वेळेत delete नाही तर परत deliver.
मुलाखत card: Visibility timeout काय? · PNG download करा · Card page उघडा

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