リソース プロバイダー REST API を使用して IoT Hub を作成する (.NET)Create an IoT hub using the resource provider REST API (.NET)

IoT Hub リソース プロバイダー REST API を使って、Azure IoT ハブをプログラム的に作成、管理できます。You can use the IoT Hub resource provider REST API to create and manage Azure IoT hubs programmatically. このチュートリアルでは、IoT Hub Resource Provider REST API を使用して C# プログラムから IoT Hub を作成する方法を説明します。This tutorial shows you how to use the IoT Hub resource provider REST API to create an IoT hub from a C# program.

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

このチュートリアルを完了するには、以下が必要です。To complete this tutorial, you need the following:

  • 見ることができます。Visual Studio.

  • アクティブな Azure アカウントアカウントがない場合、Azure 試用版にサインアップして、最大 10 件の無料 Mobile Apps を入手できます。An active Azure account. アカウントがない場合は、 無料アカウント を数分で作成することができます。If you don't have an account, you can create a free account in just a couple of minutes.

  • Azure PowerShell 1.0 以降。Azure PowerShell 1.0 or later.

Azure Resource Manager の要求を認証するための準備Prepare to authenticate Azure Resource Manager requests

Azure Resource Manager と Azure Active Directory (AD) を使用して、リソース上で実行するすべての操作を認証する必要があります。You must authenticate all the operations that you perform on resources using the Azure Resource Manager with Azure Active Directory (AD). これを構成するうえで、PowerShell または Azure CLI を使用するのが最も簡単な方法です。The easiest way to configure this is to use PowerShell or Azure CLI.

先に進む前に Azure PowerShell コマンドレットをインストールしてください。Install the Azure PowerShell cmdlets before you continue.

次のステップでは、PowerShell を使用して AD アプリケーション用のパスワード認証を設定する方法を説明します。The following steps show how to set up password authentication for an AD application using PowerShell. これらのコマンドは標準的な PowerShell セッションで実行できます。You can run these commands in a standard PowerShell session.

  1. 次のコマンドを使用して Azure サブスクリプションにサインインします。Sign in to your Azure subscription using the following command:

    Connect-AzAccount
    
  2. 複数の Azure サブスクリプションがある場合は、Azure にサインインすると、資格情報に関連付けられているすべての Azure サブスクリプションへのアクセスが許可されます。If you have multiple Azure subscriptions, signing in to Azure grants you access to all the Azure subscriptions associated with your credentials. 次のコマンドで、使用できる Azure サブスクリプションの一覧を表示します。Use the following command to list the Azure subscriptions available for you to use:

    Get-AzSubscription
    

    次のコマンドで、使用するサブスクリプションを選択して、IoT Hub を管理するためのコマンドを実行します。Use the following command to select subscription that you want to use to run the commands to manage your IoT hub. 前のコマンドの出力から、サブスクリプション名または ID のいずれかを使用できます。You can use either the subscription name or ID from the output of the previous command:

    Select-AzSubscription `
        -SubscriptionName "{your subscription name}"
    
  3. TenantIdSubscriptionId を書き留めておきます。Make a note of your TenantId and SubscriptionId. この情報は後で必要になります。You need them later.

  4. 次のコマンドを使用して新しい Azure Active Directory アプリケーションを作成します。プレース ホルダーを以下のとおりに置き換えます。Create a new Azure Active Directory application using the following command, replacing the place holders:

    • {Display name}: MySampleApp など、アプリケーションの表示名。{Display name}: a display name for your application such as MySampleApp

    • {Home page URL}: http://mysampleapp/home など、お使いのアプリのホーム ページの URL。{Home page URL}: the URL of the home page of your app such as http://mysampleapp/home. この URL は実際のアプリケーションを示している必要はありません。This URL does not need to point to a real application.

    • {Application identifier}: http://mysampleapp などの一意の識別子。{Application identifier}: A unique identifier such as http://mysampleapp. この URL は実際のアプリケーションを示している必要はありません。This URL does not need to point to a real application.

    • {Password}: 自分のアプリで認証に使用するパスワード。{Password}: A password that you use to authenticate with your app.

      $SecurePassword=ConvertTo-SecureString {password} –asplaintext –force
      New-AzADApplication -DisplayName {Display name} -HomePage {Home page URL} -IdentifierUris {Application identifier} -Password $SecurePassword
      
  5. 作成したアプリケーションの ApplicationId を書き留めておきます。Make a note of the ApplicationId of the application you created. この情報は後で必要になります。You need this later.

  6. 次のコマンドを使用して新しいサービス プリンシパルを作成します。 {MyApplicationId} を前の手順で書き留めた ApplicationId と置き換えます。Create a new service principal using the following command, replacing {MyApplicationId} with the ApplicationId from the previous step:

    New-AzADServicePrincipal -ApplicationId {MyApplicationId}
    
  7. 次のコマンドを使用してロール割り当てを設定します。 {MyApplicationId} を自分の ApplicationId と置き換えます。Set up a role assignment using the following command, replacing {MyApplicationId} with your ApplicationId.

    New-AzRoleAssignment -RoleDefinitionName Owner -ServicePrincipalName {MyApplicationId}
    

これで、カスタム C# アプリケーションから認証できるようにする Azure AD アプリケーションの作成が完了しました。You have now finished creating the Azure AD application that enables you to authenticate from your custom C# application. このチュートリアルでは後で次の値が必要になります。You need the following values later in this tutorial:

  • TenantIdTenantId
  • SubscriptionIdSubscriptionId
  • ApplicationIdApplicationId
  • パスワードPassword

Visual Studio プロジェクトの準備Prepare your Visual Studio project

  1. Visual Studio で、 [Console App (.NET Framework)] プロジェクト テンプレートを使用し、Visual C# Windows クラシック デスクトップ プロジェクトを作成します。In Visual Studio, create a Visual C# Windows Classic Desktop project using the Console App (.NET Framework) project template. プロジェクトに CreateIoTHubRESTという名前を付けます。Name the project CreateIoTHubREST.

  2. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [NuGet パッケージの管理] をクリックします。In Solution Explorer, right-click on your project and then click Manage NuGet Packages.

  3. NuGet パッケージ マネージャーで [プレリリースを含める] をオンにし、 [参照] ページで Microsoft.Azure.Management.ResourceManager を検索します。In NuGet Package Manager, check Include prerelease, and on the Browse page search for Microsoft.Azure.Management.ResourceManager. パッケージを選択して [インストール] をクリックし、 [変更の確認] で、 [OK][同意する] の順にクリックしてライセンス条項に同意します。Select the package, click Install, in Review Changes click OK, then click I Accept to accept the licenses.

  4. NuGet パッケージ マネージャーで、Microsoft.IdentityModel.Clients.ActiveDirectory を検索します。In NuGet Package Manager, search for Microsoft.IdentityModel.Clients.ActiveDirectory. [インストール] をクリックし、 [変更の確認] で、 [OK][同意する] の順にクリックしてライセンス条項に同意します。Click Install, in Review Changes click OK, then click I Accept to accept the license.

  5. Program.cs で、既存の using ステートメントを以下のコードに置き換えます。In Program.cs, replace the existing using statements with the following code:

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text;
    using Microsoft.Azure.Management.ResourceManager;
    using Microsoft.Azure.Management.ResourceManager.Models;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Newtonsoft.Json;
    using Microsoft.Rest;
    using System.Linq;
    using System.Threading;
    
  6. Program.cs で、次の静的変数を追加して、プレースホルダーの値を置き換えます。In Program.cs, add the following static variables replacing the placeholder values. このチュートリアルの前の手順で ApplicationIdSubscriptionIdTenantId、およびパスワードを書き留めています。You made a note of ApplicationId, SubscriptionId, TenantId, and Password earlier in this tutorial. リソース グループ名は、IoT Hub を作成するときに使用するリソース グループの名前です。Resource group name is the name of the resource group you use when you create the IoT hub. 既存のリソース グループまたは新しいリソース グループを使用できます。You can use a pre-existing or a new resource group. IoT Hub 名は、作成する IoT Hub の名前です (MyIoTHub など)。IoT Hub name is the name of the IoT Hub you create, such as MyIoTHub. IoT ハブの名前は、グローバルに一意である必要があります。The name of your IoT hub must be globally unique. デプロイ名は、デプロイの名前です (Deployment_01 など)。Deployment name is a name for the deployment, such as Deployment_01.

    static string applicationId = "{Your ApplicationId}";
    static string subscriptionId = "{Your SubscriptionId}";
    static string tenantId = "{Your TenantId}";
    static string password = "{Your application Password}";
    
    static string rgName = "{Resource group name}";
    static string iotHubName = "{IoT Hub name including your initials}";
    

    重要

    IoT ハブは DNS エンドポイントとして公開されるため、名前を付ける際に機密情報や個人を特定できる情報を入力しないように注意してください。Because the IoT hub will be publicly discoverable as a DNS endpoint, be sure to avoid entering any sensitive or personally identifiable information when you name it.

Azure Resource Manager トークンの取得Obtain an Azure Resource Manager token

Azure Active Directory では、Azure リソース マネージャーを使用してリソース上で実行するすべてのタスクを認証する必要があります。Azure Active Directory must authenticate all the tasks that you perform on resources using the Azure Resource Manager. ここに示す例では、パスワード認証が使用されます。その他の手法については、Azure Resource Manager の要求の認証に関する記事を参照してください。The example shown here uses password authentication, for other approaches see Authenticating Azure Resource Manager requests.

  1. Program.cs の Main メソッドに次のコードを追加し、アプリケーション ID とパスワードを利用して Azure AD からトークンを取得します。Add the following code to the Main method in Program.cs to retrieve a token from Azure AD using the application id and password.

    var authContext = new AuthenticationContext(string.Format  
      ("https://login.microsoftonline.com/{0}", tenantId));
    var credential = new ClientCredential(applicationId, password);
    AuthenticationResult token = authContext.AcquireTokenAsync
      ("https://management.core.windows.net/", credential).Result;
    
    if (token == null)
    {
      Console.WriteLine("Failed to obtain the token");
      return;
    }
    
  2. Main メソッドの終わりに次のコードを追加し、トークンを使用する ResourceManagementClient オブジェクトを作成します。Create a ResourceManagementClient object that uses the token by adding the following code to the end of the Main method:

    var creds = new TokenCredentials(token.AccessToken);
    var client = new ResourceManagementClient(creds);
    client.SubscriptionId = subscriptionId;
    
  3. 使用するリソース グループを作成するか、その参照を取得します。Create, or obtain a reference to, the resource group you are using:

    var rgResponse = client.ResourceGroups.CreateOrUpdate(rgName,
        new ResourceGroup("East US"));
    if (rgResponse.Properties.ProvisioningState != "Succeeded")
    {
      Console.WriteLine("Problem creating resource group");
      return;
    }
    

リソース プロバイダー REST API を使用して IoT ハブを作成するUse the resource provider REST API to create an IoT hub

IoT Hub リソース プロバイダー REST API を使用して、リソース グループで IoT ハブを作成します。Use the IoT Hub resource provider REST API to create an IoT hub in your resource group. また、リソース プロバイダー REST API を使用して、既存の IoT ハブに変更を加えることもできます。You can also use the resource provider REST API to make changes to an existing IoT hub.

  1. 次のメソッドを Program.cs に追加します。Add the following method to Program.cs:

    static void CreateIoTHub(string token)
    {
    
    }
    
  2. 次のコードを CreateIoTHub メソッドに追加します。Add the following code to the CreateIoTHub method. このコードは、ヘッダーに認証トークンが含まれる HttpClient オブジェクトを作成します。This code creates an HttpClient object with the authentication token in the headers:

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    
  3. 次のコードを CreateIoTHub メソッドに追加します。Add the following code to the CreateIoTHub method. このコードでは、IoT Hub が JSON 表現を作成して生成するように記述されています。This code describes the IoT hub to create and generates a JSON representation. IoT Hub をサポートする場所の最新のリストについては、「Azure の状態」を参照してください。For the current list of locations that support IoT Hub see Azure Status:

    var description = new
    {
      name = iotHubName,
      location = "East US",
      sku = new
      {
        name = "S1",
        tier = "Standard",
        capacity = 1
      }
    };
    
    var json = JsonConvert.SerializeObject(description, Formatting.Indented);
    
  4. 次のコードを CreateIoTHub メソッドに追加します。Add the following code to the CreateIoTHub method. このコードは、REST 要求を Azure に送信します。This code submits the REST request to Azure. その後、応答を確認して、デプロイ タスクの状態を監視するための URL を取得します。The code then checks the response and retrieves the URL you can use to monitor the state of the deployment task:

    var content = new StringContent(JsonConvert.SerializeObject(description), Encoding.UTF8, "application/json");
    var requestUri = string.Format("https://management.azure.com/subscriptions/{0}/resourcegroups/{1}/providers/Microsoft.devices/IotHubs/{2}?api-version=2016-02-03", subscriptionId, rgName, iotHubName);
    var result = client.PutAsync(requestUri, content).Result;
    
    if (!result.IsSuccessStatusCode)
    {
      Console.WriteLine("Failed {0}", result.Content.ReadAsStringAsync().Result);
      return;
    }
    
    var asyncStatusUri = result.Headers.GetValues("Azure-AsyncOperation").First();
    
  5. 次のコードを、CreateIoTHub メソッドの最後に追加します。Add the following code to the end of the CreateIoTHub method. このコードは、前の手順で取得した asyncStatusUri アドレスを使って、デプロイの完了を待機します。This code uses the asyncStatusUri address retrieved in the previous step to wait for the deployment to complete:

    string body;
    do
    {
      Thread.Sleep(10000);
      HttpResponseMessage deploymentstatus = client.GetAsync(asyncStatusUri).Result;
      body = deploymentstatus.Content.ReadAsStringAsync().Result;
    } while (body == "{\"status\":\"Running\"}");
    
  6. 次のコードを、CreateIoTHub メソッドの最後に追加します。Add the following code to the end of the CreateIoTHub method. このコードは、作成された IoT Hub のキーを取得し、それをコンソールに出力します。This code retrieves the keys of the IoT hub you created and prints them to the console:

    var listKeysUri = string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Devices/IotHubs/{2}/IoTHubKeys/listkeys?api-version=2016-02-03", subscriptionId, rgName, iotHubName);
    var keysresults = client.PostAsync(listKeysUri, null).Result;
    
    Console.WriteLine("Keys: {0}", keysresults.Content.ReadAsStringAsync().Result);
    

アプリケーションの完了と実行Complete and run the application

CreateIoTHub メソッドの呼び出しを追加したうえでアプリケーションをビルドし、実行すれば、アプリケーションは完成です。You can now complete the application by calling the CreateIoTHub method before you build and run it.

  1. 次のコードを Main メソッドの末尾に追加します。Add the following code to the end of the Main method:

    CreateIoTHub(token.AccessToken);
    Console.ReadLine();
    
  2. [ビルド][ソリューションのビルド] の順にクリックします。Click Build and then Build Solution. すべてのエラーを修正します。Correct any errors.

  3. [デバッグ][デバッグの開始] の順にクリックし、アプリケーションを実行します。Click Debug and then Start Debugging to run the application. デプロイメントが実行されるまでに数分かかる場合があります。It may take several minutes for the deployment to run.

  4. アプリケーションが新しい IoT ハブを追加したことを確認するには、Azure portal にアクセスしてリソースの一覧を表示します。To verify that your application added the new IoT hub, visit the Azure portal and view your list of resources. または、Get-AzResource PowerShell コマンドレットを使用します。Alternatively, use the Get-AzResource PowerShell cmdlet.

注意

このサンプル アプリケーションでは、課金の対象とする S1 Standard IoT Hub を追加します。This example application adds an S1 Standard IoT Hub for which you are billed. 完了したら、Azure portal を使うか、終了時に Remove-AzResource PowerShell コマンドレットを使用して IoT ハブを削除します。When you are finished, you can delete the IoT hub through the Azure portal or by using the Remove-AzResource PowerShell cmdlet when you are finished.

次の手順Next steps

ここでは、リソース プロバイダー REST API を使用して IoT ハブをデプロイしました。次の手順に進んでください。Now you have deployed an IoT hub using the resource provider REST API, you may want to explore further:

IoT Hub の開発に関する詳細については、以下の記事をご覧ください。To learn more about developing for IoT Hub, see the following articles:

IoT Hub の機能を詳しく調べるには、次のリンクを使用してください。To further explore the capabilities of IoT Hub, see: