シナリオ: オブジェクト・ストレージからのバッチ・データの取込み
OCI Object Storageから順次CSVオブジェクトをダウンロードし、Node-REDの各バッチ・レコードを変換してOCI IoTに取り込みます。
このシナリオを使用して、オブジェクト・ストレージから順次CSVオブジェクトをダウンロードし、オフラインまたは履歴の読取りをOCI IoTにリプレイして、デジタル・ツイン履歴を完全な状態に保ちます。Node-REDフローはInject -> Prepare Filename -> Object Storage Download -> Increment Index -> CSV -> Transform -> MQTT-OUTです。
このシナリオでは、各CSVファイルはフローがオンデマンドでダウンロードおよび処理する個別のオブジェクトであるため、オブジェクト・ストレージを使用します。フローで、マウントされたファイル・システム・パスを介して使用可能な共有ファイルが必要な場合は、File Storageを使用します。ファイル・ストレージまたはオブジェクト・ストレージの選択を参照してください。
開始する前に、一般的なシナリオ設定を完了してください。
タスク
前提条件
バッチCSVオブジェクトのオブジェクト・ストレージ・バケットを作成します。オブジェクト・ストレージ・ネームスペースおよびバケット名を記録します。フロー・ランタイム動的グループを作成し、オブジェクト・ストレージ・ノードで使用されるリソース・プリンシパル構成に、バケットからオブジェクトをダウンロードするために必要なオブジェクト・ストレージ読取りポリシーがあることを確認します。
フロー・ランタイムは、オブジェクト・ストレージおよびOCI IoTデバイス・ホストに到達できる必要があります。
ステップ1: フロー・ランタイムの作成
ステップ2: バッチCSVオブジェクトのアップロード
ステップ3: ノード-REDフローの構成
- フロー・ランタイム・エディタを開きます。
- ノード-REDエディタで、メイン・メニューを開き、「インポート」を選択します。
- エクスポートしたフロー・ドキュメントを貼り付けるか、そのファイルを選択して、「インポート」を選択します。
- インポートされたノードと接続を確認し、「デプロイ」を選択します。
完全なフロー・ドキュメントを置換するには、
oci iot flow-runtime update-flowsコマンドを使用します。oci iot flow-runtime update-flows \ --iot-flow-runtime-id <flow-runtime-ocid> \ --flows-document file://<path-to-flows-json>ノート
このコマンドは、完全なフロー・ドキュメントを置き換えます。バックアップが必要な場合は、最初に現在のドキュメントを取得して保存します。詳細は、IoTフロー・ランタイムのフローの更新を参照してください。
完全なフロー・ドキュメントを置き換えるには、UpdateIotFlowRuntimeFlows操作を実行します。
PUT /20250531/iotFlowRuntimes/{iotFlowRuntimeId}/flows <complete-Node-RED-flows-document>エクスポートされた完全なNode-REDフロー・ドキュメントをリクエスト本文として渡します。同期操作ではフロー・ドキュメントが返され、作業リクエストは作成されません。
ステップ4: フローのデプロイと実行
- 「デプロイ」を選択します
iot-data-1.csv、iot-data-2.csv、iot-data-3.csvなどの順次名を使用して、構成済バケットにCSVオブジェクトをアップロードします。- Injectノードをトリガーするか、構成された間隔を待ちます。Object Storageノードが次のオブジェクトをダウンロードしていることを確認します。
- オブジェクトがダウンロードされた後にのみカウンタが増加することを確認します。次のオブジェクトが使用できない場合は、先に進めないでください。
ステップ5: バッチ・データ収集の検証
- オブジェクト・ストレージ・ノードが予期したCSVオブジェクトをダウンロードし、CSVノードが行ごとに1つのメッセージを発行したことを確認します。
- ゲートウェイ行がトピック
dataを生成し、HVAC行がhvacs/fr-guide-hvac-01およびhvacs/fr-guide-hvac-02を生成したことを確認します。 - 共通コンソール検証を使用して、3つのデジタル・ツイン・インスタンスすべてについて、RAWデータまたは取込みデータ、スナップショット値、正規化値または履歴値を確認します。
トラブルシューティング
- オブジェクト・ストレージ・ネームスペース、バケット名、シーケンシャル・オブジェクト名およびリソース・プリンシパル構成を確認します。
- オブジェクト・ストレージ・ノードがダウンロードしたオブジェクトをバッファとして返し、index-increment関数がそれをUTF-8テキストに変換することを確認します。
- 次のポーリングの前に
iot-data-<counter>.csvが存在することを確認します。カウンタは、ダウンロードが成功した後にのみ進みます。 - CSVデリミタおよび1行目の列名がサンプルと一致することを確認します。
- 各行に、サポートされている
deviceType、一致する外部キーおよび数値のソース・タイムスタンプが含まれていることを確認します。 - MQTTデバイス・ホスト接続、ゲートウェイ資格証明、アダプタ・マッピングおよびターゲット・デジタル・ツイン・ライフサイクルの状態を確認します。
詳細は、「IoTフロー・ランタイムのトラブルシューティング」を参照してください。
FAQ
- CSVオブジェクト名でカウンタを使用するのはなぜですか。
- フローは、
iot-data-1.csvやiot-data-2.csvなどの予測可能な順序を処理します。カウンタは、正常にダウンロードされた後にのみ進行するため、オブジェクトは順番に処理されます。 - Object Storageノードがリソース・プリンシパルを使用するのはなぜですか。
- フロー・ランタイムは、フローにユーザー資格証明を格納せずに、承認済バケットにアクセスできます。動的グループおよびポリシーは、必要な読取りアクセス権を付与する必要があります。
- 次の順次オブジェクトが存在しない場合はどうなりますか。
- ダウンロードに失敗し、カウンタは変更されません。フローを再度トリガーする前に、予期されるオブジェクトをアップロードするか、ネームスペース、バケット、接頭辞およびカウンタを修正してください。
- ダウンロードされたバッファがテキストに変換されるのはなぜですか。
- CSVノードにはテキスト入力が必要です。関数ノードは、CSV解析の前にオブジェクト・ストレージ・レスポンスをバッファからUTF-8テキストに変換します。