AWS IoT Core คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS IoT 再入門ブログリレー – AWS IoT Core 編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด

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

เกี่ยวกับ AWS IoT Core

AWS IoT architecture มีโครงสร้างบริการที่หลากหลาย และ AWS IoT Core ก็เป็นหนึ่งในบริการเหล่านั้นโดยเป็นบริการ Managed Service ที่หน้าที่ดูแลเกี่ยวกับ gateway ที่จะเชื่อมต่อจาก อุปกรณ์ IoT กับ AWS Service ครับ

ถ้าให้ยกตัวอย่าง AWS IoT Core ให้เข้าใจง่ายๆก็เป็นเหมือน AWS API Gateway ในเวอร์ชั่น IoT ครับ แต่ขอบเขตบริการของ AWS IoT Core จะกว้างกว่าและอาจจะมีส่วนที่ยากจะเข้าใจอยู่แต่จะลองพยายามให้ทุกคนเข้าใจได้ง่ายขึ้นครับ

โดยในบทความนี้จะอธิบายฟังก์ชั่นที่ AWS IoT Core รองรับตามตารางทางด้านล่างโดยจะแยกเป็น 4 หัวข้อหลักๆดังนี้ครับ

  • Device gateway

เป็นส่วนที่เหมือนเป็นทางเข้าจากอุปกรณ์ (Device) โดยจะอธิบายเกี่ยวกับโปรโตคอลที่อุปกรณ์จะทำการเชื่อมต่อกับ AWS IoT Core และ การตรวจสอบร่วมกันเพื่อการเชื่อมต่อที่ปลอดภัย

  • Message Broker

เป็นส่วนที่เกี่ยวกับการรับส่งข้อความจำนวนมากระหว่างอุปกรณ์ ด้วย Access point ที่เรียกว่า Topic ที่จะช่วยให้กระจายข้อความเชิงโครงสร้างได้เหมือนกับ URI ใน WebAPI

  • Rules Engine

สามารถกรองข้อมูลแบบ SQL ได้ซึ่งทำให้มันสามารถนำไปเชื่อมต่อกับบริการอื่นๆ ของ AWS ได้อย่างเหมาะสม

  • Device shadow

ด้วยการรักษาสถานะอุปกรณ์ในระบบคลาวด์เป็นแบบสแน็ปช็อต ทำให้คุณสามารถอัปเดตสถานะอุปกรณ์จากแอปพลิเคชันและบริการอื่นๆได้แม้ว่าอุปกรณ์จะออฟไลน์อยู่ และยังซิงโครไนซ์เมื่อเชื่อมต่ออุปกรณ์อีกครั้ง

มาลงรายละเอียดในแต่ละข้อกันเลย

Device gateway

Device gateway คือส่วนที่เหมือนเป็นทางเข้าของ AWS IoT Core นอกจากนี้ยังกำหนดวิธีการรับรองอุปกรณ์,client และโปรโตคอลที่ใช้สำหรับการเชื่อมต่ออีกด้วย

การรับรอง

ในขณะที่อุปกรณ์ IoT เชื่อมต่อกับ AWS สิ่งสำคัญคือต้องพิจารณาข้อกำหนดด้านความปลอดภัยของข้อมูลการสื่อสาร AWS IoT เปิดใช้งานการสื่อสารที่ปลอดภัยโดยการรับรองความถูกต้องร่วมกันของclient และเซิร์ฟเวอร์ผ่าน TLS

  • การรับรองความถูกต้องของ server

เมื่ออุปกรณ์ IoT เชื่อมต่อกับ AWS IoT Core เซิร์ฟเวอร์ AWS IoT Core จะส่งใบรับรอง TLS ไปยังอุปกรณ์แบบเดียวกับการเข้าถึงเบราว์เซอร์ไปยัง HTTPS

นอกจากใบรับรองที่ออกโดย AWS IoT Core แล้ว ยังสามารถใช้ใบรับรองของผู้ออกใบรับรองอื่นๆที่รองรับได้อีกด้วย

  • การรับรองความถูกต้องของ ไคลเอ็นต์

AWS IoT Core รองรับวิธีการรับรอง อุปกรณ์IoT (หรือ client) 3 วิธีด้วยกัน

1) ใบรับรองไคลเอ็นต์ X.509・・・ใช้ในอุปกรณ์ IoT เป็นหลัก
2) IAM User, Group, role・・・web application, desktop application, AWS CLI เป็นต้น
3) Amazon Cognito・・・ใช้ใน mobile application

  • การรับรองที่กำหนดเอง

AWS IoT Core ไม่ใช่กลไกในการรับรองแบบเนทีฟ, หากต้องการใช้กลไกการรับรองอื่นๆ ให้ใช้การรับรองที่กำหนดเอง

ในการรับรองที่กำหนดเองจะกำหนดการรับรองสิทธิ์โดยการเรียกคำขอที่มีข้อมูลการรับรองในฟังก์ชัน Lambda สำหรับการตรวจสอบสิทธิ

การอนุมัติ

คุณสามารถเข้าถึง AWS IoT Core ได้โดยใช้ ID ที่รับรองแล้วในกระบวนการตรวจสอบสิทธิ์ด้านบน แต่ทางฝั่ง AWS IoT Core ยังต้องมีกระบวนการในการอนุมัติ ID นั้นด้วย โดย AWS IoT Core จะอนุมัติตาม policy ของ AWS IoT Core และ IAM

AWS IoT Core policy จะอนุญาตการเข้าถึง client และ อุปกรณ์ ในขณะที่ IAM จะอนุญาตให้เชื่อมต่อแหล่งข้อมูลของ AWS ต่างๆ

สำหรับข้อมูลเพิ่มเติม สามารถดูได้ที่เอกสารนี้ครับ Authorization และ Identity and access management for AWS IoT

โปรโตคอลการเชื่อมต่ออุปกรณ์

AWS IoT Core สามารถใช้งานโปรโตคอล MQTT、MQTT over WebSocket Secure(WSS)、HTTPS สำหรับการเป็นโปรโตคอลที่ใว้เชื่อมต่อกับ client และ อุปกรณ์ IoT

  • MQTT

MQTT เป็นโปรโตคอลพื้นฐาน OASIS สำหรับการส่งข้อมูลในรูปแบบ Pub/Sub ที่มีปริมาณเบาในการทำงานบน TCP/IP โดยอิงตามเวอร์ชั่น 3.1.1 บน AWS IoT แต่ทว่า มีข้อกำหนดบางส่วนที่แตกต่างกัน เช่น เรื่องของการรองรับคุณภาพการบริการ (QoS) จึงต้องให้ความสำคัญในส่วนนี้ด้วย

การใช้งาน AWS IoT Device SDKs ที่รองรับภาษาโปรแกรมที่หลากหลาย ทำให้สามารถเชื่อมต่อแบบสองทางกับอุปกรณ์ IoT ได้

  • MQTT over WSS

MQTT over WSS เป็นโปรโตคอลที่อนุญาตให้ MQTT บน WebSocket เชื่อมต่อได้ตามชื่อเลย ซึ่งช่วยให้เชื่อมต่อข้อมูลจากหน้าเว็บโดยใช้โปรโตคอล MQTT บน AWS IoT ได้

  • HTTPS

คุณสามารถส่งข้อความไปยัง AWS IoT ด้วยคำขอ REST API โดยใช้โปรโตคอล HTTP 1.0 หรือ 1.1 ในกรณีนี้จะสามารถเผยแพร่ (Publish)ได้เท่านั้น

HTTPS มีฟังก์ชันที่จำกัดเมื่อเทียบกับ MQTT แต่บนเว็บไซต์อย่างเป็นทางการของ AWS จะมีตารางเปรียบเทียบฟังก์ชัน (โปรโตคอลสำหรับการเชื่อมต่ออุปกรณ์) สามารถอ้างอิงแล้วนำไปใช้ให้เหมาะสมได้

message broker

message broker เป็นตัวช่วยให้ AWS IoT Core รับข้อมูลที่ได้จากการ Publish จากอุปกรณ์ IoT และไคลเอ็นต์ โดยจะทำหน้าที่เป็นเซิร์ฟเวอร์สำหรับรับส่งการประมวลผลข้อมูลในครั้งต่อไป

message broker จะใช้ MQTT Topic เพื่อทำการกระจายข้อความ

MQTT Topic

MQTT Topic เป็นตัวระบุสำหรับการกระจายข้อมูลที่ Publish จากอุปกรณ์ IoT และไคลเอ็นต์ ซึ่งมีรูปแบบคล้าย URI ที่จะแสดงเป็นหลายระดับชั้นของ Topic Level ด้วย "/" (เครื่องหมายทับ)

แนวทางปฏิบัติที่ดีที่สุดทั่วไปในการออกแบบของ Topic level คือ ให้เรียงข้อมูลที่เป็นภาพใหญ่ลงไปสู่ข้อมูลเชิงรายละเอียด

ตัวอย่าง)
building1/floor2/room3/sensor4

จากตัวอย่างทางด้านบนจะเห็นได้ว่ามีการเรียงข้อมูลจากภาพใหญ่ลงมาและเริ่มเจาะจงลงไปเรื่อยๆครับ
building1 (ตึก 1) ↓
floor2 (ชั้น 2) ↓
room3 (ห้อง 3) ↓
sensor4 (เซนเซอร์ 4)

Topic filter

message broker สามารถใช้ Wildcard เพื่อระบุ Topic ที่ Subscribe ไว้ได้ โดยจะระบุ Topic เฉพาะจากข้อมูลที่ Publish มาจาก Topic และสามารถส่งต่อไปยัง Subscribe ได้

ทั้งหมดในหนึ่งชั้น : "+"
* building1/floor2/+/sensor4
* building1/+/+/sensor4

ทุกอย่างในทุกๆชั้น :"#"
* building1/#
* building1/floor2/#

Rule engine

ด้วยการใช้ AWS IoT Rule ทำให้หลังจากประมวลผลและกรองข้อมูลที่ได้รับมาแล้วสามารถส่งต่อไปยัง AWS Service ต่างๆได้ในรูปแบบที่เหมาะสมได้

โดย Rule จะมีหน้าที่หลักๆ 3 อย่างดังนี้

  • จัดการข้อมูลให้เป็นรูปแบบที่ส่งไปยังบริการ AWS ต่างๆได้อย่างเหมาะสม
    ด้วยการกรองข้อมูลจาก SQL statement

  • ตั้งค่า Action ที่เกี่ยวกับ Rule

  • ให้สิทธิ์การเข้าถึงข้อมูลของ AWS โดยการตั้งค่า IAM Role ในข้อกำหนดบางส่วนของ Rule

กรองข้อมูลตามคำสั่ง SQL

เราสามารถกรองข้อมูลด้วยคำสั่ง Query พื้นฐานของ SQL กับข้อมูลที่รองรับได้ จึงสามารถใช้ wildcard ได้เหมือน Topic Filter

โดยเวอร์ชัน SQL ที่พร้อมใช้งานคือ 2015-03-23 ​​​​และ 2016-03-23 ​

ตัวอย่าง)
SELECT temperature as temp FROM building1/floor2/room3/# WHERE temperature > 30

ด้วยฟังก์ชันสามารถใช้คำสั่ง SELECT และ WHERE ได้ ทำให้เราสร้างรูปแบบในการค้นหาได้มากขึ้น

สำหรับดูข้อมูลเพิ่มเติมเกี่ยวกับ AWS IoT SQL reference ได้ครับ

การตั้งค่า Action

ข้อมูลที่ผ่านการกรองโดยการ Query จาก SQL จะถูกส่งไปยังบริการต่างๆตาม Rule action ของ AWS IoT เอกสารอย่างเพิ่มเติมเกี่ยวกับ action ครับ

ปลายทางการจัดส่งไม่ได้มีเพียงแค่บริการต่างๆของ AWS เท่านั้น แต่ยังสามารถเชื่อมโยงกับ Salesforce , ระบุเว็บแอปพลิเคชันอื่นด้วย HTTPS รวมไปถึงยังส่งข้อความไปยัง MQTT Topic อื่นด้วย republish Action ได้อีกด้วย

ในปัจจุบัน Management console ของ AWS IoT สามารถตั้งค่า Action ต่างๆได้ตามนี้ครับ

ตั้งค่าสิทธ์ในการเข้าถึงด้วย IAM ROLE

ในขณะที่เชื่อมต่อบริการต่างๆของ AWS ด้วย action ต้องมีการกำหนดสิทธิ์การเข้าถึงบริการของ AWS ด้วย ซึ่งจะทำให้สามารถควบคุมการเข้าถึงทรัพยากร AWS ผ่าน rule ต่างๆได้

สร้าง Role และ Policy ที่อนุญาตให้เข้าถึงทรัพยากรของ AWS และนำไปใช้กับ Rule

Device Shadow

AWS IoT Device Shadow เป็นบริการเก็บสถานะของอุปกรณ์ IoT บน AWS IoT cloud โดยที่สามารถตรวจสอบหรืออัพเดทอุปกรณ์ IoT ได้ไม่ว่าจะอุปกรณ์นั้นมีการเชื่อมต่อกับ AWS IoT หรือไม่ก็ตาม

อุปกรณ์อาจออฟไลน์ด้วยเงื่อนไขในการติดตั้งบสงอย่าง แต่การมีข้อมูลที่แสดงสถานะของอุปกรณ์ IoT บนระบบคลาวด์ทำให้รู้สถานะของอุปกรณ์ได้จากแอปพลิเคชัน และเมื่อตรวจพบความแตกต่างในการเชื่อมต่อใหม่จะสามารถอัปเดตสถานะอุปกรณ์ได้ทันที

คุณสมบัติในการทำงานของ Device Shadow มี 3 ข้อ

reported ・・・ สถานะอุปกรณ์
desired ・・・ การร้องขออัพเดทจากแอพพลิเคชั่น
delta ・・・ ข้อมูลความแตกต่างที่สร้างขึ้นเมื่อมีความแตกต่างระหว่าง reported และ desired (เมื่ออัปเดตอุปกรณ์เสร็จสิ้นจะถูกลบ)

อัพเดทสถานะปัจจุบันจากอุปกรณ์

ร้องขอการเปิดอุปกรณ์ผ่านแอพพลิเคชั่น

อัพเดทสถานะของอุปกรณ์โดยจะส่งเป็นการแจ้งเตือน delta ไปยังอุปกรณ์

อัพเดท AWS IoT shadow ในสถานะล่าสุดของอุปกรณ์

สรุป

จากเนื้อหาทางด้านบนที่ได้อธิบายไปเกี่ยวกับ AWS IoT Core โดยเน้นไปที่ "Device gateway" "message broker" "Rule engine" และ "Device Shadow"

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

AWS IoT Core ยังมีคุณสมบัติอื่นๆ อีกไม่ว่าจะเป็น Device provisioning, Device Advisor สำหรับการตรวจสอบอุปกรณ์ เป็นต้น หากมีโอกาสตัวผมเองก็อยากจะเรียนรู้เรื่องเหล่านี้เพิ่มเติมเหมือนกันครับ

และหวังว่าบทความนี้จะทำให้เพื่อนๆทุกท่านได้รู้จัก AWS IoT มากขึ้นครับ