きみにとどけサンタもBeam

こんにちは、最近UGに参加して電子工作とクラウド話ができることに感動している　おーつき　と申します。

# サンタネタにします。

せっかくのチャンス、このチャンスを皆様にも便利だな届けたいと思います。
アドベントカレンダーの開きを見れば空いているのが　クリスマス周辺。流石に鳳は来年とらいしてみようとおもいましたが、クリスマス繋がりでいいネタないかなとみていますと最近イベントごとにサンタの格好をしているのもあって皆にもTipsのひとつが届けばいいなと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/21d8ffc8-a49d-16c0-639e-9c074a2a6035.png)

---
# サンタさんが、置き配達した証跡画像を安全な場所に簡単なプロトコルを使って保存しておきたい。しかも安全な回線を使い、いつでも経路を遮断できるようにしたい。

## サンタさんは世界中の子供にプレゼントを配る条件
 1. 子供に知られないように届ける
 1. 正体を知られてはいけない
 1. 確実に家の前ではなく、必要な靴下におくこと 
 1. いい子にしていなければならない


なにかのYoutubeで　サンタさんがあまりにも高速にプレゼントを捌き切るために、子供はBeamのように飛んでくるプレゼントにあたって大怪我しないように早くならなければならないなんて話を聞きました。
こんな便利な時代だからこそ、せめて　メッセージやデータくらいはサンタさんも　お届けした写真くらいは高速におくることができて、正体を知られない秘匿回線が必要（ここではインターネットを経由するではなくSORACOMの基地局経路を直接利用する）。しかも　置き配達　なんて世の中写真を確実に、そしてサンタさんが超高速に移動してる際にデバイスを落としても配送センター側のトナカイサンタたちに正体を知られないように遮断する必要が出てきます。
そんな時に使うのがSoracom Beam なんです。

---

## サンタさんは　以下の条件をソリューションアーキテクトに出しました。
 1. どこにいても繋がる回線
 1. サンタさんの正体を知られないように、また子供へのプレゼント配信の証跡画像をインターネットを経由しないで秘密に確保したい。
 1. サンタさんがデバイスを落としたり、拾われたりしても回線にアクセスできない経路を用意し制御したい。（例えばクリスマスの夜だけ有効な回線としたい）
 1. 撮ったデータはいつでも見返せる、長期保存し来年にも子供達にプレゼントのための費用にまわせるようにコストを抑えたい。

## Soracom Beam  がいいじゃん！
デバイスに通信の暗号化（CPUに負荷かかるやバッテリや通信量の消耗戦になる）を回避して、SORACOMからクラウドに[「オフロード」](https://soracom.jp/services/beam/) できちゃう！ 
オフロードは：　通信するデータを別のネットワークにすることから元のネットワーク負荷を軽減することを指します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/908da7d5-5c49-bd22-d37a-34372ffb05c6.png)


 ### サンタさんに提案するシステム

1. SORACOM SIM + Soracom Air : 秘匿回線は　SIMカードを利用し、回線の遮断をコントロールできる　SIM-USBドングル。
1. SORACOM Beam : 回線からインターネットを経由せずに直接AWSのリソースにアクセスして安全な経路でファイルを送信でき
1. ラズパイ　：　デバイスはラズパイとUSBバッテリとWEBカメラ
1. AWS クラウドアカウント:  利用するのはグローバルに繋がるクラウド　AWSを今回利用する
1. Amazon S3 とAWS Transfer Family for SFTP : SFTPを利用して S3にファイルを転送するために　FileTransferFamily for SFTP をりようして　S3にファイルを配置する

 ```
 [Cam]--USB--[Raspberry::<cron>[Snapshot.sh]--[SoracomAir]]---SFTP-PEM&JPG---->{[Soracom][Beam]--tcp-->[AWS Xf SFTP]}---ObjectCreatedByPut--->[S3]
 ```

 ## 作り方＜AWS側＞

 ### (AWS側)AWS TransferFamily を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/1a8f51ba-b37a-936f-b2e4-596e3a61227f.png)

#### Transfer Family からサーバを作成する
 利用するプロトコルを SFTP を選択する。　
※IoT機器がFTPレベルしか対応できない場合でも　Soracomの回線を利用して転送することも検討できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/f447f5cf-7c74-e225-6a38-a911294795d8.png)

##### 設定は　以下
| ステップ名 | 設定項目の値 | 備考 |
|:-:|:-:|:-:|
| ID プロバイダー  | サービスマネージド  |  S3 |
| エンドポイントを選択 | パブリックアクセス可能   |   |
| ドメインを選択| Amazon S3| |
| 追加の詳細を設定| 標準値  | ※作り込みたい場合（今回は割愛し標準状態とします |

🤖 実際にできたサーバー（作成後破棄しているのでこちらのサーバIDは利用はできません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/63a49811-abe4-77f4-45bd-e3b97fcb7d06.png)

##### 画面内の　「エンドポイント」　をメモしておきます（SORACOM Beamで利用します）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/fd3da5cc-5d94-3a10-e381-4aa82f6bfee7.png)
例）　エンドポイント s-c210662d89d443ce9.server.transfer.ap-northeast-1.amazonaws.com

※こちらのエンドポイントは、現在破棄しています。

##### ユーザを追加する
| 項目名 | 設定項目の値 | 備考 |
|:-:|:-:|:-:|
| ユーザー名| transuser| 任意の名称 |
| ロール | S3 への書き込みを期していください|（ここでは割愛します）|
| SSHパブリックキー| (pem ファイルの中身をここに貼り付けます ) | pemファイル|

🤖 ユーザとSFTP（SSH接続の鍵を要しておく）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/9290e688-3287-f38c-4972-042daf6c0e34.png)

 ## 作り方＜SORACOM側＞
 ### SIMグループを作る
 　※（こちらは　複数あるSIMカードを一つのまとまりにしますが、使い方は省略します）
   SIM グループ名は iotgroup とします。（IDは現在破棄しています）
 　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/0e845337-899e-994a-e64c-0ecdfbc21321.png)

 ### SIMグループに　SORACOM Beam 設定があるので「TCP->TCP エンドポイント」　追加する
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/fab40309-b8af-49f9-8513-863e55a3f4c1.png)
　

 ### (SORACOM側)SORACOMBeam  追加設定
| 項目名 | 設定項目の値 | 備考 |
|:-:|:-:|:-:|
| 設定名 | TransferToS3  |  ラベルなので任意名でよい |
| エントリポイント | beams.soracom.io:8023| ※こちらの　ホスト名とポート番号を　利用するのでメモ 🗒️ |
| 転送先(ホスト名) | ★★AWS側で作成したエンドポイント★★|　例：s-c210662d89d443ce9.server.transfer.ap-northeast-1.amazonaws.com | 
| 転送先(ポート番号) | 22 | SFTP のデフォルトポートは22となります　| 

このような画面設定なれば、SIMカードがこのユーザグループに所属されていれば利用が可能状態となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/f333721a-da95-c852-7d6b-f22e78512626.png)

### 使ってみよう＜デバイス側＞
以下のようにラズパイなりデバイス機器から sftp のコマンドをなげることでファイルがAWSへ転送されます。

ラズパイでの送信はプログラムを書いてもいいですが、ここでは　単純なsftp コマンドを利用します。
```
$ sftp -i ~/.ssh/★★pem鍵★★ -oStrictHostKeyChecking=no -oPort="8023" ./★★送信したいファイル★★ transferuser@beam.soracom.io/
```
ものすごく簡単にファイル送信ができるようになります。クラウドCLIの専門のクライアントのコマンドを覚えたり
デバイスに新しい技術を覚えて送る必要のないあたりがおーつきは、おすすめで気に入って利用しています。

## SORACOMのいいところは
 - SIMカードをいつでもコンソールから　開始・停止できる　・・・　つまりはデバイスを紛失した場合、格納先の鍵ファイルを盗まれた場合でも即座に経路が無効化されます。
 - 転送先の隠蔽　・・・　S3などのエンドポイントや関連する情報が隠蔽できます。経路の遮断とは異なりますが、直接S3となる箇所をSoracomのホスト名で隠蔽できる。ドメインを新しく取る場合に意外と仕事の現場ではハードルが上がったりします（ドメインの取得が会社のワークフローを通す必要が結構難になることが多い）
 - 簡素な設定で　作り込みが不要。　AWSでもビルドブロックという言葉がありますが、その思想に通じるところがあり、直接クラウドリソースを使って作り込むあたりを代わりに提供してさらにSIMカードという基地局を経由した特殊な回線を直接利用することができる。

とインターネットでやればいいじゃんや直接モバイルWifiでいいじゃんのハードルをぐっと下げてくれるところです。サンタさんも各国利用可能なSIMがSORACOM経由で購入利用できるので今年も安心して子供達に　プレゼントを配送できますね。それでは！


### 発展した話
もっと完全な経路を閉域網としたい場合　SORACOM　Direct という　そのままAWSなどのクラウドへ接続で直結できるようになります。　　この場合は　VPGなどの契約がひつようになるのでその話はまた別のところで！