Zetta platform 試してみた

## TL;DR
Zetta platformを使ってNat越え通信をお試ししてみた記録です。

## Zenoh とは

とにかく軽くて、かなり何でもつながる凄いプロトコルです。

詳しい説明は@Shintaro_Hosoaiさんの[こちらの記事](https://qiita.com/Shintaro_Hosoai/items/0bde489cde43a00d6f96)や@takasehidekiさんの[このプレゼン](https://speakerdeck.com/takasehideki/nansikairoirotunagaruzenohnoshao-jie)等を参照ください。

Zenoh Routerと呼ばれるサーバを用いることで、遠隔地の別ネットワークのPC同士でもpub/sub通信させることができます。また、MQTTやOPC-UAの様なPLCで使う通信規格や各種DBとも通信が可能です。

## Zetta platformとは

Zenohの開発を行っているZetta Scaleが運営しているZenoh用のPaaSです。ZenohのRouterメッシュの管理をしたり、クライアントに渡す認証情報の発行をWebで完結させることができます。

AWSやAzureで自前のZenoh Routerを建てれば通信はできるのですが、Zetta Platformを使えば、ネットワークの設定等の手間を少しだけ省くことができます。[参考](https://www.zettascale.tech/news/zetta-latest-release-highlights/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/bd271b04-d283-0b5d-cad6-f3e9f14ebba3.png)


## やること

Zetta Platformを使って、ネットワーク越しに pub / subを行う。

## 環境 
Ubuntu 24.04
Zenoh 1.1.0 ~~1.0.4~~ ※1.1.0にて動作確認済

(可能であれば、別々のルータ配下のPCを1台ずつ)


## 1. ユーザー登録

以下のURLに開いてユーザー登録をいます。

https://www.zettascale.cloud/

Registerを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/2d216758-c383-cddc-a01e-cb30cc7cb1c8.png)

Get Startedを押して登録を開始してください。基本的にNEXTを押していくだけで、登録できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/a49c462f-7b06-ee3e-2eda-2dc907533139.png)

支払い方法の追加などが必要なので、適当なクレジットカードを登録してください。


## 2. Projectを作成する
ログイン後のホーム画面で、[Create Project]を押してプロジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/7db00623-cfb8-3ca8-0c7d-7f377f4ce94c.png)

プロジェクトの名前とZenohのバージョンは1.0.4を選択し、NEXTを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/fa8a3163-33c0-ca4c-8271-71081a540313.png)

Zenoh Routerを追加する画面に遷移します。Zenoh Routerの名前と設置するリージョン選択し、NEXTを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/7dbe7af6-9d2e-2be7-19fb-f93475046ab3.png)


ストレージの追加画面に遷移します。使わなければNEXTを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/48bfdaf6-c753-5c4d-3ac3-ff8ce923c58b.png)

MQTTとのコネクタ作成画面です。使わなければNEXTを押します。
(MQTTと通信させる場合はなぜかここで追加が必須)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/7c162edc-cc8b-9984-6abf-6fb3dd4d8dbd.png)

確認画面に遷移します。最後にcreate projectを押すとプロジェクト作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/403d3901-796d-1ef1-1fdc-9c15266f4535.png)

## クライアントを作成して認証情報を発行する

作成したプロジェクトを開いて[Use my Project]を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/ac7bb1ed-c5c0-1817-c2a4-a26df2fd59e3.png)


以下の画面に遷移するので右上の[USE MY PROJECT]－>[Connect a client app]を押下 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/085d04d2-f704-d76c-17aa-e6df742ba5e6.png)

以下の画面に遷移します。Clientの名前を入力して[NEXT]をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/28660e94-5742-25af-fdc7-744474036fff.png)

画面が遷移して、pythonのサンプルプログラムをダウロードする方法と実行方法が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/b5de184d-ec73-cda0-d501-b4cdfd79a9e3.png)

画面の指示に従って、curlを使ってサンプルプログラムをダウロードして、unzipなどで適当なディレクトリに回答します。

**同様の手順でもう一つclient作成してダウンロードすれば準備は完了です。**

## 通信テスト

クライアントの作成と各PCへのサンプルプログラムのダウンロードが完了したら、

以下のコマンドで対応するZenohのライブラリをインストールしてください。
(Ubuntu 24.04からaptでインストールできないライブラリは、venv等の仮想環境でインストールするよう警告が出ます。適当な仮想環境を準備してください。)

```
pip3 install eclipse-zenoh==1.1.0
```

追記　2025/1/11現在、Zenoh 1.1.0に対応した模様です。

PC1 
```
python3 z_sub.py -c config.json
```

PC2

```
python3 z_pub.py -c config.json
```

通信が成功すれば、ブラウザのprojectのHomeで下記のようにRouterとClientが接続されて表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/e999fbe0-9d27-eb50-605c-9ded5acd9a69.png)


## 停止する

プロジェクト使わない場合には、ホームの下記の画面からインスタンスの停止ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/a82830dc-9390-d9c9-1ef9-6a708b6ef223.png)

停止しておかないと稼働してる時間分ずっと料金が発生します。ご注意ください。


## お値段

有料のSaaSサービスなのでお金かかります。 0.3ユーロ/時間とのこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/bebef89b-713e-f9c4-a90f-f4ad76b80159.png)

実際に、一番ボーレートの小さいSmallを設定し、2日間ちょっと動かしっぱなしで合計54時間 17.01 ドル　2400円ちょっとでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6898/7186db62-3e1d-e8a5-78f0-f47fbf32a243.png)

30日動かすとして　35,000円/月くらいになるので、ちょっとお高い印象です。

稼働・停止ができるので、使わないときに止めておけば料金は安く抑えられるので、ちょっとした実験用にはよいのではないでしょうか。

データ量でも料金が変わってくるみたいなので、運用次第かもですが。


## 感想とか

- セキュリティ関係の設定なんかも使いやすくまとまっているので、ちょっとした実験に使うの良さそう
- 今回はROS 2で[rmw_zenoh](https://github.com/ros2/rmw_zenoh)を試していないので、後々試す
- 長期で使うなら自前サーバ建てた方が良いかも


# 参考資料

https://www.zettascale.cloud/

- [Zetta scaleの発表動画](https://www.youtube.com/watch?v=Z_4lmFfaTcE&t=2141s)