無知から学ぶFIWARE #2 ～ GEをひとつ動かしてみる

[前回](https://qiita.com/waarrk/items/5f190c77fdda653e7619)FIWAREとは何者なのか
なにをしちゃうためのものなのかなんとなく調べました．
>
① GEという専用の機能を持ったソフトウェア群がある
② NGSIというデータを問い合わせたりする時のインターフェースが決まっている
③ データモデルはNGSIで転送可能なJSONっぽい形式でコンテキストとして保持される

調べ始める前はFIWAREってどんな魔法なのかと思っていましたが
これROSとそっくりなんじゃないでしょうか．
通信のやり方が規格化されているっていう点ではROS2に近いのかも．

ROS→http://wiki.ros.org/move_base
![20170208075021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021714/26edea21-e0bb-1e2c-2e0e-329b62e1955d.png)

FIWARE→https://fiware-tutorials.readthedocs.io/en/latest/iot-agent/index.html
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021714/696e5690-9e37-d406-b2b6-0412319c2cfc.png)

めちゃめちゃ相性よさそうですね．ROSとFIWAREをつなぐsubscriberとかあったらすごい使いやすそうです

# 本題
**FIWAREはDocker上で動きます**（動くらしいです）
私はDocker入れてあるので入れ方は割愛．Docker Composeも使います．

- Windows Docker インストール: https://docs.docker.com/docker-for-windows/
- Mac Docker インストール: https://docs.docker.com/docker-for-mac/
- Linux Docker インストール: https://docs.docker.com/install/

Dockerバージョン18.03以降 && Docker Compose 1.21以降（だそうです）

ではチュートリアルを撫でていきます

# Orion ContextBroker GEの起動

![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021714/4f78af95-a2cc-d68e-e312-9cc17be1c95d.png)
https://fiware-tutorials.readthedocs.io/en/latest/getting-started/index.html より

Orionはコンテキストを中継するためのブローカーで**GEのひとつ**．
（GEはFIWAREを構成する専用の機能を持ったソフトウェア群のこと）

公式チュートリアルいわく，このOrionを使えばそれはもうFIWAREを使ったシステムと
いっていい，というくらいFIWAREの中心に位置する機能
（コンテキストのブローカーなんだからそれもそう）

**Orionは，MongoDBをいうオープンソースDBを使うとコンテキスト保持機能を
持たせることができる**（内蔵してるわけじゃない）

これら2つの**通信はHTTPによって行われる**→Dockerコンテナで分けてしまえる

つまり
>ここまでのPoint
①Orionはデータを中継するブローカーとしての機能を持っていて
②MangoDBに依存することによってコンテキスト保持機能を備える
③通信はHTTPで開始される

よしやってみよう

>わたしの環境
WSL2 Ubuntu
Docker for Windows v20.10.2
コンソール: 
PowerShell

① MongoDBコンテナ，Orionのコンテナをそれぞれpullして
HTTPで通信するためにnetworkを組みます

```bash:
docker pull mongo:4.2
docker pull fiware/orion
docker network create fiware_default
```

② MongoDB起動！

```bash:
<これは間違いです＞
docker run -d --name=mongo-db --network=fiware_default --expose=27017 mongo:4.2 --bind_ip_all --smallfiles
```
って書いてあるんですけど，実際にやってみたらコンテナがすぐに動作停止するという
変なことになってて時間消し飛ばしました．
ログをのぞいたらError parsing command line: unrecognised option '--smallfiles'
とのことで,ver:4.2では'--smallfiles'は対応してないんだそうです
公式チュートリアルにプルリク出さなきゃじゃん...

```bash:
<こっちが正解です＞
docker run -d --name=mongo-db --network=fiware_default --expose=27017 mongo:4.2 --bind_ip_all
```


③ 気を取り直してOrionも起動！

```bash:
docker run -d --name fiware-orion -h orion --network=fiware_default -p 1026:1026  fiware/orion -dbhost mongo-db
```

-pと--exposeの違いとか各種意味はご自分でどうぞ（逃げ）
docker compose使う方法も公式チュートリアルに載ってるので
みたいひとはご自分でどうぞ（逃げ逃げ）

```bash:
docker ps
```
で，動いてたらたぶんOKですね

# FiWARE的HelloWorld
### Orionの状態確認
さっき晒したポートにアクセスするとOrionが動いてるか見れるらしいです

```bash:
curl -X GET 'http://localhost:1026/version'
```

![スクリーンショット 2021-01-17 170626.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021714/08c602bc-bad8-de25-0a85-bc6a8110dd1b.png)
んあ
あー
こうしましょう

```bash:
curl.exe -X GET 'http://localhost:1026/version'
```

![スクリーンショット 2021-01-17 173245.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021714/31c3b3a3-2f55-0b37-76eb-c3e9c9fa3eb9.png)

はい！帰ってきました．

# 次回は
コンテキストをつくります

次回はｺﾁﾗ→準備中
前回はｺﾁﾗ→[#1 ～ FIWAREってなんぞや？](https://qiita.com/waarrk/items/5f190c77fdda653e7619)
目次はｺﾁﾗ→次回はｺﾁﾗ→[#0 ～ これは目次だよん](https://qiita.com/waarrk/items/55c64042f927d026e07d)