元・組込みエンジニアが教えるAWSを使ったIoTシステムのバックエンド構築手順 - はじめてのAWS 2020-08-21(Fri) 10:00-11:10
SWEST 22 セッションS2

先進技術部門 IoTチーム エンジニア
岡嵜 雄平

1

！
資料は全て後日公開します
メモよりも聞くことに集中いただけると幸いです🙏
質問や感想をぜひTwitterでつぶやいてください
ハッシュタグ: #SWEST22_s2c

本セッションでお話すること
これから説明第1部: はじめてのAWS
AWSがはじめての方向けに、AWSの特徴や導入のメリット、料金体系などをご説明します

第2部: IoTシステム開発ハンズオン
AWSを使ってIoTシステムのバックエンドを開発する手順をハンズオン形式で説明します。
実際にシステムを構築することで、クラウド上のシステムを簡単に構築できることがお分かりいただけるはずです。

第3部: IoT開発における組込みエンジニアの価値
組込みエンジニアの持つどのようなスキルがIoT開発で価値を発揮するか、Webエンジニアの視点からご紹介します。

4自己紹介‣ID-image‣@yuuu@Y_uuuWork at
先進技術部門 IoTチーム エンジニア

‣

Skill

岡嵜 雄平
Okazaki Yuhei
5

01
クラウドコンピューティングとAWS

クラウドコンピューティングとは• インターネットなどを経由してコンピュータ資源を提供すること• 確保した資源を利用してさまざまなことを実現する• 例：• Webサイトのホスティング• オンラインストレージ• IoT・機械学習• データ分析• Etc

7

オンプレミス(自社運用)の問題をクラウドで解決• オンプレミスの場合

購入時点でまとまった費用がかかる

将来的に100万PVのサイトになる
想定でハイスペックなサーバを…

8

オンプレミス(自社運用)の問題をクラウドで解決• オンプレミスの場合• クラウドの場合

購入時点でまとまった費用がかかる

最小限のコストで調達できる

将来的に100万PVのサイトになる

小さいスペックから始めて後から増強しよう！

想定でハイスペックなサーバを…

9

オンプレミス(自社運用)の問題をクラウドで解決• オンプレミスの場合

運用・保守が大変サーバの負荷が上がったときの通知機構を作らないと。あ、週次バックアップはどうしよう…。

10

オンプレミス(自社運用)の問題をクラウドで解決• オンプレミスの場合• クラウドの場合運用・保守が大変サービスを活用し運用・保守ができるサーバの負荷が上がったときの通知機構を作らないと。あ、週次バック画面上で設定するだけで、サーバ監視も自動バックアップも簡単に実現できた！

アップはどうしよう…。

11オンプレミス(自社運用)の問題をクラウドで解決• オンプレミスの場合外部からアクセスさせるのが大変社内ネットワークにどう接続しよう…各サーバにファイアウォールも入れないと12オンプレミス(自社運用)の問題をクラウドで解決• オンプレミスの場合• クラウドの場合外部からアクセスさせるのが大変

簡単に接続できアクセス制御も容易

社内ネットワークにどう接続しよ

簡単にインターネットに公開できて、ファイアウォールも簡単に設定できた！

う…各サーバにファイアウォールも入れないと13

AWS(Amazon Web Services)とは• Amazon.comにより提供されているクラウドコンピューティングサービス• 仮想サーバの提供はもちろん、さまざまなサービス(おおよそ200)を提供

14

AWS(Amazon Web Services)とはパブリッククラウドにおける世界シェアNo.1(2019年)

15AWSを利用するメリット• サービスの種類が豊富なため柔軟性に長けている• 実績が多く安定している• ノウハウが充実している• ネット検索はもちろん、AWSサポートにも膨大なノウハウがある• トラブルシューティングしやすい16

02
AWSの代表的なサービス

「第2部: IoTシステム開発ハンズオン」で構築するシステム
AWSを使って、以下の構成でシステムを構築します。

18

EC2

• いわゆる仮想サーバを提供するサービス• Windows/Linuxはもちろん、さまざまなイメージが提供されている• 設定によりオートスケーリングやロードバランシングも可能• 本日のハンズオンでは使用しません

19

S3

• ストレージサービス。ファイルの保管ができる• 99.999999999%の耐久性• 1000万ファイルを保管していて、損失が発生するは100000年に1回• コストパフォーマンスに優れる

20

IoT Core• IoTデバイスからデータを受信するエンドポイントや、デバイス監視を提供• データを受信したときのアクションを、他のサービスと連携して定義できる

21

Lambda• イベントの発生に応じてプログラムを実行する環境を提供• サーバの管理が不要• さまざまなプログラミング言語に対応• Java、Node.js、C#、Python、Go、PowerShell、Ruby• カスタムランタイムでErlang、Elixir、COBOL、N|Solid、PHP、C++、Rustも• コストパフォーマンスに優れる

22

DynamoDB• NoSQLなデータベース• いわゆるSQLを発行できるデータベース(MySQLやPostgreSQL)とは異なる• 読み込み・書き込みのパフォーマンスが高い• スケーラビリティに優れる

23

API Gateway• Web APIを簡単に作成するサービス• APIの実処理はLambda, EC2等で実装• スケーラビリティに優れる

24

CloudFormation• 予め作成したモデルに基づき、インフラストラクチャを自動で構築• いわゆるInfrastructure as Code(インフラをコード化)を実現

25

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

リクエストやデータがなければ、料金も発生しない

26

03
AWSの料金ハンズオンで発生する料金• 無料枠があるアカウント(12ヶ月以内にアカウント作成、無料枠が残っている)• 本日のハンズオンの手順を逸脱しない限り、無料枠に収まる想定• 無料枠がないアカウント• 弊社環境で$1未満の料金が発生することを確認しています28

S3の無料枠• 5 GB の Amazon S3 ストレージ• 20,000 GET リクエスト• 2,000 PUT、COPY、POST、あるいは LIST リクエスト、データ送信 15 GB

29

IoT Coreの無料枠• 接続時間 2,250,000 分• メッセージ 500,000 件• レジストリまたはデバイスシャドウのオペレーション 225,000 回• トリガールール 250,000 件、実行アクション 250,000 件

30Lambdaの無料枠• 1 か月ごとに 100 万件の無料リクエスト• 40 万 GB-秒のコンピューティング時間31

DynamoDBの無料枠• 25 GB のストレージ• 25 個のプロビジョニングされた書き込みキャパシティーユニット (WCU)• 25 個のプロビジョニングされた読み込みキャパシティーユニット (RCU)32

API Gatewayの無料枠• 月間の HTTP API コール数 100 万件• REST API コール数 100 万件• メッセージ数 100 万件 (送信または受信)• 接続時間 750,000 分

33CloudFormationの無料枠• アカウントごとに 1 か月で 1,000 のハンドラーオペレーション• ハンドラーオペレーションとは、リソースに対する作成・更新・削除・読み込み・一覧作成などのアクションのこと

34

Next
それではハンズオンをはじめましょう！

元・組込みエンジニアが教えるAWSを使ったIoTシステムのバックエンド構築手順 - IoTシステム開発ハンズオン 2020-08-21(Fri) 10:00-11:10
SWEST 22 セッションS2

先進技術部門 IoTチーム エンジニア
岡嵜 雄平

1

本セッションでお話すること
第1部: はじめてのAWS
AWSがはじめての方向けに、AWSの特徴や導入のメリット、料金体系などをご説明します

これから説明第2部: IoTシステム開発ハンズオン
AWSを使ってIoTシステムのバックエンドを開発する手順をハンズオン形式で説明します。
実際にシステムを構築することで、クラウド上のシステムを簡単に構築できることがお分かりいただけるはずです。

第3部: IoT開発における組込みエンジニアの価値
組込みエンジニアの持つどのようなスキルがIoT開発で価値を発揮するか、Webエンジニアの視点からご紹介します。

2

「第2部: IoTシステム開発ハンズオン」で構築するシステム
IoT事例でよく見かける、部屋の温度を監視・可視化するシステムを開発します。

3

「第2部: IoTシステム開発ハンズオン」で構築するシステム4目次 (1/2)

1. CloudFormationでインフラ一式をプロビジョニングしよう
2. LambdaからDiscordにメッセージを送信しよう
3. IoT CoreとDynamoDB・Lambdaの接続を確認しよう
4. mockmockを使ってデータを送ってみよう5. (ここで休憩)

②④

③①
5

目次 (2/2)

6. DynamoDBからItemを読み出そう
7. API GatewayでWebAPIを作ろう
8. Web上でグラフを表示しよう
9. 後片付けをしよう

⑥

⑦

⑧

⑨
6

ハンズオンを進める上での注意• セッション中に質問などありましたらZoomのチャットでお願いします• オンラインなので解決が難しい可能性もありますが、善処します• セッション後のTwitterやDiscordでのご質問も歓迎します7ハンズオンを進める上での注意• 操作ミスによるAWS料金の増加にご注意ください。(自己責任でお願いします)• Lambda Functionのコードを変えて無限ループさせない• mockmockの設定を変えて、起動時間を延ばさない8

01
CloudFormationでインフラ一式をプロビジョニングしよう

AWSにログイン
https://aws.amazon.com/jp/ へアクセスクリック

10

AWSにログイン

入力

入力クリッククリック

11CloudFormationの画面へ移動注意: 「東京」が選択されていることをご確認ください「cloudformation」と入力

クリック

12

「スタックの作成」へ移動

クリック

13

「スタックの作成」へ移動 ※スタックの一覧が表示された場合

クリック

14

スタックの作成

クリック
クリック

クリック
https://swest22-session-s2c.s3-ap-northeast-1.amazonaws.com/out.yamlと入力 ※後ほどZoomでも共有します15スタックの作成「SWEST22」と入力 ※任意の名前でOK

クリック

16

スタックの作成

クリック17スタックの作成

3つともチェック
クリック

18

スタックの作成
クリック

さまざまなサービスのリソースが作成されている「CREATE_COMPLETE」になったら作成完了

19

🎉
本日の構築作業の9割が完了！

何が起こったか？
クリック

スタックの作成画面で入力したURLにテンプレート(クラウド構成の設計図)が記述されている

21

設計図に基づき、AWS内のリソースが構築構築完了

22後で使うのでメモしてください
クリック

メモまたはリンクをクリックして別タブで開く、でもOK
スタックの作成画面で入力したURLにテンプレート(クラウド構成の設計図)が記述されている

23

02
LambdaからDiscordにメッセージを送信しよう

対象となるサービス

25

Discordチャンネルに参加ください

この後、招待リンクをZoomにて共有します26

Lambdaの画面へ移動

クリック「lambda」と入力し、表示される項目をクリック

27

Lambda関数の画面へ移動「SWEST22-NotifyTemperatureFunction-xxxx」
をクリック

28

Lambda関数を一部編集<WEBHOOK URL>をこの後Zoomで共有するURLで置き換え<NAME>を任意の名前で置き換え※送信元を区別するのが目的なので任意の名前でOKです29

Lambda関数をテスト

先にクリッククリック30

Lambda関数をテスト「temperature」と入力 ※任意の名前でOK

このように修正クリック

31Lambda関数をテスト

クリック

32

03
IoT CoreとLambdaの接続を確認しよう

対象となるサービス34クリック

IoT Coreの画面へ移動「iot core」と入力し、表示される項目をクリック

35

「ルール」へ移動

クリック

36

IoT Core→Lambdaのルールを確認

クリック

37

IoT Core→Lambdaのルールを確認送信されたJSONのvalueキーの値が30を超えた場合に、Lambdaへvalueを通知

38

IoT Core→DynamoDBのルールを確認

クリック

39

IoT Core→DynamoDBのルールを確認送信されたトピック名の末端の単語およびJSONのtimestampとvalueをDynamoDBへ通知
クリック

40

04
mockmockを使ってデータを送ってみよう

対象となるサービス

42

「証明書」へ移動

クリック

43

IoT Coreとの認証に使う証明書を作成

クリック

44

IoT Coreとの認証に使う証明書を作成

クリック

45

IoT Coreとの認証に使う証明書をダウンロード

3ファイルともダウンロード

クリック

46

IoT Coreとの認証に使う証明書をダウンロード

別タブで開く47

IoT Coreとの認証に使う証明書をダウンロード

リンク先を保存48

IoT Coreとの認証に使う証明書をダウンロード

クリック

49

IoT Coreとの認証に使う証明書をにポリシーをアタッチ

クリック

50

IoT Coreとの認証に使う証明書をにポリシーをアタッチ

クリック

クリック

51

設定へ移動クリック

52

エンドポイントを確認後で使うのでメモしておく

クリック

53

mockmockのコンソールにログイン
https://console.mock-mock.com/users/sign_in へアクセスし、ログイン

54

「プロジェクトをコピー」へ移動

クリック

55

プロジェクトをコピー

クリック

選択

クリック

56

プロジェクト作成「送信先ホスト」を先の手順で確認した「エンドポイント」に変更

先の手順でダウンロードした証明書ファイル(拡張子がcrt)を選択

先の手順でダウンロードした秘密鍵ファイル(末尾がprivate.pem.key)を選択
先の手順でダウンロードした「AmazonRootCA1.pem」を選択
クリック

57

mock作成

クリック
クリック

58

mock作成「0A-001」と入力※任意の文字列でOK「1」と入力
クリック※任意の文字列でOK

59

mock起動「操作」→「起動」をクリック

60

クリック

DynamoDBの画面へ移動「dynamo」と入力し、表示される項目をクリック

61

Temperatureテーブルへ移動
クリック

クリック

62

mockから送信されたデータを確認

送信されたデータが書き込まれている63

05
休憩時間です(予定時間10分)
ここまでの感想や質問をぜひTwitterでつぶやきましょう！
ハッシュタグ: #SWEST22_s2c64

06
DynamoDBからItemを読み出そう対象となるサービス

66

Lambdaの画面へ移動

クリック「lambda」と入力し、表示される項目をクリック

67Lambda関数の画面へ移動「SWEST22-FetchTemperatureFunction-xxxx」をクリック

68Lambda関数のプログラム

DynamoDBから指定したidのItemを取得取得したItemから欲しいキーを抜き出す取得したItemをJSONで返却

69

Lambda関数をテスト

先にクリッククリック

70

Lambda関数をテスト「test」と入力 ※任意の名前でOK

このように修正※mockmockで入力したserial_numberに合わせてください

クリック

71

Lambda関数をテスト
クリック

Lambeda関数の返り値が表示される

72

07
API GatewayでWebAPIを作ろう対象となるサービス

74

API Gatewayの画面へ移動

クリック「api」と入力し、表示される項目をクリック

75

APIの画面へ移動

クリック

76

APIのリソースとアクション

クリック
GET /temperature/{id}へのリクエストがSWEST22FetchTemperatureFunctionに紐付けられている

77

APIのテスト

先の手順でメモしたApiURL + serial numberへアクセス※メモを忘れた場合はCloudFormationの出力タブで確認ができます78

APIのテスト

DynamoDBに保存されたデータがJSON形式で読み出される

79

08
Web上でグラフを表示しよう

対象となるサービス

81表示するページのHTMLファイルをダウンロード

https://swest22-session-s2c.s3-ap-northeast-1.amazonaws.com/pages.zip

82表示するページのHTMLファイルを修正
先程ダウンロードしたZIPファイルを解凍し「index.html」をエディタで開く

32行目の「<API URL>」をApiURL + serial number で置き換える

83

S3の画面へ移動

クリック「s3」と入力し、表示される項目をクリック

84公開用バケットの画面へ移動「swest22-s3-bucket-」から始まるバケットをクリック

85

HTMLファイルをアップロード

先程編集した「index.html」をドラッグ・アンド・ドロップ

86HTMLファイルをアップロード

クリック

87

公開用のURLを確認

クリック

88

公開用のURLを確認

公開用のURL

89

公開用のURLを確認

mockmockから送信したデータが表示される

90

09
後片付けをしようS3のバケットの中身を空にする

クリック

バケットを選択92

クリック

IoT Coreの画面へ移動「iot core」と入力し、表示される項目をクリック

93

ポリシーを削除

クリック

クリック

94

クリック

CloudFormationの画面へ移動「cloudformation」と入力し、表示される項目をクリック

95

スタックを削除
クリック

スタックを選択96🎉
お疲れさまでした！

元・組込みエンジニアが教えるAWSを使った
IoTシステムのバックエンド構築手順- IoT開発における組込みエンジニアの価値 2020-08-21(Fri) 10:00-11:10
SWEST 22 セッションS2

先進技術部門 IoTチーム エンジニア
岡嵜 雄平

1

本セッションでお話すること
第1部: はじめてのAWS
AWSがはじめての方向けに、AWSの特徴や導入のメリット、料金体系などをご説明します

第2部: IoTシステム開発ハンズオン
AWSを使ってIoTシステムのバックエンドを開発する手順をハンズオン形式で説明します。
実際にシステムを構築することで、クラウド上のシステムを簡単に構築できることがお分かりいただけるはずです。
これから説明第3部: IoT開発における組込みエンジニアの価値
組込みエンジニアの持つどのようなスキルがIoT開発で価値を発揮するか、Webエンジニアの視点からご紹介します。

2

🙏
私自身の観測範囲での見解です。ご了承ください「うちは違うよ！」という内容もあるかもしれません👀
Webの世界にて元・組込みエンジニアが感じたギャップ

01
技術面: 通信プロトコル

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

02
技術面: データフォーマット

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

03
技術面: プログラミング言語

プログラミング言語: 高級言語

• 自分の場合はRuby, Go言語, JavaScript、M5Stackを扱うときだけC言語• 言語自体の抽象度が高い• エコシステムが充実しておりスピーディに開発できる• 新しい言語を学ぶ際にC言語の知識は大いに役立っている10

04
非技術面: 開発の進め方

開発の進め方: スピード重視• Web開発は品質を優先しつつスピードも重視• 顧客のビジネススピードに遅れを取らないように• 組込み開発は言うまでもなく品質重視

Q 品質• フロントローディングに力を入れ、フェーズ移行の判定が厳格

C コスト

D 納期

• どちらが良い、ではなく「一長一短」• 開発対象の規模だったり、顧客に依って変わるもの
12

05
非技術面: 技術発信

技術発信: かなり積極的• 勉強会や技術ブログでの情報発信が活発• 組込みと違ってプラットフォームが共通化• プロダクトや会社の枠を跨いで共通の話題が生まれやすい• OSSを当たり前のように活用・公開する• エコシステムが出来上がっている14

💰
組込みエンジニアの価値

01
仮想と現実(物理)をつなぐ

仮想と現実(物理)をつなぐ• Web・クラウドのみでのユーザへの価値提供が難しくなってきている• Web・クラウドはいわば仮想の世界で「物理」とは遠い• 要求を実現するためのデバイス選定(場合によっては回路設計)や、物理で起こる問題を吸収する術を持つ組込みエンジニアは価値がある

17

02
デバイスの運用体制を構築できるデバイスの運用体制を構築できる• デバイスにも設置・起動・認証・更新といった運用が発生• IoTシステムは膨大な数のデバイスを運用するため、運用フローやそれをサポートするシステム・機能の設計が必要不可欠

19

03
エッジで処理する

エッジで処理するカメラを使った顔認証や、セキュリティ上データを外に出せないケース、高速なフィードバック制御が必要なケースにおいて、エッジでの処理は必要

21

👋
最後に

IoTを盛り上げていきましょう• 本セッションは簡単なIoTシステムの構築方法を解説しました• 実際のIoTはもっと巨大・複雑で、足を踏み出せない企業・人も多い• IoTシステムの構築でお悩みの方• IoTシステムの開発をしてみたい
エンジニアの方• ぜひ弊社にお声掛けください

23Thank You
ご清聴いただきありがとうございました

We are Hiring !
https://recruit.fusic.co.jp/