ส่งข้อมูลแบบไม่ต้องง้อ Backend ด้วย AWS Firehose

ส่งข้อมูลแบบไม่ต้องง้อ Backend ด้วย AWS Firehose
21/10/20   |   7.2k

 

ในยุคที่ข้อมูลเป็นสิ่งที่มีค่า วิธีการที่จะเก็บข้อมูลย่อมเป็นเรื่องที่สำคัญ ซึ่งรูปแบบของการเก็บข้อมูลในปัจจุบันก็มีหลากหลายวิธีมาก ในบางระบบอาจจะคอยเก็บให้อัตโนมัติแล้วสร้าง Visualization ให้ทันที หรือบางระบบอาจจะใช้เวลาประมวลผลมากขึ้นแต่แสดงรายละเอียดได้เยอะกว่า แต่สุดท้ายแล้วจะมั่นใจได้อย่างไรว่าระบบเหล่านั้นเก็บข้อมูลมาถูกต้อง ไม่ได้เปลี่ยนแปลงตัวข้อมูล หรือไม่ได้จำลองข้อมูลบางส่วนขึ้นมา ไม่มีบริการใดที่จะทำให้เรามั่นใจได้มากไปกว่าการที่จะเลือกเก็บข้อมูลด้วยตัวเอง

อย่างไรก็ตามหากเราต้องการเลือกที่จะสร้าง Service เพื่อที่จะเก็บข้อมูลเพียงอย่างเดียว เราไม่สามารถที่จะคาดเดาปริมาณผู้ใช้งานที่แน่นอนได้ หรืออาจคาดคะเนได้ว่าจะมีผู้ใช้ในปริมาณที่แตกต่างกันมากในแต่ละช่วงเวลา ด้วยเหตุผลนี้ถ้าเรากำหนดขนาดของ Server ไว้น้อยไป Server ก็อาจล่มได้ หรือถ้าเผื่อขนาดของ Server ไว้ใหญ่เกินไป ก็อาจจะเป็นการเสีย Cost โดยไม่จำเป็น ฉะนั้นเราจึงควรเลือกใช้บริการส่งข้อมูลโดยไม่ต้องผ่าน Server เพื่อให้ข้อมูลไหลจากต้นทางไปเก็บยังปลายทางได้เลย และระบบที่สามารถให้บริการตามสิ่งทีี่เราต้องการนี้ได้ก็คือ AWS Firehose

AWS Firehose

 

 

AWS Firehose เป็นบริการหนึ่งของ Amazon Web Services (AWS) ที่รองรับการส่งข้อมูลจากแหล่งข้อมูลต่าง ๆ ที่มีการส่งข้อมูลอย่างต่อเนื่อง (data streaming) โดยที่ไม่จำเป็นต้องติดตั้งหรือดูแล server สำหรับจัดการในกรณีที่มีข้อมูลปริมาณมาก ๆ โดย AWS Firehose เองอาจจะเหมาะกับงานที่เป็นโปรเจกต์ใหม่ ๆ ที่เราไม่สามารถคาดคะเนปริมาณข้อมูลได้อย่างชัดเจน

ความสามารถของ AWS Firehose

 

 

หลักการทำงานของ AWS Firehose คือนำข้อมูลจากหลายหลากแหล่ง เช่น อุปกรณ์จับสัญญาณ sensor ต่าง ๆ , การใช้งานจากหน้าเว็บไซต์, Application หรือข้อมูลการเล่นเกม ส่งไปยังแหล่งเก็บข้อมูล (database หรือ data lake) เช่น Amazon S3, Amazon Redshift, Amazon Elasticsearch Service, Endpoint โดยที่เราไม่ต้องคำนึงถึงการใช้งาน / การรองรับของ server ซึ่งความสามารถของ AWS Firehose ดังกล่าวนั้นเหมาะกับข้อมูลที่เป็นลักษณะ data streaming อยู่แล้ว

ราคาของ AWS Firehose

 

สำหรับค่าใช้จ่ายในการใช้บริการ AWS Firehose นั้น จะอยู่ที่ 0.037 USD / GB (สำหรับ 500 TB แรก / เดือน) หรือคิดเป็นเงินไทยประมาณ 1.2 บาท / GB สมมติในเดือนนั้นมีการส่งข้อมูลอยู่ที่ 500 GB ค่าใช้จ่ายทั้งหมดที่จะเกิดขึ้นก็จะอยู่ที่ประมาณ 600 บาท

อย่างไรก็ดี การคิดค่าใช้จ่ายในการส่งข้อมูลนั้น จะถูกปัดขึ้นไปเป็นจำนวนเท่าของ 5 KB สำหรับทุกข้อมูล และค่าใช้จ่ายในส่วนนี้ยังไม่ได้รวมถึงค่าใช้บริการจาก AWS Service อื่น ๆ เช่น AWS S3 (ถ้ามี)

Setting up aws console

วิธีการ setup AWS console สำหรับใช้บริการ firehose
1. ขั้นตอนแรกให้ทำการ login เข้าใช้ AWS ก่อน จากนั้นให้ทำการค้นหาบริการที่ชื่อว่า Kinesis

 

2. ให้เลือกบริการ Kinesis จากนั้นที่ Data Firehose ให้เลือก Create Delivery Stream

 

3. Step 1: Name and source กำหนด Delivery stream name ซึ่งจะเป็นชื่อที่จะนำไปใช้ในตอนเขียนโค้ดว่าจะให่ส่งข้อมูลมายัง stream name อะไร แล้วกด Next เพื่อไปยังขั้นตอนถัดไป (setting อื่น ๆ ที่ไม่ได้กล่าวถึง ณ ที่นี้ จะเป็นค่าที่ AWS เลือกให้เป็น default ไว้อยู่แล้ว อย่างไรก็ดี หากต้องการปรับแก้ไขค่า setting อื่น ๆ สามารถศึกษาข้อมูลเพิ่มเติมได้)

 

4. ใน Step 2: Process records สามารถกด Next ได้เลย จากนั้นที่ Step 3: Choose a destination เบื้องต้นอาจเลือกเป็น Amazon S3 และกำหนดว่าจะให้เก็บข้อมูลลงที่ bucket ใด (หากยังไม่มี bucket ต้องสร้าง S3 bucket ขึ้นมาก่อนโดยกดที่ Create New) เมื่อเลือก bucket แล้ว ให้กด Next เพื่อไปยังขั้นตอนถัดไป

 

5. ใน Step 4: Configure settings สามารถกำหนดขนาดหรือระยะเวลาของ Buffer ที่ต้องการได้ (เป็นส่วนในการกำหนดว่า ต้องการให้ข้อมูลถูกรวบรวมเป็นปริมาณหรือระยะเวลาเท่าใด ก่อนจะส่งไปเก็บยังปลายทาง) และที่ S3 compression and encryption ให้เลือก compression แบบ Zip (เนื่องจากจะนำไปใช้ต่อได้ง่ายและประหยัดพื้นที่กว่า) และเลือก encryption แบบ Enabled จากนั้นกด Next

6. ขั้นตอนสุดท้าย ให้ตรวจสอบข้อมูลอีกครั้ง ก่อนที่จะกด Create Delivery Stream และให้นำชื่อของ Delivery Stream Name ไปใช้ในขั้นตอนของการ Implement Code ต่อไป

Implementing the code

ส่วนวิธีการเรียกใช้บริการ AWS Firehose นั้น ให้ทำการ import aws-sdk และ setup ก่อน (กำหนด region และ credentials) จากนั้นจึงเรียกใช้คำสั่ง putRecord เพื่อส่งข้อมูล โดยกำหนด DeliveryStreamName เป็นชื่อที่ตั้งไว้ใน console เมื่อเรียกสำเร็จแล้วข้อมูลก็จะถูกนำเข้าสู่ระบบ Firehose เพื่อที่จะถูกส่งไปเก็บยังปลายทางต่อไป

 

import AWS from 'aws-sdk'

const firehose = new AWS.Firehose({
    region: YOUR_REGION,
    credentials: YOUR_CREDENTIALS,
})

firehose.putRecord({
    DeliveryStreamName: YOUR_DELIVERY_STREAM_NAME,
    Record: {
        Data: Buffer.from(foo_bar),
    },
}, (err) => {
    if (err) {
        console.warn('Error while sending record to firehose', err)
    }
})

 

 

เป็นอย่างไรบ้างครับสำหรับเรื่องของ AWS Firehose เห็นข้อดีของการใช้ AWS Firehose แล้ว หากมีโปรเจกต์ที่อยากลองใช้ หรือหากมีโปรเจกต์ใหม่ ๆ ที่เหมาะสมกับการส่งข้อมูลจาก Frontend โดยตรง โดยไม่ผ่าน Backend เช่นการส่งข้อมูลสถิติ action ต่าง ๆ หรือการส่งข้อมูล log ต่าง ๆ ที่มีขนาดไม่ใหญ่มากแต่มีอัตราการส่งที่ค่อนข้างถี่ รวมไปถึงอุปกรณ์ IOT ก็ให้โอกาสลองใช้ AWS Firehose กันนะครับ

tags : aws firehose thinknet



ติดตามข่าวสารและเรื่องราวดีๆ ทาง Email