從本篇我們將開始發布一系列的文章介紹如何結合 7688 Duo (或是 Arduino Yun)與亞馬遜物聯網服務。此系列的內容節錄自本團隊的將要出版的新書《7688 Duo 雲端應用手冊(暫定)》中,本書目前在校稿階段,最後出版內容可能會有些許不同。
本章我們將介紹如何結合7688 Duo以及亞馬遜雲端服務(Amazon Web Service, 簡稱AWS)。在前面的章節我們介紹了 MCS雲端服務,雖然MCS在設定與使用上都非常簡單快速,功能也非常豐富,然而與AWS相比,AWS則是包山包海。AWS不僅提供物聯網服務,還有其他各式各樣的服務,也因此,透過AWS,我們可以發展更多應用 。事實上,MCS就是以AWS為基礎開發出來的。接下來我們會先簡單介紹什麼是AWS、帶領您認識並使用AWS IoT的開發環境、以及如何讓AWS IoT與7688 溝通。
什麼是雲端服務?
無論您是在執行擁有數百萬行動使用者的照片共享應用程式,還是要為您業務的關鍵營運提供支援,「雲端」都可讓您快速存取靈活且成本低廉的 IT 資源。透過雲端運算,您無需預先在硬體投資巨額資金,然後花大量時間和精力來維護和管理這些硬體。反之,您可以精準佈建所需的類型和規模的運算資源,為您的新點子提供助力,或者協助您的 IT 部門運作。您可以借助雲端運算來即時存取所需的資源,且只需要為使用量付費。
雲端運算提供一種簡單的方式透過網路來存取伺服器、儲存、資料庫和各種應用程式服務。像 Amazon Web Services 這樣的雲端運算提供商,他們擁有和維護此類應用程式服務所需的硬體,而您只需要透過 Web 應用程式就可以佈建和使用所需的資源。
雲端運算有三種主要類型,通常分別稱為基礎設施即服務 (Infrastructure as a Service, IaaS)、平台即服務 (Platform as a Service, PaaS) 和軟體即服務 (Software as a Service, SaaS)。針對您的需求選擇正確的雲端運算類型,有助於您在繁重工作中取得良好平衡。
基礎設施即服務包含基本的雲端 IT 建構區塊,且通常能提供聯網功能、電腦 (可以是虛擬的,或是專屬的硬體) 及資料儲存空間的存取。基礎設施即服務可為您擁有最大彈性和最高層級管理控制的 IT 資源,且與目前許多 IT 部門和開發人員熟悉的現有資源最類似。平台即服務可讓公司與組織無須管理基礎設施 (通常是硬體和作業系統),並讓您能專注於應用程式的部署和管理。因為您不需要擔心執行應用程式時的資源採購、容量規劃、軟體維護、修補,或任何其他相關的繁重工作,所以能協助您更有效率地工作。軟體即服務可提供您由服務供應商執行和管理的完整產品。在大部分情況下,一般所說的軟體即服務指的是最終使用者應用程式。有了 SaaS 產品,您就不需要考慮如何維護服務或如何管理基礎設施;您只需要思考如何運用該特定軟體。最常見的 SaaS 應用程式範例就是網路電子郵件,您可以在該應用程式收發電子郵件,而不需管理電子郵件產品中額外的功能,或維護執行電子郵件程式的伺服器和作業系統。
亞馬遜雲端服務產品
- AWS提供了各式各樣的雲端服務解決方案,主要有以下幾類:
- 網站以及網路應用程式(Websites & Web Apps) • 行動服務(Mobile Services)
- 備份、儲存以及封存服務(Backup, Storage, & Archive)
- 巨量資料以及高效能運算(Big Data & High Performance Computing)
- 財務金融服務(Financial Services)
- 遊戲開發(Game Development)
- 數位媒體(Digital Media)
- 健保與生命科學(Healthcare & Life Sciences)
- 商務應用(Business Apps)
在各個解決方案下,則包含許多不同的產品,圖9-1即為AWS所有雲端服務產品。由於AWS包含的內容非常廣泛,這裡我們就不一一介紹各個領域。您只需要知道個服務都可以互通有無,舉例來說,我們可以透過AWS IoT將IoT裝置的資料上傳,而在資料上傳後,則可以使用AWS的資料庫產品來儲存資料,或是高效能運算產品進行資料分析。
圖 9-1 AWS 提供的所有雲端服務產品一覽。
註冊帳號
在開始使用AWS IoT服務前,我們需要先註冊一個AWS帳號。請連至https://aws.amazon.com/,並點選「建立免費帳號(Create a Free Account)」,如圖9-2所示。您可以在畫面右上角切換語言為繁體中文,但是並不是所有的頁面都有中文版本。
圖 9-2 註冊一個AWS帳號。
接著您會進入登入畫面,如圖9-3所示。請點選「新使用者(I am a new user)」並登入(sign in),接下來只要照個畫面上的指示操作即可。
圖 9-3 登入AWS以建立帳號。
目前若您是一般使用者且沒有要開發商業應用,註冊帳號後的第一年免費(少數服務還是需要付費例如AWS Kinesis)。但是您仍要輸入您的信用卡資訊以啟用帳號。 註冊完帳號後,您即可登入AWS IoT的後台了,請將游標移至產品(Products),並點選AWS IoT,如圖 9-4 所示。
圖9-4 註冊完帳號後即可登入AWS IoT 後台。
亞馬遜物聯網服務(AWS IoT)
在正式開始體驗AWS IoT的各項功能前,先讓我們來瞭解一下其架構與背景。透過AWS IoT,物聯網裝置可以輕易地存取AWS雲,並與AWS各項雲端服務互動。常見的物聯網應用則包含收集以及處理各式遙測數據,與硬體的遠端控制等等。AWS IoT與物聯網裝置的互動可以透過 MQTT以及HTTP協定來進行,基本上是以MQTT為主。
在AWS IoT中,物聯網裝置透過上傳JSON格式的訊息至特定的MQTT主題以回報它們的狀態。因此,在上傳資料到AWS IoT時,請務必確保您的資料符合JSON格式,且上傳到正確的MQTT主題上。每個MQTT主題都具有一個階層式的名稱架構,用來表示AWS IoT元件 (Things) 的更新狀態,我們在後面的範例中即會看到這樣架構的實際應用。在這裡,AWS IoT元件並不是指實體的物聯網元件 (例如7688 Duo),AWS IoT元件是AWS所提供的服務,讓您的實體裝置可以跟AWS溝通。
當一個訊息被發布到一個MQTT主題上時,此訊息會先被AWS IoT 的 MQTT訊息仲介 (Message Broker) 所接收。這個訊息仲介的用途在於接收並轉發所有被發布到MQTT主題的訊息至全部有訂閱該主題的用戶端中。物聯網裝置與AWS 之間的連線是透過 X.509 憑證所保護。您可以使用自己的憑證,或是讓AWS IoT幫您產生憑證,而此憑證必須在AWS IoT上被註冊以及啟用,且附加到AWS IoT元件上,您的物聯網裝置將透過此憑證來與AWS IoT服務連線。關於元件的資訊以及憑證都會被儲存在該元件的目錄(Thing Registry) 中。
AWS IoT強大的地方在於您可以輕易地透過其規則引擎 (Rules Engine) 來結合亞馬遜所提供的其他雲端服務,以及將資料傳送到其他雲端裝置。舉例來說,您可以設立一個簡易的規則,將物聯網裝置所上傳到AWS IoT的資料轉存到亞馬遜的雲端資料庫 AWS DynamoDB 中,或是使用雲端運算服務AWS Lambda執行程式以分析資料,或是透過訊息服務AWS SNS傳送簡訊給手機回報裝置最新狀態。AWS IoT的規則引擎使用其專有的語法來過濾訊息,一旦物聯網裝置上傳的資料符合特定語法,就會執行相對應的動作。規則引擎本身也結合了亞馬遜的身份與存取管理服務 (Identity and Access Management, IAM),以保護整個過程的安全性。圖 9-5即為AWS IoT的架構圖。
圖9-5 AWS IoT 架構 (圖片取自http://docs.aws.amazon.com/)。
每個 AWS IoT 元件都具備一個元件映像 (Thing Shadow) 來讀取與儲存元件的狀態,其中狀態則包含應用程式所要求的狀態以及元件的上一個狀態。當一個應用程式對 AWS IoT 元件要求當前狀態時,元件映像會回傳一個含有元件狀態、註解、版本的 JSON 格式檔案給程式端。也就是說,一個應用程式可以透過要求改變AWS IoT元件的狀態來操控一個實體的物聯網元件。 AWS IoT 的元件映像會接收應用程式的要求、更新元件的狀態,並回傳一個訊息以讓用戶端確認狀態已被更新,而AWS IoT 元件也會同步更新。 讓我們舉一個實際應用的例子來進一步說明元件映像的功用。假設您的物聯網裝置是一個可以透過手機應用程式遙控的三色LED燈,也就是說,您可以透過手機控制燈光的顏色。當您產生一個相對應的 AWS IoT 元件後,其元件映像就會儲存此 LED 燈的狀態(在這裡就是燈的顏色) 。現在,假如您使用手機將燈光顏色設定為紅色,然後關掉 LED 的電源,接著再利用手機將燈光顏色改為綠色,接著打開電源,您會發現 LED 變為綠色而不是停留在紅色,即便您是在它沒有電時更改顏色。這就是元件映像的功用:即使您的實體物聯網元件沒有在運作,您仍可以使用應用程式改變元件的狀態,這時 AWS IoT上 的元件映像就會儲存此狀態,當您的實體裝置恢復運作後,元件映像就會與它更新最新的狀態。
小筆記:JSON
JSON 是”JavaScript Object Notation” 的縮寫,為一種用來統一資料與數據的文字格式,具有輕便以及易讀的特性。JSON格式的資料常用於網路應用程式與伺服器之間的溝通,是除了傳統的XML (Extensible Markup Language) 格式外的另一個選擇。 舉例來說,以下的JSON檔案範例描述了一間公司員工的姓名,包含一個物件「員工 (employees)」以及一個陣列「姓名 (firstName, lastName)」: 同樣的內容若是改寫成XML 則會具有以下的形式: 相比之下,JSON是否更加簡潔易讀呢? |
參考資料
- What is Cloud Computing?
https://aws.amazon.com/what-is-cloud-computing/?nc2=h_l2_cc
- AWS IoT Developer Guide
http://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html
- What is JSON?
http://developers.squarespace.com/what-is-json/