CloudWatch के साथ SNS और SQS इंटीग्रेशन

Monitoring और Troubleshooting AWS

John Q. Martin

Principal Consultant

CloudWatch अलार्म्स को SNS से जोड़ना

aws cloudwatch put-metric-alarm \
  --alarm-name HighCPUUtilization \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --statistic Average \
  --period 300 \
  --evaluation-periods 2 \
  --threshold 80 \
  --comparison-operator GreaterThanThreshold \
  --alarm-actions arn:aws:sns:us-east-1:123456789012:production-alerts \
  --ok-actions arn:aws:sns:us-east-1:123456789012:recovery-notifications

 

फ़्लो: CloudWatch Alarm, --alarm-actions के ज़रिए एक SNS टॉपिक को भेजता है, जो Email, SMS, Lambda, और SQS सब्सक्राइबर्स तक फैलता है

Monitoring और Troubleshooting AWS

SNS की मुख्य अवधारणाएँ

घटक

  • SNS एक publisher/subscriber मॉडल: टॉपिक्स, पब्लिशर्स, सब्सक्राइबर्स
  • टॉपिक: नामित चैनल; पब्लिशर भेजते हैं, सब्सक्राइबर पाते हैं
  • एक बार पब्लिश करें, सभी सब्सक्राइबर्स को साथ ही डिलिवर

सब्सक्राइबर प्रोटोकॉल (एक टॉपिक, कई एंडपॉइंट):

  • Email, SMS
  • HTTP / HTTPS
  • Lambda, SQS
  • मोबाइल पुश, Kinesis Firehose
Monitoring और Troubleshooting AWS

SNS टॉपिक टाइप्स

 

SNS Standard और FIFO टॉपिक टाइप्स का क्रम, थ्रूपुट और डिलिवरी गारंटी के आधार पर तुलना

Monitoring और Troubleshooting AWS

SNS टॉपिक्स बनाना: AWS CLI

Standard टॉपिक

aws sns create-topic \
  --name production-alerts

FIFO टॉपिक

aws sns create-topic \
  --name production-alerts.fifo \
  --attributes FifoTopic=true,\
    ContentBasedDeduplication=true

एन्क्रिप्शन के साथ

aws sns create-topic \
  --name production-alerts \
  --attributes KmsMasterKeyId=alias/aws/sns
Monitoring और Troubleshooting AWS

Lambda और SMS सब्सक्राइबर्स जोड़ना

 

Lambda

aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:123456789012:production-alerts \
  --protocol lambda \
  --notification-endpoint arn:aws:lambda:us-east-1:123456789012:function:ProcessAlert

SMS

aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:123456789012:critical-alerts \
  --protocol sms \
  --notification-endpoint +1234567890
Monitoring और Troubleshooting AWS

CloudWatch अलार्म्स से SNS संदेश फ़ॉर्मेट

{
  "AlarmName": "HighCPUUtilization",
  "NewStateValue": "ALARM",
  "OldStateValue": "OK",
  "NewStateReason": "Threshold Crossed: 2 datapoints [85.0, 90.0] were greater than the threshold (80.0).",
  "StateChangeTime": "2026-03-27T10:30:45.123+0000",
  "Trigger": {
    "MetricName": "CPUUtilization",
    "Namespace": "AWS/EC2",
    "Statistic": "AVERAGE",
    "Period": 300,
    "Threshold": 80.0,
    "ComparisonOperator": "GreaterThanThreshold"
  }
}
Monitoring और Troubleshooting AWS

SNS मैसेज फ़िल्टरिंग

aws sns set-subscription-attributes \
  --subscription-arn arn:aws:sns:...:production-alerts:abc123 \
  --attribute-name FilterPolicy \
  --attribute-value '{"AlarmName":["HighCPUUtilization"],"NewStateValue":["ALARM"]}'

aws sns set-subscription-attributes \
  --subscription-arn arn:aws:sns:...:production-alerts:abc123 \
  --attribute-name FilterPolicyScope \
  --attribute-value MessageBody
Monitoring और Troubleshooting AWS

Lambda से कस्टम नोटिफिकेशन फ़ॉर्मैटिंग

def lambda_handler(event, context):
    alarm = json.loads(event['Records'][0]['Sns']['Message'])

    message = f"""
ALERT: {alarm['AlarmName']}
Status: {alarm['NewStateValue']}
Reason: {alarm['NewStateReason']}
Resource: {alarm['Trigger']['Dimensions'][0]['value']}
Runbook: https://wiki.example.com/runbooks/high-cpu
    """

    sns.publish(
        TopicArn='arn:aws:sns:...:formatted-alerts',
        Subject=f"{alarm['AlarmName']}",
        Message=message
    )

 

चेन: कच्चा अलार्म टॉपिक एक Lambda को देता है, जो पढ़ने योग्य संदेश फ़ॉर्मैट कर formatted-alerts टॉपिक पर पब्लिश करता है; मशीन कंज़्यूमर्स कच्चे टॉपिक पर बने रहते हैं

Monitoring और Troubleshooting AWS

SQS के साथ फैन-आउट आर्किटेक्चर

फैन-आउट आर्किटेक्चर जहाँ एक SNS संदेश कई SQS क्यूज़ और एक Lambda कंज़्यूमर तक पहुँचता है

Monitoring और Troubleshooting AWS

फैन-आउट सेटअप करना

चार स्टेप

  1. SQS क्यू बनाएँ (हर कंज़्यूमर के लिए एक)
  2. क्यू पॉलिसीज़ सेट करें (SNS को संदेश भेजने दें)
  3. क्यूज़ को SNS टॉपिक से सब्सक्राइब करें
  4. कंज़्यूमर्स बनाएँ (poll, process, delete)

क्यू पॉलिसी

{
  "Effect": "Allow",
  "Principal": { "Service": "sns.amazonaws.com" },
  "Action": "sqs:SendMessage",
  "Resource": "arn:aws:sqs:...:alarm-logging-queue",
  "Condition": {
    "ArnEquals": {
      "aws:SourceArn": "arn:aws:sns:...:production-alerts"
    }
  }
}
Monitoring और Troubleshooting AWS

क्यूज़ को सब्सक्राइब करना

 

हर क्यू को सब्सक्राइब करें

aws sns subscribe \
  --topic-arn arn:aws:sns:...:production-alerts \
  --protocol sqs \
  --notification-endpoint arn:aws:sqs:...:alarm-logging-queue
Monitoring और Troubleshooting AWS

संदेश प्रोसेस करना

कंज़्यूमर पैटर्न

response = sqs.receive_message(
    QueueUrl=queue_url,
    MaxNumberOfMessages=10,
    WaitTimeSeconds=20       # Long polling
)
for message in response.get('Messages', []):
    sns_msg = json.loads(message['Body'])
    alarm = json.loads(sns_msg['Message'])
    # Process alarm data
    sqs.delete_message(QueueUrl=queue_url,
                       ReceiptHandle=message['ReceiptHandle'])
Monitoring और Troubleshooting AWS

फ़िल्टरिंग और डेड लेटर क्यूज़ के साथ फैन-आउट

हर सब्सक्रिप्शन पर लक्षित डिलिवरी

  • टिकटिंग क्यू: {"NewStateValue":["ALARM"],"Severity":["Critical"]}
  • लॉगिंग क्यू: कोई फ़िल्टर नहीं (सब कुछ पाए)
  • मेट्रिक्स क्यू: {"MessageType":["Metric"]}

 

डेड लेटर क्यूज़ (DLQ)

aws sqs set-queue-attributes \
  --queue-url https://sqs..../alarm-logging-queue \
  --attributes '{
    "RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:...:alarm-logging-dlq\",\"maxReceiveCount\":\"3\"}"
  }'
Monitoring और Troubleshooting AWS

SNS बनाम SQS: कब किसे चुनें

SNS पुश-आधारित डिलिवरी बनाम SQS पुल-आधारित मैसेज क्यूइंग की तुलना

Monitoring और Troubleshooting AWS

आर्किटेक्चर उदाहरण

 

सिंपल अलर्ट पैटर्न जो SNS नोटिफिकेशन ईमेल को भेजता है

 

असिंक्रोनस प्रोसेसिंग पैटर्न जहाँ एक API SQS क्यू को भेजता है और वर्कर consume करता है

मल्टी-चैनल अलर्टिंग पैटर्न जहाँ एक अलार्म कई नोटिफिकेशन चैनलों तक फैलता है

इवेंट पाइपलाइन पैटर्न जो स्रोत इवेंट को प्रोसेसिंग हेतु कई SQS क्यूज़ तक रूट करता है

Monitoring और Troubleshooting AWS

वीडियो सारांश

 

  • SNS टॉपिक्स ईमेल, SMS, HTTP, Lambda, और SQS के जरिए अलार्म नोटिफिकेशन डिलिवर करते हैं
  • फैन-आउट पैटर्न: एक SNS संदेश → कई SQS क्यूज़, समानांतर और विश्वसनीय प्रोसेसिंग के लिए
  • मैसेज फ़िल्टरिंग प्रति सब्सक्राइबर शोर घटाती है
  • डेड लेटर क्यूज़ असफल संदेश पकड़ती हैं
  • पुश नोटिफिकेशन के लिए SNS, विश्वसनीय प्रोसेसिंग के लिए SQS; विश्वसनीय फैन-आउट हेतु दोनों साथ
Monitoring और Troubleshooting AWS

अभ्यास करते हैं!

Monitoring और Troubleshooting AWS

Preparing Video For Download...