มาทำ Queue ผ่าน SQS ของ AWS กัน Part Producer

Amazon Simple Queue Service (SQS) คือตัวจัดเก็บ body ที่เป็น json และดึงมาใช้งานโดยที่ข้อความเราจะไม่สูญหายเลยเมื่อทำการส่งมอบไปยังเป้าหมาย

รูปตัวอย่างการทำงานของ SQS

Queue คืออะไร มันคือตัวที่ช่วยป้องกันการ Lost Message จากเหตุการณ์ต่างๆไม่ว่าจะเป็นเรื่อง Payments, Chats, Orders หรือ Transactions ต่างๆที่ไหลเข้าระบบเรา โดยปกติจะเข้าระบบเราตรงๆ แต่เราจะใช้ Queue มาช่วยป้องกันการตกหล่นของ Messages เหล่านั้นโดยให้เข้า Queue ก่อน ซึ่งมันมีเจ้าต่างๆมากมายที่ให้บริการเรื่อง Queue โดยบทความนี้จะหยิบ Amazon Simple Queue Service (SQS) มาเล่า

Amazon Simple Queue Service (SQS) จะประกอบไปด้วย 2 ส่วน

Producer คือตัวจ่ายงานที่จะมาเรียง Queue ก่อนที่เราจะนำออกไปใช้โดยจะเป็นการจ่ายงานแบบ FIFO (First In First Out) โดยที่เข้าก่อนออกก่อน โดยผมจะมาทำให้ตัว API GATWAY ของ AWS เป็นเสมือน Producer ที่รับค่ามาจาก webhook หรือ api ต่างๆ

Consumer คือตัวรับงานจากตัว SQS โดยจะต้องมีการเขียน API ไป Pull Queue จาก SQS และส่งมอบไปยัง services ต่างๆของเราเมื่อทำ Queue นั้นเสร็จก็ควรจะลบ Queue นั้นไปด้วยเพื่อที่เมื่อมีการ Pull จะได้ไม่มีข้อมูลเดิมที่เราดึงจาก SQS

โดยบทความนี้จะกล่าวถึงแค่การทำ PRODUCER ก่อนไม่งั้นมันจะยาวผมจะแบ่งออกเป็น 2 PART เพื่อเป็นการไม่เสียเวลาต่อไปเราลองมาเริ่มทำกันเลยดีกว่า

  1. สร้าง SQS บน AWS
เข้ามาที่ Amazon SQS
ตังชื่อแล้วก็สร้างได้เลย

2.สร้าง Role ให้มีการเข้าถึงตัว SQS ได้ไปที่ IAM

มาสร้าง Policies กันก่อน
สร้างโดยเอาอันนี้ไปแปะแล้วเปลี่ยน arn เป็นของตัว sqs โดย coppy arn จาก SQS ได้เลยโดยสิทธิ์ที่มอบให้คือจะเป็นการ Producer คือส่งค่าเข้า SQS อย่างเดียวเลย เวลาจะใช้สิทธิ์อะไรควรมอบสิทธิ์ที่มันควรจะทำได้เท่านั้น
ไปที่ JSON แปะแล้วกดสร้างได้เลย
ตั้งชื่อให้มันได้เลย
มาแล้วสิทธิ์เรา
ต่อไปก็มาที่ Role แล้วก็สร้าง
เลือกสิ่งที่เราจะไปใช้ให้ถูกต้องด้วยในภาพผมจะเอาไปใช้ใน API GATEWAY
ตั้งชื่อให้เรียบร้อยตั้งให้ตรงตามงานที่จะเอาไปใช้ด้วยนะครับงั้นลืมแน่ๆ 55555
มาแล้ว แล้วก็กดเข้าไปได้เลยเราจะไปเพิ่ม policie ที่เราสร้างก่อนหน้านี้ให้ role gateway ที่เรากำลังสร้าง
กด add ได้เลยแล้วเลือก policie ที่เราสร้างไปก่อนหน้า
Add เสร็จเป็นอันจบขั้นตอนที่ 2 แต่อย่าลืม coppy arn มันไว้นะถ้าไม่อยากกลับมาหน้านี้อีก 5555
arn ตรงแดงๆ coppy ไปได้เลยครับ

3.สร้าง API GATEWAY เพื่อให้เชื่อมต่อ SQS ได้

เข้ามาหน้า API Gateway แล้วกดสร้าง
กด Build ตัว REST API
ตั้งชื่อให้เกี่ยวข้องกับงานแล้วกดสร้างได้เลย
สร้าง Path กด Actions ไป Create Resouce ที่จะให้เป็น SQS เพราะมันมี SQS กี่ตัวใน GATEWAY ก็ได้สร้างให้สอดคล้องกับตัว SQS เพื่อที่จะได้จำได้ อย่าลืมติ๊ก API Gateway CORS แล้วกดสร้างได้เลย
จากนั้นสร้าง Method POST ภายใต้ชื่อที่เราสร้างไปเมื่อครู่
จากนั้นเลือกชนิดเป็น AWS Service เลือก Region ตามต้องการแล้วเลือกบริการเป็น SQS ใส่ HTTP เป็น POST และใส่ Action Type เป็น Use Path override ทำการใส่ค่า ACCOUNT ID/NAME EX. 12345/dodohandsome เอาชื่อจากตัว SQS ที่เราสร้าง สุดท้ายก็ไป Coppy Arn จาก Role มาใส่ แล้วกด Save ได้เลย
จากนั้นให้ไปที่ Integration Request
จากนั้นมาที่ HTTP Headers ทำการแอด Name : Content-Type และ Mapped form : ‘application/x-www-form-urlencoded’ แล้วกดสร้างได้เลย
อันนี้เอามาไว้ให้ Coppy อันข้างบนอักขระมันเพี้ยน
จะได้หน้าตาออกมาแบบนี้
จากนั้นเลื่อนลงมาหา Mapping Templates แล้ว ติ๊ก Never และ Add mapping Template เป็น application/json แล้วกด icon เช็คถูก
หลังเช็คถูกจะมีกล่องนี้ขึ้นมาให้ Coppy Action=SendMessage&MessageBody=$input.body จากนั้นกด Save หรือถ้าต้องได้ใช้สัญลักษณ์ใน body เช่น + & % Coppy Action=SendMessage&MessageBody=$util.urlEncode($input.body) อันนี้แทน

****ถ้าเป็น fifo ให้ใส่แบบนี้แทน ถ้าทำแบบ standard ข้ามไปได้เลยหรือดูให้ผ่านตาได้ ต.ย. ตามด้านล่างนี้

ตัวอย่างก็ต้องส่ง json ให้ถูกต้อง เช่นในตัวอย่าง

คือ fifo มันต้องใส่ MessageGroupId,MessageDeduplicationId แนบไปด้วยมัน require เอาไว้แต่บทความนี้ทำบทความธรรมดา

จากนั้นกลับมาหน้านี้แล้วกดไปที่ TEST
จากนั้นกด Test โดยใส่ Json อะไรไปก็ได้ใน Request Body ถ้า return 200 และ response body ดังรูปถือว่าผ่านแล้ว
จากนั้นกด Deploy API ได้เลย
มันอันเสร็จจากนั้นเราสามารถเอา URL ไปทดลองได้เลย
ก่อนจะไปทดลองไปดูข้อมูลที่เราเทสกันไปกลับไปที่ Amazon SQS หลังจากนั้นให้ไป Send and receive messages
จากนั้น polling เอาข้อมูลมาดูก็จะมี event เข้ามา
คลิกเข้าไปก็จะเห็น result ออกมา

จบไปแล้วขั้นติดตั้งให้ API GATEWAY เป็นตัว Producer มาลองทดสอบกันจริงๆดีกว่า

ผมลองเอาตัว API Gateway ไปวางที่ Webhook Line ตรงๆเลยไม่กรองอะไรทั้งนั้น

จานั้นรัวๆข้อความเข้าไปใน OA ที่เราทำการ Set Webhook ไป

จากนั้นกับไปดูที่ SQS จะมี Event มาเต็มเลย
ลองกดเข้าไปซักอันดู body

เป็นการเทสง่ายๆแต่เห็นภาพมากเลยครับ

ก็จบไปแล้วกับบทความขั้นตอนการติดตั้ง SQS รวมไปถึงวิธีการ Producer ก็จะเห็นได้ว่าเราสามารถเอาไปพลิกแพลงได้มากเลยโดยที่ไม่ต้องกลัวข้อมูลจะตกหล่นหายเพราะส่วนใหญ่ที่หายเกิดจากหลายปัจจัยเช่น ยิงเข้า Server ต่างๆที่เราคิดว่ามัน Auto Scale แต่ฐานข้อมูลมันไม่ Scale ด้วยตัว SQS เลยเอามาแก้ปัญหานี้ได้ดีมากๆ , หรือข้อมูล Payment ที่ถูกส่งลงมาเราก็ควรเก็บไว้ใน Queue ก่อนไม่งั้น Server หรือฐานข้อมูลระเบิด ทำให้ Event Payment นั้นหายลูกค้าโวยวายแน่นอนถ้าเราจะกลับไปเช็คจาก Payment Gateway ที่เราใช้ลูกค้าคนนั้นอาจจะเลิกใช้เพราะความผิดพลาดตรงนี้ก็ได้

บทความหน้าจะเป็นการทำ Consumer ผ่าน Golang รอติดตามผลงานถัดไปได้นะครับ

( CR. ธำรงค์ ไชยวงค์ )

--

--

No responses yet