第3章 AMQ Online のモノのインターネット (IoT)
AMQ Online のモノのインターネット (IoT) 機能は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat の実稼働環境のサービスレベルアグリーメント (SLA) ではサポートされません。また、機能的に完全ではない可能性があるため、Red Hat はテクノロジープレビュー機能を実稼働環境に実装することは推奨しません。テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。サポート範囲の詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
3.1. IoT の使用開始
次の情報では、AMQ Online IoT 機能を設定および管理する方法について説明します。
3.1.1. IoT 接続の概念
モノのインターネット (IoT) 接続機能により、AMQ Online を使用してデバイスを管理し、バックエンドアプリケーションと接続できます。一般的な IoT アプリケーションでは、デバイスには通常のメッセージングアプリケーションとは異なる要件があります。開発者は、通常利用可能な任意のアドレスとセキュリティー設定を使用する代わりに、IoT サービスを使用して、デバイスの ID とセキュリティー設定を明示的に処理し、IoT 空間でよく使用される複数のプロトコルをサポートして、一貫性を持ったサポートを提供して、必要なデバイス通信パターンをサポートします。
重要な概念の 1 つは デバイスレジストリー です。これは、開発者がデバイスを登録して認証情報を提供するために使用します。これらの認証情報を使用すると、デバイスは、サポートされているプロトコルの 1 つ (HTTP、MQTT、LoRaWAN、および SigFox) を使用して プロトコルアダプター に接続できます。接続すると、デバイスは、次のメッセージングセマンティクスのいずれかを使用して、バックエンドアプリケーションからメッセージを送受信できます。
-
Telemetry: デバイスが非永続データをバックエンドアプリケーションに送信できるようにするため、メッセージは
multicast
アドレスタイプを使用して送信されます。このオプションは、重要でないセンサーの読み取り値を送信する場合に最適です。 -
Events: デバイスが永続的なデータをバックエンドアプリケーションに送信できるようにするため、
queue
アドレスタイプを使用してメッセージが送信されます。このオプションは、アラートや通知など、より重要なデバイスデータを送信する場合に最適です。
バックエンドアプリケーションは、コマンド メッセージをデバイスに送信することもできます。コマンドを使用して、デバイスでアクションをトリガーできます。例としては、設定プロパティーの更新、ソフトウェアコンポーネントのインストール、アクチュエーターの状態の切り替えなどがあります。
3.1.2. YAML バンドルを使用した AMQ Online のインストール
AMQ Online をインストールする最も簡単な方法は、定義済みの YAML バンドルを使用することです。
手順
cluster-admin
権限を持つユーザーとしてログインしてます。oc login -u system:admin
(オプション)
amq-online-infra
以外のプロジェクトにデプロイする場合は、次のコマンドを実行し、後続の手順でamq-online-infra
を置き換える必要があります。sed -i 's/amq-online-infra/my-project/' install/bundles/amq-online/*.yaml
AMQ Online をデプロイするプロジェクトを作成します。
oc new-project amq-online-infra
- ダウンロードしたリリースファイルの場所にディレクトリーを変更します。
amq-online
バンドルを使用してデプロイします。oc apply -f install/bundles/amq-online
(オプション) サンプルプランとインフラストラクチャー設定をインストールします。
oc apply -f install/components/example-plans
(オプション) サンプルのロールをインストールします。
oc apply -f install/components/example-roles
(オプション)
標準
認証サービスをインストールします。oc apply -f install/components/example-authservices/standard-authservice.yaml
(オプション) Service Catalog 統合をインストールします。
oc apply -f install/components/service-broker oc apply -f install/components/cluster-service-broker
3.1.3. IoT サービスのインストール
AMQ Online で IoT 機能の使用を開始するには、まず IoT サービスをインストールする必要があります。
手順
(オプション)
amq-online-infra
以外のプロジェクトにデプロイする場合は、次のコマンドを実行し、後続の手順でamq-online-infra
を置き換える必要があります。sed -i 's/amq-online-infra/my-project/' install/preview-bundles/iot/*.yaml
IoT バンドルをデプロイします。
oc apply -f install/preview-bundles/iot
MQTT プロトコルアダプターの証明書を作成します。テスト目的で、自己署名証明書を作成できます。
./install/components/iot/examples/k8s-tls/create oc create secret tls iot-mqtt-adapter-tls --key=install/components/iot/examples/k8s-tls/build/iot-mqtt-adapter-key.pem --cert=install/components/iot/examples/k8s-tls/build/iot-mqtt-adapter-fullchain.pem
スクリプトを呼び出すときに環境変数
NAMESPACE
を設定して、deploy
スクリプトがキーと証明書をインストールする namespace をオーバーライドできます。以下に例を示します。NAMESPACE=my-namespace ./install/components/iot/examples/k8s-tls/deploy
注記クラスターが
localhost
で実行されていない場合には、外部クライアント (MQTT など) が適切なサービスに適切に接続できるように、証明書を作成するときにクラスターのホスト名を指定する必要があります。以下に例を示します。CLUSTER=x.x.x.x.nip.io install/components/iot/examples/k8s-tls/create
(オプション) PostgreSQL サーバーをインストールし、データベースを作成します。
oc apply -f install/components/iot/examples/postgresql/deploy
すでに PostgreSQL インスタンスがあり、それにアクセスするユーザーでデータベースを作成した場合は、この手順を省略できます。
データベーススキーマを適用します。
作成したデータベースインスタンスで次の SQL ファイルを実行する必要があります。設定によっては、データベース管理者権限が必要になる場合があります。
-
install/components/iot/examples/postgresql/create.sql
-
install/components/iot/examples/postgresql/create.devcon.sql
データベースに接続された
psql
コマンドを使用して、SQL ファイルを実行できます。以下は、前の手順で説明したように PostgreSQL をインストールしたときに、コンテナー内からpsql
を実行する方法の例を示しています。oc exec -ti deployment/postgresql -- bash -c "PGPASSWORD=user12 psql device-registry registry" < install/components/iot/examples/postgresql/create.sql oc exec -ti deployment/postgresql -- bash -c "PGPASSWORD=user12 psql device-registry registry" < install/components/iot/examples/postgresql/create.devcon.sql
-
IoT インフラストラクチャー設定の例をインストールします。
oc apply -f install/components/iot/examples/iot-config.yaml
3.1.4. IoT プロジェクトの作成
IoT サービスをインストールしたら、IoT プロジェクトを作成します。
前提条件
手順
メッセージングテナントとしてログインします。
oc login -u developer
管理対象 IoT プロジェクトを作成します。
oc new-project myapp oc create -f install/components/iot/examples/iot-project-managed.yaml
リソースの準備が整うまで待ちます。
oc get addressspace iot oc get iotproject iot
注記Phase
フィールドに両方のリソースのReady
ステータスが表示されていることを確認します。メッセージングコンシューマーユーザーを作成します。
oc create -f install/components/iot/examples/iot-user.yaml
3.1.5. IoT デバイスの作成
IoT サービスをインストールして IoT プロジェクトを作成したら、監視するデバイス用の IoT デバイスを作成できます。
3.1.5.1. 新しいデバイスの登録
新しいデバイスを作成するには、最初にデバイスを登録する必要があります。
手順
デバイスレジストリーホストをエクスポートします。
export REGISTRY_HOST=$(oc -n amq-online-infra get routes device-registry --template='{{ .spec.host }}')
デバイスレジストリーアクセストークンをエクスポートします。
export TOKEN=$(oc whoami --show-token)
このトークンは、デバイスレジストリー管理 API に対する認証に使用されます。
定義された ID でデバイスを登録します (この例では
4711
を使用します)。curl --insecure -X POST -i -H 'Content-Type: application/json' -H "Authorization: Bearer ${TOKEN}" https://$REGISTRY_HOST/v1/devices/myapp.iot/4711
(オプション) 追加の登録情報を指定する必要がある場合は、次のように行います。
curl --insecure -X POST -i -H 'Content-Type: application/json' -H "Authorization: Bearer ${TOKEN}" --data-binary '{ "via": ["gateway1"] }' https://$REGISTRY_HOST/v1/devices/myapp.iot/4711
3.1.5.2. デバイスのユーザー名とパスワード認証情報の設定
新しいデバイスを登録したら、デバイスのユーザー名とパスワード認証情報を設定する必要があります。
手順
デバイスの認証情報を追加します。
curl --insecure -X PUT -i -H 'Content-Type: application/json' -H "Authorization: Bearer ${TOKEN}" --data-binary '[{ "type": "hashed-password", "auth-id": "sensor1", "secrets": [{ "pwd-plain":"'hono-secret'" }] }]' https://$REGISTRY_HOST/v1/credentials/myapp.iot/4711
3.1.6. Eclipse Hono コマンドラインクライアントのインストール
手順
- Eclipse Hono コマンドラインクライアント をダウンロードします。
メッセージングエンドポイント証明書を取得します。
oc -n myapp get addressspace iot -o jsonpath={.status.caCert} | base64 --decode > tls.crt
メッセージングエンドポイントのホストとポートをエクスポートします。
export MESSAGING_HOST=$(oc get -n myapp addressspace iot -o jsonpath='{.status.endpointStatuses[?(@.name=="messaging")].externalHost}') export MESSAGING_PORT=443
3.1.7. telemetry コンシューマーの開始
たとえば、センサーの読み取り値などの telemetry データをデバイスからクラウドに送信できます。これを行うには、最初に顧客アプリケーションを実行して telemetry コンシューマーを開始する必要があります。
手順
顧客アプリケーションを実行して、telemetry を受信します。
java -jar hono-cli-*-exec.jar --hono.client.host=$MESSAGING_HOST --hono.client.port=$MESSAGING_PORT --hono.client.username=consumer --hono.client.password=foobar --tenant.id=myapp.iot --hono.client.trustStorePath=tls.crt --message.type=telemetry
3.1.8. HTTP を使用した telemetry の送信
HTTP プロトコルを使用して、デバイスからクラウドに telemetry を送信できます。
手順
HTTP プロトコルを使用して telemetry を送信します。
curl --insecure -X POST -i -u sensor1@myapp.iot:hono-secret -H 'Content-Type: application/json' --data-binary '{"temp": 5}' https://$(oc -n amq-online-infra get routes iot-http-adapter --template='{{ .spec.host }}')/telemetry