これは何?
Amazon Echo Dotにお願いして、ネットワークコントローラーのAPI経由で、ネットワーク機器の設定変更を行ってもらうサンプルです。なるべく楽ちんに行う方法を模索してみました。
最初、Vlan変更やスイッチポートの開閉をやってみたのですが、地味過ぎて悲しかったので、スイッチポートのPoE機能をネットワークAPI経由でenable/disableすることで、クリスマスツリーのイルミネーションを点灯・消灯を行ってみました。少しだけ、華やかになりました。
デモ1:Alexa、「Network close」「Network open」
実際には、Vlanを変更しています。(隔離Vlanと公開Vlanのイメージ)
*クリックするとYoutubeが開きます
デモ2:Alexa、「Network power on」「Network power off」
スイッチポートはUpのまま、PoEをOn/Offしています。(PoEから給電されたワイヤーライトが点灯・消灯)
*クリックするとYoutubeが開きます
構成
物理構成
デモ1
デモ2
※今回、購入したもの
・PoEスプリッタ(TP-Link TL-POE10R)
・LEDワイヤーライト(2.1mmジャック、12V入力)
・ミニツリー
サービス構成
必要アカウント
- Alexa Developerアカウント ... IFTTTから連携できるよう、登録しておく
- IFTTT ... 「My Applet」を作成、Amazon Alexaでトリガー、zapierへWebhookを発行
- zapier ... IFTTTからのWebhookを受け、登録したPythonスクリプトを実行
- Meraki ... zapierのPythonスクリプトから、自宅MerakiのダッシュボードAPIを操作
大まかな手順
方針
- 自宅のネットワーク(Meraki)を使います。Cisco Merakiは、クラウド集中管理型で提供される、無線LAN、LANスイッチ、UTM(Unified Threat Management)などから構成されるネットワーク製品です。コントローラーがクラウドにあるので、API接続が楽ちんです。
- Meraki Dashboard APIのオンラインドキュメントによると、スイッチポートやSSID、ルーティング設定など色々できそうです。
- IFTTTを使ってAlexaを発行するイベントを用意します。IFTTTとは、「IF This Then That」というコンセプトで、Webサービスを連結するWebサービスだそうです。
- Alexaのスキル開発には、Amazon開発者コンソールからASK(Alexa Skill Kit)の準備、および、イベントに応答してコードを実行するエンドポイントとして推奨されるAWS Lambda(いわゆるサーバレス)か、自分のサーバを用意する必要があります。わかりやすく出来ているといっても、多少の学習コストがかかるので、今回は楽ちんであることを優先してIFTTTを使います。
- IFTTTのアクションとして、Meraki APIへ接続するWebhookを設定できればと思ったのですが、Meraki APIでは、HTTPヘッダにX-Cisco-Meraki-API-Keyを認証情報として設定しておく必要があり、IFTTTのアクションではこれを満たせません。
- zapierでは、WebHook受信をトリガーとして、自分で登録したPythonスクリプトを実行できます。逆に、zapierでは、現時点ではAlexaと連携してトリガーさせることはできないようです。
- したがって、AlexaでIFTTTをトリガーしてWebHookをzapierに送信し、zapierはWebHookを受け取るとMeraki APIを操作するPythonスクリプトを実行する、という構成にしました。
zapierで実行するPythonスクリプトの登録
IFTTTからzapierに送信するWebHookで、カスタムBodyで変数を渡せるので、Vlan番号やEnable/Disableなど、Alexaの呼び出しに応じてzapierで実行するPythonスクリプトの変数を補完しています。
Meraki ダッシュボードAPI
参考までに、MerakiダッシュボードAPIを操作するサンプルです。めちゃくちゃシンプルです。詳細は、オンラインドキュメントを参照ください。
import requests
url = "https://dashboard.meraki.com/api/v0/devices/スイッチシリアル番号/switchPorts/スイッチポート番号"
#ポートをenable、Vlanを10に変更
querystring = {"enabled":"true","vlan":"10"}
#ヘッダーのx-cisco-meraki-api-keyで認証
headers = {
'content-type': "application/x-www-form-urlencoded",
'x-cisco-meraki-api-key': "MerakiAPIキー",
}
response = requests.request("PUT", url, headers=headers, params=querystring)
print(response.text)
Meraki ダッシュボードAPIを使うには、APIアクセスを有効化して、APIキーを取得しておく必要があります。
まとめ
- ほとんどコードを書かずに、Alexaから自宅のネットワークを制御することができました。
- Merakiに限らず、今どきの業務用ネットワーク機器やネットワークコントローラーはたいがいオープンAPIを備えているので、Alexa(Echo Dot)などのスマートスピーカーと連携させると楽しいですね。(ネットワーク側にAPIがなくても、Ansibleとか挟めば良いでしょう)
- 音声一発で、ネットワークインベントリレポートを発行するとか、疎通テストを実行して結果を発行するとか、平常時と緊急時のQoSを入れ替えるとか、トラフィックをEast/Westに寄せてみたりとか、、
- デジタルビルディングなるソリューションもあるようですね。
- ネットワークエンジニアの守備範囲も、どんどん広くなるかも...
- (遊んでいるつもりが、意外とお仕事になったりして)
- 機能的な理解はもちろん、想像力も求められるかもしれません。
参考
- シスコでは、「プログラミングとか知らないよ!」というネットワークエンジニアや、「ネットワーク製品のAPIとか知らないよ!」というアプリケーションエンジニアが、無料でこっそり自習できるラーニングラボサイトを提供しています。是非ご活用下さい。
- Cisco DevNetサイトでは、APIやSDKをはじめとした技術情報や、イベント情報が公開されています。