การส่งข้อมูลจาก EC2 ไปยัง Firehose

บล็อกนี้จะเป็นส่วนเสริมของการใช้งาน Firehose กับ S3 นะครับโดยในบล็อกนี้จะมีการเพิ่มเนื้อหาเกี่ยวกับการใช้งาน EC2 เข้ามาด้วยจะเป็นยังไง สามารถดูวิธีการในบล็อกนี้ได้เลยครับ
2022.08.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สำหรับในบล็อกนี้จะเป็นเนื้อหาเสริมต่อจากบล็อกก่อนหน้านี้เกี่ยวกับการ การใช้งาน S3 ควบคู่กับ Amazon Kinesis Data Firehose นะครับถ้าใครสนใจก็สามารถย้อนกลับไปดูตามลิ้งค์ที่แนบมาให้ได้เลยครับ ซึ่งความแตกต่างของบล็อกนี้คือเราจะมีการใช้งาน EC2 ร่วมด้วยนะครับโดยมีการใช้งานตามแผนภาพนี้เลย

ขั้นตอนการทำ

สร้าง Amazon S3 Bucket

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

AS3 Bucket anme: chawish-test-[date]

และสำหรับขั้นตอนและวิธีการสร้าง S3 Bucket นะครับสามารถดูได้จากลิ้งค์ด้านล่างเลยครับ

  • การสร้าง Buckets ใน Amazon S3
  • เมื่อเราสร้าง S3 Bucket เรียบร้อยแล้วอันดับต่อไปเราก็จะสร้างและใช้งาน Amazon Kinesis กันครับ

    Amazon Kinesis

    เมื่อเข้าสู่หน้าแรกของ Amazon Kinesis ให้เราเลือกหัวข้อ Kinisis Data Firehose ที่อยู่มุมขวานะครับและกดปุ่ม Create delivery stream ครับตามรูปด้านล่างเลยครับ

    เมื่อกดเข้าไปแล้วในส่วนนี้ให้เรากำหนด Source และ Destination พร้อมกับตั้งชื่อ Delivery ที่เราต้องการนะครับโดยเลือกข้อมูลตามนี้ครับ

    Source:Direct PUT
    Destination:Amazon S3
    Delivery stream name:chawish-test-[date]



    หลังจากนั้นให้เราเลื่อนลงมาในส่วนของ Destination settings แล้วกด Browse ครับและเลือก S3 Bucket ของเราที่ทำการสร้างไปก่อนหน้านี้มาใช้งานครับ

    ถัดไปให้เลื่อนลงมาในหัวข้อ Buffer hints, compression and encryption นะครับ กดที่หัวข้อเพื่อให้ระบบแสดงข้อมูลมาเพิ่มเติมและเปลี่ยนแปลงข้อมูลของ Buffer interval เป็น 120 นะครับ ก็คือกำหนดให้มีการอัพเดททุกๆ 120 วินาทีครับ

    จากนั้นก็กดปุ่ม Create delivery stream ได้เลยครับ และในขั้นตอนต่อไปเราจะทำการสร้าง Role เพื่อนำมาใช้งานคู่กับ EC2 ครับ

    AWS IAM

    ในส่ส่วนนี้เราจะทำการสร้าง Role เพื่อใช้งานกับ EC2 ครับโดยจะเป็นการกำนหดสิทธิ์สูงสุดในกับ EC2 เพื่อใช้งาน Firehose นั้นเอง โดยให้เราเข้าไปที่หน้าแรกของ AWS IAM นะครับและเลือกหัวข้อ Role จากแทบเมนูด้านซ้าย และ กดปุ่ม Create Role ครับ

    เมื่อกดเข้าไปแล้วหน้าแรกให้เราเลือกข้อมูลตามนี้นะครับ

    Trsusted entity type:AWS Service
    Use case:EC2

    เมื่อกรอกข้อมูลเสร็จแล้วก็กด Next ตามภาพได้เลยครับ

    ในหน้าถัดไประบบจะให้เราเลือก Policy หรือสิทธิ์ในการใช้งานที่เราต้องการโดยให้เราค้นหาคำว่า AmazonKinesisFirehoseFullAccessเป็นการมอบสิทธิ์การใช้งานสูงสุดให้กับ Role ของเรา เมื่อเลือกแล้วก็กด Next ตามภาพได้เลยครับ

    ในหน้าต่อไปจะเป็นหน้าแสดงข้อมูลทุกอย่างที่เราเลือกและตั้งค่ามาเพื่อให้เราตรวจสอบความถูกต้องทั้งหมด ถ้าเราตรวจสอบแล้วว่าถูกต้องก็ให้กดปุ่ม Create role ได้เลยครับเพียงเท่านี้ระบบก็จะสร้าง Role ให้เราใช้งานได้แล้ว

    เมื่อระบบสร้าง Role เสร็จเราก็จเป็นชื่อ Role ที่เราสร้างอยู่ในตารางของ AWS IAM ดังรูปครับ

    เมื่อเราได้ Role มาใช้งานแล้วขั้นตอนต่อไปก็คือการสร้าง EC2 Instance ครับ

    EC2 Instance

    ทำการติดตั้ง EC2 Instance สำหรับใช้ในการเชื่อมต่อกับ Firehose โดยทำตามลิงก์ด้านล่างนี้ครับ
    จะมีส่วนของหัวข้อ Advanced details ที่เราต้องตั้งค่าเองนะครับไม่มีเนื้อหาในลิ้งค์ด้านล่าง ให้เราเลื่อนลงไปดูวิธีการตั้งค่าด้านล่างของบล็อกนะครับเมื่อทำถึงส่วนนี้แล้ว

    • ※ตัวอย่างตั้งค่าการสร้าง EC2 Instance ในบทความนี้

    Create Key pairs

    Key pairs:chawish-test-[date]

    Launch instances

    Name and tags

    Name:chawish-test-[date]

    Application and OS Images (Amazon Machine Image)

    Amazon Machine Image (AMI):Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type(Default)

    Instance type

    Instance type:t3a.nano

    Key pair (login)

    Key pair name - required:tinnakorn-test

    Network settings

    Firewall (security groups)

    Security group name - required:tinnakorn-test
    Description - required:tinnakorn-test

    Inbound security groups rules

    Security group rule 1 (TCP, 22, 0.0.0.0/0)

    Type:ssh ▼| Source type:My IP ▼| Source:xxx.xxx.x.xxx/32 ✕

    Configure storage

    1x:8GiBgp2 ▼Root volume (Default)

    ! หลังจากนี้จะเป็นเนื้อหาที่เพิ่มเติมจากการตั้งค่าตามลิ้งค์ด้านบนนะครับ

    Advanced details

    IAM Instance profile: เลือก IAM Role ที่เราสร้างก่อนหน้านี้

    เมื่อเราสร้าง Instance เสร็จแล้วอันดับต่อไปก็จะเป็นเกี่ยวกับการรันคำสั่งในโปรแกรม Putty นะครับ

    Putty

    สำหรับการเชื่อมต่อ EC2 กับ Putty สามารถดูได้จากลิ้งค์ด้านล่างนี้เลยครับ

  • การ Connect to EC2 by PuTTY
  • เมื่อเราเชื่อมต่อเข้ามาได้แล้วคำสั่งแรกที่ใช้งานคือ sudo su - นะครับเป็นการให้สิทธิ์สูงสุดในการใช้งานระบบ

    ต่อไปให้เราเปลี่ยนแปลงเวลาในเซิร์ฟเวอร์ EC2 ให้เป็น Timezone ของเรานะครับด้วยคำสั่ง
    timedatectl set-timezone Asia/Bangkok

    จากนั้นก็ลองทดสอบเวลาในระบบดูนะครับว่าเป็น Timezone ของประเทศเรารึยังด้วยคำสั่ง date ครับ

    ถ้าเวลาในเซิร์ฟตรงกับเวลาปัจจุบันของเราแล้วก็ถือว่าผ่านครับไปขั้นตอนต่อไปได้เลย
    ต่อไปให้ทำการอัพเดท Package และข้อมูลพื้นฐานของเซิร์ฟเวอร์ให้เป็นเวอร์ชั่นล่าสุดนะครับด้วยคำสั่ง
    yum install -y

    ต่อไปก็จะทำการตรวจชอบเวอร์ชั่นของ Python นะครับว่าตอนนี้มีอยู่ในเซิร์ฟเวอร์ของเราแล้วหรือไม่ด้วยคำสั่ง
    python3 --version

    หลังจากนั้นเราก็จะทำการติดตั้ง PIP (Package Installer for Python) ลงไปยังเซิร์ฟเวอร์ของเรานะครับด้วยคำสั่ง
    pip3 install boto3
    boto3 นั้นคือ AWS SDK ที่ใช้งานสำหรับ Python โดยเฉพาะทำให้ง่ายต่อการทำงานร่วมกันของโค้ดหรือโปรแกรมที่เขียนด้วย Python ครับ

    หลังจากนั้นเราก็จะทำการ Upload โค้ด Python ที่ผมสร้างมาเพื่อทดสอบการส่งข้อมูลไปยัง Firehose นะครับ

    การสร้างโปรแกรมทดสอบการส่งข้อมูลไปยัง Firehose

    เริ่มต้นให้เราพิมพ์คำสั่ง cd ~/
    และตามด้วย
    wget https://raw.githubusercontent.com/classmethod-thailand/cmth_seminar/develop/iot_core_webinar/create_sample_json_to_firehose1.py
    เพื่อ Upload โค้ด Python ที่ผมสร้างไว้ลงไปยังเซิร์ฟเวอร์ครับตามรูปด่านล่างเลย

    ตามด้วยคำสั่งสร้างไฟล์ Python นะครับคือ
    chmod 777 create_sample_json_to_firehose1.py
    และหลังจากนั้นให้เราเข้าไปแก้ไขไฟล์นั้นนะครับโดยใช้คำสั่ง
    vi create_sample_json_to_firehose1.py ตามภาพครับ

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

    firehose_stream_name = "chawish-test-[date]"

    เมื่อแก้ไขเสร็จก็กด esc เพื่อออกจากโหมด insert mode ตามด้วยพิมพ์คำสั่ง :x เพื่อทำการบันทึกข้อมูลที่แก้ไขและออกจากไฟล์ครับ

    ขั้นตอนต่อไปก็ให้เราทำาการ Upload ไฟล์นี้ลงไปยัง Amazon S3 โดยใช้คำสั่ง
    python3 create_sample_json_to_firehose1.py

    หลังจากที่เรารันคำสั่งเสร็จก็ให้รอ 120 วินาทีตามที่ได้ตั้งค่า Buffer interval ไว้ แล้วกลับไปตรวจดูที่ S3 Bucket ของเราว่าระบบมีการสร้างไฟล์อะไรขึ้นมาหรือไม่ ซึ่งถ้าเราทำถูกต้องทุกขั้นตอนระบบก็จะมีการสร้างไฟล์และโฟลเดอร์ขึ้นมาตามวันและเวลา ณ ปัจจุบันนั้น ตามตัวอย่างในรูปนะครับ

    ซึ่งถ้าเราเปิดดูไฟล์ที่อยู่ข้างในก็จะมีฟอร์มข้อมูลแบบนี้ถูกบันทึกอยู่ครับ

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

    การตั้งค่า Cron เพื่อให้ระบบส่งข้อมูลอัตโนมัติ

    ขั้นตอนนี้ให้เราพิมพ์คำสั่ง
    vi /etc/crontab
    เพื่อทำการเพิ่มโค้ดในไฟล์นี้นะครับ โดยให้เรากด i เปลี่ยนเป็น insert mode เพื่อเพิ่มโค้ดนี้ลงไปในไฟล์นะครับ ตามตำแหน่งที่เห็นในภาพเลย
    * * * * * root /usr/bin/python3 /root/create_sample_json_to_firehose1.py

    เมื่อเพิ่มเสร็จก็ให้กด esc เพื่อออกจากโหมด insert mode ตามด้วยพิมพ์คำสั่ง :x เพื่อทำการบันทึกข้อมูลที่แก้ไขและออกจากไฟล์ครับ
    หลังจากนั้นให้เรารอเวลาสัก 2-3 นาทีเพื่อดูข้อมูลใน S3 Bucket ว่าระบบมีการเพิ่มข้อมูลโดยอัตโนมัติหรือไม่ ซึ่งถ้าระบบทำงานได้ปกติก็จะเห็นว่ามีข้อมูลเพิ่มขึ้นมาเรื่อยๆนะครับดังภาพตัวอย่าง

    เพียงเท่านี้ก็เป็นการเสร็จสินการตั้งค่าและใช้งาน Firehose กับ EC2 แล้วครับ

    การ Delete และ Terminate เมื่อเลิกใช้งาน

    ในส่วนนี้ของ EC2 ให้ทำตามลิ้งค์ด้านล่างนี้ได้เลยครับ

  • การ Terminate Instance, ลบ Key Pair และลบ Security Group ใน EC2
  • และในส่วนของ Firehose กับ S3 Bucket สามารถดูขั้นตอนได้จากบล็อกของผมก่อนหน้านี้ได้เลยครับตามลิ้งค์ด้านล่าง

  • การหยุดการใช้งาน
  • สำหรับเนื้อหาในบล็อกครั้งนี้ผมหวังเป็นอย่างยิ่งว่าจะมีส่วนช่วยในการให้ความรู้และวิธีการใช้งาน EC2 ควบคู่กับ Firehose เพิ่มมากขึ้นนะครับ และในอนาคตข้างหน้าผมก็จะเขียนบล็อกให้ความรู้เกี่ยวกับเซอร์วิสของ AWS ต่อไปเรื่อยๆ เพื่อเป็นการเพิ่มประสบการณ์และทักษะในการใช้งาน AWS ให้มากยิ่งขึ้นครับ

    บทความที่เกี่ยวข้อง

  • AWS Amazon Kinesis คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
  • การใช้งาน S3 ควบคู่กับ Amazon Kinesis Data Firehose
  • วิธีการใช้ S3 จาก EC2 และการใช้ AWS CLI S3