次の方法で共有


IoT Edge モジュール上の Azure Blob Storage を自分のデバイスにデプロイする

適用対象:IoT Edge 1.5 のチェックマーク IoT Edge 1.5 IoT Edge 1.4 チェックマーク IoT Edge 1.4

重要

サポートされているリリースは、IoT Edge 1.5 LTS と IoT Edge 1.4 LTS です。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

IoT Edge デバイスにモジュールをデプロイするにはいくつかの方法があり、これらすべてが IoT Edge モジュールの Azure Blob Storage で機能します。 2 つの最も簡単な方法では、Azure portal または Visual Studio Code テンプレートを使用します。

前提条件

Azure portal からデプロイする

Azure portal では、配置マニフェストの作成から、IoT Edge デバイスへのデプロイのプッシュまでをガイドします。

デバイスを選択する

  1. Azure Portal にサインインし、IoT Hub に移動します。
  2. [デバイス管理] メニューで、[デバイス] を選択します。
  3. 一覧からターゲット IoT Edge デバイスを選択します。
  4. [Set Modules] \(モジュールの設定) を選択します。

配置マニフェストを構成する

配置マニフェストは、デプロイするモジュール、モジュール間でのデータ フロー、およびモジュール ツインの目的のプロパティを記述した JSON ドキュメントです。 Azure portal には、配置マニフェストを作成する手順を示すウィザードがあります。 3 つの手順があり、[モジュール][ルート][確認と作成] の各タブで実行します。

モジュールを追加する

  1. ページの [IoT Edge モジュール] セクションで、[追加] ドロップダウンを選択し、[IoT Edge モジュール] を選択して、[IoT Edge モジュールの追加] ページを表示します。

  2. [設定] タブで、モジュール名を入力し、コンテナー イメージ URI を指定します。

    例 :

    • IoT Edge モジュールの名前: azureblobstorageoniotedge
    • [イメージの URI] : mcr.microsoft.com/azure-blob-storage:latest

    [I o T Edge モジュールの追加] ページの [モジュールの設定] タブを示すスクリーンショット。

    この手順の説明に従って、[モジュール設定] タブ、[コンテナ作成オプション] タブ、および [モジュールツイン設定] タブで値を指定するまで、[追加] を選択しないでください。

    重要

    Azure IoT Edge は、モジュールを呼び出すときに大文字と小文字を区別し、Storage SDK も既定で小文字になります。 Azure Marketplace でのモジュールの名前は AzureBlobStorageonIoTEdge ですが、名前を小文字に変更すると、IoT Edge モジュールの Azure Blob Storage への接続が中断されないことが保証されます。

  3. [コンテナーの作成オプション] タブを開きます。

  4. 次の JSON をコピーしてボックスに貼り付け、ストレージ アカウント情報とデバイス上のストレージのマウントを提供します。

    {
      "Env":[
        "LOCAL_STORAGE_ACCOUNT_NAME=<local storage account name>",
        "LOCAL_STORAGE_ACCOUNT_KEY=<local storage account key>"
      ],
      "HostConfig":{
        "Binds":[
            "<mount>"
        ],
        "PortBindings":{
          "11002/tcp":[{"HostPort":"11002"}]
        }
      }
    }
    

    [IoT Edge モジュールの追加] ページの [コンテナーの作成オプション] タブを示すスクリーンショット。

  5. [コンテナーの作成オプション] にコピーした JSON を、次の情報で更新します。

    • <local storage account name> を覚えやすい名前に置き換えます。 アカウント名は、小文字と数字の 3 文字から 24 文字の長さにする必要があります。 スペースは含めません。

    • <local storage account key> を 64 バイトの Base64 キーに置き換えます。 GeneratePlus などのツールを使ってキーを生成できます。 他のモジュールから BLOB ストレージにアクセスするには、これらの資格情報を使用します。

    • コンテナーのオペレーティング システムに応じて <mount> を置き換えます。 BLOB モジュールによってそのデータが保存されるボリュームの名前またはご利用の IoT Edge デバイス上の既存のディレクトリへの絶対パスを指定します。 ストレージ マウントによって、提供したデバイス上の位置がモジュール内の設定された位置にマップされます。

    Linux コンテナーの場合、形式は <ストレージのパスまたはボリューム>:/blobroot です。 次に例を示します。

    重要

    • IoT Edge モジュールの Blob Storage の特定の位置を指す、ストレージ マウント値の後半を変更しないでください。 ストレージ マウントは常に、Linux コンテナーの場合は :/blobroot で終わる必要があります。

    • IoT Edge では、モジュール コンテナーにアタッチされているボリュームは削除されません。 これは、アップグレード シナリオなど、コンテナー インスタンス間でデータを保持できるようにするための仕様上の動作です。 ただし、これらのボリュームが未使用のまま放置されるとディスク領域が不足し、それに伴うシステム エラーが発生する可能性があります。 シナリオで docker ボリュームを使う場合、特に運用環境のシナリオでは、docker volume prunedocker volume rm などの docker ツールを使って、未使用ボリュームを削除することをお勧めします。

  6. [モジュール ツインの設定] タブで、以降の JSON をコピーし、ボックスに貼り付けます。

    {
      "deviceAutoDeleteProperties": {
        "deleteOn": <true, false>,
        "deleteAfterMinutes": <timeToLiveInMinutes>,
        "retainWhileUploading": <true,false>
      },
      "deviceToCloudUploadProperties": {
        "uploadOn": <true, false>,
        "uploadOrder": "<NewestFirst, OldestFirst>",
        "cloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>; EndpointSuffix=<your end point suffix>",
        "storageContainersForUpload": {
          "<source container name1>": {
            "target": "<your-target-container-name>"
          }
        },
        "deleteAfterUpload": <true,false>
      }
    }
    
  7. プレースホルダーに示されているように、各プロパティを適切な値で構成します。 IoT Edge シミュレーターを使用している場合は、deviceToCloudUploadProperties および deviceAutoDeleteProperties で説明されているように、これらのプロパティの関連する環境変数に値を設定します。

    ヒント

    target コンテナーの名前には名前付けの制限事項があります。たとえば、$ プレフィックスの使用はサポートされていません。 すべての制限事項を表示するには、コンテナー名を表示します。

    Note

    コンテナー ターゲットが storageContainersForUpload で名前が指定されていないか null の場合、既定の名前がターゲットに割り当てられます。 コンテナーへのアップロードを停止する場合は、コンテナーを storageContainersForUpload から完全に削除する必要があります。 詳細については、「IoT Edge 上の Azure Blob Storage を使用してエッジにデータを格納する」の deviceToCloudUploadProperties セクションを参照してください。

    [IoT Edge モジュールの追加] ページの [モジュール ツインの設定] タブを示すスクリーンショット。

    モジュールがデプロイされた後に deviceToCloudUploadProperties と deviceAutoDeleteProperties を構成する方法については、モジュール ツインの編集に関するページを参照してください。 目的のプロパティに関する詳細情報は、「必要なプロパティの定義または更新」をご覧ください。

  8. [追加] を選択します。

  9. 次へ:ルート  でルート のセクションに進みます。

ルートを指定する

既定のルートを保持し、[次へ: 確認と作成] を選択してレビュー セクションに進みます。

デプロイを確認する

確認のセクションには、前述の 2 つのセクションの選択項目に基づいて作成された JSON 配置マニフェストが表示されます。 追加しなかった 2 つのモジュール ($edgeAgent および $edgeHub) もあります。 これらの 2 つのモジュールは、IoT Edge ランタイムを構成し、すべてのデプロイの既定値として使用されます。

デプロイ情報を確認し、[作成] を選択します。

デプロイを確認する

デプロイを作成すると、IoT ハブのデバイス ページに戻ります。

  1. デプロイで対象にした IoT Edge デバイスを選択して、その詳細を開きます。
  2. デバイスの詳細で、BLOB ストレージ モジュールが [デプロイで指定] および [デバイス別に報告] の両方として一覧表示されていることを確認します。

モジュールがデバイス上で起動され、IoT Hub に報告されるまで、しばらく時間がかかる場合があります。 ページを更新して、最新の状態を表示します。

Visual Studio Code からのデプロイ

Azure IoT Edge では、エッジ ソリューションの開発に役立つ、Visual Studio Code のテンプレートが提供されます。 次の手順を使って、BLOB ストレージ モジュールで新しい IoT Edge ソリューションを作成し、配置マニフェストを構成します。

重要

Azure IoT Edge Visual Studio Code 拡張機能はメンテナンス モードです。

  1. [ビュー]>[コマンド パレット] を選択します。

  2. コマンド パレットで、Azure IoT Edge:New IoT Edge solution コマンドを入力して実行します。

    新しい IoT Edge ソリューションを実行する方法を示すスクリーンショット。

    コマンド パレットに表示されるメッセージに従って、ソリューションを作成します。

    フィールド
    フォルダーの選択 Visual Studio Code によってソリューション ファイルが作成される、開発マシン上の場所を選択します。
    Provide a solution name (ソリューション名の指定) ソリューションのためにわかりやすい名前を入力するか、既定値の EdgeSolution をそのまま使用します。
    Select module template (モジュール テンプレートの選択) 既存のモジュール (完全なイメージの URL を入力) を選択します。
    Provide a module name (モジュール名の指定) azureblobstorageoniotedge のようにすべて小文字でモジュールの名前を入力します。

    IoT Edge モジュール上の Azure Blob Storage に小文字の名前を使用することが重要です。 IoT Edge は、モジュールを参照するときに大文字と小文字を区別し、Storage SDK は既定で小文字になります。
    Provide Docker image for the module (モジュールの Docker イメージの指定) イメージの URI: mcr.microsoft.com/azure-blob-storage:latest を指定します。

    Visual Studio Code は、指定された情報を取得し、IoT Edge ソリューションを作成して、それを新しいウィンドウに読み込みます。 ソリューション テンプレートによって、ご自分の BLOB ストレージ モジュール イメージを含む配置マニフェストのテンプレートが作成されますが、モジュールの作成オプションを構成する必要があります。

  3. 新しいソリューション ワークスペースで deployment.template.json を開いて、modules セクションを見つけます。 次の構成の変更を行います。

    1. 次のコードをコピーして、BLOB ストレージ モジュールの createOptions フィールドに貼り付けます。

      
      ```json
      "Env":[
       "LOCAL_STORAGE_ACCOUNT_NAME=<local storage account name>",
       "LOCAL_STORAGE_ACCOUNT_KEY=<local storage account key>"
      ],
      "HostConfig":{
        "Binds": ["<mount>"],
        "PortBindings":{
          "11002/tcp": [{"HostPort":"11002"}]
        }
      }
      

      Visual Studio Code でモジュール createOptions を更新する方法を示すスクリーンショット。

  4. <local storage account name> を覚えやすい名前に置き換えます。 アカウント名は、小文字と数字の 3 文字から 24 文字の長さにする必要があります。 スペースは含めません。

  5. <local storage account key> を 64 バイトの Base64 キーに置き換えます。 GeneratePlus などのツールを使ってキーを生成できます。 他のモジュールから BLOB ストレージにアクセスするには、これらの資格情報を使用します。

  6. コンテナーのオペレーティング システムに応じて <mount> を置き換えます。 そのデータを格納する BLOB モジュールが必要なボリュームの名前またはご利用の IoT Edge デバイス上のディレクトリへの絶対パスを指定します。 ストレージ マウントによって、提供したデバイス上の位置がモジュール内の設定された位置にマップされます。

    Linux コンテナーの場合、形式は <ストレージのパスまたはボリューム>:/blobroot です。 次に例を示します。

    重要

    • IoT Edge モジュールの Blob Storage の特定の位置を指す、ストレージ マウント値の後半を変更しないでください。 ストレージ マウントは常に、Linux コンテナーの場合は :/blobroot で終わる必要があります。

    • IoT Edge では、モジュール コンテナーにアタッチされているボリュームは削除されません。 これは、アップグレード シナリオなど、コンテナー インスタンス間でデータを保持できるようにするための仕様上の動作です。 ただし、これらのボリュームが未使用のまま放置されるとディスク領域が不足し、それに伴うシステム エラーが発生する可能性があります。 シナリオで docker ボリュームを使う場合、特に運用環境のシナリオでは、docker volume prunedocker volume rm などの docker ツールを使って、未使用ボリュームを削除することをお勧めします。

  7. 次の JSON を deployment.template.json ファイルに追加して、モジュールの deviceToCloudUploadPropertiesdeviceAutoDeleteProperties を構成します。 各プロパティを適切な値で構成して、ファイルを保存します。 IoT Edge シミュレーターを使用している場合は、値を、これらのプロパティの関連する環境変数 (deviceToCloudUploadPropertiesdeviceAutoDeleteProperties の説明セクションに記載) に設定します。

    "<your azureblobstorageoniotedge module name>":{
      "properties.desired": {
        "deviceAutoDeleteProperties": {
          "deleteOn": <true, false>,
          "deleteAfterMinutes": <timeToLiveInMinutes>,
          "retainWhileUploading": <true, false>
        },
        "deviceToCloudUploadProperties": {
          "uploadOn": <true, false>,
          "uploadOrder": "<NewestFirst, OldestFirst>",
          "cloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>",
          "storageContainersForUpload": {
            "<source container name1>": {
              "target": "<target container name1>"
            }
          },
          "deleteAfterUpload": <true, false>
        }
      }
    }
    

    Visual Studio Code で azureblobstorageoniotedge に必要なプロパティを設定する方法を示すスクリーンショット。

    モジュールがデプロイされた後に deviceToCloudUploadProperties と deviceAutoDeleteProperties を構成する方法については、モジュール ツインの編集に関するページを参照してください。 コンテナー作成オプション、再起動ポリシー、および必要な状態について詳しくは、「edgeAgent の必要なプロパティ」をご覧ください。

  8. deployment.template.json ファイルを保存します。

  9. [deployment.template.json] を右クリックして、[Generate IoT Edge deployment manifest]\(IoT Edge 配置マニフェストの生成\) を選択します。

  10. Visual Studio Code では、deployment.template.json で指定した情報が取得され、それを使用して新しい配置マニフェスト ファイルが作成されます。 配置マニフェストは、ご利用のソリューション ワークスペース内の新しい config フォルダーに作成されます。 そのファイルが用意されたら、「Visual Studio Code から Azure IoT Edge モジュールをデプロイする」または Azure CLI 2.0 を使用した Azure IoT Edge モジュールのデプロイに関するページの手順に従うことができます。

複数のモジュール インスタンスのデプロイ

IoT Edge モジュールで Azure Blob Storage の複数のインスタンスをデプロイする場合は、別のストレージ パスを指定し、モジュールでバインドする HostPort の値を変更する必要があります。 BLOB ストレージ モジュールでは常に、コンテナーでポート 11002 を公開しますが、ホスト上でバインドされるポートを宣言できます。

(Azure portal で) [コンテナーの作成オプション] または (Visual Studio Code の deployment.template.json ファイルで) createOptions フィールドを編集して、HostPort の値を変更します。

"PortBindings":{
  "11002/tcp": [{"HostPort":"<port number>"}]
}

追加の BLOB ストレージ モジュールに接続すると、更新されたホスト ポートをポイントするエンドポイントを変更します。

プロキシ サポートの構成

組織でプロキシ サーバーを使用している場合は、edgeAgent および edgeHub のランタイム モジュールのプロキシ サポートを構成する必要があります。 このプロセスには、次の 2 つのタスクが含まれます。

  • デバイスでランタイム デーモンと IoT Edge エージェントを構成します。
  • 配置マニフェスト JSON ファイルでモジュールの HTTPS_PROXY 環境変数を設定します。

このプロセスについては、「IoT Edge デバイスを構成してプロキシ サーバー経由で通信する」を参照してください。

さらに、Blob Storage モジュールでは、マニフェスト配置ファイルに HTTPS_PROXY 設定も必要です。 配置マニフェスト ファイルを直接編集することも、Azure portal を使用することもできます。

  1. Azure portal で IoT Hub に移動し、[デバイス管理] メニューで [デバイス] を選択します

  2. モジュールを構成するデバイスを選択します。

  3. [Set Modules] \(モジュールの設定) を選択します。

  4. ページの [IoT Edge モジュール] セクションで、BLOB Storage モジュールを選択します。

  5. [IoT Edge モジュールの更新] ページで、[環境変数] タブを選択します。

  6. [名前]HTTPS_PROXY を、[値] にプロキシ URL を追加します。

    指定した値を入力できる [IoT Edge モジュールの更新] ウィンドウを示すスクリーンショット。

  7. [更新][確認と作成] の順に選択します。

  8. 配置マニフェストでプロキシがモジュールに追加されていることを確認し、[作成] を選択します。

  9. デバイス詳細ページからモジュールを選択して設定を確認し、[IoT Edge Modules Details]/(IoT Edge モジュールの詳細/) ページの下部にある [環境変数] タブを選択します。

    [環境変数] タブを示すスクリーンショット。

次のステップ

IoT Edge 上の Azure Blob Storage の詳細を確認する。

配置マニフェストのしくみとその作成方法について詳しくは、「IoT Edge モジュールをどのように使用、構成、および再利用できるかを理解する」をご覧ください。