シナリオ: IoTフロー・ランタイム・シナリオのリソースの設定
次のフロー・ランタイム・シナリオで使用される共通IoTリソースを作成し、この設定を1回実行して、次のシナリオでこれらのIoTリソースを再利用できるようにします。
シナリオでは、外部MQTTブローカ、オブジェクト・ストレージまたはOCI IoTキューによって、IoTフロー・ランタイムでデータがNode-REDに送信されます。その後、フローはOCI IoTデバイス・ホストまたはOCI通知トピックに公開されます。
タスク
シナリオのネットワーク設定
各シナリオでは、次のネットワーク設定を使用します。
| シナリオまたはアクセス・パス | 接続 | ネットワーク設定 |
|---|---|---|
| シナリオ: 外部ブローカからのライブ・データの取込み | 外部MQTTブローカおよびOCI IoTデバイス・ホスト | プライベート・サブネットを、NATゲートウェイを介したアウトバウンド・ルートまたは別の承認されたインターネット・エグレス・パスとともに使用します。TCPポート8883上のアウトバウンドMQTT TLSトラフィックをブローカおよびデバイス・ホストに許可します。 |
| シナリオ: オブジェクト・ストレージからのバッチ・データの取込み | OCI Object StorageおよびOCI IoTデバイス・ホスト | オブジェクト・ストレージへのOCIサービス接続を提供し、TCPポート8883のアウトバウンドMQTT TLSトラフィックをデバイス・ホストに許可します。フロー・ランタイム動的グループを作成し、シナリオ・バケットのオブジェクト・ストレージ読取りポリシーでリソース・プリンシパルを使用するようにオブジェクト・ストレージ・ノードを構成します。パブリック・サブネットまたはパブリック・ロード・バランサは必要ありません。 |
| シナリオ: 正規化されたIoTデータの監視と電子メール・アラートの送信 | OCI IoTデータベース・キューとOCI通知 | IoTデータベース・キュー、NotificationsサービスおよびIoTコマンド・サービスへのOCIサービス接続を提供します。通知ポリシーおよびデジタル・ツイン・コマンド・インボーク・ポリシーでリソース・プリンシパルを使用するように、OCI通知ノードおよびIoT送信コマンド・ノードを構成します。パブリックMQTTブローカ、パブリック・サブネットまたはパブリック・ロード・バランサは必要ありません。 |
| ノード-RED UIおよびフロー・ドキュメント管理 | フロー・ランタイム・ホストおよびOCIサービスAPI | フロー・ランタイムからノード-REDエディタを開き、コンソール、CLIまたはAPIを使用してフロー・ドキュメントを管理します。これらの管理パスは、フローに由来するMQTTおよびOCIサービス接続とは別です。 |
ファイル・ストレージは、シナリオ: オブジェクト・ストレージからのバッチ・データの取込みでは使用されません。ファイル・ストレージ・マウントを明示的に使用する別のフローについては、選択したサブネットがマウント・ターゲットに到達でき、そのセキュリティ・ルールで必要なファイル・ストレージ・トラフィックが許可されていることを確認します。IoTフロー・ランタイムのファイル・ストレージ・アクセスの構成を参照してください。
リソース名とツール
フロー・ランタイム・シナリオでは、次の名前を使用します。異なる名前を使用する場合は、対応するすべてのトピック、外部キーおよびフロー値を更新します。
| リソース | 値の例 |
|---|---|
| ドメイン・グループ | FR-GUIDE-DG |
| IoTドメイン | fr-guide-domain |
| ゲートウェイの表示名 | FR-GUIDE-GW-01 |
| ゲートウェイ外部キー | fr-guide-gw-01 |
| HVAC表示名 | FR-GUIDE-HVAC-01およびFR-GUIDE-HVAC-02 |
| HVAC外部キー | fr-guide-hvac-01およびfr-guide-hvac-02 |
| ボイラー表示名 | FR-GUIDE-BOILER-01およびFR-GUIDE-BOILER-02 |
| ボイラー外部キー | fr-guide-boiler-01およびfr-guide-boiler-02 |
| パブリックMQTTブローカ | test.mosquitto.org |
| パブリックMQTT TLSポート | 8883 |
| 単一実行時のトピック | source/+/+ |
| 共有サブスクリプション・トピック | $share/fr-guide/source/+/+ |
フロー・ランタイムの場合はノードREDエディタにアクセスし、MQTTXなどのMQTTクライアントにアクセスする必要があります。
次の設定でMQTTX接続を作成します:
| フィールド | 値 |
|---|---|
| 名前 | fr-guide-public-broker |
| ホスト | test.mosquitto.org |
| ポート | 8883 |
| SSL/TLS | 有効 |
| プロトコル | MQTT 5.0 |
| ユーザー名とパスワード | 空白のまま |
プレースホルダ値
この例のプレースホルダ値の説明。
| プレースホルダ | 摘要 |
|---|---|
<compartment-ocid> | IoTリソースのコンパートメント。 |
<iot-domain-group-ocid> | IoTドメイン・グループOCID。 |
<iot-domain-ocid> | IoTドメインOCID。 |
<device-host> | IoTドメインのデバイス・ホスト。IoTドメインの詳細の取得を参照してください |
<subnet-ocid> | 顧客のネットワーク・アクセスを必要とするフロー・ランタイムで使用されるサブネット。 |
<nsg-ocid> | 顧客のネットワーク・アクセスを必要とするフロー・ランタイムで使用されるネットワーク・セキュリティ・グループ。 |
<object-storage-namespace> | バッチ・データ・シナリオのオブジェクト・ストレージ・ネームスペース。 |
<bucket-name> | バッチCSVオブジェクトを含むオブジェクト・ストレージ・バケット。 |
<notification-topic-ocid> | モニタリング・シナリオのOCI通知トピックのOCID。 |
<domain-short-id> | IoTドメイン・デバイス・ホストの最初のラベル。IoTドメインの詳細の取得を参照してください。 |
<flow-runtime-short-id> | フロー・ランタイム・ホストの最初のラベル。 |
<secret-or-certificate-ocid> | ゲートウェイの認証に使用されるVaultシークレットまたは証明書OCID。 |
<gateway-adapter-ocid> | ゲートウェイ・デジタル・ツイン・アダプタのOCID。 |
<hvac-adapter-ocid> | HVACデジタルツインアダプタのOCID。 |
<boiler-adapter-ocid> | Boiler Digital Twin AdapterのOCID。 |
<gateway-instance-ocid> | ゲートウェイ・デジタル・ツイン・インスタンスのOCID。 |
<hvac-01-digital-twin-ocid> | 最初のHVACデジタル・ツイン・インスタンスのOCID。 |
<hvac-02-digital-twin-ocid> | 2番目のHVACデジタル・ツイン・インスタンスのOCID。 |
<boiler-01-digital-twin-ocid> | 最初のボイラー・デジタル・ツイン・インスタンスのOCID。 |
<boiler-02-digital-twin-ocid> | 2番目のボイラー・デジタル・ツイン・インスタンスのOCID。 |
ステップ1: デジタル・ツイン・モデルの作成
ゲートウェイ・ヘルス・テレメトリ、HVACテレメトリ、ボイラー温度および圧力テレメトリ用のデジタル・ツイン・モデルを作成します。次の指定をgateway-model.json、hvac-model.jsonおよびboiler-model.jsonとして保存します。
{
"@context": [
"dtmi:dtdl:context;3",
"dtmi:dtdl:extension:historization;1"
],
"@id": "dtmi:com:oracle:iot:flowruntime:GatewayGuide;1",
"@type": "Interface",
"displayName": "Flow Runtime Gateway Guide Model",
"contents": [
{"@type": ["Telemetry", "Historized"], "name": "cpuUtilization", "schema": "integer"},
{"@type": ["Telemetry", "Historized"], "name": "memoryUtilization", "schema": "integer"},
{"@type": ["Telemetry", "Historized"], "name": "storageUtilization", "schema": "integer"},
{"@type": ["Telemetry", "Historized"], "name": "firmwareVersion", "schema": "string"}
]
}{
"@context": [
"dtmi:dtdl:context;3",
"dtmi:dtdl:extension:historization;1"
],
"@id": "dtmi:com:oracle:iot:flowruntime:HVACGuide;1",
"@type": "Interface",
"displayName": "Flow Runtime HVAC Guide Model",
"contents": [
{"@type": ["Telemetry", "Historized"], "name": "temperature", "schema": "double"},
{"@type": ["Telemetry", "Historized"], "name": "humidity", "schema": "double"},
{"@type": ["Telemetry", "Historized"], "name": "pressure", "schema": "double"},
{"@type": ["Telemetry", "Historized"], "name": "mode", "schema": "string"}
]
}{
"@context": [
"dtmi:dtdl:context;3"
],
"@id": "dtmi:com:oracle:example:boiler;1",
"@type": "Interface",
"displayName": "Boiler",
"description": "A digital twin model for Boiler",
"contents": [
{
"@type": "Telemetry",
"name": "temperature",
"schema": "integer"
},
{
"@type": "Telemetry",
"name": "pressure",
"schema": "integer"
}
]
}各ゲートウェイおよびHVACメッセージでは、4つの正規化された行が生成されます。各ボイラー・メッセージは、temperatureおよびpressureに対してそれぞれ1つずつ、2つの正規化された行を生成します。
- 「IoTドメイン」リスト・ページで、操作するIoTドメインを選択します。リスト・ページの検索に関するヘルプが必要な場合は、IoTドメインのリストを参照してください。
- 「デジタル・ツイン・モデル」を選択し、「作成」を選択します。
- ゲートウェイ・モデルの名前を入力し、
gateway-model.jsonをアップロードするか、その仕様を貼り付けて、「作成」を選択します。 hvac-model.jsonおよびboiler-model.jsonに対して前述のステップを繰り返します。
3つのデジタル・ツイン・モデルすべてを作成するには、oci iot digital-twin-model createコマンドを使用します。
oci iot digital-twin-model create \ --iot-domain-id <iot-domain-ocid> \ --spec file://gateway-model.json oci iot digital-twin-model create \ --iot-domain-id <iot-domain-ocid> \ --spec file://hvac-model.json oci iot digital-twin-model create \ --iot-domain-id <iot-domain-ocid> \ --spec file://boiler-model.jsongateway-model.json、hvac-model.jsonおよびboiler-model.jsonに対してCreateDigitalTwinModel操作を実行します。IoTドメインOCIDおよび対応するDTDL仕様を各リクエストで指定します。
ステップ2: デジタルツインアダプタを作成する
各モデルのデジタル・ツイン・アダプタを作成します。次の定義をgateway-envelope.json、gateway-routes.json、hvac-envelope.json、hvac-routes.json、boiler-envelope.jsonおよびboiler-routes.jsonとして保存します。
{
"referenceEndpoint": "/data",
"referencePayload": {
"dataFormat": "JSON",
"data": {
"time": 1773768299143534,
"cpuUtil": 30,
"memUtil": 25,
"diskUtil": 20,
"firmware": "Oracle Linux 9.1"
}
},
"envelopeMapping": {
"timeObserved": "$.time",
"target": "${if ([\"boilers\", \"hvacs\"] | contains([endpoint(1)])) then endpoint(2) else null end}",
"contentRoot": "$"
}
}[
{
"condition": "${endpoint(1) == \"data\"}",
"referencePayload": {
"dataFormat": "JSON",
"data": {
"time": 1773768299143534,
"cpuUtil": 30,
"memUtil": 25,
"diskUtil": 20,
"firmware": "Oracle Linux 9.1"
}
},
"payloadMapping": {
"$.cpuUtilization": "$.cpuUtil",
"$.memoryUtilization": "$.memUtil",
"$.storageUtilization": "$.diskUtil",
"$.firmwareVersion": "$.firmware"
}
}
]{
"referenceEndpoint": "/data",
"referencePayload": {
"dataFormat": "JSON",
"data": {
"time": 1773768299143534,
"temperature": 72,
"humidity": 45,
"pressure": 101.2,
"mode": "cool"
}
},
"envelopeMapping": {
"timeObserved": "$.time"
}
}[
{
"condition": "*",
"referencePayload": {
"dataFormat": "JSON",
"data": {
"time": 1773768299143534,
"temperature": 72,
"humidity": 45,
"pressure": 101.2,
"mode": "cool"
}
},
"payloadMapping": {
"$.temperature": "$.temperature",
"$.humidity": "$.humidity",
"$.pressure": "$.pressure",
"$.mode": "$.mode"
}
}
]{
"referenceEndpoint": "/telemetry",
"referencePayload": {
"dataFormat": "JSON",
"data": {
"timestamp": 1773768299143534,
"temperature": 0,
"pressure": 0
}
},
"envelopeMapping": {
"timeObserved": "$.timestamp"
}
}[
{
"condition": "*",
"payloadMapping": {
"$.temperature": "$.temperature",
"$.pressure": "$.pressure"
}
}
]ゲートウェイ・ターゲット・マッピングは、hvacs/<external-key>またはboilers/<external-key>にパブリッシュされたメッセージを、間接的に接続された一致するデジタル・ツイン・インスタンスに委任します。
- 「IoTドメイン詳細」ページで、「デジタル・ツイン・アダプタ」、「作成」の順に選択します。
- ゲートウェイ・アダプタの名前を入力し、ゲートウェイ・モデルを選択します。
gateway-envelope.jsonをインバウンド・エンベロープとしてアップロードまたは貼り付け、gateway-routes.jsonをインバウンド・ルートとして貼り付け、「作成」を選択します。- HVACモデルを選択し、
hvac-envelope.jsonおよびhvac-routes.jsonを使用して、HVACアダプタを作成します。 - ボイラー・アダプタを作成するには、「ボイラー・モデル」を選択し、
boiler-envelope.jsonおよびboiler-routes.jsonを使用します。 - 各デジタル・ツイン・アダプタのOCIDを記録します。
3つのデジタル・ツイン・アダプタすべてを作成するには、oci iot digital-twin-adapter createコマンドを使用します。
oci iot digital-twin-adapter create \ --iot-domain-id <iot-domain-ocid> \ --display-name "FR Guide Gateway Adapter" \ --digital-twin-model-spec-uri "dtmi:com:oracle:iot:flowruntime:GatewayGuide;1" \ --inbound-envelope file://gateway-envelope.json \ --inbound-routes file://gateway-routes.json oci iot digital-twin-adapter create \ --iot-domain-id <iot-domain-ocid> \ --display-name "FR Guide HVAC Adapter" \ --digital-twin-model-spec-uri "dtmi:com:oracle:iot:flowruntime:HVACGuide;1" \ --inbound-envelope file://hvac-envelope.json \ --inbound-routes file://hvac-routes.json oci iot digital-twin-adapter create \ --iot-domain-id <iot-domain-ocid> \ --display-name "FR Guide Boiler Adapter" \ --digital-twin-model-spec-uri "dtmi:com:oracle:example:boiler;1" \ --inbound-envelope file://boiler-envelope.json \ --inbound-routes file://boiler-routes.jsonデジタル・ツイン・アダプタごとに返されるOCIDを記録します。
ゲートウェイ、HVACおよびボイラー・アダプタに対してCreateDigitalTwinAdapter操作を実行します。各リクエストで、IoTドメインOCID、対応するモデル仕様URI、インバウンド・エンベロープおよびインバウンド・ルートを指定します。各アダプタに対して返されたOCIDを記録します。
ステップ3: デジタル・ツイン・インスタンスの作成
最初に直接接続されたゲートウェイのデジタル・ツイン・インスタンスを作成してから、間接的に接続された2つのHVACおよび間接的に接続された2つのボイラー・デジタル・ツイン・インスタンスを作成します。サンプル・フローは、デバイス・ホストに対してfr-guide-gw-01として認証します。
- 「IoTドメイン詳細」ページで、「デジタル・ツイン・インスタンス」、「作成」の順に選択します。
- 表示名
FR-GUIDE-GW-01、外部キーfr-guide-gw-01、接続タイプゲートウェイ、ゲートウェイ・アダプタおよびデバイス認証IDを使用して、ゲートウェイを作成します。 - ゲートウェイ・デジタル・ツイン・インスタンスのOCIDおよびデバイス・パスワードを記録します。
- 表示名
FR-GUIDE-HVAC-01および外部キーfr-guide-hvac-01を使用して、間接接続インスタンスを作成します。 - HVACアダプタを選択し、デジタル・ツイン・インスタンスをゲートウェイに関連付けます。
FR-GUIDE-HVAC-02および外部キーfr-guide-hvac-02に対して前述のステップを繰り返します。- 表示名
FR-GUIDE-BOILER-01および外部キーfr-guide-boiler-01を使用して、間接的に接続されたインスタンスを作成します。ボイラー・アダプタを選択し、インスタンスをゲートウェイに関連付けます。 FR-GUIDE-BOILER-02および外部キーfr-guide-boiler-02に対して前述のステップを繰り返します。- IoTドメイン・デバイス・ホストを記録します。既存のIoTドメインのデバイス・ホストを検索するには、IoTドメインの詳細の取得を参照してください。
最初にゲートウェイを作成するには、oci iot digital-twin-instance createコマンドを使用します。
oci iot digital-twin-instance create \ --iot-domain-id <iot-domain-ocid> \ --display-name FR-GUIDE-GW-01 \ --connectivity-type GATEWAY \ --external-key fr-guide-gw-01 \ --auth-id <secret-or-certificate-ocid> \ --digital-twin-adapter-id <gateway-adapter-ocid>ゲートウェイ・インスタンスのOCIDを記録し、間接的に接続されたHVACおよびボイラー・インスタンスを作成します。
oci iot digital-twin-instance create \ --iot-domain-id <iot-domain-ocid> \ --display-name FR-GUIDE-HVAC-01 \ --connectivity-type INDIRECT \ --external-key fr-guide-hvac-01 \ --gateways '["<gateway-instance-ocid>"]' \ --digital-twin-adapter-id <hvac-adapter-ocid> oci iot digital-twin-instance create \ --iot-domain-id <iot-domain-ocid> \ --display-name FR-GUIDE-HVAC-02 \ --connectivity-type INDIRECT \ --external-key fr-guide-hvac-02 \ --gateways '["<gateway-instance-ocid>"]' \ --digital-twin-adapter-id <hvac-adapter-ocid> oci iot digital-twin-instance create \ --iot-domain-id <iot-domain-ocid> \ --display-name FR-GUIDE-BOILER-01 \ --connectivity-type INDIRECT \ --external-key fr-guide-boiler-01 \ --gateways '["<gateway-instance-ocid>"]' \ --digital-twin-adapter-id <boiler-adapter-ocid> oci iot digital-twin-instance create \ --iot-domain-id <iot-domain-ocid> \ --display-name FR-GUIDE-BOILER-02 \ --connectivity-type INDIRECT \ --external-key fr-guide-boiler-02 \ --gateways '["<gateway-instance-ocid>"]' \ --digital-twin-adapter-id <boiler-adapter-ocid>ゲートウェイ・デバイス・パスワードおよびIoTドメイン・デバイス・ホストを記録します。既存のIoTドメインのデバイス・ホストを検索するには、IoTドメインの詳細の取得を参照してください。
CreateDigitalTwinInstance操作を実行して、接続タイプ
GATEWAY、外部キーfr-guide-gw-01、ゲートウェイ・アダプタOCIDおよび認証IDを持つゲートウェイを作成します。この操作をさらに2回実行して、
FR-GUIDE-HVAC-01およびFR-GUIDE-HVAC-02を作成します。接続タイプをINDIRECTに設定し、一致する外部キーを使用し、HVACアダプタOCIDを指定し、ゲートウェイ・インスタンスのOCIDをgatewaysに含めます。この操作をさらに2回実行して、
FR-GUIDE-BOILER-01およびFR-GUIDE-BOILER-02を作成します。接続タイプをINDIRECTに設定し、一致する外部キーを使用して、ボイラー・アダプタのOCIDを指定し、ゲートウェイ・インスタンスのOCIDをgatewaysに含めます。ゲートウェイ・デバイス・パスワードおよびIoTドメイン・デバイス・ホストを記録します。既存のIoTドメインのデバイス・ホストを検索するには、IoTドメインの詳細の取得を参照してください。
トピック契約および共有サブスクリプション
外部パブリッシャはsource/<device-type>/<external-key>を使用します。「ファンクション」ノードは、そのトピックをアダプタに必要なデバイス・ホスト・トピックに変換します。
| パブリックブローカーのトピック | IoTデバイス・ホストのトピック |
|---|---|
source/gateway/fr-guide-gw-01 | data |
source/hvacs/fr-guide-hvac-01 | hvacs/fr-guide-hvac-01 |
source/hvacs/fr-guide-hvac-02 | hvacs/fr-guide-hvac-02 |
source/boilers/fr-guide-boiler-01 | boilers/fr-guide-boiler-01 |
source/boilers/fr-guide-boiler-02 | boilers/fr-guide-boiler-02 |
1つのフロー・ランタイムの場合は、source/+/+をサブスクライブします。2つのフロー・ランタイム間でメッセージを分散するには、両方のランタイムを$share/fr-guide/source/+/+にサブスクライブし、MQTT 5.0を使用して、各ランタイムに異なるクライアントID (fr-guide-fr1やfr-guide-fr2など)を指定します。パブリッシャは、通常のsource/...トピックに引き続きパブリッシュします。
共通コンソールの検証
メッセージを公開した後、メッセージ・タイムスタンプを使用して、OCIコンソールでターゲットのデジタル・ツイン・インスタンスを検証します。
- ゲートウェイ、HVACおよびボイラのデジタル・ツイン・インスタンスがアクティブであることを確認します。
- rawまたは取り込まれたデータビューに、新しいゲートウェイまたは間接的に接続されたデバイスメッセージが含まれていることを確認します。
- ゲートウェイ・スナップショットに
cpuUtilization、memoryUtilization、storageUtilizationおよびfirmwareVersionが含まれていることを確認します。 - 各HVACスナップショットに
temperature、humidity、pressureおよびmodeが含まれていることを確認します。 - 各ボイラー・スナップショットに
temperatureおよびpressureが含まれていることを確認します。 - ゲートウェイおよびHVACサンプル・メッセージごとに4つの正規化値および履歴値が作成され、ボイラー・サンプル・メッセージごとに2つの正規化値が作成されていることを確認します。
トラブルシューティング
- インスタンス作成リクエストが拒否された場合は、ゲートウェイが認証IDを使用し、ゲートウェイ・ターゲット・マッピングを持つアダプタを使用していることを確認します。間接的に接続されたHVACまたはボイラー・インスタンスごとに認証IDがなく、ゲートウェイ・ターゲット・マッピングなしでデバイス固有のアダプタが使用され、アクティブ・ゲートウェイがリストされていることを確認します。
- HVACまたはボイラー・メッセージが間違ったインスタンスに割り当てられている場合は、トピックの外部キーがゲートウェイに関連付けられたそのデバイス・タイプのアクティブ・インスタンスと完全に一致することを確認します。
- 正規化された値が表示されない場合は、モデル・コンテンツ・パスがアダプタ・ペイロード・マッピングと一致し、受信タイムスタンプと数値がサンプル・フォーマットと一致することを確認します。
- フロー・ランタイムが外部ブローカまたはIoTデバイス・ホストに到達できない場合は、サブネット・ルート、NATゲートウェイまたは承認済エグレス・パス、NSGルール、TLSおよびアウトバウンドTCPポート
8883を確認します。 - OCIノードが後のシナリオで認可エラーをレポートした場合、フロー・ランタイムが動的グループと一致すること、およびリソース・プリンシパル・ポリシーが正確なオブジェクト・ストレージ・バケット、通知トピックまたはデジタル・ツイン・コマンド操作へのアクセス権を付与することを確認します。
一般的なリカバリ・ステップは、IoTフロー・ランタイムのトラブルシューティングを参照してください。
FAQ
- HVACおよびボイラー・インスタンスの前にゲートウェイを作成するのはなぜですか。
- 間接的に接続されたデジタル・ツイン・インスタンスは、作成時に少なくとも1つのアクティブ・ゲートウェイを参照する必要があります。
- ゲートウェイが別のアダプタを使用するのはなぜですか。
- ゲートウェイ・アダプタには、転送されたメッセージを一致するHVACまたはボイラー・インスタンスに委任するターゲット・マッピングが含まれています。HVACアダプタおよびボイラー・アダプタは、委任されたデバイス・ペイロードをマップし、ゲートウェイ・ターゲット・マッピングを含みません。
- フロー・ランタイム・シナリオごとにこの設定を繰り返しますか。
- 番号共有モデル、アダプタ、ゲートウェイ、HVACインスタンスおよびボイラー・インスタンスを1回作成し、ライブ・データ取込み、バッチ・データ取込みおよびモニタリングのシナリオで再利用します。
- 独自のリソース名と外部キーを使用できますか。
- はい。一致するすべてのトピック、外部キー、フロー値およびOCIDを、設定および個々のシナリオ全体で一貫して置換します。
関連シナリオ
このシナリオで作成されたIoTリソースを使用して、これらのシナリオのいずれかを完了します。