0Pricing
Cloud & IT Cert Prep · บทเรียน

การกรองข้อความ SQS และการผสานรวม SNS + SQS

ใช้ นโยบายตัวกรองการสมัครสมาชิก SNS เพื่อให้ผู้ใช้ SQS แต่ละรายได้รับเฉพาะข้อความที่เกี่ยวข้อง ช่วยลดการประมวลผลที่ไม่จำเป็น

การกรองข้อความ SQS และการผสานรวม SNS + SQS เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

ปัญหาเมื่อไม่มีการกรอง

ในสถาปัตยกรรมแบบกระจายงานที่ไม่มีการกรอง ผู้สมัครรับข้อมูล SQS ทุกคนจะได้รับข้อความ SNS ทุกข้อความ หากหัวข้อของคุณเผยแพร่เหตุการณ์คำสั่งซื้อสำหรับหมวดหมู่ผลิตภัณฑ์ 10 หมวด แต่ผู้สมัครรับข้อมูลรายหนึ่งประมวลผลเฉพาะคำสั่งซื้อสินค้าอิเล็กทรอนิกส์ ผู้สมัครรายนั้นก็ยังคงได้รับและต้องทิ้งข้อความเกี่ยวกับอาหารและเสื้อผ้า การทำเช่นนี้ทำให้สิ้นเปลืองทรัพยากรคำนวณ เพิ่มค่าใช้จ่าย และเพิ่มภาระที่ไม่จำเป็นให้ผู้ใช้ นโยบายตัวกรองการสมัครรับข้อมูล SNSแก้ปัญหานี้โดยให้ SNS เป็นผู้กำหนดเส้นทางข้อความไปยังผู้สมัครรับข้อมูลที่เหมาะสมเท่านั้น

นโยบายตัวกรอง SNS ทำงานอย่างไร

นโยบายตัวกรองคือออบเจ็กต์ JSON ที่ใช้กับการสมัครรับข้อมูล SQS หรือแลมบ์ดา SNS จะประเมินนโยบายเทียบกับ แอตทริบิวต์ข้อความของแต่ละข้อความก่อนส่งมอบ หากแอตทริบิวต์ข้อความตรงกับนโยบายตัวกรอง ระบบจะส่งมอบข้อความ แต่หากไม่ตรง SNS จะข้ามผู้สมัครรับข้อมูลรายนั้นโดยไม่แจ้งเตือน นโยบายตัวกรองรองรับการจับคู่สตริง ช่วงตัวเลข การจับคู่คำนำหน้า และตัวดำเนินการ exists เพื่อตรวจสอบว่ามีหรือไม่มีแอตทริบิวต์

# Filter policy: only deliver ELECTRONICS orders from US or EU
{
  'category': ['ELECTRONICS'],
  'region': ['US', 'EU'],
  'amount': [{'numeric': ['>=', 100]}]
}

ขอบเขตนโยบายตัวกรอง: แอตทริบิวต์ข้อความเทียบกับเนื้อหา

โดยค่าเริ่มต้น นโยบายตัวกรองจะจับคู่กับ แอตทริบิวต์ข้อความ (ข้อมูลเมตา) ตั้งแต่ปี 2023 SNS ยังรองรับ การกรองตามข้อมูลที่ส่ง (เนื้อหา) โดยกำหนดขอบเขตนโยบายตัวกรองเป็น MessageBody วิธีนี้ช่วยให้กรองตามเส้นทาง JSON ได้โดยตรงจากเนื้อหาข้อความ โดยไม่จำเป็นต้องให้ผู้เผยแพร่เพิ่มแอตทริบิวต์ การกรองเนื้อหามีความยืดหยุ่นมากกว่า แต่เนื้อหาข้อความต้องเป็น JSON ที่ถูกต้อง ควรตรวจสอบเสมอว่าขอบเขตใดตรงกับรูปแบบผลลัพธ์ของผู้เผยแพร่

# Set filter scope to MessageBody
aws sns set-subscription-attributes \
  --subscription-arn 'arn:aws:sns:...' \
  --attribute-name FilterPolicyScope \
  --attribute-value MessageBody

aws sns set-subscription-attributes \
  --subscription-arn 'arn:aws:sns:...' \
  --attribute-name FilterPolicy \
  --attribute-value '{"category": ["ELECTRONICS"]}'

เงื่อนไขตัวกรองตัวเลขและคำนำหน้า

นโยบายตัวกรองรองรับตัวดำเนินการจับคู่หลายแบบ นอกเหนือจากการเทียบสตริงอย่างง่าย:

  • ตัวเลข: {"numeric": ["=", 100]}, {"numeric": [">", 50, "<=", 200]}
  • คำนำหน้า: {"prefix": "order-"} จับคู่กับสตริงใด ๆ ที่ขึ้นต้นด้วยคำนำหน้านั้น
  • ยกเว้นค่าเหล่านี้: {"anything-but": ["CANCELLED"]} จับคู่กับค่าทุกค่าที่ไม่อยู่ในรายการ
  • มีอยู่: {"exists": true} จับคู่เมื่อมีแอตทริบิวต์นั้น และ false เมื่อไม่มี

การเผยแพร่ข้อความพร้อมแอตทริบิวต์เพื่อการกรอง

การกรองจะทำงานได้ ผู้เผยแพร่ต้องใส่แอตทริบิวต์ข้อความเมื่อเผยแพร่ไปยัง SNS แอตทริบิวต์คือคู่คีย์-ค่าที่มีชนิดข้อมูล (String, Number, Binary) ผู้เผยแพร่ไม่จำเป็นต้องทราบว่าผู้สมัครรับข้อมูลรายใดใช้นโยบายตัวกรองใด เพียงเพิ่มแอตทริบิวต์ที่อธิบายเหตุการณ์ลงในข้อความ SNS จะจัดการกำหนดเส้นทางโดยอัตโนมัติ วิธีนี้ทำให้ผู้เผยแพร่แยกออกจากตรรกะเฉพาะของผู้สมัครรับข้อมูลได้อย่างสมบูรณ์

aws sns publish \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderTopic' \
  --message '{"orderId": "789", "total": 250.00}' \
  --message-attributes '{
    "category": {"DataType": "String", "StringValue": "ELECTRONICS"},
    "region": {"DataType": "String", "StringValue": "US"},
    "amount": {"DataType": "Number", "StringValue": "250"}
  }'

การกระจายงานหลายระดับ: SNS + SQS หลายรายการ

โทโพโลยีการกระจายงานที่ซับซ้อนอาจให้ SNS กำหนดเส้นทางไปยังคิว SQS ที่มีระดับความเฉพาะเจาะจงต่างกัน: คิวหนึ่งรับคำสั่งซื้อทั้งหมด (ไม่มีตัวกรอง) สำหรับการตรวจสอบ อีกคิวรับเฉพาะคำสั่งซื้อ HIGH_VALUE (จำนวนเงิน >= 1000) สำหรับตรวจสอบการฉ้อโกง และคิวที่สามรับเฉพาะคำสั่งซื้อ ELECTRONICS สำหรับคลังสินค้าอิเล็กทรอนิกส์ คิว SQS แต่ละคิวมีผู้ใช้แลมบ์ดาของตนเอง รูปแบบนี้ช่วยให้ปรับขนาดแต่ละระดับการประมวลผลได้อย่างอิสระ และเพิ่มผู้ใช้รายใหม่ได้โดยไม่ต้องแก้ไขผู้ใช้เดิมหรือผู้เผยแพร่

การส่ง SNS ไปยัง SQS ข้ามบัญชี

SNS สามารถส่งข้อมูลไปยังคิว SQS ในบัญชี AWS อื่นได้ นโยบายที่อิงตามทรัพยากรของคิว SQS ต้องอนุญาตให้หลักบริการ SNS เรียกใช้ sqs:SendMessage จาก ARN ของหัวข้อ SNS ในบัญชีผู้เผยแพร่ วิธีนี้รองรับการเผยแพร่เหตุการณ์แบบรวมศูนย์ (บัญชีหนึ่งเผยแพร่ และทีมจากหลายบัญชีสมัครรับข้อมูล) โดยไม่ต้องแบ่งปันข้อมูลประจำตัว การกระจายงานข้ามบัญชีเป็นรูปแบบที่พบได้บ่อยในการตั้งค่า AWS Organizations ที่มีหลายบัญชี

# SQS queue policy to allow cross-account SNS delivery
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': {'Service': 'sns.amazonaws.com'},
    'Action': 'sqs:SendMessage',
    'Resource': 'arn:aws:sqs:us-east-1:CONSUMER_ACCOUNT:MyQueue',
    'Condition': {
      'ArnEquals': {'aws:SourceArn': 'arn:aws:sns:us-east-1:PUBLISHER_ACCOUNT:MyTopic'}
    }
  }]
}

SQS เป็นบัฟเฟอร์ก่อนแลมบ์ดา

เมื่อปริมาณเหตุการณ์เพิ่มขึ้นอย่างรวดเร็ว การเรียกใช้แลมบ์ดาโดยตรงจาก SNS จะปรับขนาดแลมบ์ดาทันที ซึ่งอาจทำให้ฐานข้อมูลหรือ API ปลายทางรับภาระมากเกินไป การเพิ่ม SQS ระหว่าง SNS กับแลมบ์ดาจะสร้างบัฟเฟอร์: SNS ส่งข้อมูลไปยัง SQS และแลมบ์ดาจะตรวจสอบ SQS ด้วยขนาดชุดข้อมูลที่ควบคุมได้ วิธีนี้ช่วยให้แลมบ์ดาประมวลผลด้วยอัตราที่ยั่งยืน ขณะที่ SQS รองรับช่วงที่ปริมาณการรับส่งข้อมูลพุ่งสูง ความลึกของคิวทำหน้าที่เป็นกลไกต้านแรงดัน คุณสามารถตรวจสอบและตั้งการแจ้งเตือนเมื่อความลึกเพิ่มเกินค่าขีดจำกัด ซึ่งบ่งชี้ว่าผู้ใช้ประมวลผลไม่ทัน

เปรียบเทียบการกระจายงานไปยังแลมบ์ดาโดยตรงกับแบบมีบัฟเฟอร์ SQS

SNS → แลมบ์ดา (โดยตรง): เวลาแฝงต่ำที่สุด ไม่มีบัฟเฟอร์ และแลมบ์ดาปรับขนาดทันที เหมาะที่สุดสำหรับการแจ้งเตือนแบบเรียลไทม์หรือการแจ้งเตือนเร่งด่วนที่ต้องการเวลาแฝงต่ำกว่าหนึ่งวินาที SNS → SQS → แลมบ์ดา: เพิ่มการรองรับ DLQ ปริมาณงานที่ควบคุมได้ การลองใหม่พร้อมระยะหมดเวลาการมองเห็น และการตรวจสอบความลึกของคิว เหมาะที่สุดสำหรับการประมวลผลธุรกรรม การอัปเดตสินค้าคงคลัง และทุกสถานการณ์ที่ต้องเคารพขีดจำกัดของระบบปลายทาง สำหรับคำถามข้อสอบ ให้เลือกการใช้ SQS เป็นบัฟเฟอร์เมื่อกล่าวถึงความทนทานและการควบคุมอัตรา

การทดสอบนโยบายการกรอง

ใช้ เครื่องมือแก้ไขนโยบายการกรอง ในคอนโซล SNS เพื่อทดสอบว่าข้อความตัวอย่างจะตรงกับนโยบายการกรองของคุณหรือไม่ก่อนนำไปใช้งานจริง นอกจากนี้ คุณยังสามารถใช้ Sandbox ของ SNS เพื่อจำลองการส่งข้อความและตรวจสอบการกำหนดเส้นทางได้ ในโค้ด ให้ตรวจสอบความถูกต้องของนโยบายการกรองด้วยการเผยแพร่ข้อความทดสอบที่มีแอตทริบิวต์ที่ทราบค่า แล้วตรวจสอบเมตริกของ CloudWatch สำหรับการสมัครรับแต่ละรายการ: เมตริก NumberOfMessagesFiltered จะแสดงจำนวนข้อความที่ถูกบล็อกโดยตัวกรอง ซึ่งช่วยให้คุณปรับแต่งนโยบายได้โดยไม่ต้องรอเหตุการณ์จากระบบจริง

สรุปการผสานรวมตั้งแต่ต้นจนจบ

การผสานรวม SNS + SQS อย่างสมบูรณ์มีลักษณะดังนี้: (1) แอปพลิเคชันเผยแพร่เหตุการณ์ไปยัง หัวข้อ SNS Standard พร้อมแอตทริบิวต์ของข้อความ (2) SNS ประเมิน นโยบายการกรอง ของการสมัครรับแต่ละรายการ และส่งเฉพาะข้อความที่ตรงเงื่อนไขไปยังคิว SQS แต่ละคิว (3) Lambda ดึงข้อความจากคิว SQS แต่ละคิวตามขนาดชุดที่กำหนดค่าไว้และประมวลผลข้อความ (4) ข้อความที่ประมวลผลไม่สำเร็จจะไปถึง DLQ ของคิวหลังจากครบจำนวน maxReceiveCount (5) การแจ้งเตือนของ CloudWatch ที่ตรวจสอบจำนวนข้อความใน DLQ จะแจ้งเตือนทีม รูปแบบที่แยกส่วนอย่างสมบูรณ์และทนทานนี้เป็นสถาปัตยกรรมต้นแบบของ SAA-C03

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้

ทบทวนบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า: นโยบายการกรองของ SNS ใช้แอตทริบิวต์ของข้อความหรือเนื้อหาข้อความในการกำหนดเส้นทางที่ระดับ SNS จึงตัดการประมวลผลที่ไม่จำเป็นของผู้ใช้บริการปลายทาง รูปแบบ SNS→SQS→Lambda เพิ่มบัฟเฟอร์ที่คงทนและการควบคุมอัตราระหว่างการกระจายข้อความไปยังหลายปลายทางกับการประมวลผล และ การส่งข้อมูลจาก SQS ข้ามบัญชี ช่วยให้ใช้รูปแบบ pub/sub แบบรวมศูนย์ในสภาพแวดล้อมที่มีหลายบัญชี โดยใช้นโยบายทรัพยากรของคิว ต่อไป เราจะสำรวจ REST, HTTP และ WebSocket API ของ Amazon API Gateway

คำถามที่พบบ่อย

บทเรียน “การกรองข้อความ SQS และการผสานรวม SNS + SQS” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกรองข้อความ SQS และการผสานรวม SNS + SQS” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกรองข้อความ SQS และการผสานรวม SNS + SQS”

ใช้ นโยบายตัวกรองการสมัครสมาชิก SNS เพื่อให้ผู้ใช้ SQS แต่ละรายได้รับเฉพาะข้อความที่เกี่ยวข้อง ช่วยลดการประมวลผลที่ไม่จำเป็น คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การกรองข้อความ SQS และการผสานรวม SNS + SQS” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม

ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คิว SQS Standard เทียบกับ FIFO
  2. ระยะเวลาร_visibility, DLQ และการสำรวจแบบนาน
  3. หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ
  4. การกรองข้อความ SQS และการผสานรวม SNS + SQS
← กลับไปที่ Cloud & IT Cert Prep