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

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

クイックスタートの記事では、Linux 仮想マシンを使用して IoT Edge デバイスを作成し、Azure Marketplace から事前構成済みのモジュールをデプロイしました。In the quickstart articles, you created an IoT Edge device using a Linux 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 all the other tutorials, which will go into more detail about specific programming languages or Azure services.

このチュートリアルでは、C# モジュールの Linux デバイスへの展開例を使用します。This tutorial uses the example of deploying a C# module to a Linux device. この例が選択された理由は、IoT Edge ソリューションで最も一般的な開発者シナリオだからです。This example was chosen because it is the most common developer scenario for IoT Edge solutions. 別の言語の使用や Azure サービスのデプロイを予定している場合でも、このチュートリアルは開発ツールと概念の学習に役立ちます。Even if you plan on using a different language or deploying an Azure service, this tutorial is still useful to learn about the development tools and concepts. この開発プロセスの概要を完了したら、使用する言語や Azure サービスを選択して、詳細に進むことができます。After completing this introduction to the development process, 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 Code 用の IoT Edge ツールを使用して、新しいプロジェクトを作成する。Use the IoT Edge tools for Visual Studio Code 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 コンピューターでモジュールを開発しているが、そのターゲットとして、IoT Edge を実行している Linux デバイスを予定している場合です。For example, the most common scenario is someone developing a module on a Windows computer intending to target a Linux device running IoT Edge. その場合、コンテナーのオペレーティング システムは Linux になります。In that case, the container operating system would be Linux. このチュートリアルを進めていくときには、開発マシンの OSコンテナーの OS の違いに留意してください。As you go through this tutorial, keep in mind the difference between the development machine OS and the container OS.

このチュートリアルでは、IoT Edge を実行している Linux デバイスをターゲットとしています。This tutorial targets Linux devices running IoT Edge. ご使用の開発マシンが Linux コンテナーを実行できる限り、自分の好きなオペレーティング システムを使用することができます。You can use your preferred operating system, as long as your development machine can run Linux containers. Linux デバイス用の開発には Visual Studio Code を使用することをお勧めします。そのため、このチュートリアルでもそれを使用します。We recommend using Visual Studio Code to develop for Linux devices, so that's what this tutorial will use. Visual Studio も使用できますが、この 2 つのツールの間にはサポートに違いがあります。You can use Visual Studio as well, although there are differences in support between the two tools.

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

Visual Studio CodeVisual Studio Code Visual Studio 2017/2019Visual Studio 2017/2019
Linux のデバイスのアーキテクチャLinux device architecture Linux AMD64Linux AMD64
Linux ARM32Linux ARM32
Linux AMD64Linux AMD64
Linux ARM32Linux ARM32
Azure サービスAzure services Azure FunctionsAzure Functions
Azure Stream AnalyticsAzure Stream Analytics
Azure Machine LearningAzure Machine Learning
LanguagesLanguages CC
C#C#
JavaJava
Node.jsNode.js
PythonPython
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

注意

Linux ARM64 デバイスのサポートは、パブリック プレビューでご利用いただけます。Support for Linux ARM64 devices is available in public preview. 詳細については、「Visual Studio Code で ARM64 IoT Edge モジュールを開発してデバッグする (プレビュー)」を参照してください。For more information, see Develop and debug ARM64 IoT Edge modules in Visual Studio Code (preview).

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

前提条件Prerequisites

開発マシン:A development machine:

  • 開発設定に応じて、独自のコンピューターまたは仮想マシンを使用できます。You can use your own computer or a virtual machine, depending on your development preferences.
  • コンテナー エンジンを実行できるほとんどのオペレーティング システムを使用して、Linux デバイス用の IoT Edge モジュールを開発することができます。Most operating systems that can run a container engine can be used to develop IoT Edge modules for Linux devices. このチュートリアルでは、Windows コンピューターを使用しますが、MacOS または Linux での既知の相違点を指摘します。This tutorial uses a Windows computer, but points out known differences on MacOS or Linux.
  • このチュートリアルの後半でモジュール テンプレート パッケージをプルするために、Git をインストールします。Install Git, to pull module template packages later in this tutorial.
  • Visual Studio Code 用の C# (OmniSharp を使用) 拡張機能C# for Visual Studio Code (powered by OmniSharp) extension.
  • .NET Core 2.1 SDK.NET Core 2.1 SDK.

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

  • 開発マシンでは 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 台目のデバイスが使用可能でない場合は、クイックスタートの記事を使用して、Linux 仮想マシンによって 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 Linux 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 device, 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:

VS Code とツール設定するSet up VS Code and tools

Visual Studio Code の IoT 拡張機能を使用して、IoT Edge モジュールを開発します。Use the IoT extensions for Visual Studio Code 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 Code と IoT 拡張機能をインストールし、次に Visual Studio Code 内から IoT Hub のリソースを管理する Azure アカウントを設定します。In this section, you install Visual Studio Code and the IoT extension, then set up your Azure account to manage IoT Hub resources from within Visual Studio Code.

  1. 開発マシンに Visual Studio Code をインストールします。Install Visual Studio Code on your development machine.

  2. インストールが完了したら、 [表示] > [拡張機能] を選択します。Once the installation is finished, select View > Extensions.

  3. Azure IoT Tools を検索します。これは実際には、IoT Hub や IoT デバイスとの対話、および IoT Edge モジュールの開発に役立つ拡張機能のコレクションです。Search for Azure IoT Tools, which is actually a collection of extensions that help you interact with IoT Hub and IoT devices, as well as developing IoT Edge modules.

  4. [インストール] を選択します。Select Install. 含まれている各拡張機能は個別にインストールされます。Each included extension installs individually.

  5. 拡張機能のインストールが完了したら、 [表示] > [コマンド パレット] を選択してコマンド パレットを開きます。When the extensions are done installing, open the command palette by selecting View > Command Palette.

  6. コマンド パレットで、「Azure:サインイン」を検索して選びます。In the command palette, search for and select Azure: Sign in. プロンプトに従って Azure アカウントにサインインします。Follow the prompts to sign in to your Azure account.

  7. 再度コマンド パレットで、「Azure IoT Hub:IoT Hub の選択」を検索して選びます。In the command palette again, search for and select Azure IoT Hub: Select IoT Hub. プロンプトに従って、Azure サブスクリプションと IoT Hub を選択します。Follow the prompts to select your Azure subscription and IoT hub.

  8. 左側のアクティビティ バーでアイコンを選択するか、 [表示] > [エクスプローラー] を選択して、Visual Studio Code のエクスプローラー セクションを開きます。Open the explorer section of Visual Studio Code by either selecting the icon in the activity bar on the left, or by selecting View > Explorer.

  9. エクスプローラー セクションの下部で、折りたたまれている [Azure IoT Hub Devices](Azure IoT Hub デバイス) メニューを展開します。At the bottom of the explorer section, expand the collapsed Azure IoT Hub Devices menu. コマンド パレットから選択した IoT Hub に関連付けられたデバイスと IoT Edge デバイスが表示されるはずです。You should see the devices and IoT Edge devices associated with the IoT hub that you selected through the command palette.

    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 Tools の拡張機能は、Visual Studio Code でサポートされているすべての IoT Edge モジュール言語のプロジェクト テンプレートを提供します。The Azure IoT Tools extension provides project templates for all supported IoT Edge module languages in Visual Studio Code. これらのテンプレートは、作業モジュールをデプロイして 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.

このチュートリアルで、この C# モジュール テンプレートを使用するのは、最も一般的に使用されているテンプレートだからです。For this tutorial, we use the C# module template because it is the most commonly used template.

プロジェクト テンプレートを作成するCreate a project template

Visual Studio Code のコマンド パレットで、次を検索して選択してください: Azure IoT Edge:New IoT Edge solution コマンドを入力して実行します。In the Visual Studio Code command palette, search for and select Azure IoT Edge: New IoT Edge Solution. プロンプトに従って、次の値を使用してソリューションを作成します。Follow the prompts and use the following values to create your solution:

フィールドField Value
フォルダーの選択Select folder VS Code によってソリューション ファイルが作成される、開発マシン上の場所を選択します。Choose the location on your development machine for VS Code to create the solution files.
Provide a solution name (ソリューション名の指定)Provide a solution name ソリューションのためにわかりやすい名前を入力するか、既定値の EdgeSolution をそのまま使用します。Enter a descriptive name for your solution or accept the default EdgeSolution.
Select module template (モジュール テンプレートの選択)Select module template C# モジュールを選択します。Choose C# Module.
Provide a module name (モジュール名の指定)Provide a module name 既定の SampleModule を受け入れます。Accept the default SampleModule.
Provide Docker image repository for the module (モジュールの Docker イメージ リポジトリの指定)Provide Docker image repository for the module イメージ リポジトリには、コンテナー レジストリの名前とコンテナー イメージの名前が含まれます。An image repository includes the name of your container registry and the name of your container image. 前の手順で指定した名前がコンテナー イメージに事前設定されます。Your container image is prepopulated from the name you provided in the last step. localhost:5000 を、Azure コンテナー レジストリのログイン サーバーの値に置き換えます。Replace localhost:5000 with the login server value from your Azure container registry. Azure portal で、コンテナー レジストリの概要ページからログイン サーバーを取得できます。You can retrieve the login server from the Overview page of your container registry in the Azure portal.

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

Docker イメージ リポジトリを指定する

新しいソリューションが Visual Studio Code ウィンドウに読み込まれたら、少し時間を取って、作成されたファイルをよく確認してください。Once your new solution loads in the Visual Studio Code window, take a moment to familiarize yourself with the files that it created:

  • .vscode フォルダーには、モジュールのデバッグに使用される launch.json というファイルが含まれています。The .vscode folder contains a file called launch.json, which is used for debugging modules.

  • modules フォルダーには、ソリューション内の各モジュールのフォルダーが含まれています。The modules folder contains a folder for each module in your solution. 現在、これは SampleModule (または該当するモジュールに付けられた任意の名前) のみのはずです。Right now, that should only be SampleModule, or whatever name you gave to the module. SampleModule フォルダーには、メイン プログラム コード、モジュールのメタデータ、およびいくつかの Docker ファイルが含まれています。The SampleModule folder contains the main program code, the module metadata, and several Docker files.

  • .env ファイルは、コンテナー レジストリへの資格情報を保持しています。The .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.debug.template.json ファイルと deployment.template.json ファイルは、配置マニフェストの作成に役立つテンプレートです。The deployment.debug.template.json file and deployment.template.json file are templates that 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. テンプレート ファイルは、一部の値にポインターを使用します。The template files use pointers for some values. テンプレートを真の配置マニフェストに変換するときに、ポインターは他のソリューション ファイルから取得した値に置き換えられます。When you transform the template into a true deployment manifest, the pointers are replaced with values taken from other solution files. デプロイ テンプレートで 2 つの共通プレース ホルダーを見つけます。Locate the two common placeholders in your deployment template:

    • レジストリ資格情報セクションで、アドレスは、ソリューションを作成したときに指定した情報から自動的に入力されています。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 the 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.
    • ソリューションを作成したときにイメージ リポジトリを指定しましたが、SampleModule セクションでコンテナー イメージは入力されていません。In the SampleModule section, the container image isn't filled in even though you provided the image repository when you created the solution. このプレースホルダーは、SampleModule フォルダー内の module.json ファイルを指しています。This placeholder points to the module.json file inside the SampleModule folder. そのファイルに移動すると、イメージ フィールドにはリポジトリが含まれているだけでなく、バージョンとコンテナーのプラットフォームで構成されるタグ値も含まれていることが分かります。If you go to that file, you'll see that the image field does contain the repository, but also a tag value that is made up of the version and the platform of the container. バージョンは、開発サイクルの一部として手動で反復することができ、コンテナー プラットフォームは、このセクションの後半で紹介するスイッチャーを使用して選択します。You can iterate the version manually as part of your development cycle, and you select the container platform using a switcher that we introduce later in this section.

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

コンテナー レジストリの資格情報は、環境ファイルに格納され、IoT Edge ランタイムと共有されます。The environment file stores the credentials for your container registry and shares them with the IoT Edge runtime. ランタイムでは、コンテナー イメージを IoT Edge デバイスにプルするためにこれらの資格情報が必要です。The runtime needs these credentials to pull your container images onto the IoT Edge device.

IoT Edge 拡張機能は、Azure からコンテナー レジストリの資格情報をプルし、それらを環境ファイルに取り込もうとします。The IoT Edge extension tries to pull your container registry credentials from Azure and populate them in the environment file. 資格情報が既に含まれているかどうかを確認します。Check to see if your credentials are already included. 含まれていない場合は、次のようにして追加します。If not, add them now:

  1. モジュール ソリューション内の .env ファイルを開きます。Open the .env file in your module solution.
  2. Azure コンテナー レジストリからコピーした usernamepassword の値を追加します。Add the username and password values that you copied from your Azure container registry.
  3. 変更内容を .env ファイルに保存します。Save your changes to the .env file.

ターゲット アーキテクチャを選択するSelect your target architecture

現在、Visual Studio Code では Linux AMD64 および ARM32v7 デバイス用の C# モジュールを開発できます。Currently, Visual Studio Code can develop C# modules for Linux AMD64 and ARM32v7 devices. ソリューションごとにターゲットのアーキテクチャを選択する必要があります。これは、コンテナーのビルド方法と実行方法に影響を与えるからです。You need to select which architecture you're targeting with each solution, because that affects how the container is built and runs. 既定値は Linux AMD64 です。The default is Linux AMD64.

  1. コマンド パレットを開き、次を検索します: 「Azure IoT Edge: Set Default Target Platform for Edge Solution (Azure IoT Edge: Edge ソリューションの既定のターゲット プラットフォームの設定) 」。または、ウィンドウの下部にあるサイド バーで、ショートカット アイコンを選択します。Open the command palette and search for Azure IoT Edge: Set Default Target Platform for Edge Solution, or select the shortcut icon in the side bar at the bottom of the window.

    サイド バーのアーキテクチャ アイコンを選択する

  2. コマンド パレットで、オプションの一覧からターゲット アーキテクチャを選択します。In the command palette, select the target architecture from the list of options. このチュートリアルでは、Ubuntu 仮想マシンを IoT Edge デバイスとして使用するため、既定の amd64 を維持します。For this tutorial, we're using an Ubuntu virtual machine as the IoT Edge device, so will keep the default amd64.

サンプル コードを確認する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. modules/SampleModule/ フォルダー内にある Program.cs ファイルを開きます。Open the Program.cs file, which is inside the modules/SampleModule/ folder.

  2. program.cs で SetInputMessageHandlerAsync メソッドを見つけます。In program.cs, find the SetInputMessageHandlerAsync method.

  3. 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.

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

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

  5. 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.

    SendEventToOutputAsync で出力名を見つける

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

  7. $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 つ目は、このソリューションの一部として作成した SampleModule モジュールです。The second is the SampleModule module that you created as part of this solution.

  8. ファイルの下部には、 $edgeHub モジュールの必要なプロパティがあります。At the bottom of the file, find the desired properties for the $edgeHub module.

    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. 最初のルートである SampleModuleToIoTHub は、ワイルドカード文字 ( * ) を使用して、SampleModule モジュール内のどの出力キューからのメッセージも示します。The first route, SampleModuleToIoTHub, uses a wildcard character (*) to indicate any messages coming from any output queues in the SampleModule module. これらのメッセージは、IoT Hub を示す予約名である $upstream に入ります。These messages go into $upstream, which is a reserved name that indicates IoT Hub. 2 番目のルートである sensorToSampleModule は、SimulatedTemperatureSensor モジュールからのメッセージを受け取り、SampleModule コードで初期化されているのを確認した input1 入力キューにルーティングします。The second route, sensorToSampleModule, takes messages coming from the SimulatedTemperatureSensor module and routes them to the input1 input queue that you saw initialized in the SampleModule code.

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

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

モジュール コードとデプロイ テンプレートを確認して、重要なデプロイの概念を理解しました。You've reviewed the module code and the deployment template to understand some key deployment concepts. 次に、SampleModule コンテナー イメージをビルドして、コンテナー レジストリにプッシュします。Now, you're ready to build the SampleModule container image and push it to your container registry. Visual Studio Code の IoT ツール拡張機能を使用して、この手順では、テンプレート ファイルの情報とソリューション ファイルのモジュール情報に基づいて配置マニフェストも生成します。With the IoT tools extension for Visual Studio Code, 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 so that it can push your container image to be stored in the registry.

  1. [表示] > [ターミナル] の順に選択して、Visual Studio Code 統合ターミナルを開きます。Open the Visual Studio Code integrated terminal by selecting View > Terminal.

  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

Visual Studio Code がコンテナー レジストリにアクセスできるようになったので、次にソリューション コードをコンテナー イメージに変換します。Visual Studio Code now has access to your container registry, so it's time to turn the solution code into a container image.

  1. Visual Studio Code エクスプローラーで、deployment.template.json ファイルを右クリックし、 [Build and Push IoT Edge solution](IoT Edge ソリューションのビルドとプッシュ) を選択します。In the Visual Studio Code explorer, right-click the deployment.template.json file and select Build and Push IoT Edge Solution.

    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.amd64.json ファイルを開きます。Open the deployment.amd64.json file in newly created config folder. このファイル名はターゲット アーキテクチャを反映しているため、別のアーキテクチャを選択した場合は別の名前になります。The filename reflects the target architecture, so it will be different if you chose a different architecture.

  3. プレースホルダーを持っていた 2 つのパラメーターに、適切な値が入力されたことに注意してください。Notice that the two parameters that had placeholders now are filled in with their proper values. RegistryCredentials セクションには、.env ファイルからプルされたレジストリのユーザー名とパスワードが入っています。The registryCredentials section has your registry username and password pulled from the .env file. SampleModule には、module.json ファイルからの名前、バージョン、およびアーキテクチャのタグを含む完全なイメージ レポジトリがあります。The SampleModule has the full image repository with the name, version, and architecture tag from the module.json file.

  4. SampleModule フォルダー内の module.json ファイルを開きます。Open the module.json file in the SampleModule 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. deployment.template.json ファイルをもう一度右クリックし、 [Build and Push IoT Edge Solution](IoT Edge ソリューションのビルドとプッシュ) を再度選択します。Right-click the deployment.template.json file again, and again select Build and Push IoT Edge Solution.

  8. deployment.amd64.json ファイルを再び開きます。Open the deployment.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. SampleModule イメージは現在、コンテナーの 0.0.2 バージョンを指しています。The SampleModule image now points to the 0.0.2 version of the container.

  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. コンテナー レジストリで、 [リポジトリ] を選択し、次に samplemodule を選択します。In your container registry, select Repositories then samplemodule. イメージの両方のバージョンがレジストリにプッシュされていたことを確認します。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? SampleModule フォルダー内の module.json ファイルを開いて確認してください。Open the module.json file in the SampleModule folder to check. リポジトリ値は、 <レジストリ名>.azurecr.io/samplemodule のようになっているはずです。The repository value should look like <registry name>.azurecr.io/samplemodule.
  • SampleModule とは異なる名前を自分のモジュールに使用した場合、その名前はソリューション全体で一貫しているか。If you used a different name than SampleModule for your module, is that name consistent throughout the solution?
  • 対象のマシンは、ビルドしているのと同じ種類のコンテナーを実行しているか。Is your machine running the same type of containers that you're building? このチュートリアルは Linux IoT Edge デバイスを対象としているため、Visual Studio Code のサイド バーには amd64 または arm32v7 と表示され、Docker Desktop は Linux コンテナーを実行している必要があります。This tutorial is for Linux IoT Edge devices, so Visual Studio Code should say amd64 or arm32v7 in the side bar, and Docker Desktop should be running Linux 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 Code エクスプローラーで、[Azure IoT Hub Devices] (Azure IoT Hub デバイス) セクションを展開します。In the Visual Studio Code explorer, expand the Azure IoT Hub Devices section.

  2. デプロイ先の IoT Edge デバイスを右クリックし、次に [Create Deployment for Single Device](単一デバイスのデプロイの作成) を選択します。Right-click the IoT Edge device that you want to deploy to, then select Create Deployment for Single Device.

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

  3. ファイル エクスプローラーで、config フォルダーに移動して、deployment.amd64.json ファイルを選択します。In the file explorer, navigate into the config folder then select the deployment.amd64.json file.

    deployment.template.json ファイルは使用しないでください。これには、コンテナー レジストリ資格情報もモジュール イメージの値も含まれていません。Do not use the deployment.template.json file, which doesn't have the container registry credentials or module image values in it. Linux ARM32 デバイスを対象としている場合、配置マニフェストの名前は deployment.arm32v7.json になります。If you're targeting a Linux ARM32 device, the deployment manifest will be named deployment.arm32v7.json.

  4. IoT Edge デバイスの詳細を展開し、次に、使用するデバイスのモジュール一覧を展開します。Expand the details for your IoT Edge device, then expand the Modules list for your device.

  5. SimulatedTemperatureSensor と SampleModule モジュールがデバイスで実行されているのを確認できるまで、[最新の情報に更新] ボタンを使用してデバイス ビューを更新してください。Use the refresh button to update the device view until you see the SimulatedTemperatureSensor and SampleModule modules running on your device.

    両方のモジュールが開始するまでに数分かかる場合があります。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.

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

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

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

  1. Visual Studio Code のエクスプローラーで、監視する IoT Edge デバイスを右クリックして、 [Start Monitoring Built-in Event Endpoint](組み込みイベント エンドポイントの監視を開始する) を選択します。In the Visual Studio Code explorer, right-click the IoT Edge device that you want to monitor, then select Start Monitoring Built-in Event Endpoint.

  2. Visual Studio Code の出力ウィンドウを監視して、IoT ハブに到着するメッセージを確認してください。Watch the output window in Visual Studio Code to see messages arriving at your IoT hub.

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

デバイスでの変更を表示する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 で、仮想マシンの概要ページに移動し、 [接続] を選択して Secure Shell 接続にアクセスします。In Azure, go to the virtual machine's overview page and select Connect to access the secure shell connection.

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

    iotedge list
    

    4 つのモジュール (2 つの IoT Edge ランタイム モジュール、SimulatedTemperatureSensor、および SampleModule) が表示されるはずです。You should see four modules: the two IoT Edge runtime modules, SimulatedTemperatureSensor, and SampleModule. 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 と SampleModule のログには、処理しているメッセージが表示されるはずです。The SimulatedTemperatureSensor and SampleModule 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 Code を設定し、そこから最初の IoT Edge モジュールをデプロイしました。In this tutorial, you set up Visual Studio Code 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: