TROCCO®のSelf-Hosted Runner（β版）がトライアルできるようになったので、最速で触ってみる（on Windows PC）

# はじめに

2024年12月の自社イベントzeroONEにて、セキュリティポリシーの厳しいお客様向けにTROCCO®のデータ転送をお客様の管理下の環境で実行できる、「Self-Hosted Runner」の提供予告を発表していました。（参考：[プレスリリース](https://primenumber.com/news/1431)）

それから開発が進み、β版トライアルを受付する段階になっているのですが、私もその機能を試さないわけにはいかないだろう！！！ということで、ローカルPCで動かしてみました！


# こんな方におすすめ

- TROCCO®のSelf-Hosted Runnerについて概要を理解したい方
- 自社管理のセキュアな環境下でデータ転送を行えるETLツールを探している方

:::note warn

本記事でご紹介する機能は執筆時点のものであり、正式リリースに向けて仕様が変更される可能性があります。

:::


# Self-Hosted Runnerでできること

できることの要点を3つ取り上げます。

- Docker環境にRunnerを配置することで、データ転送を自社管理の環境下で行える
- Runnerからは外方向の通信しか行わないので、自社環境に対する内方向の通信を許可しなくて良い
- 自社管理の環境下で処理を行うので、活用するリソースを柔軟に設定できる

とても良さそうですね。では、次から詳しく説明していきます！


# Self-Hosted Runnerとは何か

前提として、TROCCO®のアーキテクチャを確認しておきましょう。

TROCCO®のアーキテクチャについては「アーキテクチャConference 2024」の中根さんの発表「PaaSとSaaSの境目で信頼性と開発速度を両立する〜TROCCO®︎のこれまでとこれから〜」で詳しく取り上げていますが（[note記事](https://note.primenumber.co.jp/n/n95c535b8bfff)も参考までに）、データ転送の際には一時的にデータ処理用の環境（コンテナ）を立ち上げ、処理後に破棄するという形になっています。

<script async class="speakerdeck-embed" data-id="eb80af96dd574bafb259db7db8b20152?slide=42" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

こういった処理を行うことで、取扱いに注意が必要なデータについても、お客様のデータを恒常的に弊社の側で保持するのではないセキュアな形を担保しています。


## 既存アーキテクチャでの課題

セキュリティポリシーが厳しいお客様に対する既存アーキテクチャでの課題は、TROCCO®環境でのデータ保持と元環境への内方向通信にあります。


### TROCCO®環境でのデータ保持

転送元の環境→弊社管理のデータ処理環境→転送先の環境とデータが処理されていくため、「弊社管理のデータ処理環境」に一時的にでもデータを保持することになり、この点がお客様のニーズに応えきれない部分でもありました。


### 元環境への内方向通信

加えて、TROCCO®︎から転送元の環境にデータを取得しにいくため、転送元の環境に対する内方向の通信を許可する必要もあります。（IP制限や踏み台サーバの活用もありますが、それはそれとして）


## Self-Hosted Runnerのメリット

それに対して、Self-Hosted Runnerは以下のようなアーキテクチャになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/4b4834ce-c59f-4f2b-a609-a5bc9c4d82cb.png)


### 自社管理の環境下でのデータ転送

データ処理用の環境（コンテナ）をお客様の管理下に設置することによって、オンプレミスやプライベートクラウドといったお客様のインフラ環境内でデータ転送を行うことができるようになります。


### 元環境に対する内向き通信が不要

このとき、通信はRunnerから外方向のみになるので、外向きの通信だけを許可すればよくなります。つまり、転送時の設定情報もTROCCO®︎起点でRunnerに送るのではなく、Runner起点でTROCCO®︎まで取りにいくという形になっています。


### 実行処理リソースの柔軟化

加えて、これまでは転送処理を実行するためのリソースをお客様間で共有していたところから、自社管理のリソースを活用できることで、リソースを柔軟に調整できるようになるというメリットも生まれてきます。


なお、コンテナとしてはDockerを利用しているので、理論的にはDockerを動かせる環境であれば活用可能です。本記事ではシンプルな検証として、Windows PCのDocker on WSLにて試してみます。


# Self-Hosted Runnerを動かしてみる

Self-Hosted Runnerは弊社側の機能有効化の設定後に活用できるようになり、左側のサイドバーにタブが表示されるようになります。（表示されている・・・！！）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/a4bb7a3d-fcac-44f3-b1ec-5e29e712fddc.png)


## Runnerの作成

「Self-Hosted Runner」をクリックすると、Clusterの一覧が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/e38da044-544d-49b1-adb9-3bd6476a368c.png)

新規作成を行うと、Docker環境を手配するためのコマンドが表示されます。Self-Hosted Runnerの実行環境のベースとなる素材（コンテナイメージ）をダウンロードするためのコマンドと、それを起動して処理環境として利用できるようにするためのコマンドが掲載されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/4eda704b-aa3d-42f6-8e7c-7d14abc8a357.png)

画面の指示通りにTokenを生成し、WindowsのローカルPCでコマンドを実行すると・・・Runnerが待機状態で現れました！ここまでめちゃくちゃ簡単な操作のみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/58a2a2fe-74d8-471e-956a-d29210700d58.png)


## 転送設定での配置

では、転送設定を作成してみましょう。必要なのは作成時にSelf-Hosted Runner Clusterとして先ほど作成したものを指定するだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/19700eb8-b05c-4786-aa06-dc28fd64f5e1.png)

プレビュー表示をしようとすると、StatusがACTIVEに変更されています！！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/3e5599a0-60c5-4e64-a9e2-cc92482658c3.png)

TROCCO®の画面上では通常通りプレビューが表示され、フィルター等各種処理が適用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/7aa5f0c5-0aae-47f6-afbf-e5b52ec2ca73.png)

:::note

なお、コンテナ起動時の環境変数を指定する（`TROCCO_NO_PREVIEW_SEND=true`）ことで、プレビューのデータをTROCCO®側に送らないこともできます。
また通常のTROCCO®︎の仕様通り、一時的にプレビューは表示させて、一定時間後に削除することも可能です。

:::

プレビューが完了すると、RunnerはIDLEの状態に戻っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/3a07b7a5-0e4c-4db5-b4b7-73f759c51798.png)

なお、この間の処理はローカル側で実行ログを確認できます。確かに、HTTPでデータを取得して、そこから設定を生成しているのが分かりますね。

```shell:実行ログ一部抜粋
{"time":"2025-02-15T03:21:33.563330884Z","level":"INFO","msg":"Joined cluster successfully","runnerID":34}
{"time":"2025-02-15T03:35:54.330893814Z","level":"INFO","msg":"Register queued item","runnerID":34,"queuedItemID":59}
{"time":"2025-02-15T03:35:54.331009364Z","level":"INFO","msg":"Got queued guess/preview job","runnerID":34,"queuedItemID":59}
{"time":"2025-02-15T03:35:54.451204021Z","level":"INFO","msg":"Claimed guess/preview job successfully","runnerID":34,"queuedItemID":59}
{"time":"2025-02-15T03:35:54.599092599Z","level":"INFO","msg":"Fetched embulk guess config successfully","runnerID":34,"queuedItemID":59}
{"time":"2025-02-15T03:35:59.956303143Z","level":"INFO","msg":"2025-02-15 03:35:59.956 +0000 [INFO] (0001:guess): Loaded plugin embulk-input-http (0.25.0.trocco.0.5.0)","runnerID":34,"queuedItemID":59}
{"time":"2025-02-15T03:36:00.074610358Z","level":"INFO","msg":"2025-02-15 03:36:00.073 +0000 [INFO] (0001:guess): Try to read 10,485,760 bytes from input source","runnerID":34,"queuedItemID":59}
{"time":"2025-02-15T03:36:00.22471201Z","level":"INFO","msg":"2025-02-15 03:36:00.224 +0000 [INFO] (0001:guess): GET \"https://raw.githubusercontent.com/The-Japan-DataScientist-Society/100knocks-preprocess/master/docker/work/data/receipt.csv\"","runnerID":34,"queuedItemID":59}
{"time":"2025-02-15T03:36:24.060420393Z","level":"INFO","msg":"Fetched embulk preview config successfully","runnerID":34,"queuedItemID":59}
```


## 転送の実行

あとは通常と同じように実行するだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492462/05283774-73c5-48ec-8d25-5d3637f41e4f.png)

このときも、実行中はStatusがACTIVEに変更され、完了するとIDLEに戻ります。実行中のログはローカルのPCの方でも確認できるようになっています。


# 現時点での制約

執筆時点では利用可能なコネクタは一部に限定されています。各種DWHやRDB、ストレージなど、ニーズが多いと考えられるものは今後追加されていく予定です。

- 転送元
    - MySQL
    - PostgreSQL
    - HTTP・HTTPS（HTTPリクエストによるデータ取得）
    - SFTP（構造化データファイルのデータ取得）
- 転送先
    - BigQuery
    - MySQL
    - PostgreSQL

そもそもがクラウドベースのSaaSについては通常のTROCCO®の転送で十分なことも多いので、上記のようなものを優先している対応している形になっています。


# おわりに

このような感じで、Windows PCのDocker on WSLで簡単にデータ転送を行うことができてしまいました！TROCCO®の活用が更に広がっていくわくわくを感じさせてくれます。

なお、技術的に詳しい話は、開発者の中根さんが近いうちに記事を書いてくれるとのことなのでお楽しみに。

https://x.com/gtnao

※追記：記事が公開されました！

https://zenn.dev/primenumber/articles/trocco-self-hosted-runner-fargate

また、トライアル希望も受け付けておりますので、ご関心をお持ちの方は[サービスページ](https://primenumber.com/trocco/features/self-hosted-runner)からお問合せください！