SORACOM Napter 用の Visual Studio Code 拡張を作りました
「一般消費者が事業者の表示であることを判別することが困難である表示」の運用基準に基づく開示: この記事は記載の日付時点で株式会社ソラコムのエンジニアリングチームに所属する社員が執筆しました。ただし、個人としての投稿であり、株式会社ソラコムとしての正式な発言や見解ではありません。
はじめに
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 ユーザーコンソール から有効にできます。以下のように本当に簡単に使えるので私もウキウキリモート開発していました。
- ユーザーコンソールへログインする
- 自分の SIM を探す
- メニューから オンデマンドリモートアクセス を選択する
- OK を押す
- 払い出された IP アドレスとポート番号をコピペしてターミナルから SSH を使ってアクセスする
- あれこれする
そんな折りに別の同僚から 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 を組み合わせて便利に使える拡張を作りました。
動画を見ていただくと大体想像つくと思いますが、以下の操作が vscode の中で完結します(動画では 3G 使っているため SSH 接続まで少し時間がかかっています)。
- 新しいポートマッピング (Napter オンデマンドリモートアクセス)の作成
- 既存のポートマッピングの情報表示
- Napter から割り当てられたホスト名、IP アドレス、ポート番号
- 有効期間
- TLS 有効の有無
- 宛先ポート番号
- 接続可能なソース IP アドレスのレンジ
- 作成日時
- 終了日時
- 既存のポートマッピングの削除
- Remote - SSH 拡張の接続ダイアログボックスのオープン
- オンラインの SIM カード一覧の表示
- SORACOM カバレッジ(グローバル / 日本) の切替
- SIM の情報表示
- IMSI
- 名前
- SIM グループ ID
- プラン (plan01s / plan-D など)
- モジュールタイプ (標準 / マイクロ / ナノなど)
- スピードクラス (
s1.fast
/s1.slow
など) - IMEI
- MSISDN
- セッション状態
- SIM そのものの IP アドレス
- SIM のセッション状態 (最新 10)
- Napter 監査ログ (最新 10) — 参照: 【新機能】SORACOM Napter に監査ログ機能が導入されました – SORACOM エンジニアブログ
- オペレーター ID とユーザー名の表示
- ユーザーコンソールのデフォルトブラウザでのオープン
ここから事前準備と使い方を説明します。
事前準備
一度だけの事前準備として以下の 4 ステップが必要です。公式ドキュメントを紹介しつつ、簡単に手順を説明します。SORACOM Advent Calendar ということでアカウントの作成などは省いていますが、まだの方はぜひ SORACOM Air for セルラーの利用方法: 今すぐ始めよう から。
- (SORACOM ユーザーコンソールの作業) SAM ユーザーを作成し、認証キー ID と認証キーシークレットを生成する
- (vscode での作業) Remote - SSH / SORACOM Napter Tools 拡張をインストールする
- (vscode での作業) SORACOM Napter Tools for Visual Studio Code 拡張を設定する
- (アクセス先マシンでの作業) Raspberry Pi などに USB ドングル + SORACOM IoT SIM を装着する
SAM ユーザーを作成し、認証キー ID と認証キーシークレットを生成する
この拡張は SORACOM API を使用していますので、呼び出しのために認証キー ID と認証キーシークレットが必要です。まずはこれらをゲットしましょう。
セキュリティの観点から Napter Tools 専用の SORACOM Access Managament (SAM) ユーザーを作成することをおすすめします。SAM は、管理ユーザー毎にアクセス権限を設定できるアクセス管理機能で、不要なアクセスや操作ミスを未然に防げます。
- SORACOM ユーザーコンソール へログイン
- 右上のユーザー名のボタンから セキュリティ をクリック
- ユーザー作成 ボタンをクリックし、適当な名前と説明を入力して 作成 ボタンをクリック
- 作成したユーザー名をクリック
- 権限設定 タブで以下の拡張の動作に必要な権限のみを許可する設定を入力し 保存 ボタンをクリック
{
"statements": [
{
"api": [
"Subscriber:listSubscribers",
"Subscriber:getSubscriber",
"PortMapping:listPortMappings",
"PortMapping:createPortMapping",
"PortMapping:deletePortMapping",
"Subscriber:listSessionEvents",
"AuditLog:getNapterAuditLogs"
],
"effect": "allow"
}
]
}
- 認証設定 タブの 認証キーを生成 ボタンをクリックし表示された 認証キー ID と 認証キーシークレット をコピー
用語や詳細なガイドは SORACOM API 利用ガイド を、権限設定の詳細は SORACOM Access Management を使用して操作権限を管理する も参照してみてください。(ここを書いているところで PortMapping
に listPortMappingsForSubscriber
というオペレーションがあることに気づきました。これを使うと 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 ポート番号
その他の設定はデフォルトのままでたぶん大丈夫です。
Raspberry Pi などに USB ドングル + SORACOM IoT SIM を装着する
3G 対応データ通信端末 AK-020 や LTE 対応データ通信端末 Huawei MS2372h-607 などに SORACOM の SIM をセットし Raspberry Pi に装着、 setup_air.sh
を実行してセルラー通信ができるようにしてください。詳細な手順は 各種デバイスで SORACOM Air を使用する にあります。
使い方
さて、ここまで来たら Napter による SSH は簡単です(たぶん)。
- 以下のいずれかの方法で Your SORACOM SIMs ビューを開きます
- Activity Bar の Napter アイコンをクリックする
- コマンドパレット (⇧⌘P) で Show SORACOM Napter Tools とタイプする
- デフォルトのショートカットキー (⌃⇧N) を使う
- オンラインの SIM が表示されますので Napter でアクセスしたい SIM を右クリック(または右端のアイコンをクリック)しポートマッピングを作成します
- インプットボックスが表示されますので ⌘V でペーストしエンターを押します
- 新しい vscode のウィンドウが開き接続します (初回接続時は Remote - SSH 拡張の設定のため多少時間がかかります)
- 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 っていいですね。