はじめに

SORACOM Advent Calendar 2019 13 日目の記事です。

昨日は @toolyee からの IoT の一番簡単なデモ!(当社比) でした。@hayate_h さんの SORACOM LTE-M Button を使って、「モテモテスイッチ」を開発する。 から LTE-M ボタンの話題が続いたところで、今回は SORACOM Napter のお話です。

SORACOM Napter とは

SORACOM Napter (以下 Napter) は、SORACOM の SIM を使用したデバイスへ簡単にセキュアにリモートアクセスできるサービスです。SORACOM IoT SIM のささっているデバイスであれば、グローバル IP アドレスを割り当てたり、踏み台サーバーを用意したり、エージェントなどをインストールしたりせず手軽にリモートからアクセスできます。

同僚が Node-RED と組み合わせて ウキウキリモート開発 しており、なるほどなーと思っていたのですが、つい最近テスト用に使っていた Raspberry Pi の Wi-Fi が壊れたため私も多用するようになりました (必要なものはすぐに購入できる会社ですが、Raspberry Pi 4 リリースのため品薄ですぐに手に入らず)。

Napter によるオンデマンドリモートアクセスは SORACOM ユーザーコンソール から有効にできます。以下のように本当に簡単に使えるので私もウキウキリモート開発していました。

  1. ユーザーコンソールへログインする
  2. 自分の SIM を探す
  3. メニューから オンデマンドリモートアクセス を選択する
  4. OK を押す
  5. 払い出された IP アドレスとポート番号をコピペしてターミナルから SSH を使ってアクセスする
  6. あれこれする

そんな折りに別の同僚から Visual Studio Code (以下 vscode) の Remote - SSH 拡張 を使うと Raspberry Pi での開発がえらく楽になるよと教えてもらいました。試してみるとなるほど便利で、普段使いしているエディタがそのまま使えるしターミナルも使えるしで Napter とあわせて多用するようになりました。

で、日々ユーザーコンソールと vscode を行ったり来たりしていたのですが、ふと「SORACOM はほとんどの操作について API を公開しているし 、vscode も 拡張が作れる し、この 2 つを合体させたらえらく便利なのでは?」と思いたち作ってみました。

SORACOM Napter Tools for Visual Studio Code

SORACOM Napter Tools for Visual Studio Code (以下 Napter Tools) という Napter と vscode を組み合わせて便利に使える拡張を作りました。

SORACOM Napter Tools for Visual Studio Code

動画を見ていただくと大体想像つくと思いますが、以下の操作が vscode の中で完結します(動画では 3G 使っているため SSH 接続まで少し時間がかかっています)。

  • 新しいポートマッピング (Napter オンデマンドリモートアクセス)の作成
  • 既存のポートマッピングの情報表示
    • Napter から割り当てられたホスト名、IP アドレス、ポート番号
    • 有効期間
    • TLS 有効の有無
    • 宛先ポート番号
    • 接続可能なソース IP アドレスのレンジ
    • 作成日時
    • 終了日時
  • 既存のポートマッピングの削除
  • Remote - SSH 拡張の接続ダイアログボックスのオープン
  • オンラインの SIM カード一覧の表示
  • SORACOM カバレッジ(グローバル / 日本) の切替
  • SIM の情報表示
  • オペレーター ID とユーザー名の表示
  • ユーザーコンソールのデフォルトブラウザでのオープン

ここから事前準備と使い方を説明します。

事前準備

一度だけの事前準備として以下の 4 ステップが必要です。公式ドキュメントを紹介しつつ、簡単に手順を説明します。SORACOM Advent Calendar ということでアカウントの作成などは省いていますが、まだの方はぜひ SORACOM Air for セルラーの利用方法: 今すぐ始めよう から。

  1. (SORACOM ユーザーコンソールの作業) SAM ユーザーを作成し、認証キー ID と認証キーシークレットを生成する
  2. (vscode での作業) Remote - SSH / SORACOM Napter Tools 拡張をインストールする
  3. (vscode での作業) SORACOM Napter Tools for Visual Studio Code 拡張を設定する
  4. (アクセス先マシンでの作業) Raspberry Pi などに USB ドングル + SORACOM IoT SIM を装着する

SAM ユーザーを作成し、認証キー ID と認証キーシークレットを生成する

この拡張は SORACOM API を使用していますので、呼び出しのために認証キー ID と認証キーシークレットが必要です。まずはこれらをゲットしましょう。

セキュリティの観点から Napter Tools 専用の SORACOM Access Managament (SAM) ユーザーを作成することをおすすめします。SAM は、管理ユーザー毎にアクセス権限を設定できるアクセス管理機能で、不要なアクセスや操作ミスを未然に防げます。

  1. SORACOM ユーザーコンソール へログイン
  2. 右上のユーザー名のボタンから セキュリティ をクリック
  3. ユーザー作成 ボタンをクリックし、適当な名前と説明を入力して 作成 ボタンをクリック
  4. 作成したユーザー名をクリック
  5. 権限設定 タブで以下の拡張の動作に必要な権限のみを許可する設定を入力し 保存 ボタンをクリック
{
  "statements": [
    {
      "api": [
        "Subscriber:listSubscribers",
        "Subscriber:getSubscriber",
        "PortMapping:listPortMappings",
        "PortMapping:createPortMapping",
        "PortMapping:deletePortMapping",
        "Subscriber:listSessionEvents",
        "AuditLog:getNapterAuditLogs"
      ],
      "effect": "allow"
    }
  ]
}
  1. 認証設定 タブの 認証キーを生成 ボタンをクリックし表示された 認証キー ID認証キーシークレット をコピー

用語や詳細なガイドは SORACOM API 利用ガイド を、権限設定の詳細は SORACOM Access Management を使用して操作権限を管理する も参照してみてください。(ここを書いているところで PortMappinglistPortMappingsForSubscriber というオペレーションがあることに気づきました。これを使うと API 呼び出しをもっと効率化できそうです。)

Remote - SSH / SORACOM Napter Tools 拡張をインストールする

Visual Studio Marketplace から以下の 2 つの拡張をインストールしてください。

SORACOM Napter Tools for Visual Studio Code 拡張を設定する

vscode の設定画面を開き以下の設定を入力してください。

  • Soracom > Auth > Authkey:ID: keyId- ではじまる 認証キー ID
  • Soracom > Auth > Authkey:Secret: secret- ではじまる 認証キーシークレット
  • Soracom > Napter > Ssh: User: SSH ログインユーザー名
  • Soracom > Napter: Port: SSH ポート番号
vscode 設定画面
vscode 設定画面

その他の設定はデフォルトのままでたぶん大丈夫です。

Raspberry Pi などに USB ドングル + SORACOM IoT SIM を装着する

3G 対応データ通信端末 AK-020LTE 対応データ通信端末 Huawei MS2372h-607 などに SORACOM の SIM をセットし Raspberry Pi に装着、 setup_air.sh を実行してセルラー通信ができるようにしてください。詳細な手順は 各種デバイスで SORACOM Air を使用する にあります。

使い方

さて、ここまで来たら Napter による SSH は簡単です(たぶん)。

  1. 以下のいずれかの方法で Your SORACOM SIMs ビューを開きます
    • Activity Bar の Napter アイコンをクリックする
    • コマンドパレット (⇧⌘P) で Show SORACOM Napter Tools とタイプする
    • デフォルトのショートカットキー (⌃⇧N) を使う
  2. オンラインの SIM が表示されますので Napter でアクセスしたい SIM を右クリック(または右端のアイコンをクリック)しポートマッピングを作成します
  3. インプットボックスが表示されますので ⌘V でペーストしエンターを押します
  4. 新しい vscode のウィンドウが開き接続します (初回接続時は Remote - SSH 拡張の設定のため多少時間がかかります)
  5. Enjoy!

ステップ 3 でインプットボックスにペーストしなければならないのがややかっこ悪いのですが、Remote - SSH 拡張が API を公開していないため苦肉の策であります。以下の issue で要望を出しています。


2019/12/26 追記

上記の issue で分かりづらいんだけど vscode.newWindow でできるよ、と教えてもらいました。

commands.executeCommand("vscode.newWindow", {
  remoteAuthority: "ssh-remote+..."
});

ということでバージョン 0.12.0 をリリースしました。既存の振る舞いを変えないよう新しいオプション soracom.napter.ssh.autoConnection を追加していますのでお好みでご利用ください。


そのほかの設定項目やアイコンの説明は README やソースコードをご覧ください。たとえば soracom-cli を使っている場合はその設定ファイルを使えます。また、よく使う操作は vscode のコマンドパレットに登録していますので、慣れるとキーボードだけで操作を完結できます。

バグ報告やご質問は GitHub Issues までどうぞ。

まとめ

この拡張は公開されている情報のみを利用して実装しました。API っていいですね。