第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
oc login -u system:adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション)
amq-online-infra以外のプロジェクトにデプロイする場合は、次のコマンドを実行し、後続の手順でamq-online-infraを置き換える必要があります。sed -i 's/amq-online-infra/my-project/' install/bundles/amq-online/*.yaml
sed -i 's/amq-online-infra/my-project/' install/bundles/amq-online/*.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow AMQ Online をデプロイするプロジェクトを作成します。
oc new-project amq-online-infra
oc new-project amq-online-infraCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ダウンロードしたリリースファイルの場所にディレクトリーを変更します。
amq-onlineバンドルを使用してデプロイします。oc apply -f install/bundles/amq-online
oc apply -f install/bundles/amq-onlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) サンプルプランとインフラストラクチャー設定をインストールします。
oc apply -f install/components/example-plans
oc apply -f install/components/example-plansCopy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) サンプルのロールをインストールします。
oc apply -f install/components/example-roles
oc apply -f install/components/example-rolesCopy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション)
標準認証サービスをインストールします。oc apply -f install/components/example-authservices/standard-authservice.yaml
oc apply -f install/components/example-authservices/standard-authservice.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) Service Catalog 統合をインストールします。
oc apply -f install/components/service-broker oc apply -f install/components/cluster-service-broker
oc apply -f install/components/service-broker oc apply -f install/components/cluster-service-brokerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
sed -i 's/amq-online-infra/my-project/' install/preview-bundles/iot/*.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow IoT バンドルをデプロイします。
oc apply -f install/preview-bundles/iot
oc apply -f install/preview-bundles/iotCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
./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.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトを呼び出すときに環境変数
NAMESPACEを設定して、deployスクリプトがキーと証明書をインストールする namespace をオーバーライドできます。以下に例を示します。NAMESPACE=my-namespace ./install/components/iot/examples/k8s-tls/deploy
NAMESPACE=my-namespace ./install/components/iot/examples/k8s-tls/deployCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記クラスターが
localhostで実行されていない場合には、外部クライアント (MQTT など) が適切なサービスに適切に接続できるように、証明書を作成するときにクラスターのホスト名を指定する必要があります。以下に例を示します。CLUSTER=x.x.x.x.nip.io install/components/iot/examples/k8s-tls/create
CLUSTER=x.x.x.x.nip.io install/components/iot/examples/k8s-tls/createCopy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) PostgreSQL サーバーをインストールし、データベースを作成します。
oc apply -f install/components/iot/examples/postgresql/deploy
oc apply -f install/components/iot/examples/postgresql/deployCopy to Clipboard Copied! Toggle word wrap Toggle overflow すでに 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
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.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
IoT インフラストラクチャー設定の例をインストールします。
oc apply -f install/components/iot/examples/iot-config.yaml
oc apply -f install/components/iot/examples/iot-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.4. IoT プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
IoT サービスをインストールしたら、IoT プロジェクトを作成します。
前提条件
手順
メッセージングテナントとしてログインします。
oc login -u developer
oc login -u developerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 管理対象 IoT プロジェクトを作成します。
oc new-project myapp oc create -f install/components/iot/examples/iot-project-managed.yaml
oc new-project myapp oc create -f install/components/iot/examples/iot-project-managed.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow リソースの準備が整うまで待ちます。
oc get addressspace iot oc get iotproject iot
oc get addressspace iot oc get iotproject iotCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Phaseフィールドに両方のリソースのReadyステータスが表示されていることを確認します。メッセージングコンシューマーユーザーを作成します。
oc create -f install/components/iot/examples/iot-user.yaml
oc create -f install/components/iot/examples/iot-user.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 REGISTRY_HOST=$(oc -n amq-online-infra get routes device-registry --template='{{ .spec.host }}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバイスレジストリーアクセストークンをエクスポートします。
export TOKEN=$(oc whoami --show-token)
export TOKEN=$(oc whoami --show-token)Copy to Clipboard Copied! Toggle word wrap Toggle overflow このトークンは、デバイスレジストリー管理 API に対する認証に使用されます。
定義された ID でデバイスを登録します (この例では
4711を使用します)。curl --insecure -X POST -i -H 'Content-Type: application/json' -H "Authorization: Bearer ${TOKEN}" https://$REGISTRY_HOST/v1/devices/myapp.iot/4711curl --insecure -X POST -i -H 'Content-Type: application/json' -H "Authorization: Bearer ${TOKEN}" https://$REGISTRY_HOST/v1/devices/myapp.iot/4711Copy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) 追加の登録情報を指定する必要がある場合は、次のように行います。
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/4711curl --insecure -X POST -i -H 'Content-Type: application/json' -H "Authorization: Bearer ${TOKEN}" --data-binary '{ "via": ["gateway1"] }' https://$REGISTRY_HOST/v1/devices/myapp.iot/4711Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.5.2. デバイスのユーザー名とパスワード認証情報の設定 リンクのコピーリンクがクリップボードにコピーされました!
新しいデバイスを登録したら、デバイスのユーザー名とパスワード認証情報を設定する必要があります。
手順
デバイスの認証情報を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.6. Eclipse Hono コマンドラインクライアントのインストール リンクのコピーリンクがクリップボードにコピーされました!
手順
- Eclipse Hono コマンドラインクライアント をダウンロードします。
メッセージングエンドポイント証明書を取得します。
oc -n myapp get addressspace iot -o jsonpath={.status.caCert} | base64 --decode > tls.crtoc -n myapp get addressspace iot -o jsonpath={.status.caCert} | base64 --decode > tls.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow メッセージングエンドポイントのホストとポートをエクスポートします。
export MESSAGING_HOST=$(oc get -n myapp addressspace iot -o jsonpath='{.status.endpointStatuses[?(@.name=="messaging")].externalHost}') export MESSAGING_PORT=443export MESSAGING_HOST=$(oc get -n myapp addressspace iot -o jsonpath='{.status.endpointStatuses[?(@.name=="messaging")].externalHost}') export MESSAGING_PORT=443Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
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=telemetryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 }}')/telemetrycurl --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 }}')/telemetryCopy to Clipboard Copied! Toggle word wrap Toggle overflow