IIJ Legs でIoTデバイスをお手軽制御
2019年07月11日 木曜日
CONTENTS
はじめに
プロダクト本部の r-fujimoto です。
今回は7月8日付で公開した IIJ Legs という新しいプロダクトの紹介をしたいと思います。
公式サイト: https://dev.smf.jp/legs/
IIJ Legs はインターネット越しのデバイス制御をお手軽かつパワフルに実現する通信基盤サービスで、自宅のパソコンやRaspberry Piなどにクライアントをインストールして利用することができます。
なにはともあれ下のgifを見てください。これは Legs のWebUIを使ってインターネット越しにRaspberry Piを操作している例です。
軽快にコンソールを操作できているのが分かるでしょうか。SSHなどは使わず、Raspberry Pi にインストールしたクライアントを起動するだけで、HTTPSを通してこの操作が可能です。
当然APIからのコマンド実行機能などもあるので、IFTTT などから連携して自宅のデバイスを操作可能です。詳しい機能の一覧は ドキュメント をご参照ください。
現在5デバイスまで利用可能なβトライアルを無料で公開中です。
公式サイトの「無料で試す」から是非お試しください。
開発背景
Legs は大量のデバイスを高速に制御するためのプロダクトですが、なぜIIJでこのようなツールを開発しているのか簡単にお話します。
プロダクト本部では昔からIIJ謹製のルーターである SEIL をクラウドからマネージメントするための SMF と呼ばれる技術を開発してきました。
LANケーブルを刺すだけで勝手にインターネットに接続してコンフィグを落としてくる、ルーターマネジメント用の強力な仕組みです。
SMFを利用したサービスとしては SACM があり、自動接続やコンフィグ一元管理・ルーター制御などの機能を提供しています。
Legs はこのSMFと呼ばれる仕組みの中でも、デバイスとの通信を担う部分の次世代基盤として、高速な双方向通信とIoTデバイス制御を見据えたスケーラビリティを目的に開発を行なっています。
(ちなみに現状のSACMにおけるルーター制御用通信プロトコルが「arms」protocolと呼ばれるもので、その次世代版として「legs」と命名されました。)
サービス内容
クライアント
Legs を利用するにはお手元のデバイスにクライアントをインストールする必要があります。クライアントはGo言語で実装されており、以下のレポジトリにOSSとして公開されています。
https://github.com/iij/legs-client
Go言語のクロスコンパイルによって各アーキテクチャ用のバイナリファイルを生成して公開しているので、インストールは実行ファイルを落としてくるだけで完了します。
インストール用のscriptを用意しているので、お手元のデバイスで以下のように実行してインストールしてみてください。
$ curl --silent https://raw.githubusercontent.com/iij/legs-client/master/install.sh | sh
scriptがOSやアーキテクチャを特定して該当の実行ファイルをダウンロードしてくれます。
インストールが完了すると、Legsへの接続は2行で完了します。
$ ./legsc secret <your-secret-key> $ ./legsc start
シークレットキーは WebUI にログイン後、上部のメニューから「アカウント」を選択し、その中の「 シークレットキー」の項目を参照してください。
機能紹介
Legs の特徴的な機能をかいつまんで紹介します。詳しくはドキュメントをご覧ください。
デバイスの認証
Legs におけるデバイスの認証は、予めデバイスに設定したシークレットキーとdevice_nameを使って行います。シークレットキーはアカウントに対して1つ払い出されます。
device_nameはデバイスを一意に識別するための文字列で、サーバーではdevice_nameからユニークなデバイスIDを生成し、認証を行います。
device_nameはデフォルトでMACアドレスが利用されますが、クライアント側の設定で任意の文字列を使用することができます。
コマンド実行
デバイスに対してAPIもしくはWebUIから任意のコマンドを実行することができます。冒頭のコンソール機能と異なり、単発のコマンド実行に対する結果を取得することができます。
主にAPIを利用して他のサービスなどからデバイスを制御する際に利用します。
例えばshellの機能を使いたい場合は以下のように実行することができます。
bash -c "sleep 5;echo 'executed!'"
URLフォワーディング (リバースプロキシ)
URLフォワーディングは少し面白い機能で、デバイスをリバースプロキシとして使える機能です。
この機能を使うと自宅内のwebページなどにインターネット上からアクセスできるため、例えば自宅ルータの設定画面を外から開いたり、自宅PCで稼働しているWebページを簡単に外部に公開することができます。
利用方法は簡単で、フォワーディングしたいURLをLegsに登録すると以下のようにフォワーディング用URLが払い出され、そのURLにアクセスすることでリクエストがデバイスに転送されます。
https://api.legs.iij.jp/proxy/<フォワーダID>/<デバイスID>/your/path
注意点としては、通常のリバースプロキシと同様にフォワーディング先サイトの絶対パスで書かれたリンクが解決できない場合があります。
最後に
Legs は開発中のソフトウェアとなるため、まだ不具合等あるかと思います。それでももしご興味があれば、是非自宅のIoTデバイスなどに組み込んで使ってみてください。
今後も継続的に機能改善・不具合修正等を行なって行きます。
質問・要望・相談等は githubのissue か、以下ページのメールアドレスまでご連絡ください。