チュートリアル:Windows デバイス用の IoT Edge モジュールを開発するTutorial: Develop IoT Edge modules for Windows devices

Visual Studio を使用して、コードを開発し、IoT Edge を実行している Windows デバイスにデプロイします。Use Visual Studio to develop and deploy code to Windows devices running IoT Edge.

クイックスタートでは、Windows 仮想マシンを使用して IoT Edge デバイスを作成し、Azure Marketplace から事前構成済みのモジュールをデプロイしました。In the quickstart, you created an IoT Edge device using a Windows virtual machine and deployed a pre-built module from the Azure Marketplace. このチュートリアルでは、独自のコードを開発して IoT Edge デバイスにデプロイするために必要なことを順を追って説明します。This tutorial walks through what it takes to develop and deploy your own code to an IoT Edge device. このチュートリアルは、特定のプログラミング言語や Azure サービスをより詳細に説明する他のチュートリアルにとって有用な前提条件です。This tutorial is a useful prerequisite for the other tutorials, which go into more detail about specific programming languages or Azure services.

このチュートリアルでは、C# モジュールの Windows デバイスへのデプロイ例を使用します。This tutorial uses the example of deploying a C# module to a Windows device. この例が選択された理由は、最も一般的な開発シナリオだからです。This example was chosen because it's the most common development scenario. 異なる言語での開発に関心がある場合や、Azure サービスをモジュールとしてデプロイする予定の場合でも、このチュートリアルは開発ツールの学習に役立ちます。If you're interested in developing in a different language, or plan on deploying Azure services as modules, this tutorial will still be helpful to learn about the development tools. 開発の概念を理解したら、使用する言語や Azure サービスを選択して、詳細に進むことができます。Once you understand the development concepts, then you can choose your preferred language or Azure service to dive into the details.

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • 開発マシンを設定する。Set up your development machine.
  • Visual Studio 用の IoT Edge Tools を使用して、新しいプロジェクトを作成する。Use the IoT Edge tools for Visual Studio to create a new project.
  • プロジェクトをコンテナーとしてビルドして、Azure Container Registry に格納する。Build your project as a container and store it in an Azure container registry.
  • コードを IoT Edge デバイスにデプロイする。Deploy your code to an IoT Edge device.

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

主要な概念Key concepts

このチュートリアルでは、IoT Edge モジュールの開発について順を追って説明します。This tutorial walks through the development of an IoT Edge module. IoT Edge モジュール (略して、単にモジュールと呼ばれることもある) は、実行可能コードを含むコンテナーです。An IoT Edge module, or sometimes just module for short, is a container that contains executable code. IoT Edge デバイスには 1 つ以上のモジュールをデプロイできます。You can deploy one or more modules to an IoT Edge device. モジュールは、センサーからのデータの取り込み、データ分析操作やデータ クリーニング操作の実行、または IoT ハブへのメッセージの送信のような特定のタスクを実行します。Modules perform specific tasks like ingesting data from sensors, performing data analytics or data cleaning operations, or sending messages to an IoT hub. 詳細については、「Azure IoT Edge モジュールについて」を参照してください。For more information, see Understand Azure IoT Edge modules.

IoT Edge モジュールを開発する場合は、開発マシンと、モジュールが最終的にデプロイされるターゲット IoT Edge デバイスの違いを理解することが重要です。When developing IoT Edge modules, it's important to understand the difference between the development machine and the target IoT Edge device where the module will eventually be deployed. モジュール コードを保持するためにビルドするコンテナーは、ターゲット デバイスのオペレーティング システム (OS) と一致している必要があります。The container that you build to hold your module code must match the operating system (OS) of the target device. Windows コンテナーの開発では、Windows コンテナーは Windows オペレーティング システムでのみ実行されるため、この概念はよりシンプルです。For Windows container development, this concept is simpler because Windows containers only run on Windows operating systems. ただし、たとえば Windows 開発マシンを使って、Linux IoT Edge デバイス用のモジュールをビルドできます。But you could, for example, use your Windows development machine to build modules for Linux IoT Edge devices. そのシナリオでは、お使いの開発マシンが Linux コンテナーを実行していることを確認する必要があります。In that scenario, you'd have to make sure that your development machine was running Linux containers. このチュートリアルを進めていくときには、開発マシンの OSコンテナーの OS の違いに留意してください。As you go through this tutorial, keep in mind the difference between development machine OS and the container OS.

このチュートリアルでは、IoT Edge を実行している Windows デバイスをターゲットとしています。This tutorial targets Windows devices running IoT Edge. Windows IoT Edge デバイスは Windows コンテナーを使用します。Windows IoT Edge devices use Windows containers. Windows デバイス用の開発には Visual Studio を使用することをお勧めします。そのため、このチュートリアルでもそれを使用します。We recommend using Visual Studio to develop for Windows devices, so that's what this tutorial will use. Visual Studio Code も使用できますが、この 2 つのツールにはサポートに違いがあります。You can use Visual Studio Code as well, although there are differences in support between the two tools.

次の表に、Visual Studio Code と Visual Studio で Windows コンテナーに対してサポートされる開発シナリオを示します。The following table lists the supported development scenarios for Windows containers in Visual Studio Code and Visual Studio.

Visual Studio CodeVisual Studio Code Visual Studio 2017/2019Visual Studio 2017/2019
Azure サービスAzure services Azure FunctionsAzure Functions
Azure Stream AnalyticsAzure Stream Analytics
LanguagesLanguages C# (デバッグはサポートされていません)C# (debugging not supported) CC
C#C#
詳細情報More information Visual Studio Code 用の Azure IoT EdgeAzure IoT Edge for Visual Studio Code Visual Studio 2017 用の Azure IoT Edge ツールAzure IoT Edge Tools for Visual Studio 2017
Visual Studio 2019 用の Azure IoT Edge ツールAzure IoT Edge Tools for Visual Studio 2019

前提条件Prerequisites

開発マシン:A development machine:

  • 1809 以降の更新プログラムが適用された Windows 10。Windows 10 with 1809 update or newer.
  • 開発設定に応じて、独自のコンピューターまたは仮想マシンを使用できます。You can use your own computer or a virtual machine, depending on your development preferences.
    • 開発用マシンで、入れ子になった仮想化がサポートされていることを確認します。Make sure that your development machine supports nested virtualization. この機能は、次のセクションでインストールするコンテナー エンジンを実行するために必要です。This capability is necessary for running a container engine, which you install in the next section.
  • Git のインストール。Install Git.

Window 上の Azure IoT Edge デバイス:An Azure IoT Edge device on Windows:

  • 開発マシンでは IoT Edge を実行せず、代わりに別個のデバイスを使用することをお勧めします。We recommend that you don't run IoT Edge on your development machine, but instead use a separate device. 開発マシンと IoT Edge デバイスのこの区別は、実際のデプロイ シナリオをより正確に反映し、異なる概念を区別するのに役立ちます。This distinction between development machine and IoT Edge device more accurately mirrors a true deployment scenario, and helps to keep the different concepts straight.
  • 2 台目のデバイスを使用できない場合は、クイックスタートの記事を使用して、Windows 仮想マシンによって Azure で IoT Edge デバイスを作成してください。If you don't have a second device available, use the quickstart article to create an IoT Edge device in Azure with a Windows virtual machine.

クラウド リソース:Cloud resources:

  • Azure の Free レベルまたは Standard レベルの IoT HubA free or standard-tier IoT hub in Azure.

コンテナー エンジンをインストールするInstall container engine

IoT Edge モジュールはコンテナーとしてパッケージされるので、それらのコンテナーをビルドおよび管理するためには、開発マシン上にコンテナー エンジンが必要です。IoT Edge modules are packaged as containers, so you need a container engine on your development machine to build and manage the containers. Docker Desktop には多くの機能があり、コンテナー エンジンとして人気があるため、開発にはこれを使用することをお勧めします。We recommend using Docker Desktop for development because of its many features and popularity as a container engine. Windows コンピューターで Docker Desktop を使用すると、Linux コンテナーと Windows コンテナーを切り替えて、さまざまな種類の IoT Edge デバイス用のモジュールを容易に開発することができます。With Docker Desktop on a Windows computer, you can switch between Linux containers and Windows containers so that you can easily develop modules for different types of IoT Edge devices.

次の Docker のドキュメントを使用して、ご使用の開発マシンにインストールします。Use the Docker documentation to install on your development machine:

Visual Studio とツールを設定するSet up Visual Studio and tools

Visual Studio Code の IoT 拡張機能は IoT Edge モジュールの開発に役立ちます。The IoT extensions for Visual Studio help you to develop IoT Edge modules. これらの拡張機能は、プロジェクト テンプレートを提供し、配置マニフェストの作成を自動化し、IoT Edge デバイスの監視および管理を可能にします。These extensions provide project templates, automate the creation of the deployment manifest, and allow you to monitor and manage IoT Edge devices. このセクションでは、Visual Studio と IoT Edge 拡張機能をインストールし、次に Visual Studio 内から IoT Hub のリソースを管理する Azure アカウントを設定します。In this section, you install Visual Studio and the IoT Edge extension, then set up your Azure account to manage IoT Hub resources from within Visual Studio.

このチュートリアルでは、Visual Studio 2019 の開発手順を説明します。This tutorial teaches the development steps for Visual Studio 2019. Visual Studio 2017 (バージョン 15.7 以降) を使用している場合、手順はよく似ています。If you are using Visual Studio 2017 (version 15.7 or higher), the steps are very similar. Visual Studio Code を使用する場合は、「Visual Studio Code を使用して Azure IoT Edge のモジュールを開発およびデバッグする」に記載されている手順を参照してください。If you would rather use Visual Studio Code, refer to the instructions in Use Visual Studio Code to develop and debug modules for Azure IoT Edge.

  1. 開発用マシンで Visual Studio 2019 を準備します。Prepare Visual Studio 2019 on your development machine.

    • お使いの開発マシンに Visual Studio がまだインストールされていない場合は、次のワークロードとともに Visual Studio 2019 のインストールを行ってください。If you don't already have Visual Studio on your development machine, Install Visual Studio 2019 with the following workloads:

      • Azure の開発Azure development
      • C++ によるデスクトップ開発Desktop development with C++
      • .NET Core クロスプラットフォームの開発.NET Core cross-platform development
    • 開発用マシンに既に Visual Studio 2019 がインストールされている場合は、Visual Studio の変更の手順に従って必要なワークロードを追加します。If you do already have Visual Studio 2019 on your development machine, follow the steps in Modify Visual Studio to add the required workloads.

  2. Visual Studio 2019 用の Azure IoT Edge Tools 拡張機能をダウンロードしてインストールします。Download and install the Azure IoT Edge Tools extension for Visual Studio 2019.

    Visual Studio 2017 (バージョン 15.7 以降) を使用している場合は、Visual Studio 2017 用の Azure IoT Edge Tools をダウンロードしてインストールします。If you are using Visual Studio 2017 (version 15.7 or higher), download and install the Azure IoT Edge Tools for Visual Studio 2017.

  3. インストールが完了したら、Visual Studio 2019 を開き、 [コードなしで続行] を選択します。When your installations are complete, open Visual Studio 2019 and select Continue without code.

  4. [表示] > [Cloud Explorer] を選択します。Select View > Cloud Explorer.

  5. まだサインインしていない場合は、Cloud Explorer でプロフィール アイコンを選択し、Azure アカウントにサインインします。Select the profile icon in the cloud explorer and sign in to your Azure account if you aren't signed in already.

  6. サインインすると、Azure サブスクリプションが一覧表示されます。Once you sign in, your Azure subscriptions are listed. IoT ハブが含まれているサブスクリプションを展開します。Expand the subscription that has your IoT hub.

  7. サブスクリプションの [IoT Hub] 、お使いの IoT ハブの順に展開します。Under your subscription, expand IoT Hubs then your IoT hub. IoT デバイスの一覧が表示されます。このエクスプローラーを使用してそれらを管理できます。You should see a list of your IoT devices, and can use this explorer to manage them.

    Cloud Explorer で IoT Hub のリソースにアクセスする

コンテナー レジストリの作成Create a container registry

このチュートリアルでは、Azure IoT Tools の拡張機能を使用してモジュールをビルドし、ファイルからコンテナー イメージを作成します。In this tutorial, you use the Azure IoT Tools extension to build a module and create a container image from the files. その後、このイメージをレジストリにプッシュし、格納および管理します。Then you push this image to a registry that stores and manages your images. 最後に、レジストリからイメージを展開し、IoT Edge デバイスで実行します。Finally, you deploy your image from your registry to run on your IoT Edge device.

コンテナー イメージは、Docker と互換性のある任意のレジストリを使用して格納できます。You can use any Docker-compatible registry to hold your container images. 2 つの一般的な Docker レジストリ サービスは、Azure Container RegistryDocker Hub です。Two popular Docker registry services are Azure Container Registry and Docker Hub. このチュートリアルでは、Azure Container Registry を使用します。This tutorial uses Azure Container Registry.

コンテナー レジストリがまだない場合は、次の手順に従って、Azure に新しいコンテナー レジストリを作成します。If you don't already have a container registry, follow these steps to create a new one in Azure:

  1. Azure portal で、 [リソースの作成] > [コンテナー] > [コンテナー レジストリ] の順に選択します。In the Azure portal, select Create a resource > Containers > Container Registry.

  2. コンテナー レジストリを作成するには、以下の値を指定します。Provide the following values to create your container registry:

    フィールドField Value
    レジストリ名Registry name 一意の名前を指定します。Provide a unique name.
    サブスクリプションSubscription ドロップダウン リストで、サブスクリプションを選択します。Select a subscription from the drop-down list.
    リソース グループResource group IoT Edge のクイック スタートおよびチュートリアルで作成するすべてのテスト リソースに、同じリソース グループを使用することをお勧めします。We recommend that you use the same resource group for all of the test resources that you create during the IoT Edge quickstarts and tutorials. たとえば、IoTEdgeResources を使用します。For example, IoTEdgeResources.
    LocationLocation 近くの場所を選択します。Choose a location close to you.
    管理者ユーザーAdmin user [有効] に設定します。Set to Enable.
    SKUSKU [Basic] を選択します。Select Basic.
  3. 作成を選択します。Select Create.

  4. コンテナー レジストリが作成されたら、その場所を参照し、 [アクセス キー] を選択します。After your container registry is created, browse to it, and then select Access keys.

  5. ログイン サーバーユーザー名、およびパスワードの値をコピーして、どこか都合のいい場所に保存します。Copy the values for Login server, Username, and Password and save them somewhere convenient. このチュートリアルではこれらの値を使用して、コンテナー レジストリへのアクセスを提供します。You use these values throughout this tutorial to provide access to the container registry.

    コンテナー レジストリのログイン サーバー、ユーザー名、パスワードをコピーします。

新しいモジュール プロジェクトを作成するCreate a new module project

Azure IoT Edge Tools の拡張機能により、Visual Studio でサポートされているすべての IoT Edge モジュール言語のプロジェクト テンプレートが提供されます。The Azure IoT Edge Tools extension provides project templates for all supported IoT Edge module languages in Visual Studio. これらのテンプレートは、作業モジュールをデプロイして IoT Edge をテストするために必要なすべてのファイルとコードを含んでいます。または、独自のビジネス ロジックを使用してテンプレートをカスタマイズするための開始点を提供します。These templates have all the files and code that you need to deploy a working module to test IoT Edge, or give you a starting point to customize the template with your own business logic.

  1. [ファイル] > [新規作成] > [プロジェクト] の順に選択します。Select File > New > Project...

  2. 新しいプロジェクトのウィンドウで、 [IoT Edge] を検索し、 [Azure IoT Edge (Windows amd64)] プロジェクトを選択します。In the new project window, search for IoT Edge and choose the Azure IoT Edge (Windows amd64) project. [次へ] をクリックします。Click Next.

    新しい Azure IoT Edge プロジェクトを作成する

  3. [新しいプロジェクトの構成] ウィンドウで、プロジェクトとソリューションを、CSharpTutorialApp のようなわかりやすい名前に変更します。In the configure your new project window, rename the project and solution to something descriptive like CSharpTutorialApp. [作成] をクリックしてプロジェクトを作成します。Click Create to create the project.

    新しい Azure IoT Edge プロジェクトを構成する

  4. [モジュールの追加] ウィンドウで、以下の値を使用してプロジェクトを構成します。In the Add Module window, configure your project with the following values:

    フィールドField Value
    Visual Studio テンプレートVisual Studio Template [C# モジュール] を選択します。Select C# Module.
    モジュール名Module Name 既定の IotEdgeModule1 をそのまま使用します。Accept the default IotEdgeModule1.
    リポジトリの URLRepository Url イメージ リポジトリには、コンテナー レジストリの名前とコンテナー イメージの名前が含まれます。An image repository includes the name of your container registry and the name of your container image. コンテナー イメージは、モジュール プロジェクト名の値から事前に入力されています。Your container image is prepopulated from the module project name value. localhost:5000 を、Azure コンテナー レジストリのログイン サーバーの値に置き換えます。Replace localhost:5000 with the login server value from your Azure container registry. Azure portal で、コンテナー レジストリの概要ページからログイン サーバーの値を取得できます。You can retrieve the Login server value from the Overview page of your container registry in the Azure portal.

    最終的なイメージ リポジトリは、<レジストリ名>.azurecr.io/iotedgemodule1 のようになります。The final image repository looks like <registry name>.azurecr.io/iotedgemodule1.

    ターゲット デバイス、モジュールの種類、コンテナー レジストリ用にプロジェクトを構成する

  5. [追加] を選択し、モジュールを作成します。Select Add to create the module.

新しいプロジェクトが Visual Studio ウィンドウに読み込まれたら、少し時間を取って、作成されたファイルをよく確認してください。Once your new project loads in the Visual Studio window, take a moment to familiarize yourself with the files that it created:

  • CSharpTutorialApp という IoT Edge プロジェクト。An IoT Edge project called CSharpTutorialApp.
    • Modules フォルダーには、プロジェクトに含まれるモジュールへのポインターが含まれています。The Modules folder contains pointers to the modules included in the project. この例では、IotEdgeModule1 だけです。In this case, it should be just IotEdgeModule1.
    • 非表示の .env ファイルは、コンテナー レジストリへの資格情報を保持しています。The hidden .env file holds the credentials to your container registry. これらの資格情報は IoT Edge デバイスと共有されており、コンテナー イメージをプルするためにアクセスすることができます。These credentials are shared with your IoT Edge device so that it has access to pull the container images.
    • deployment.template.json ファイルは、配置マニフェストの作成に役立つテンプレートです。The deployment.template.json file is a template to help you create a deployment manifest. 配置マニフェストは、どのモジュールをデバイスにデプロイするか、それらをどのように構成するか、そしてそれらが互いに、およびクラウドとどのように通信するかを正確に定義するファイルです。A deployment manifest is a file that defines exactly which modules you want deployed on a device, how they should be configured, and how they can communicate with each other and the cloud.

      ヒント

      レジストリ資格情報セクションで、アドレスは、ソリューションを作成したときに指定した情報から自動的に入力されています。In the registry credentials section, the address is autofilled from the information you provided when you created the solution. ただし、ユーザー名とパスワードは、.env ファイルに格納されている変数を参照します。However, the username and password reference variables stored in the .env file. これはセキュリティのためです .env ファイルは GIT Ignore ですが、デプロイ テンプレートはそうではないからです。This is for security, as the .env file is git ignored, but the deployment template is not.

  • IotEdgeModule1 という IoT Edge モジュール プロジェクト。An IoT Edge module project called IotEdgeModule1.
    • program.cs ファイルには、プロジェクト テンプレートに付属する既定の C# モジュール コードが含まれています。The program.cs file contains the default C# module code that comes with the project template. 既定のモジュールは、ソースから入力を受け取り、それを IoT Hub に渡します。The default module takes input from a source and passes it along to IoT Hub.
    • module.json ファイルには、完全なイメージ リポジトリ、イメージ バージョン、サポートされているプラットフォームごとに使用する Dockerfile など、モジュールに関する詳細情報が含まれています。The module.json file hold details about the module, including the full image repository, image version, and which Dockerfile to use for each supported platform.

レジストリの資格情報を IoT Edge エージェントに提供するProvide your registry credentials to the IoT Edge agent

IoT Edge ランタイムでは、コンテナー イメージを IoT Edge デバイスにプルするためにレジストリ資格情報が必要です。The IoT Edge runtime needs your registry credentials to pull your container images onto the IoT Edge device. IoT Edge 拡張機能は、Azure からコンテナー レジストリの情報をプルし、それをデプロイ テンプレートに取り込もうと試みます。The IoT Edge extension tries to pull your container registry information from Azure and populate it in the deployment template.

  1. モジュール ソリューション内の deployment.template.json ファイルを開きます。Open the deployment.template.json file in your module solution.

  2. $edgeAgent の必要なプロパティで、registryCredentials プロパティを見つけ、正しい情報が格納されていることを確認します。Find the registryCredentials property in the $edgeAgent desired properties and ensure it contains the correct information.

    "registryCredentials": {
      "<registry name>": {
        "username": "$CONTAINER_REGISTRY_USERNAME_<registry name>",
        "password": "$CONTAINER_REGISTRY_PASSWORD_<registry name>",
        "address": "<registry name>.azurecr.io"
      }
    }
    
  3. モジュール ソリューション内の .env ファイルを開きます。Open the .env file in your module solution. (既定では、このファイルがソリューション エクスプローラーで非表示になっているため、表示するためには、 [Show All Files] ボタンを選択しなければならない場合があります。)(It's hidden by default in the Solution Explorer, so you might need to select the Show All Files button to display it.)

  4. Azure コンテナー レジストリからコピーした UsernamePassword の値を追加します。Add the Username and Password values that you copied from your Azure container registry.

  5. 変更内容を .env ファイルに保存します。Save your changes to the .env file.

サンプル コードを確認するReview the sample code

作成したソリューション テンプレートには、IoT Edge モジュールのサンプル コードが含まれています。The solution template that you created includes sample code for an IoT Edge module. このサンプル モジュールは、単にメッセージを受け取って渡すだけです。This sample module simply receives messages and then passes them on. パイプライン機能は、モジュールがどのようにして相互に通信を行うかという、IoT Edge での重要な概念を示します。The pipeline functionality demonstrates an important concept in IoT Edge, which is how modules communicate with each other.

各モジュールは、コードで宣言された複数の 入力キューと 出力キューを持つことができます。Each module can have multiple input and output queues declared in their code. デバイスで実行されている IoT Edge ハブは、1 つのモジュールの出力から、1 つ以上のモジュールの入力にメッセージをルーティングします。The IoT Edge hub running on the device routes messages from the output of one module into the input of one or more modules. 入力と出力を宣言するための特定の言語は、言語によって異なりますが、その概念はすべてのモジュールで同じです。The specific language for declaring inputs and outputs varies between languages, but the concept is the same across all modules. モジュール間のルーティングの詳細については、ルートの宣言に関する記事を参照してください。For more information about routing between modules, see Declare routes.

プロジェクト テンプレートに含まれるサンプル C# コードには、.NET 用 IoT Hub SDK の ModuleClient クラスが使用されています。The sample C# code that comes with the project template uses the ModuleClient Class from the IoT Hub SDK for .NET.

  1. program.cs ファイルで、SetInputMessageHandlerAsync メソッドを見つけます。In the program.cs file, find the SetInputMessageHandlerAsync method.

  2. SetInputMessageHandlerAsync メソッドでは、受信メッセージを受け取る入力キューが設定されます。The SetInputMessageHandlerAsync method sets up an input queue to receive incoming messages. このメソッドを確認し、input1 という入力キューがどのように初期化されるかを確かめます。Review this method and see how it initializes an input queue called input1.

    SetInputMessageHandlserAsync コンストラクターで入力名を見つける

  3. 次に、SendEventAsync メソッドを見つけます。Next, find the SendEventAsync method.

  4. SendEventAsync メソッドでは、受け取ったメッセージが処理され、それらを渡すための出力キューが設定されます。The SendEventAsync method processes received messages and sets up an output queue to pass them along. このメソッドを確認し、output1 という出力キューが初期化されることを確かめます。Review this method and see that it initializes an output queue called output1.

    SendEventAsync コンストラクターで出力名を見つける

  5. deployment.template.json ファイルを開きます。Open the deployment.template.json file.

  6. $edgeAgent の必要なプロパティの modules プロパティを見つけます。Find the modules property of the $edgeAgent desired properties.

    ここには 2 つのモジュールがリストされているはずです。There should be two modules listed here. 1 つ目は SimulatedTemperatureSensor で、これは既定ですべてのテンプレートに含まれており、モジュールをテストするために使用できるシミュレートされた温度データを提供します。The first is SimulatedTemperatureSensor, which is included in all the templates by default to provide simulated temperature data that you can use to test your modules. 2 つ目は、このプロジェクトの一部として作成した IotEdgeModule1 モジュールです。The second is the IotEdgeModule1 module that you created as part of this project.

    このモジュールのプロパティでは、デバイスへのデプロイにどのモジュールを含めるかを宣言します。This modules property declares which modules should be included in the deployment to your device or devices.

  7. $edgeHub の必要なプロパティから routes プロパティを見つけます。Find the routes property of the $edgeHub desired properties.

    IoT Edge ハブ モジュールの機能の 1 つは、デプロイ内のすべてのモジュール間でメッセージをルーティングすることです。One of the functions of the IoT Edge hub module is to route messages between all the modules in a deployment. routes プロパティの値を確認します。Review the values in the routes property. 最初のルートである IotEdgeModule1ToIoTHub では、IotEdgeModule1 モジュールの出力キューから送信されるすべてのメッセージを対象にするために、ワイルドカード文字 ( * ) を使用します。The first route, IotEdgeModule1ToIoTHub, uses a wildcard character (*) to include any message coming from any output queue in the IotEdgeModule1 module. これらのメッセージは、IoT Hub を示す予約名である $upstream に入ります。These messages go into $upstream, which is a reserved name that indicates IoT Hub. 2 つ目のルートである sensorToIotEdgeModule1 では、SimulatedTemperatureSensor モジュールから送信されたメッセージを受け取り、それらを IotEdgeModule1 モジュールの input1 入力キューにルーティングします。The second route, sensorToIotEdgeModule1, takes messages coming from the SimulatedTemperatureSensor module and routes them to the input1 input queue of the IotEdgeModule1 module.

    deployment.template.json でルートを確認する

ソリューションをビルドしてプッシュするBuild and push your solution

モジュール コードとデプロイ テンプレートを確認して、重要なデプロイの概念を理解しました。You've reviewed the module code and the deployment template to understand some key deployment concepts. これで、IotEdgeModule1 コンテナー イメージをビルドして、コンテナー レジストリにプッシュする準備ができました。Now, you're ready to build the IotEdgeModule1 container image and push it to your container registry. Visual Studio の IoT ツール拡張機能を使用して、この手順では、テンプレート ファイルの情報とソリューション ファイルのモジュール情報に基づいて配置マニフェストも生成します。With the IoT tools extension for Visual Studio, this step also generates the deployment manifest based on the information in the template file and the module information from the solution files.

Docker にサインインするSign in to Docker

コンテナー イメージをレジストリにプッシュして格納できるように、開発マシン上の Docker にコンテナー レジストリの資格情報を入力します。Provide your container registry credentials to Docker on your development machine so that it can push your container image to be stored in the registry.

  1. PowerShell またはコマンド プロンプトを開きます。Open PowerShell or a command prompt.

  2. レジストリを作成した後に保存した Azure コンテナー レジステリの資格情報を使用して Docker にサインインします。Sign in to Docker with the Azure container registry credentials that you saved after creating the registry.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    --password-stdin の使用を推奨するセキュリティ警告を受け取る場合があります。You may receive a security warning recommending the use of --password-stdin. このベスト プラクティスは、運用環境のシナリオを対象に推奨されていますが、それはこのチュートリアルの範囲外になります。While that best practice is recommended for production scenarios, it's outside the scope of this tutorial. 詳細については、docker login のリファレンスを参照してください。For more information, see the docker login reference.

ビルドとプッシュBuild and push

これで開発マシンはコンテナー レジストリにアクセスできるようになり、ご使用の IoT Edge デバイスもアクセスできるようになりました。Your development machine now has access to your container registry, and your IoT Edge devices will too. 次に、プロジェクト コードをコンテナー イメージに変換します。It's time to turn the project code into a container image.

  1. CSharpTutorialApp プロジェクト フォルダーを右クリックし、 [IoT Edge モジュールをビルドしてプッシュする] を選択します。Right-click the CSharpTutorialApp project folder and select Build and Push IoT Edge Modules.

    IoT Edge モジュールをビルドしてプッシュする

    ビルドおよびプッシュ コマンドは、3 つの操作を開始します。The build and push command starts three operations. 最初に、デプロイ テンプレートと他のソリューション ファイルの情報からビルドされた完全な配置マニフェストを保持する、config という新しいフォルダーをソリューション内に作成します。First, it creates a new folder in the solution called config that holds the full deployment manifest, built out of information in the deployment template and other solution files. 次に、docker build を実行して、お使いのターゲット アーキテクチャ用の適切な Dockerfile に基づいてコンテナー イメージをビルドします。Second, it runs docker build to build the container image based on the appropriate dockerfile for your target architecture. 次に、docker push を実行して、イメージ リポジトリをコンテナー レジストリにプッシュします。Then, it runs docker push to push the image repository to your container registry.

    このプロセスは、初回は数分間かかる可能性がありますが、次回これらのコマンドを実行するときは、それより速くなります。This process may take several minutes the first time, but is faster the next time that you run the commands.

  2. 新しく作成した config フォルダーで deployment.windows-amd64.json ファイルを開きます。Open the deployment.windows-amd64.json file in the newly created config folder. (config フォルダーが Visual Studio のソリューション エクスプローラーに表示されない場合があります。(The config folder may not appear in the Solution Explorer in Visual Studio. その場合は、ソリューション エクスプローラーのタスクバーで [すべてのファイルを表示] アイコンを選択します。If that's the case, select the Show all files icon in the Solution Explorer taskbar.)

  3. IotEdgeModule1 セクションの image パラメーターを見つけます。Find the image parameter of the IotEdgeModule1 section. image には、module.json ファイルからの名前、バージョン、およびアーキテクチャのタグを含む完全なイメージ レポジトリが含まれていることに留意してください。Notice that the image contains the full image repository with the name, version, and architecture tag from the module.json file.

  4. IotEdgeModule1 フォルダー内の module.json ファイルを開きます。Open the module.json file in the IotEdgeModule1 folder.

  5. モジュール イメージのバージョン番号を変更します。Change the version number for the module image. (version です。$schema-version ではありません。)たとえば、モジュール コードで軽微な修正を行ったかのように、修正プログラムのバージョン番号を 0.0.2 に増分します。(The version, not the $schema-version.) For example, increment the patch version number to 0.0.2 as though we had made a small fix in the module code.

    ヒント

    モジュール バージョンではバージョン管理が有効であり、実稼働環境に更新プログラムをデプロイする前に、少数のデバイスで変更をテストすることができます。Module versions enable version control, and allow you to test changes on a small set of devices before deploying updates to production. ビルドとプッシュの前にモジュール バージョンを増分しないと、コンテナー レジストリ内のリポジトリが上書きされます。If you don't increment the module version before building and pushing, then you overwrite the repository in your container registry.

  6. 変更内容を module.json ファイルに保存します。Save your changes to the module.json file.

  7. CSharpTutorialApp プロジェクト フォルダーをもう一度右クリックし、 [IoT Edge モジュールをビルドしてプッシュする] をもう一度選択します。Right-click the CSharpTutorialApp project folder again, and select Build and Push IoT Edge modules again.

  8. deployment.windows-amd64.json ファイルを再び開きます。Open the deployment.windows-amd64.json file again. ビルドおよびプッシュ コマンドをもう一度実行したときに新しいファイルが作成されなかったことに注意してください。Notice that a new file wasn't created when you ran the build and push command again. 代わりに、同じファイルが変更を反映するように更新されました。Rather, the same file was updated to reflect the changes. IotEdgeModule1 イメージは現在、コンテナーの 0.0.2 バージョンを指しています。The IotEdgeModule1 image now points to the 0.0.2 version of the container. 配置マニフェストのこの変更は、IoT Edge デバイスに対して、プルする必要があるモジュールの新しいバージョンがあることを伝える方法です。This change in the deployment manifest is how you tell the IoT Edge device that there's a new version of a module to pull.

  9. ビルドおよびプッシュ コマンドで何が行われたかをさらに確認するには、Azure portal にアクセスして、コンテナー レジストリに移動します。To further verify what the build and push command did, go to the Azure portal and navigate to your container registry.

  10. コンテナー レジストリで、 [リポジトリ] を選択し、次に iotedgemodule1 を選択します。In your container registry, select Repositories then iotedgemodule1. イメージの両方のバージョンがレジストリにプッシュされていたことを確認します。Verify that both versions of the image were pushed to the registry.

    コンテナー レジストリ内の両方のイメージのバージョンを表示する

トラブルシューティングTroubleshoot

モジュール イメージをビルドおよびプッシュしているときにエラーが発生する場合は、開発マシン上の Docker 構成に関連していることがよくあります。If you encounter errors when building and pushing your module image, it often has to do with Docker configuration on your development machine. 次のチェックを使用して構成を確認してください。Use the following checks to review your configuration:

  • コンテナー レジストリからコピーした資格情報を使用して docker login コマンドを実行したか。Did you run the docker login command using the credentials that you copied from your container registry? これらの資格情報は、Azure にサインインする際に使用するものとは異なります。These credentials are different than the ones that you use to sign in to Azure.
  • コンテナー リポジトリは正しいか。Is your container repository correct? 正しいコンテナー レジストリ名と正しいモジュール名が含まれているか。Does it have your correct container registry name and your correct module name? チェックする IotEdgeModule1 フォルダー内の module.json ファイルを開きます。Open the module.json file in the IotEdgeModule1 folder to check. リポジトリ値は、 <レジストリ名>.azurecr.io/iotedgemodule1 のようになっているはずです。The repository value should look like <registry name>.azurecr.io/iotedgemodule1.
  • IotEdgeModule1 とは異なる名前を自分のモジュールに使用した場合、その名前はソリューション全体で一貫しているか。If you used a different name than IotEdgeModule1 for your module, is that name consistent throughout the solution?
  • 対象のマシンは、ビルドしているのと同じ種類のコンテナーを実行しているか。Is your machine running the same type of containers that you're building? このチュートリアルは Windows IoT Edge デバイスを対象としているため、Visual Studio ファイルには windows-amd64 拡張子があり、Docker Desktop では Windows コンテナーが実行されている必要があります。This tutorial is for Windows IoT Edge devices, so your Visual Studio files should have the windows-amd64 extension, and Docker Desktop should be running Windows containers.

モジュールをデバイスにデプロイするDeploy modules to device

ビルドしたコンテナー イメージがコンテナー レジストリに格納されているのを確認したので、次にそれらをデバイスにデプロイします。You verified that the built container images are stored in your container registry, so it's time to deploy them to a device. お使いの IoT Edge デバイスが稼働していることを確認します。Make sure that your IoT Edge device is up and running.

  1. Visual Studio で Cloud Explorer を開き、お使いの IoT ハブの詳細を展開します。Open the Cloud Explorer in Visual Studio and expand the details for your IoT hub.

  2. デプロイ先のデバイスの名前を入力しますSelect the name of the device that you want to deploy to. [アクション] の一覧で、 [デプロイの作成] を選択します。In the Actions list, select Create Deployment.

    単一デバイスのデプロイを作成する

  3. ファイル エクスプローラーで、自分のプロジェクトの config フォルダーに移動して、deployment.windows-amd64.json ファイルを選択します。In the file explorer, navigate to the config folder of your project and select the deployment.windows-amd64.json file. 通常、このファイルは C:\Users\<username>\source\repos\CSharpTutorialApp\CSharpTutorialApp\config\deployment.windows-amd64.json にあります。This file is often located at C:\Users\<username>\source\repos\CSharpTutorialApp\CSharpTutorialApp\config\deployment.windows-amd64.json

    deployment.template.json ファイルは使用しないでください。これには、完全なモジュール イメージの値が含まれていません。Do not use the deployment.template.json file, which doesn't have the full module image values in it.

  4. Cloud Explorer で IoT Edge デバイスの詳細を展開すると、お使いのデバイス上のモジュールが表示されます。Expand the details for your IoT Edge device in the Cloud Explorer to see the modules on your device.

  5. [最新の情報に更新] ボタンを使用してデバイス状態を更新し、SimulatedTemperatureSensor および IotEdgeModule1 モジュールがお使いのデバイスにデプロイされていることを確認します。Use the Refresh button to update the device status to see that the SimulatedTemperatureSensor and IotEdgeModule1 modules are deployed your device.

    IoT Edge デバイスで実行されているモジュールを表示する

デバイスからのメッセージを表示するView messages from device

IotEdgeModule1 コードは、入力キューを介してメッセージを受け取り、出力キューを介してそれらを渡します。The IotEdgeModule1 code receives messages through its input queue and passes them along through its output queue. 配置マニフェストは、メッセージを SimulatedTemperatureSensor から IotEdgeModule1 に渡し、次に IotEdgeModule1 から IoT Hub にメッセージを転送したルートを宣言しました。The deployment manifest declared routes that passed messages from SimulatedTemperatureSensor to IotEdgeModule1, and then forwarded messages from IotEdgeModule1 to IoT Hub. Visual Studio 用の Azure IoT Edge ツールを使用すると、個々のデバイスから IoT Hub に到着したメッセージを表示できます。The Azure IoT Edge tools for Visual Studio allow you to see messages as they arrive at IoT Hub from your individual devices.

  1. Visual Studio の Cloud Explorer で、デプロイ先の IoT Edge デバイスの名前を選択します。In the Visual Studio cloud explorer, select the name of the IoT Edge device that you deployed to.

  2. [アクション] メニューの [Start Monitoring Built-in Event Endpoint](組み込みイベント エンドポイントの監視を開始する) を選択します。In the Actions menu, select Start Monitoring Built-in Event Endpoint.

  3. Visual Studio の [出力] セクションを監視して、IoT ハブに到着するメッセージを確認してください。Watch the Output section in Visual Studio to see messages arriving at your IoT hub.

    両方のモジュールが開始するまでに数分かかる場合があります。It may take a few minutes for both modules to start. IoT Edge ランタイムは、新しい配置マニフェストを受け取り、コンテナー ランタイムからモジュール イメージを取得して、それぞれの新しいモジュールを開始する必要があります。The IoT Edge runtime needs to receive its new deployment manifest, pull down the module images from the container runtime, then start each new module.

    デバイスからクラウドへの着信メッセージを表示する

デバイスでの変更を表示するView changes on device

デバイス自体で何が起こっているかを確認する場合は、このセクションのコマンドを使用して、ご使用のデバイスで実行されている IoT Edge ランタイムとモジュールを検査します。If you want to see what's happening on your device itself, use the commands in this section to inspect the IoT Edge runtime and modules running on your device.

このセクションのコマンドは、開発マシンではなく、IoT Edge デバイスを対象としています。The commands in this section are for your IoT Edge device, not your development machine. IoT Edge デバイスに仮想マシンを使用している場合は、すぐに接続してください。If you're using a virtual machine for your IoT Edge device, connect to it now. Azure で、仮想マシンの概要ページに移動し、 [接続] を選択してリモート デスクトップ接続にアクセスします。In Azure, go to the virtual machine's overview page and select Connect to access the remote desktop connection. デバイス上で、コマンドまたは PowerShell ウィンドウを開き、iotedge コマンドを実行します。On the device, open a command or PowerShell window to run the iotedge commands.

  • お使いのデバイスにデプロイされているすべてのモジュールを表示し、それらの状態をチェックします。View all modules deployed to your device, and check their status:

    iotedge list
    

    4 つのモジュール (2 つの IoT Edge ランタイム モジュール、SimulatedTemperatureSensor、および IotEdgeModule1) が表示されるはずです。You should see four modules: the two IoT Edge runtime modules, SimulatedTemperatureSensor, and IotEdgeModule1. 4 つすべてが実行中として一覧に表示されるはずです。All four should be listed as running.

  • 次のように、特定のモジュールのログを検査します。Inspect the logs for a specific module:

    iotedge logs <module name>
    

    IoT Edge モジュールでは大文字と小文字の区別があります。IoT Edge modules are case-sensitive.

    SimulatedTemperatureSensor と IotEdgeModule1 のログには、処理しているメッセージが表示されるはずです。The SimulatedTemperatureSensor and IotEdgeModule1 logs should show the messages they're processing. edgeAgent モジュールには、他のモジュールを開始する責任があります。そのため、そのログには、配置マニフェストの実装に関する情報が含まれます。The edgeAgent module is responsible for starting the other modules, so its logs will have information about implementing the deployment manifest. いずれかのモジュールが一覧に表示されていない、または実行されていない場合は、おそらく edgeAgent のログにエラーが書き込まれます。If any module isn't listed or isn't running, the edgeAgent logs will probably have the errors. edgeHub モジュールは、モジュールと IoT Hub 間の通信を担当します。The edgeHub module is responsible for communications between the modules and IoT Hub. モジュールは稼働しているが、メッセージが IoT ハブに到着していない場合は、おそらく edgeHub のログにエラーが書き込まれます。If the modules are up and running, but the messages aren't arriving at your IoT hub, the edgeHub logs will probably have the errors.

次の手順Next steps

このチュートリアルでは、開発マシンに Visual Studio 2019 を設定し、そこから最初の IoT Edge モジュールをデプロイしました。In this tutorial, you set up Visual Studio 2019 on your development machine and deployed your first IoT Edge module from it. これで基本的な概念が理解できたので、モジュールを通過するデータを分析できるように、モジュールに機能を追加してみます。Now that you know the basic concepts, try adding functionality to a module so that it can analyze the data passing through it. 使用したい言語を選択。Choose your preferred language:

C C#C C#