SORACOM Napter と Ansible Dynamic Inventory で IoTデバイスの構成管理を行う
はじめに
IoTデバイスの管理も手に馴染んだツールを使いたいというお話をします。
これはSORACOM Advent Calendar 2019の7日目の記事となります。
「IoT デバイス管理 簡単 方法」 などと調べると「LwM2M」「FOTA」「月額料金 (1台当たり) 1万~20万デバイス : XX円」など難しい単語が並びます。
先人達は必要があって上記機能を編み出している訳ですが、これからIoTを始めようと思っている方々には、初めの1歩を挫くには十分な難易度です。
なので今日は手元のPCに入っているであろうAnsible から SORACOM Napter を使ってデバイスの構成管理をしてみたいと思います。
作ったものはこちらに置いておきます。
github.com
SORACOM Napter とは
SORACOM Napter はSORACOMのSIMを利用しているデバイスに対して簡単にリモートアクセスできるサービスです。
従来IoTデバイスへのリモートアクセス手法と言えば
などがあると思います。
それぞれセキュリティに懸念があったり、運用負荷や費用が高いなど一長一短でした。
SORACOM Napter を使うことで
することができるようになります。
また、1回線分のNapterの料金が毎月無料です。(通信量はかかります)
これは試さない訳にはいきませんね。
Ansible Dynamic Inventory
Ansible Dynamic Inventory は Ansible で構成管理したい対象を動的に設定することができます。
動的な対象は所定のjsonフォーマットであればよく3rdパーティのモジュールの利用もできますが、任意の shell script などを食わせることもできます。
この機能を利用することで
- SORACOMのlistSubscribers APIを叩いて任意のtagがついていれば
- SORACOM Napterの createPortMapping APIを叩いてportを解放し
- 返却されたIP/PortをAnsible Dynamic Inventory に食わせる形式に変換し
- SSHし設定を叩き込む
みたいなことができるないかと思った次第です。
RaspberryPi で実践
RaspberryPi の初期設定やSORACOM Airの設定はこちらを参考にしてください。
必要なミドルウェアの準備
今回はmacOSで実行しているのでbrewでインストールしてします。
$ brew install ansible $ brew install soracom-cli $ brew install http://git.io/sshpass.rb
鍵認証でRaspberryPiへログインするための準備
鍵認証でログインするための鍵を生成します。
PCで以下のコマンドで鍵を生成しRaspberryPiにscpします。
$ ssh-keygen -t rsa -b 2048 -f ~/.ssh/napter_raspberrypi $ scp ~/.ssh/napter_raspberrypi.pub pi@raspberrypi.local:
RaspberryPi にログインし以下のコマンドで公開鍵を登録します。
$ mkdir ~/.ssh $ cat napter_raspberrypi.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys $ rm napter_raspberrypi.pub
ssh_confを指定する方法もあるようです。
Ansible Dynamic Inventoryの対象を判別するtagの準備
SORACOMのコンソールにログインしSIMにtagを付与します。
device
:SORACOM Napterの対象を判別します。のちにshell scriptの変数に同じ文字列を設定します。ansible_user
:Ansible がRaspberryPi へログインするためのユーザー名を設定します。 下の画像だとpi
がユーザー名となります。
ansible-playbook で実行する
ansible-playbook で実行してみます。
鍵認証を利用するので dynamic_inventory_key.sh
を利用します。
SORACOM_CLI_PROFILE
:SORACOM CLIで利用しているprofile名を設定します。特に設定していなければdefalultを設定すれば良いはずです。TARGET_TAG_KEY
:Ansibleで制御したいSIMに付与したtagのkeyを設定します。コンソールのSIM一覧から設定している場合name
を設定すれば良いはずです。上の画像ではdevice
としています。TARGET_TAG_VALUE
:Ansibleで制御したいSIMに付与したtagのvalue を設定します。上の画像ではgroup2
としています。
# 鍵認証の場合 $ ansible-playbook -i ./dynamic_inventory_key.sh playbook.yaml --private-key=~/.ssh/napter_raspberrypi
ansible-playbookはデバイスにpingをするだけです。なんかすいません。
以下の様にokが返ってくることが確認できるかと思います。
PLAY RECAP ****************************************************************************************************************** AA.AA.AA.AA : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
まとめ
SORACOM Napter と Ansible Dynamic Inventory で IoTデバイスの構成管理を行う方法をまとめました。
構成管理はしてませんね。なんかすいません。
TODO
- Ansibleで設定完了後にNapterを閉じる