ฉันสงสัยว่าฉันสามารถส่งข้อความไปยังคิว SQS และสมัครสมาชิกหัวข้อ SNS เพื่อส่งแลมบ์ดาให้ส่งอีเมลได้หรือไม่
SQS -> SNS -> (แลมบ์ดา) -> SES
ฉันรู้ว่าสามารถส่งข้อความ SNS ไปยัง SQS ได้ แต่ฉันอยากรู้ว่าวิธีอื่นเป็นไปได้หรือไม่
ฉันสงสัยว่าฉันสามารถส่งข้อความไปยังคิว SQS และสมัครสมาชิกหัวข้อ SNS เพื่อส่งแลมบ์ดาให้ส่งอีเมลได้หรือไม่
SQS -> SNS -> (แลมบ์ดา) -> SES
ฉันรู้ว่าสามารถส่งข้อความ SNS ไปยัง SQS ได้ แต่ฉันอยากรู้ว่าวิธีอื่นเป็นไปได้หรือไม่
คำตอบ:
สิ่งหนึ่งที่ฉันทำคือการสร้างสัญญาณเตือน CloudWatch เปิดApproximateNumberOfMessagesVisible
( >= 1 for 5 minutes
) สำหรับคิว SQS การเตือนจะเผยแพร่ไปยังหัวข้อ SNS ที่เรียกใช้ฟังก์ชันแลมบ์ดา ฟังก์ชั่นแลมบ์ดาวนซ้ำจนกว่าจะเคลียร์คิว
อาจใช้เวลาถึง 5 นาทีในการทริกเกอร์จากการเตือนภัย แต่จะทำงานได้อย่างน่าอัศจรรย์สำหรับงานที่มีการกำหนดเวลาเป็นแบทช์โดยไม่จำเป็นต้องสำรวจความคิดเห็นของคิว (สัญญาณเตือนมีความละเอียด 5 นาทีสำหรับคิวที่ใช้งานอยู่)
คุณไม่สามารถไปเท่านั้นSQS -> SNS
SNS -> SQS
ตอนนี้แลมบ์ดาสนับสนุนการตั้งเวลาดังนั้นทางเลือกหนึ่งคือการนำโพลเลอร์ SQS ไปใช้ในฟังก์ชั่นแลมบ์ดาและเรียกใช้บ่อยครั้ง
ตัวเลือกอื่นที่ควรพิจารณาคือคุณต้องการคิวจริงหรือไม่ แลมบ์ดาสนับสนุนการประมวลผลแบบอะซิงโครนัส (ผ่านโหมดการเรียกใช้เหตุการณ์) และควรปรับขนาดแนวนอนอย่างโปร่งใสเพื่อจัดการการร้องขอแบบขนาน หากฟังก์ชั่นแลมบ์ดาของคุณไม่ต้องการการเข้าถึงที่เก็บกลางของรัฐซึ่งอาจ จำกัด การประมวลผลแบบขนานคุณอาจเรียกใช้การเรียกใช้ทั้งหมดของคุณแบบขนาน ฉันเชื่อว่ามีการ จำกัด การใช้งานพร้อมกัน 100 รายการต่อบัญชีดังนั้นคุณอาจต้องแบทช์ข้อความของคุณให้อยู่ในสถานะนั้น
SQS
คิวสามารถสมัครสมาชิกSNS
หัวข้อและเพื่อประมวลผลSNS
ข้อความที่ได้รับ ปัจจุบันยังไม่สามารถใช้งานในทิศทางอื่นได้หากไม่มีการเข้ารหัสเพิ่มเติม (ดูตัวอย่างเช่นLambda
คำถามที่พบบ่อย )
ผมจะบอกว่ามีสองตัวเลือกวิธีการที่จะทำมัน AWS event->SQS->Lambda
แต่มันไม่สง่างามเพื่อให้เป็นระบบโดยใช้เหตุการณ์ที่ขับเคลื่อนด้วยกันมากขึ้น มิฉะนั้นคุณอาจต้องปรับแต่ง / ใช้รหัสวิธีSQS
ประมวลผลคิว:
SQS
คิวจากนั้นเรียกใช้Lambda
เหตุการณ์ SQSสิ่งนี้ถูกถามและตอบกลับเมื่อไม่นานมานี้ แต่เมื่อคิดถึงตัวเองฉันคิดว่าฉันจะเพิ่มวิธีการ
ตามที่กล่าวไว้แหล่งที่มาของเหตุการณ์อาจเป็นทางออกที่ดีที่สุดที่นี่ อีกทางหนึ่งและฉันยังไม่ได้ทดสอบและไม่คิดว่าจะผ่าน (ดังนั้นนี่คือการศึกษา) แต่อาจเป็นไปได้ที่จะทำสิ่งนี้ผ่านรูปแบบ Fan-Out กับ SNS ดังนี้
1. Create a SNS topic.............................: SNS-topic-01
2. Subscribe a SQS queue to that topic............: SQS-queue-01
3. Subscribe a Lambda Function to that topic......: LAMBDA-func-01
การใช้การกำหนดค่านี้การส่งข้อความไปยังหัวข้อ SNS จะจัดคิวให้กับคิว SQS ในขณะที่เรียกใช้ฟังก์ชัน Lambda พร้อมกัน ฟังก์ชั่นแลมบ์ดานั้นจะถูกเขียนเพื่ออ่านคิว SQS ที่เหมือนกันมาก แต่เปิดใช้งานLong Polling (สูงสุด 20 วินาที) เพื่อที่จะไม่อ่านคิวก่อนที่การเข้าคิวจะเสร็จสิ้น (เช่นสภาพการแข่งขัน)
โดยพื้นฐานแล้วชุดรูปแบบนี้เพียงแค่เรียกใช้ฟังก์ชัน Lambda หนึ่งรายการสำหรับแต่ละข้อความ SQS ที่จัดคิว ฉันไม่ทราบว่าผู้อ่านแบบสำรวจความคิดเห็นแบบยาวพร้อมกันทำงานใน SQS (... มีใครถูกทิ้งหรือไม่) แต่นี่เป็นอีกวิธีหนึ่งในการพิจารณาแก้ปัญหานี้ = :)