ユニファ開発者ブログ

ユニファ株式会社システム開発部メンバーによるブログです。

SORACOM Air SIMのclientで監視設定をしてみた

みなさん、こんにちは。エンジニアの田渕です。 インフルエンザが猛威を奮った冬でしたが、みなさまご無事だったでしょうか? 一番流行っている時期にはユニファ社内でも毎週のように、社員や社員のご家族がインフルエンザになって……という話を聞いていました。 幸い、私は今年かかることもなく今日まで来たので、このまま逃げ切りたいと思っています……。

さて、ユニファが提供するサービスの中にはSORACOM Air SIMを利用しているものがあります。 全体通信量が少なく、速さを必要としないけれど、いつもネットワークに繋がっていたい……!と言う悩みを解決してくれたSIMです。 SIMの状況を確認したり、設定を変更したりするコンソール画面も用意されており、エンジニアではない方でも操作が可能なのですが、日々の運用をしていく上では画面から設定できること以上の諸々を行いたくなってきます。

ということで、本日はSIMの監視設定を画面からではなく、コマンドで行っていきたいと思います。

クライアントのセットアップ

クライアントに関する公式ページはこちら。

dev.soracom.io

コードの公開もされており、詳細な導入手順等はそちらに記載されています。 Macの方は公式の手順に従いインストールでOK。 ちなみに、この記事時点でのクライアントバージョンは「SORACOM API client v0.2.8」です。

github.com

インストール後、早速コマンドを叩いてみると、説明が出てきます。

$ soracom
A command line tool to invoke SORACOM API
 
Usage:
  soracom [command]
 
Available Commands:
  auth               API アクセスの認証を行い、API キーと API トークンを発行します。
  bills              課金に関する情報を確認したりファイルへのエクスポートを行います。
  completion         bash 用の補完 (completion) スクリプトを生成します。
  configure          コマンド実行環境(プロファイル)の設定や表示を行います。
(以下略)

日本語……(感涙)

次に、上記ページに記載してある「How to use」に従ってセットアップしていきます。 セットアップ方法はいくつかありますが、今回はあらかじめコンソール画面にて発行しておいたAuthKeyIdとAuthKeyを利用します。

$soracom configure
--- SORACOM CLI セットアップ ---
/Users/(ユーザー名)/.soracom ディレクトリがなければ作成し、そこにファイル 'default.json' を作成します。
 
カバレッジタイプを選択してください。
 
1. Global
2. Japan
 
選択してください (1-2) > 2
 
 
認証方法を選択してください。
 
1. AuthKeyId と AuthKey を入力する(推奨)
2. オペレーターのメールアドレスとパスワードを入力する
3. SAM ユーザーの認証情報を入力する(オペレーターID、ユーザー名、パスワード)
 
選択してください (1-3) > 1
authKeyId: (発行したAuthKeyId)
authKey: (発行したAuthKey)

監視設定をしよう!

実は簡単なSIMの監視をするだけであれば、コンソール画面から設定出来る内容で十分です。ですが、実際に色々と仕事で利用すると、事細かに設定したくなります。 例えば、「この人がこういう操作したら通知が欲しい」とか「自社のシステムに作業履歴保存しておきたい」とか。。そういう時に利用出来るのがイベントハンドラー機能です。

今回はイベントハンドラー機能を利用し、「あるユーザーによってSIMの速度変更が行われた際の通知をメールで飛ばす」をやってみます。

dev.soracom.io

コンソール画面から設定出来る各種監視も内部的にはこのAPIを利用しているとのこと。 上記公式ページに各種設定のサンプルがありますので、環境さえあれば、コマンドを利用して比較的手軽に試すことが出来ます。

イベントハンドラーの設定は、各種設定を記載したjsonファイルを用意し、そのファイルをコマンドに引き渡す形で行います。

{
  "targetOperatorId": "(対象のユーザーのオペレータID)",
  "name": "SpeedClass",
  "description": "速度変更通知のテスト",
  "ruleConfig": {
    "type": "SubscriberSpeedClassAttributeRule",
    "properties": {
      "inactiveTimeoutDateConst": "IMMEDIATELY"
    }
  },
  "status": "active",
  "actionConfigList": [
     {
      "properties": {
        "executionDateTimeConst": "IMMEDIATELY",
        "message": "SIMの速度が変更されました",
        "title": "通知:SIMの速度が変更されました",
        "to": "(送信したいメールアドレス)"
      },
      "type": "SendMailAction"
    }
  ]
}

これをsoracom event-handlers create --body @{JSONファイルのパス}という形で実行します。

実行後の結果がこちら。

{
    "actionConfigList": [
        {
            "properties": {
                "executionDateTimeConst": "IMMEDIATELY",
                "message": "SIMの速度が変更されました",
                "title": "通知:SIMの速度が変更されました",
                "to": "(送信したいメールアドレス)"
            },
            "type": "SendMailAction"
        }
    ],
    "description": "速度変更通知のテスト",
    "handlerId": "(生成されたイベントハンドラーのID)",
    "name": "SpeedClass",
    "ruleConfig": {
        "properties": {
            "inactiveTimeoutDateConst": "IMMEDIATELY"
        },
        "type": "SubscriberSpeedClassAttributeRule"
    },
    "status": "active",
    "targetDeviceId": null,
    "targetGroupId": null,
    "targetImsi": null,
    "targetOperatorId": "(対象のユーザーのオペレータID)",
    "targetTag": null
}

どうやら無事に設定されたようなので、動作確認してみましょう。 コンソール画面上から一つのSIMの速度を変更してみます。 すると、すぐにメールが届きました!

f:id:unifa_tech:20180301175351p:plain

変更してみよう

ちょっとこのメールだと、何がどう変更されたのかわかんないな……ということで、内容を変えてみます。 先ほどはイベントハンドラーの作成でしたが、今度はもう作成されているものを変更します。 同じく、jsonの設定ファイルを作成し、 soracom event-handlers update --body @{JSONファイルのパス} --handler-id (↑で作成したイベントハンドラーのID) で変更が可能です。

配信するメールのメッセージには、あらかじめ決められた変数を埋め込むことが出来ます。 今回は、「どのSIMが、どう変更されたか」がわかるように、SIMを特定するIMSIと変更前の速度、変更後の速度をメールの文面に入れます。

{
  "targetOperatorId": "(対象のユーザーのオペレータID)",
  "name": "SpeedClass",
  "description": "速度変更通知のテスト",
  "ruleConfig": {
    "type": "SubscriberSpeedClassAttributeRule",
    "properties": {
      "inactiveTimeoutDateConst": "IMMEDIATELY"
    }
  },
  "status": "active",
  "actionConfigList": [
     {
      "properties": {
        "executionDateTimeConst": "IMMEDIATELY",
        "message": "SIMの速度が変更されました。 ${imsi}:${oldSpeedClass} → ${newSpeedClass}",
        "title": "通知:SIMの速度が変更されました",
        "to": "(送信したいメールアドレス)"
      },
      "type": "SendMailAction"
    }
  ]
}

先ほどと同じく、コンソール画面から変更を行ってみます。 無事、欲しい情報の入ったメッセージが送られてきました。

f:id:unifa_tech:20180301193020p:plain

まとめ

今回は、クライアントを利用してSORACOM Air SIMの監視設定をしてみました。 既に似た題材でブログを書かれている方もいらっしゃいましたが、日々拡張されていることもあって細かな部分が変わっていたり、少し用途が違ったりしたので、改めて自分の備忘の意味も込め、書かせて頂いた次第です。 登場当初から言われておりましたが、イベントハンドラーはAWSのLambdaとの連携やAPIを叩くことも出来るなど機能は多彩。 公式サンプルにもある通り設定次第ではSIM操作の履歴を内部的に持つことも出来、色々と使い道がありそうです。

今後も弊社サービスがより使いやすくなるよう、色々なことを試して行こうと思います。