適用対象: IoT Edge 1.1
重要
IoT Edge 1.1 サポート終了日は 2022 年 12 月 13 日でした。 本製品、サービス、テクノロジ、または API のサポート内容については、Microsoft 製品のライフサイクルに関するページをご確認ください。 最新バージョンの IoT Edge への更新の詳細については、「IoT Edgeの更新」を参照してください。
この記事では、Linux を実行する Azure 仮想マシンを、透過的なゲートウェイとして機能する Azure IoT Edge デバイスとして構成します。 透過的なゲートウェイ構成を使用すると、デバイスはゲートウェイが存在することを知らずに、ゲートウェイ経由で Azure IoT Hub に接続できます。 同時に、IoT Hub 内のデバイスと対話しているユーザーは、中間ゲートウェイ デバイスを認識していません。 最終的には、透過的なゲートウェイに IoT Edge モジュールを追加することで、システムにエッジ分析を追加します。
注
このチュートリアルの概念はすべてのバージョンの IoT Edge に適用されますが、シナリオを試すために作成したサンプル デバイスでは IoT Edge バージョン 1.1 が実行されます。
この記事の手順は、通常、クラウド開発者が実行します。
チュートリアルのこのセクションでは、次の方法について説明します。
- ゲートウェイ デバイスがダウンストリーム デバイスに安全に接続できるようにするための証明書を作成します。
- IoT Edge デバイスを作成します。
- IoT Edge デバイスをシミュレートする Azure 仮想マシンを作成します。
[前提条件]
この記事は、Azure Machine Learning on IoT Edge の使用に関するチュートリアルのシリーズの一部です。 シリーズの各記事は、前の記事の作業に基づいています。 この記事に直接アクセスした場合は、シリーズの最初の記事 を参照してください。
証明書の作成
デバイスをゲートウェイとして機能させるためには、ダウンストリーム デバイスに安全に接続する必要があります。 IoT Edge では、公開キー 基盤 (PKI) を使用して、デバイス間のセキュリティで保護された接続を設定できます。 この場合、ダウンストリーム IoT デバイスが透過的なゲートウェイとして機能する IoT Edge デバイスに接続できるようになります。 適切なセキュリティを維持するには、ダウンストリーム デバイスで IoT Edge デバイスの ID を確認する必要があります。 IoT Edge デバイスで証明書を使用する方法の詳細については、 Azure IoT Edge 証明書の使用方法の詳細を参照してください。
このセクションでは、Docker イメージを使用して自己署名証明書を作成し、それをビルドして実行します。 Docker イメージを使用してこの手順を完了することを選択しました。これは、Windows 開発マシンで証明書を作成するために必要な手順の数が減るためです。 Docker イメージで自動化された内容を理解するには、 IoT Edge デバイス機能をテストするためのデモ証明書の作成に関する記事を参照してください。
開発用 VM にサインインします。
パスと c :\edgeCertificates という名前の新しいフォルダーを作成します。
まだ実行されていない場合は、Windows の [スタート] メニューから Docker for Windows を起動します。
Visual Studio Code を開きます。
[ファイル>フォルダーを開く] を選択し、C:\source\IoTEdgeAndMlSample\CreateCertificates を選択します。
[エクスプローラー] ウィンドウで dockerfile を右クリックし、[Build Image]\(イメージのビルド\) を選択します。
ダイアログ ボックスで、イメージ名とタグとして createcertificates: latest の既定値をそのまま使用します。
ビルドが完了するまで待ちます。
注
公開キーが見つからないことを示す警告が表示される場合があります。 この警告は無視しても安全です。 同様に、イメージのアクセス許可を確認またはリセットすることを推奨するセキュリティ警告が表示されます。このイメージは無視しても問題ありません。
Visual Studio Code ターミナル ウィンドウで、createcertificates コンテナーを実行します。
docker run --name createcertificates --rm -v c:\edgeCertificates:/edgeCertificates createcertificates /edgeCertificates
Docker は c:\ ドライブへのアクセスを求めるメッセージを表示します。 [ 共有] を選択します。
メッセージが表示されたら、資格情報を入力します。
コンテナーの実行が完了したら、 c:\edgeCertificates で次のファイルを確認します。
- c:\edgeCertificates\certs\azure-iot-test-only.root.ca.cert.pem
- c:\edgeCertificates\certs\new-edge-device-full-chain.cert.pem
- c:\edgeCertificates\certs\new-edge-device.cert.pem
- c:\edgeCertificates\certs\new-edge-device.cert.pfx
- c:\edgeCertificates\private\new-edge-device.key.pem
Azure Key Vault に証明書をアップロードする
証明書を安全に格納し、複数のデバイスからアクセスできるようにするには、証明書を Azure Key Vault にアップロードします。 前の一覧からわかるように、PFX と PEM の 2 種類の証明書ファイルがあります。 PFX ファイルは、Key Vault にアップロードする Key Vault 証明書として扱います。 PEM ファイルはプレーン テキストであり、Key Vault シークレットとして扱います。 Jupyter ノートブックを実行して作成した Azure Machine Learning ワークスペースに関連付けられている Key Vault インスタンスを使用します。
Azure portal から、Azure Machine Learning ワークスペースに移動します。
Machine Learning ワークスペースの概要ページで、 Key Vault の名前を見つけます。
開発用コンピューターで、証明書を Key Vault にアップロードします。 <subscriptionId> と <keyvaultname> をリソース情報に置き換えます。
c:\source\IoTEdgeAndMlSample\CreateCertificates\upload-keyvaultcerts.ps1 -SubscriptionId <subscriptionId> -KeyVaultName <keyvaultname>
メッセージが表示されたら、Azure にサインインします。
このスクリプトは、新しい Key Vault エントリを一覧表示する出力で数分間実行されます。
IoT Edge デバイスを登録する
Azure IoT Edge デバイスを IoT ハブに接続するには、まずハブにデバイスを登録します。 クラウド内のデバイス ID から接続文字列を取得し、それを使用して IoT Edge デバイスでランタイムを構成します。 構成されたデバイスがハブに接続したら、モジュールをデプロイしてメッセージを送信できます。 また、IoT Hub の対応するデバイス ID を変更することで、物理 IoT Edge デバイスの構成を変更することもできます。
このチュートリアルでは、Visual Studio Code を使用して新しいデバイス ID を登録します。 これらの手順は、Azure portal または Azure CLI を使用して実行することもできます。 どちらの方法を選択する場合でも、必ず IoT Edge デバイスのデバイス接続文字列を取得してください。 デバイスの接続文字列は、Azure portal のデバイスの詳細ページにあります。
開発用コンピューターで、Visual Studio Code を開きます。
Visual Studio Code Explorer ビューから Azure IoT Hub フレームを展開します。
省略記号を選択し、[ IoT Edge デバイスの作成] を選択します。
デバイスに名前を付けます。 便宜上、リストされているデバイスの先頭に並べ替えられるように、 aaTurbofanEdgeDevice という名前を使用します。
新しいデバイスがデバイスの一覧に表示されます。
Azure 仮想マシンをデプロイする
Azure IoT Edge ランタイムがインストールおよび構成された Ubuntu 18.04 LTS 仮想マシンを使用します。 デプロイでは、iotedge-vm-deploy プロジェクト リポジトリに保持されている Azure Resource Manager テンプレートが使用されます。 テンプレートで指定した接続文字列を使用して、前の手順で登録した IoT Edge デバイスがプロビジョニングされます。
仮想マシンは、Azure portal または Azure CLI を使用してデプロイできます。 Azure portal の手順を示します。 詳細については、「 Ubuntu Virtual Machines での Azure IoT Edge の実行 」を参照してください。
[Deploy to Azure] ボタンを使用してデプロイする
iotedge-vm-deploy
ARM テンプレートを使用して Ubuntu 18.04 LTS 仮想マシンをデプロイするには、下のボタンをクリックします。新しく起動したウィンドウで、使用可能なフォーム フィールドに入力します。
フィールド 説明 サブスクリプション 仮想マシンをデプロイするためのアクティブな Azure サブスクリプション。 リソース グループ 仮想マシンとそれに関連付けられたリソースを格納する、既存または新しく作成されたリソース グループ。 DNS ラベル プレフィックス 仮想マシンのホスト名のプレフィックスとして使用される、あなたが選択した必要値。 管理ユーザー名 デプロイ時にルート特権が提供されるユーザー名。 デバイスの接続文字列 目的の IoT Hub 内に作成された、デバイス向けのデバイス接続文字列。 VM サイズ デプロイする仮想マシンのサイズ Ubuntu OS バージョン ベース仮想マシンにインストールする Ubuntu OS のバージョン。 場所 仮想マシンをデプロイする地理的リージョン。選択したリソース グループの場所が規定値となります。 認証の種類 sshPublicKey または パスワード のどちらか好きな方を選択します。 [管理パスワードまたはキー] 認証タイプの選択に応じて、SSH 公開キーの値、またはパスワードの値。 すべてのフィールドが入力されたら、ページの下部にあるチェック ボックスをオンにして条項に同意し、[ 確認と作成 ] を選択して 作成 を選択してデプロイを開始します。
Azure portal で仮想マシンに移動します。 それを見つけるには、リソース グループを使用するか、ポータルのランディング ページで Azure サービスの下にある仮想マシンを選択します。
仮想マシンの DNS 名 を書き留めます。 仮想マシンにログオンするために必要になります。
IoT Edge デバイスに接続する
コマンド プロンプトを開き、次のコマンドを使用して仮想マシンにログオンします。 前のセクションに基づいて、ユーザー名と DNS 名に関する独自の情報を入力します。
ssh <adminUsername>@<DNS_name>
ホストの信頼性を検証するように求められたら、「 はい」 と入力し、Enter キーを押 します。
メッセージが表示されたら、パスワードを入力します。
Ubuntu にウェルカム メッセージが表示され、
<username>@<machinename>:~$
などのプロンプトが表示されます。
Key Vault 証明書をダウンロードする
この記事の前半では、証明書を Key Vault にアップロードして、IoT Edge デバイスとダウンストリーム デバイスで使用できるようにしました。 ダウンストリーム デバイスは、IoT Edge デバイスをゲートウェイとして使用して IoT Hub と通信します。
このチュートリアルの後半でダウンストリーム デバイスを扱います。 このセクションでは、証明書を IoT Edge デバイスにダウンロードします。
Linux 仮想マシン上の SSH セッションから、Azure CLI を使用して Azure にサインインします。
az login
ブラウザーを開いて Microsoft デバイスのサインイン ページを開き、一意のコードを指定するように求められます。 これらの手順は、ローカル コンピューターで実行できます。 認証が完了したら、ブラウザー ウィンドウを閉じます。
正常に認証されると、Linux VM がサインインし、Azure サブスクリプションの一覧を表示します。
Azure CLI コマンドに使用する Azure サブスクリプションを設定します。
az account set --subscription <subscriptionId>
証明書用の VM 上にディレクトリを作成します。
sudo mkdir /edgeMlCertificates
キー コンテナーに格納した証明書 (new-edge-device-full-chain.cert.pem、new-edge-device.key.pem、azure-iot-test-only.root.ca.cert.pem) をダウンロードします。
key_vault_name="<key vault name>" sudo az keyvault secret download --vault-name $key_vault_name --name new-edge-device-full-chain-cert-pem -f /edgeMlCertificates/new-edge-device-full-chain.cert.pem sudo az keyvault secret download --vault-name $key_vault_name --name new-edge-device-key-pem -f /edgeMlCertificates/new-edge-device.key.pem sudo az keyvault secret download --vault-name $key_vault_name --name azure-iot-test-only-root-ca-cert-pem -f /edgeMlCertificates/azure-iot-test-only.root.ca.cert.pem
IoT Edge デバイス構成を更新する
IoT Edge ランタイムは、/etc/iotedge/config.yaml ファイルを使用してその構成を保持します。 このファイル内の 2 つの情報を更新する必要があります。
- 証明書: ダウンストリーム デバイスで行われた接続に使用する証明書
- ホスト名: VM IoT Edge デバイスの完全修飾ドメイン名 (FQDN)
config.yaml ファイルを直接編集して、証明書とホスト名を更新します。
config.yaml ファイルを開きます。
sudo nano /etc/iotedge/config.yaml
config.yaml ファイルの証明書セクションを更新します。先頭の # を削除し、ファイルが次の例のようにパスを設定します。
certificates: device_ca_cert: "/edgeMlCertificates/new-edge-device-full-chain.cert.pem" device_ca_pk: "/edgeMlCertificates/new-edge-device.key.pem" trusted_ca_certs: "/edgeMlCertificates/azure-iot-test-only.root.ca.cert.pem"
証明書: 行の前に空白がないことを確認し、入れ子になった各証明書が 2 つのスペースでインデントされていることを確認します。
nano で右クリックすると、クリップボードの内容が現在のカーソル位置に貼り付けられます。 文字列を置き換えるには、キーボードの矢印を使用して置換する文字列に移動し、文字列を削除してから右クリックしてバッファーから貼り付けます。
Azure portal で、仮想マシンに移動します。 [概要] セクションから DNS 名 (コンピューターの FQDN) をコピーします。
FQDN を、config.yml ファイルのホスト名セクションに貼り付けます。 名前がすべて小文字であることを確認します。
hostname: '<machinename>.<region>.cloudapp.azure.com'
Ctrl + X、Y、Enter キーを押して、ファイルを保存して閉じます。
IoT Edge デーモンを再起動します。
sudo systemctl restart iotedge
IoT Edge デーモンの状態を確認します。 コマンドの後に、「 :q 」と入力して終了します。
systemctl status iotedge
トラブルシューティング
状態にエラー ("[ERROR]" のプレフィックスが付いた色付きのテキスト) がある場合、デーモンのログを調べて詳細なエラー情報を確認します。
journalctl -u iotedge --no-pager --no-full
エラーに対処する方法の詳細については、トラブルシューティング のページ を 参照してください。
リソースをクリーンアップする
このチュートリアルは、各記事が前の記事で行われた作業に基づいて構築されるセットの一部です。 最後のチュートリアルが完了するまで、リソースのクリーンアップを待ちます。
次のステップ
Azure VM の IoT Edge 透過的ゲートウェイとしての構成が完了しました。 Key Vault にアップロードしたテスト証明書を生成することから始めました。 次に、スクリプトと Resource Manager テンプレートを使用して、Azure Marketplace の Ubuntu Server 16.04 LTS + Azure IoT Edge ランタイム イメージを使用して VM をデプロイしました。 VM が稼働している状態で、SSH 経由で接続しました。 次に、Azure にサインインし、Key Vault から証明書をダウンロードしました。 config.yaml ファイルを更新することで、IoT Edge ランタイムの構成にいくつかの更新を行いました。
次の記事に進み、IoT Edge モジュールをビルドします。