🍓

泣く泣く現場へ追加設置した、エッジデバイス(ラズパイ)をbalenaCloudで管理

2022/11/25に公開

概要

「故障などのリスクを伴う、現場へのハード設置は最小限にしたい」派で、できることは極力クラウドでやりたいと考えている私ですが、エッジデバイスを全国各地に配置しないとどうしようも無い事案が発生したため、泣く泣く現場へエッジデバイス追加設置をする事になりました。
こんにちは。OptFit CTOの荒川です。

現場へのハード設置は故障などのリスクとともに運用コストが跳ね上がることが想定されたので、運用コストを極力かけないようにするためのツールを探していたところ、弊社見習いエンジニアのりょりょりょがbalenaCloudなる遠隔エッジデバイス管理ツールを共有してくれました。

備忘録と社内共有の為に、balenaCloudの魅力とはじめ方を残しておきます。
まだ運用し始めて、1.5ヶ月程度なのでもっといい方法があるよ!!という方は是非ご教示ください。

対象読者

エッジデバイスの管理を始める方で、ツール選定に悩んでいる/balenaCloudに決めたが使い方がよくわからん、とお困りの方々。

balenaCloudを使うと何が嬉しいの

balenaとググると

↑こう出てくる。
すごい自信満々なタイトルだが、実際使ってみると運用前提に作り込まれていてUIが非常に良いツール。そんなツールがデバイス10台までタダでほぼフル機能が使えるところもGood👍

fleetとは?

複数のデバイスを登録できるグループのこと。AWS ECSでいうcluster。


嬉しさポイント1 - コンテナの入れ替えがポチポチで出来る

fleet単位でエッジデバイスの管理が可能で、コンテナのアップ/ダウングレードが簡単にできバージョン管理が非常にしやすい。感覚的にはAWS ECSのような感じで、コンテナの入れ替えが非常に簡単にシームレスで行える。管理画面でポチポチするだけ。非常にUXが高い。

赤枠で囲まれたプルダウンをクリックして、fleet全体へ適用したいバージョンを選ぶだけでfleetに登録されている全デバイスへ指定のバージョンがデプロイされる。「track latest」にしておけばコンテナが更新されるたびに最新バージョンが全デバイスへデプロイされる。


嬉しさポイント2 - 管理が楽

全デバイスを一元管理できる

fleetの一覧画面

online/offlineなどのステータス情報が一目瞭然でわかる。

各fleetの管理画面に入ると、デバイスごとの詳細情報がわかる

fleet毎の登録されているデバイス一覧

デバイスごとの概要情報を一覧で確認することができる。
また、下記の情報も右スクロールすると閲覧可能。

例えば、CPU usageやStorage totalなどでソートを行い、ヤバそうなところを簡易的に見つけることも可能。


嬉しさポイント3 - インターネット接続さえしていればSSHが可能

ここが一番嬉しいポイント。
ポートフォワーディングなどのネットワーク設置を行なわずとも遠隔地からSSH接続ができる。例えば、モバイルルーターで運用をしており、ポートフォワーディングの設定などができない環境であっても、インターネット接続さえ出来ていればSSH接続が可能。


遅延は若干あるが、全然許せるレベル。便利。

嬉しさポイントを3つご紹介したところで、実際に手を動かして登録してみる。

balenaCloudにラズパイを登録し、コンテナをデプロイする

前提知識/準備として、balenaCloudへ登録しデバイスを動かすためには、balenaOSというOSのインストールを行い、その中で動くコンテナを作っておく必要がある。

1.アカウントを作る

Googleアカウントと連携ができるので、適当なGoogleアカウントと紐付けてbalenaCloudのアカウントを作成する。

2.fleetを作成する

ログイン後まずはfleetを作る。

左のナビバーからFleetsを選ぶと上図の画面へ遷移する。赤枠の「Create fleet」を押下すると

このモーダルが出てくる。
赤枠:適当な名前をつける(今回はraspberry_pi_4_4GBとする)
青枠:デバイスを指定する(ラズパイ4の場合は、Raspberry Pi 4(using 64bit OS))
緑枠:1デバイス1コンテナの場合は、EssentialsでOK。(Essentialsが一番安い、10台までタダ 料金プラン)

3.デバイスを登録する

上記で作成したfleetにデバイスを登録する。

本来は、上部の「Getting Started」を見れば大体わかるのだが、後世のために丁寧に書いていく。
赤枠内の「Add device」を押下するとこのモーダルが出てくる。

基本的な設定は表示されるまま変更する必要はない。
開発環境で検証用に使う場合は、editionを「Development」に変更する。
次にOS imageをSDカードに焼いていく。予め、balenaEtcherを手元のPCへインストールしておくと良い。

【1つのデバイスのみを登録する場合】
青枠の「Flash」を押下すると、balenaEtcherが起動しSDカードにOS imageを焼くことができる。

【複数のデバイスを登録する場合】
「Flash」の右側にある下三角を押下して赤枠の「Download balenaOS」を押下しイメージのみをダウンロードする。

「Flash」を押下してイメージを焼いてもいいが、毎回OS imageをダウンロードしてしまうので非常に時間が掛かってしまう。その為、複数のデバイスを登録する場合は、予めイメージをダウンロードしておきそのイメージを使い回すと効率が良い。

次に、ダウンロードしたイメージをSDカードに焼いていく。

balenaEtcherを起動すると上記の画面が立ち上がるので、「Flash from file」を押下しダウンロードしたOS imageを選択する。その後、「Select target」を押下しOSを焼く先のSDカードを選択し、「Flash!」を押下し焼き込んでいく。(1つのデバイスのみの場合、「Flash from file」の選択のステップは省略)

焼き込み完了後、SDカードをデバイスにセットしLANケーブルと電源を入れる。


電源を入れて数分後、このような形でデバイスが登録されているのを確認できれば、デバイスの登録が完了。

4.イメージをデプロイする

あとはイメージのデプロイだけ。
まずは、balena CLIを手元のPCへインストールを行う。(2022年11月頃のインストール手順)

macOS

1.Download the CLI installer.
2.Double click the downloaded file to run the installer and follow the installer's instructions.
3.To run balena CLI commands, open the Terminal app (Terminal User Guide).

Windows

1.Download the CLI installer.
2.Double click the downloaded file to run the installer and follow the installer's instructions.
3.To run balena CLI commands, open a command prompt: Click on the Windows Start Menu, type PowerShell, and then click on Windows PowerShell.

Linux

1.Download the standalone CLI.
2.Extract the contents of the zip file to any folder you choose, for example /home/james. The extracted contents will include a balena-cli folder.
3.Add that folder (e.g. /home/james/balena-cli) to the PATH environment variable. Check this StackOverflow post for instructions. Close and re-open the terminal window so that the changes to PATH can take effect.

インストールが完了したら、

balena login

とターミナル上で実行し、ログインをする。

一番簡単な「Web authorization(recommended)」を選択するとブラウザが立ち上がるので、「Authorize」を押下すると認証が完了する。

次に作成したfleetをCLI上から確認するために、

balena fleets

上記のコマンドを実行すると、下図のように登録されているfleetが一覧表示される。

上記の中から、イメージをデプロイしたいfleetを選び、作成したDockerfileが置いてあるルートディレクトリで下記のコマンドを実行。今回デプロイするfleetはraspberry_pi_4_4GB

balena push raspberry_pi_4_4GB

処理が延々と走り、

このユニコーン?が表示されれば成功。
あとは、デバイスへ自動反映されるのを待てばデプロイ完了。

最後に

balenaCloudゴリ押し記事になってしまいましたが、宣伝ではございません。
まだまだ使い込めてないツールなので、使い込み次第また記事にします!

参考

https://www.balena.io/docs/learn/getting-started/raspberrypi4-64/python/

🔔採用情報

ジム施設向けDXソリューションGYMDXではエンジニアを積極採用中です。
ジュニア層のエンジニアからリーダー職まで幅広く募集しています。

2022年7月にプレシリーズAラウンドにて資金調達を実施しました。
https://prtimes.jp/main/html/rd/p/000000015.000055404.html

リードエンジニア

https://herp.careers/v1/optfit/GpvSeC-fA995

バックエンドエンジニア

https://herp.careers/v1/optfit/KsDmlZ1VhTmU

Opt Fit テックブログ

Discussion