TROCCO® Self-Hosted Runnerのラズベリーパイ包み
はじめに
人はなぜRaspberry Piでなんでも動かしたがるのか…
2025/03現在、クラウドETL「TROCCO®」では、任意の環境でデータ転送処理を完結できる、「Self-Hosted Runner」機能の開発が進められています。
先日、β版としてトライアルの受付が始まったので、中の人特権を使ってRaspberry Pi 3 model B[1]で動かしてみました。
Self-Hosted Runner自体の説明やアーキテクチャの説明等は下記の記事をご覧ください。
このように、すでにWindowsやAWS Fargateでの構築例がありますが、本記事ではよりコンパクトで電力効率に優れたRaspberry Piでの構築方法を紹介します。わずか10W程度の電力で24時間365日稼働するETL環境を実現できるのが最大の特徴です。
この記事で得られるかもしれないもの
などと言いつつ、実際のユースケースとしてはTROCCO®(以降は®を省略します)のSelf-Hosted RunnerをRaspberry Piで動かすことはおそらくないと思いますが、Raspberry Piで動くという事実から以下の洞察が得られます。
- Self-Hosted Runnerは低リソースで動かせる
- Raspberry Pi 3 model BはCPU 4 Core, Memory 1GB
- Self-Hosted RunnerはARMアーキテクチャにも対応している
- Raspberry Pi 3 model BのCPUは64-bit ARMv8アーキテクチャ
- IoTやエッジコンピューティングなどの文脈で物理的に近い環境でETLができる可能性
用意したもの (家にあったもの)
- Raspberry Pi 3 model B
- 32GBのmicroSDカード
- 適当なMicro USB Type-Bに充電できるUSBケーブル
- USB Type-C ハブ
- USB SDカードリーダー
構築した手順
実際に行った作業を、以下の流れで説明していきますが、N番煎じのネタが多いので大いに外部リンクの参照を活用します。
- Raspberry Pi OSイメージの作成
- (ネットワークの設定)
- Dockerおよび必要なツールのセットアップ
- TROCCO Self-Hosted Runnerの設定と起動
- 動作確認
1. Raspberry Pi OSイメージの作成
公式ページの通りにやります。 Raspberry Pi Imager
を利用しました。
昔は意外とここが大変だった記憶があるんですが、日本語化もされているし何ならイメージ上の設定も焼くときにできるしかなり快適になっている印象です。公式ドキュメントもめちゃくちゃスクショがありわかりやすい。
OSは Raspberry Pi OS Lite (64-bit)
を選択しました。ただでさえ少ないリソースをGUIにくれてやる余裕はないのと、そもそも使わないからです。
Raspberry Pi Imager
このあとの画面でuser/passの設定やWi-Fiの設定、タイムゾーンやキーボードのレイアウト、SSHの有効化等を設定します。
想定通りであれば、あとはラズパイに挿して、arpとかでそれっぽいの探してSSHして、、という感じで直接ラズパイにデバイスを接続しての操作はいらない想定だったのですが、ネットワークに繋がらなかったので実際に接続してトラブルシューティングしました。
2. (ネットワークの設定)
普通にモニターにHDMIで繋げばいいんですが、せっかくなので家に転がってるキャプチャーボードを使ってiPad miniをモニターとして使うやつをやりました。以下のアイテムを召喚します。
- iPad mini gen 6
- キャプチャーボード
- HDMIケーブル x2
- 外付けキーボード
見た目はこんな感じで全然スマートではないしリビングで遊んでいたので散らかっている
ちなみに、やってみた所感としては遅延がひどく、常用したいものではありませんでした😇
なお、ネットワークの設定としては、イメージ作成時のWi-Fiのパスワードをミスってたので再設定しました。
以下の手順のとおり、 raspi-config
を実行し System options
-> Wireless LAN
から設定しました。
3. Dockerおよび必要なツールのセットアップ
手元のPCからSSHできるようになったのでセットアップに移ります。
Self-Hosted Runnerに必要なのはDockerのみ!なので実質Dockerだけ入れれば完了です。
以下を参考にconvenience scriptの実行で済ませました。
sudo apt update
sudo apt upgrade
sudo apt install ca-certificates curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh --dry-run
sudo sh get-docker.sh
4. TROCCO Self-Hosted Runnerの設定と起動
設定手順は…お二人の素晴らしい説明を見てもらえればと思います。
ということで、できあがったのがこちらです。
TROCCO上にRunnerの登録ができている図
ラズパイ上でRunnerが動いている図
ちなみに、通信速度が遅い[2]というのもありますが、リソースの少なさもありimage pull完了まではローカルPCでやるよりは時間がかかった、というのは書き残しておきます。
5. 動作確認
今回は、「Zennの記事を最新のものから順に取得するAPIをページネーションで2回叩いた結果をBigQueryに送信する」という転送を試してみました。
先ほどと同じRunner ID(#97)で動いていることが確認できます
と、動かすだけだと芸がないので、普通にTROCCOで同じ設定で動かすのと3回ずつ実行した速度比較をしてみましょう。
ただし、通信速度やコンピュートリソース量が違うため、純粋な比較ではなくあくまで参考情報である点に注意してください(ここだけ見て「Self-Hosted Runner遅いやんけ!」とならないでください🐈)。
ラズパイ | 通常の転送ジョブ実行 | |
---|---|---|
1回目 | 1:30 | 0:37 |
2回目 | 1:23 | 0:35 |
3回目 | 1:28 | 0:34 |
また、今回は実行時間だけ比較していますが、KuberbetesのPod起動のオーバーヘッドがない分、理論上起動までの時間は短くなるはずです。
実行時のリソース利用率はこんな感じでした。こちらも参考までに。
tk3fftk@raspberrypi:~ $ vmstat -t 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
r b swpd free buff cache si so bi bo in cs us sy id wa st JST
1 0 2560 546340 1420 254756 0 0 85 8 2646 129 5 1 93 1 0 2025-03-19 01:16:06
1 0 2560 546340 1420 254756 0 0 0 0 10228 277 0 0 100 0 0 2025-03-19 01:16:11
3 0 2560 546340 1420 254756 0 0 2001 0 11100 1648 11 2 84 3 0 2025-03-19 01:16:16 # ジョブ実行開始
2 0 2560 546340 1420 254756 0 0 4766 18 11262 1598 26 3 69 2 0 2025-03-19 01:16:21
2 0 2560 546340 1420 254756 0 0 1036 26 11090 1172 30 2 67 1 0 2025-03-19 01:16:26
3 0 2560 546340 1420 254756 0 0 222 14 11507 1651 44 1 55 0 0 2025-03-19 01:16:31
5 0 2560 546340 1420 254756 0 0 248 11 11550 2000 47 2 51 0 0 2025-03-19 01:16:36
2 0 2560 546340 1420 254756 0 0 203 27 11455 1596 47 2 50 1 0 2025-03-19 01:16:41
2 0 2560 546340 1420 254756 0 0 1489 818 11030 1099 29 2 67 2 0 2025-03-19 01:16:46
2 0 2560 546340 1420 254756 0 0 678 298 10918 834 32 1 66 1 0 2025-03-19 01:16:51
3 0 2560 546340 1420 254756 0 0 293 8 11100 920 42 1 56 0 0 2025-03-19 01:16:56
3 0 2560 546340 1420 254756 2 0 992 1 11286 1344 33 2 64 2 0 2025-03-19 01:17:01
2 0 2560 546340 1420 254756 0 0 662 9 11219 1131 41 1 57 1 0 2025-03-19 01:17:06
4 0 2560 546340 1420 254756 0 5386 225 5390 11686 2338 27 2 64 8 0 2025-03-19 01:17:11
1 0 2560 546340 1420 254756 0 0 4 6 11485 1888 26 2 73 0 0 2025-03-19 01:17:16
1 0 2560 546340 1420 254756 0 0 0 23 10199 255 0 0 100 0 0 2025-03-19 01:17:21
5 0 2560 546340 1420 254756 0 0 0 0 10433 462 5 2 93 0 0 2025-03-19 01:17:26
1 0 2560 546340 1420 254756 0 0 53 0 10845 920 15 1 84 0 0 2025-03-19 01:17:31
1 0 2560 546340 1420 254756 0 0 0 34 10219 260 0 0 100 0 0 2025-03-19 01:17:36
1 0 2560 546340 1420 254756 0 0 0 7 10612 722 6 1 93 0 0 2025-03-19 01:17:41 # ジョブ終了
1 0 2560 546340 1420 254756 0 0 0 12 10213 248 0 0 100 0 0 2025-03-19 01:17:46
1 0 2560 546340 1420 254756 0 0 0 2 10241 280 0 0 100 0 0 2025-03-19 01:17:51
2 0 2560 546340 1420 254756 0 0 1 6 10227 254 0 0 100 0 0 2025-03-19 01:17:56
おわりに
TROCCO Self-Hosted Runnerのラズベリーパイ包みをお届けしました🧑🍳
トライアルも受け付けておりますので、美味しそう!と思った方はラズパイはついてきませんが、サービスページからお問合せください。
--
Discussion