**********************************************************************
セッション:s2c
テーマ  :元・組込みエンジニアが教えるAWSを使ったIoTシステムのバックエンド構築手順
講師   :岡嵜 雄平 株式会社Fusic
日時   :2020/08/21(金) 10:00~11:10
参加人数 :34名
**********************************************************************


■概要
本セッションでは元々組込みエンジニアをしていた講師がWeb・クラウドの世界に飛び込んだときに感じた
ギャップを共有しつつ、IoTシステムのバックエンドを構築する手順を紹介. クラウドサービスには
世界シェアNo.1のAWS(Amazon Web Services)を使用.クラウド構築を経験すると既存の製品やサービス、
各種ライブラリを組み合わせることで簡単にシステムを構築できることを実感できる. 入門者向け内容.

■セッション構成
- はじめてのAWS
AWSの特徴や導入のメリット、料金体系など
- IoTシステム開発ハンズオン
開発手順をハンズオン形式で説明
- IoT開発における組込みエンジニアの価値
組込みエンジニアの持つどのようなスキルがIoT開発で価値を発揮するか, Webエンジニアの視点から紹介

■はじめてのAWS
〇クラウドコンピューティングとは
 インターネットなどを経由してコンピュータ資源を提供すること
  ex. Webサイトのホスティング、オンラインストレージ, IoT・機械学習、データ分析、他

〇オンプレミス(自社運用)の問題をクラウドで解決
- オンプレミスの場合
購入時点でまとまった費用がかかる(将来性を考慮すると初期投資がかかる)
運用・保守が大変
外部からアクセスさせるのが大変(社内のファイヤウォールなどの問題)


- クラウドの場合
最小限のコストで調達できる(段階的に拡張できる)
サービスを活用し、運用・保守できる
簡単に接続できアクセス制御も用意

〇AWS(Amazon Web Services)とは
Amazon.comにより提供されているクラウドコンピューティングサービス
仮想サーバの提供などさまざまなサービスを提供
世界シェアNo1


- EC2
仮想サーバを提供するサービス
Windows/Linuxなど様々なイメージが提供されている
設定によりロードバランシングすることができる

- S3
ストレージサービス. ファイルの保管ができる
99.999999999%の耐久性。 1000万ファイルを保管して、損失が発生するのは100000年に1回
コストパフォーマンスに優れる
- IoT Core
IoTデバイスからデータを受信するエンドポイントやデバイス監視を提供
データ受信したときのアクションを定義
- Lambda
イベントの発生に応じてプログラムを実行する環境を提供
サーバの管理が不要
- DynamoDB
NoSQLなデータベース
読み込み・書き込みのパフォーマンスが高い
スケーラビリティに優れる
- API GateWay
Web APIを簡単に作成するサービス
APIの実処理はLambda, EC2等で実装
スケーラビリティに優れる
- CloudFormation
予め作成したモデルに基づき、インフラストラクチャを自動で構築
いわゆるInfrastructure as Codeを実現

- サーバレス
予めサーバを確保するのではなく、要求が発生してからサーバを動的アサイン
リクエスト数やデータ量に比例して料金が発生
サーバの管理・監視から解放される

〇AWSの料金



■IoTシステム開発ハンズオン
構築システム:部屋の温度を監視・可視化するシステムを開発
計測温度をクラウドへ送信 -AWS-> 閾値を超えたら通知(discordとか)
-> 計測温度を可視化

〇手順
1. CloudFormationでインフラ1式をプロビジョニング
2. LambdaからDiscordにメッセージを送信
3. IoT CoreとDynamoDB・Lambdaの接続を確認
4. mockmockを使ってデータ送信
5. (休憩)
6. DynamoDBからItemを読み出す
7. API GateWayでWebAPIを作成
8. Web上でグラフを表示
9. 後片付け

※後日展開資料の手順参照

■IoT開発における組込みエンジニアの価値
Webの世界にて元・組込みエンジニアが感じたギャップ

〇技術面:通信プロトコル
Web/クラウドの開発で扱うプロトコルは専らHTTP(S)
通信の多くはライブラリに隠ぺいされていて、ステータス/ボディ/ヘッダの中身を意識していれば
開発が進められる
TCP・UDPのソケットプログラミングをすることはほぼなくなった

〇技術面:データフォーマット
システム間のデータのやり取りは専らJSON
Web・クラウドで扱う言語であれば簡単にParseができる
組込み(C言語)では扱いづらい

〇技術面:プログラミング言語
Ruby、Go言語、javaScript, M5Stackを使う時だけC言語
言語の抽象度が高い
エコシステムが充実しておりスピーディに開発できる
新しい言語を学ぶ際にC言語の知識は大いに役立っている
〇非技術面:開発の進め方
Web開発は品質を優先しつつもスピードも重視
-> 顧客のビジネススピードに遅れをとらないように
〇非技術面:技術発信
勉強会や技術ブログでの情報発信が活発
-> 組込みと違ってプラットフォームが共通化
プロダクトや会社の枠を跨いで共通の話題が生まれやすい
OSSを当たり前のように活用・公開する


組込みエンジニアの価値
1. 仮想と現実(物理)をつなぐ
Web・クラウドのみでのユーザへの価値提供が難しくなってきている
要求を実現するためのデバイス選定や物理で起こる問題を窮するする術をもつエンジニアは
価値がある
2. デバイスの運用体制を構築できる
デバイスにも設置・起動・認証・更新といった運用が発生. IoTシステムは膨大な数のデバイスを
運用するため、運用フローやそれをサポートするシステム・機能の設計が必要不可欠
3. エッジで処理する
カメラを使った認証やセキュリティ上データをだせないケース、高速なフォードバック制御が
必要なケースにおいて, エッジでの処理は必要