次の方法で共有


クイックスタート: K3s を使用して GitHub Codespaces で Azure IoT Operations を実行する

このクイックスタートでは、Azure Arc 対応 Kubernetes クラスターに Azure IoT Operations をデプロイして、デバイスとワークロードをリモートで管理できるようにします。 クイックスタートを完了すると、クラウドから管理できるクラスターを作成できます。 このエンド ツー エンド シリーズの残りのクイックスタートでは、このクイックスタートに基づいて、サンプル資産、データ処理パイプライン、視覚化を定義します。

開始する前に

この一連のクイックスタートは、できるだけ早く Azure IoT Operations を開始してエンドツーエンドのシナリオを評価できるようにすることを目的としています。 実際の開発環境または運用環境では、連携する複数のチームがこれらのタスクを実行し、また一部のタスクには、昇格されたアクセス許可が必要となることがあります。

新しいユーザーに最適なエクスペリエンスを実現するには、Azure 無料アカウントの使用をお勧めします。これらのクイックスタート内のリソースに対する所有者アクセス許可を持つことができます。

このクイックスタートでは、GitHub Codespaces を仮想環境として使用するため、独自のマシンに新しいツールをインストールせずにシナリオをテストできます。 ただし、Ubuntu または Azure Kubernetes Service (AKS) 上のローカル クラスターに Azure IoT Operations をデプロイする場合は、「Azure Arc 対応 Kubernetes クラスターを準備する」を参照してください。

重要

コードスペースは簡単に設定でき、後で破棄できますが、運用環境、パフォーマンス評価、またはスケール テストには適していません。 GitHub Codespaces は探索のみに使用してください。

Codespaces 環境はクイック スタートの手順を完了するのに十分ですが、 セキュリティで保護された設定などの高度な構成はサポートされていません。

前提条件

開始する前に、次の前提条件を準備します。

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料でアカウントを 1 つ作成してください。

  • GitHub アカウント。

  • 開発マシンにインストールされている Visual Studio Code。 詳細情報については、「Visual Studio Code のダウンロード」を参照してください。

  • リソース グループ レベルでの Microsoft/Authorization/roleAssignments/write アクセス許可。

どのような問題が解決されますか?

Azure IoT Operations は、Kubernetes クラスターで実行される一連のデータ サービスです。 これらのクラスターをクラウドからリモートで管理し、クラウドリソースやエンドポイントと安全に通信できるようにする必要があります。 このクイックスタートでは、次のタスクでこれらの問題に対処します。

  1. GitHub Codespaces で Kubernetes クラスターを作成します。
  2. リモート管理のためにクラスターを Azure Arc に接続します。
  3. スキーマ レジストリを作成する。
  4. Azure IoT Operations をクラスターにデプロイします。

クラスターを作成する

このセクションでは、新しいクラスターを作成します。 過去に Azure IoT Operations をデプロイしたクラスターを再利用したい場合は、「リソースのクリーンアップ」の手順を参照して Azure IoT Operations をアンインストールしてから先に進んでください。

Azure-Samples/explore-iot-operations codespace は、次で事前構成されています。

  • 軽量 Kubernetes クラスター用に K3d で実行されている K3s
  • Azure CLI
  • Kubernetes リソースを管理するための Kubectl
  • Helmk9s などのその他の便利なツール

codespace とクラスターを作成するには、以下の手順を実行します。

  1. GitHub Codespaces 内に codespace を作成します。

    explore-iot-operations codespace を作成する

  2. codespace に次の推奨シークレットを指定します。

    パラメーター
    SUBSCRIPTION_ID お使いの Azure サブスクリプション ID。
    リソースグループ クラスターが作成される新しい Azure リソース グループの名前。
    場所 近くの Azure リージョン。 現在サポートされているすべてのリージョンの一覧については、サポートされているリージョンに関するページを参照してください。

    ヒント

    この手順でシークレットとして指定した値は、GitHub アカウントに保存され、今回および以降の Codespaces で使用されます。 それらは codespace ターミナルで環境変数として追加され、それらの環境変数は次のセクションの CLI コマンドで使用できます。

    さらに、この codespace により、この codespace 名が設定された CLUSTER_NAME 環境変数が作成されます。

  3. [新しい Codespace の作成] を選択します。

  4. Codespace の準備ができたら、左上にあるメニュー ボタンを選択し、[VS Code Desktop で開く] を選択します。

    VS Code Desktop で codespace を開く方法を示すスクリーンショット。

  5. 要求が表示されたら、Visual Studio Code 用の GitHub Codespaces 拡張機能をインストールし、GitHub にサインインします。

  6. Visual Studio Code で、[表示]>[ターミナル] の順に選択します。

    クラスターを管理するための CLI コマンドはすべて、このターミナルを使用して実行します。

Azure Arc にクラスターを接続する

Azure Arc にクラスターを接続するには:

  1. codespace ターミナルで、Azure CLI にサインインします。

    az login
    

    ヒント

    VS Code デスクトップではなくブラウザーで GitHub codespace 環境を使っている場合、az login を実行すると localhost エラーが返されます。 このエラーを修正するには、次のいずれかを実行します。

    • VS Code デスクトップで codespace を開き、ブラウザー ターミナルに戻って az login を再実行します。
    • または、ブラウザーにローカルホスト エラーが表示された後に、ブラウザーから URL をコピーし、新しいターミナル タブで curl "<URL>" を実行します。「Microsoft Azure にログインしました。」というメッセージを含む JSON 応答が表示されます。
  2. サインインすると、Azure CLI にすべてのサブスクリプションが表示され、既定のサブスクリプションにはアスタリスク * が表示されます。 既定のサブスクリプションで続行するには、Enter を選択します。 それ以外の場合は、使用する Azure サブスクリプションの番号を入力します。

  3. サブスクリプションに必要なリソース プロバイダーを登録します。

    ヒント

    この手順は、サブスクリプションごとに 1 回だけ実行する必要があります。 リソース プロバイダーを登録するには、サブスクリプションの共同作成者および所有者のロール内に含まれる、/register/action 操作を行うためのアクセス許可が必要です。 詳細については、「Azure リソース プロバイダーと種類」を参照してください。

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    az provider register -n "Microsoft.IoTOperations"
    az provider register -n "Microsoft.DeviceRegistry"
    az provider register -n "Microsoft.SecretSyncController"
    
  4. az group create コマンドを使用して、Azure サブスクリプションにリソース グループを作成し、すべてのリソースを保存します。

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP
    
  5. az connectedk8s connect コマンドを使用して Kubernetes クラスターを Arc 対応にし、Azure リソース グループの一部として管理します。

    az connectedk8s connect --name $CLUSTER_NAME --location $LOCATION --resource-group $RESOURCE_GROUP
    

    ヒント

    $CLUSTER_NAME の値は、codespace の名前に自動的に設定されます。 別の名前を使う場合は、環境変数を置き換えます。

  6. テナント内で Azure Arc サービスが使用する Microsoft Entra ID アプリケーションの objectId を取得し、環境変数として保存します。 GUID 値を変更せずに、記述されたとおりに次のコマンドを実行します。

    export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
    
  7. az connectedk8s enable-features コマンドを使用して、クラスターでカスタムの場所のサポートを有効にします。 このコマンドは、Azure Arc サービスが使う Microsoft Entra ID アプリケーションの objectId を使います。 Kubernetes クラスターをデプロイしたマシン上で次のコマンドを実行します。

    az connectedk8s enable-features -n $CLUSTER_NAME -g $RESOURCE_GROUP --custom-locations-oid $OBJECT_ID --features cluster-connect custom-locations
    

最新バージョンのインストール az iot ops

このクイック スタートでは、最新バージョンの Azure IoT Operations を使用します。 最新バージョンをインストールするには、Azure IoT Operations CLI 拡張機能の最新バージョンが必要です。

az extension add --upgrade --name azure-iot-ops

ストレージ アカウントとスキーマ レジストリを作成する

スキーマ レジストリは、クラウドとエッジの両方にメッセージ定義を格納する、同期されたリポジトリです。 Azure IoT Operations には、クラスター上のスキーマ レジストリが必要です。 スキーマ レジストリには、スキーマ情報をクラウドに格納するための Azure ストレージ アカウントが必要です。

このセクションでスキーマ レジストリを作成するコマンドには、リソース グループ レベルでの Microsoft.Authorization/roleAssignments/write アクセス許可が必要です。 このアクセス許可は、ストレージ アカウントに書き込むことができるように、スキーマ レジストリに共同作成者ロールを付与するために使用されます。

Codespaces ターミナルで次の CLI コマンドを実行します。

  1. このセクションで作成するリソースの環境変数を設定します。

    プレースホルダー
    <STORAGE_ACCOUNT_NAME> ストレージ アカウントの名前。 ストレージ アカウント名の長さは 3 - 24 文字で、数字と小文字のみを使用できます。
    <SCHEMA_REGISTRY_NAME> スキーマ レジストリの名前。 スキーマ レジストリ名には、数字、英小文字、ハイフンのみを使用できます。
    <SCHEMA_REGISTRY_NAMESPACE> スキーマ レジストリ名前空間の名前。 名前空間によってテナント内のスキーマ レジストリが一意に識別されます。 スキーマ レジストリ名前空間名には、数字、英小文字、ハイフンのみを使用できます。
    STORAGE_ACCOUNT=<STORAGE_ACCOUNT_NAME>
    SCHEMA_REGISTRY=<SCHEMA_REGISTRY_NAME>
    SCHEMA_REGISTRY_NAMESPACE=<SCHEMA_REGISTRY_NAMESPACE>
    
  2. 階層型名前空間を有効にしてストレージ アカウントを作成します。

    az storage account create --name $STORAGE_ACCOUNT --location $LOCATION --resource-group $RESOURCE_GROUP --enable-hierarchical-namespace
    
  3. ストレージ アカウントに接続するスキーマ レジストリを作成します。 また、このコマンドは、ストレージ アカウントに schemas という BLOB コンテナーも作成します。

    az iot ops schema registry create --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP --registry-namespace $SCHEMA_REGISTRY_NAMESPACE --sa-resource-id $(az storage account show --name $STORAGE_ACCOUNT -o tsv --query id)
    

Azure デバイス レジストリ名前空間を作成する

Azure IoT Operations と Azure デバイス レジストリでは、名前空間を使用して資産とデバイスの整理が行われます。 各 Azure IoT Operations インスタンスでは、その資産とデバイスに 1 つの名前空間を使用します。

次の CLI コマンドを実行して Azure Device Registry 名前空間を作成します。

az iot ops ns create -n myqsnamespace -g $RESOURCE_GROUP

Azure IoT Operations をデプロイする

このセクションでは、Azure IoT Operations コンポーネントに対する依存関係をクラスターに構成してから、Azure IoT Operations をデプロイします。

Codespaces ターミナルで次の CLI コマンドを実行します。

  1. Azure IoT Operations 用にクラスターを初期化します。

    ヒント

    init コマンドは、クラスターごとに 1 回実行するだけでかまいません。 最新の Azure IoT Operations バージョンが既にデプロイされているクラスターを再利用する場合は、この手順をスキップできます。

    az iot ops init --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

    このコマンドは、完了までに数分かかる場合があります。 ターミナルのデプロイの進行状況の表示で進行状況を確認できます。

  2. Azure IoT Operations をデプロイします。

    az iot ops create --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name ${CLUSTER_NAME}-instance --sr-resource-id $(az iot ops schema registry show --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP -o tsv --query id) --ns-resource-id $(az iot ops ns show --name myqsnamespace --resource-group $RESOURCE_GROUP -o tsv --query id) --broker-frontend-replicas 1 --broker-frontend-workers 1  --broker-backend-part 1  --broker-backend-workers 1 --broker-backend-rf 2 --broker-mem-profile Low
    

    このコマンドは、完了までに数分かかる場合があります。 ターミナルのデプロイの進行状況の表示で進行状況を確認できます。

    "リソースにアクセスするにはデバイスを管理対象にする必要があります" というエラーが表示された場合、 を再度実行し、ブラウザーに対話式で確実にサインインします。az login

クラスター内のリソースを表示する

デプロイが完了したら、kubectl コマンドを使用してクラスターの変更を確認することも、クラスターは Arc 対応であるため、Azure portal を使用することもできます。

クラスター上のポッドを表示するには、次のコマンドを実行します。

kubectl get pods -n azure-iot-operations

Azure portal でリソースを表示するには、次の手順に従います。

  1. Azure portal で、Azure IoT Operations インスタンスを含むリソース グループに移動するか、Azure IoT Operations を検索して選択します。

  2. Azure IoT Operations インスタンスの名前を選択します。

  3. インスタンスの [概要] ページで、[リソースの概要] タブを選択して、クラスターにデプロイされたリソースのプロビジョニング状態を表示します。

    Arc 対応クラスター上の Azure IoT Operations インスタンスを示すスクリーンショット。

問題を解決した方法について

このクイックスタートでは、Azure IoT Operations のコンポーネントと安全に通信できるように、Arc 対応 Kubernetes クラスターを構成しました。 次に、これらのコンポーネントをクラスターにデプロイしました。 このテスト シナリオでは、Codespaces で実行されている Kubernetes クラスターが 1 つあります。 ただし、運用環境のシナリオでは、同じ手順を使用して、多くのサイトの多くのクラスターにワークロードをデプロイできます。

リソースをクリーンアップする

次のクイックスタートに進む場合は、すべてのリソースを保持してください。

Azure IoT Operations のデプロイは削除して、クラスターは保持したい場合は、az iot ops delete コマンドを使用します。

az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP

このクイックスタート用に作成したすべてのリソースを削除する場合は、Azure IoT Operations を展開した Kubernetes クラスターを削除した後、そのクラスターを含んでいた Azure リソース グループを削除します。

これらのクイックスタートで Codespaces を使った場合は、GitHub から Codespace を削除します。

次のステップ