enebular-agentとは、Raspberry Pi等の小型のLinuxデバイス上で動作するIoT向けのエージェントソフトです。
enebularと連携し、以下のことが可能です。
- Node-RED フローの遠隔デプロイ
- ファイルの遠隔デプロイ(2021年9月より無料でも利用できるようになった)
- AIモデルの遠隔デプロイ(2021年9月より無料でも利用できるようになった)
- フローのスタート/ストップ(現在、有料機能)
- enebular-agentのログ、ステータス監視(現在、有料機能)
enebular-agentは主にRaspberry Pi上で動作します。Raspberry Piとenebular-agentを使った例をQiitaに書いているので、参考にしてください。
この記事では、enebular-agentをRaspberry Pi 4Bにインストールし、enebularと連携させる手順を説明します。
enebular-agentを使うためには
enebular-agentでは、enebularとの連携にAmazon Web Service(AWS)のAWS IoTとAmazon SNSを使用しますので、AWSのアカウントが必要になります。
下図はenebularとAWS、enebular-agentとのイメージです。
AWSのアカウントを作成し、IAMのユーザーを用意すれば、enebularやenebular-agentのインストーラが自動的に設定を行いますので、AWSの各サービスの知識は不要です。
AWSのアカウント作成
まずは、AWSのアカウントを作成します。すでにお持ちの方は、この手順は飛ばしてください。
AWSのアカウント作成には以下の情報が必要になるので、用意してください。
- Eメールアドレス
- パスワード
- AWSアカウント名
- フルネーム
- 電話番号(登録用と検証用 同じものでも可)
- 住所
- クレジットカードまたはデビットカード番号
※引き落とし用の情報は必要になりますが、個人利用、enebular-agent数台分であれば無料枠の範囲で利用できます
Amazon Web Serviceのページで以下のアイコンをクリックします。
サインインのページから以下のアイコンをクリックし、アカウントを作成します。
アカウント作成画面で必要情報を入力していきます。
SMSもしくは音声での検証が必要になるので、国を選択し、電話番号を入力し、セキュリティの文字を入力後、「SMSを送信する」をクリックし、受け取ったコードを入力します。
次のページでサポートプランを選択します。とりあえず無料のベーシックプランで十分です。
これでアカウントの作成は完了です。
最初に入力した、Eメールアドレスがルートユーザーのメールアドレスになるので、サインインのページでEメールアドレスとパスワードを入力し、サインインします。
IAMユーザー、ロールの作成
AWSにログインした状態でサービス検索欄からIAMを検索し、IAMのページに移動します。
IAM Role ARNの作成
IAMのページの左メニューからロールを選択し、「ロールを作成」をクリックします。
ロールの作成画面で「IoT」を選択、ユースケースの選択で「IoT」を選択し「次のステップ:アクセス権限」をクリックします。
アクセス権限ポリシー、タグの作成はそのまま次のステップへ進み、確認画面でロール名を入力し「ロールの作成」をクリックします。
ロールの名前は、指定無いですが、わかりやすく「enebular_status_push_role」と名付けました。
ロール一覧の画面に作成したロールが追加されるので、それをクリックし設定を変更します。
追加されているポリシーをすべて削除し、「ポリシーをアタッチします」から「AWSIoTDataAccess」と「AmazonSNSFullAccess」を追加し直します。
アタッチし直したポリシーは以下の様になります。
これで、IAM Role ARNの作成は完了です。
AWSユーザの作成
PassRoleポリシーの作成
ユーザーを作成する前にPassRoleポリシーの作成を行います。IAMのページの左メニューからポリシーを選択し、「ポリシーを作成」をクリックします。
ポリシーの作成画面、サービスの選択で「IAM」を検索し、選択します。
アクションで、「PassRole」を検索し、選択します。
同じようにアクションで、「GetRole」、「ListAttachedRolePolicies」を検索し、選択します。
リソースの欄では、「ARNの追加」をクリックし、Role name with Path欄に「enebular_status_push_role」と入力し、「追加」をクリックします。
「次のステップ:タグ」をクリックし、タグの作成画面は、そのまま「次のステップ:確認」をクリックします。
ポリシーの名前は、指定無いですが、わかりやすく「EnebularPassRole」と名付けました。
ユーザの作成
最後にユーザの作成を行います。IAMのページの左メニューからユーザーを選択し、「ユーザーを作成」をクリックします。
ユーザー名は特に指定ないですが、わかりやすく「enebular-conn-user」と名付けました。AWS認証情報のタイプ選択は、アクセスキー・プログラムによるアクセスを選びます。
アクセス許可の設定で、「既存のポリシーを直接アタッチ」をクリックし、ポリシーのフィルタで、「AWSIoTFullAccess」と入力し、選択します。
同じように「AmazonSNSFullAccess」、「EnebularPassRole」も選択し、「次のステップ:タグ」をクリックします。
タグの作成画面は、そのまま「次のステップ:確認」をクリックします。
確認画面は、追加されているポリシーを確認し、「ユーザーの作成」をクリックします。
最後に表示される作成したユーザーの情報で、CSVファイルをダウンロードします。このCSVに記載されているアクセスキーIDとシークレットアクセスキーはenebular上の設定とenebular-agentのインストールの際に使用します。
enebularのコネクションを設定
enebular-agentをenebularに繋ぐためにenebular側でコネクションを設定します。
enebularの無料アカウントの作り方から説明します。
enebularのアカウントの作り方
enebularのページから「サインイン」をクリックします。
サインインページで、「Create an account」をクリックします。
サインアップページで、必要情報を入力。プライバシーポリシーと利用規約に同意しますのチェックボックスにチェックを入れ、「sign up」をクリックします。
入力したEメールアドレス宛に検証メールが届くので、「Verify」をクリックします。
検証が完了したらアカウントの作成完了です。左上のアイコンをクリックして、メインページに移動します。
プロジェクトとコネクションの作成
enebularでは、プロジェクトの上でフローやファイル、AIモデル等のアセットやenebular-agent等のデバイスを管理するので、プロジェクトを作成します。
プロジェクトの作成
メインページで「Create Project」をクリックし、表示されるダイアログでプロジェクトの名前を入力後「Submit」をクリックします。
コネクションの設定
コネクションを設定する前にIAM Role ARNとAWS IoT Endpointとを調べておきます。
IAM Role ARN
IAM Role ARNの作成で作成したロールのページに記載されています。
AWS IoT Endpoint
AWS IoT Coreのページから調べられます。AWSのサービス検索欄で「IoT Core」と入力し、ページに移動します。
AWS IoT Coreのページの左メニューから設定を開きます。右上のリージョン選択欄はどこでも良いですが、東京を選びました。
コネクションの作成
作成したプロジェクトのダッシュボードに入ります。
ダッシュボードの左メニューからConnectionsを選択し、「+」をクリックします。
Connection作成のダイアログに必要情報を入力します。
- Connection Type ⇒ AWS IoT
- Connection Name ⇒ device(自由な名前でOK)
- AWS Access Key ID ⇒ AWS IAMユーザー作成時にダウンロードしたCSVに記載されているものを記入します
- AWS Secret Access Key ⇒ AWS IAMユーザー作成時にダウンロードしたCSVに記載されているものを記入します
- AWS IoT Endpoint ⇒ 前項で調べたAWS IoT Endpointを記入します
- IAM Role ARN ⇒ 前項で調べたIAM Role ARNを記入します
最後に「Save」をクリックすれば、Connectionsに追加されます。
enebular-agentのインストール
Raspberry Pi 4Bに最新のRaspberry Pi OS with desktopをインストールし、ターミナルから以下のコマンドでenebular-agentをインストールします。
> wget -qO- https://enebular.com/agent-install | sudo -E bash -s -- --aws-iot-thing-name={thing name} --aws-access-key-id={AWS Access Key ID} --aws-secret-access-key={AWS Secret Access Key} --aws-iot-region={region} --user=pi
※コマンド中の以下の情報は書き換えてください
-
{thing name}
⇒ 同じコネクション内で被らない名前にします。enebular上で表示されるDeviceの名前にもなります。例:device-001
-
{AWS Access Key ID}
⇒ AWS IAMユーザー作成時にダウンロードしたCSVに記載されているものを記入します -
{AWS Secret Access Key}
⇒ AWS IAMユーザー作成時にダウンロードしたCSVに記載されているものを記入します -
{region}
⇒ Connection作成時と同じリージョンを記入します。例:ap-northeast-1
インストールが完了すると以下のように表示されます。
================================================================================
enebular-agent has been successfully installed ✔
- Version: 2.15.5
- Location: /home/pi/enebular-runtime-agent
- User: pi
- Service name: enebular-agent-pi
AWS IoT Thing device-001 has been created.
enebular-agent is running as a system service.
To check the status of agent, run the following command on the target device:
sudo journalctl -ex -u enebular-agent-pi.service
================================================================================
See details in full install log file: /tmp/enebular-agent-install-log.xLiusK
enebular-agentはServiceに登録され、裏で起動します。また、再起動しても自動起動します。
インストーラで、AWS IoTのThingもインストールコマンドの引数で指定した名称で作成されます。
enebular-agent動作確認
動作確認として、enebular-agentで表示端末を作るで紹介しているフローをデプロイしてみます。
フローのOverview画面の「Deploy」をクリックします。
Connectionの一覧が表示されるので、作成したAWS IoTのConnectionをクリックします。
次にAWS IoTに登録されているThingが表示されますので、enebular-agentをインストールした際に指定した名称のものをチェックし、「Deploy」をクリックします。
次に表示される画面で、Deploy StatusがDeployingからDeployedになれば、enebular-agentへのフローのデプロイが完了します。
Raspberry Piの画面を確認すると自動的にブラウザが表示され、天気情報が表示されるので、フローが動作していることがわかります。
Raspberry Piにデプロイしたフローは、ローカルネットワーク内であれば、パソコンからフローを直接編集することも可能です。別記事のenebular editorでデバッグに方法を書いているので、参考にしてみてください。