다음을 통해 공유


디바이스 관리 시작

백 엔드 앱에서는 디바이스 쌍직접 메서드 같은 Azure IoT Hub 기본 형식을 사용하여 디바이스에서 장치 관리 작업을 원격으로 시작하고 모니터링할 수 있습니다.

백 엔드 애플리케이션의 직접 메서드를 사용하여 재부팅, 공장 재설정 및 펌웨어 업데이트와 같은 디바이스 관리 작업을 시작합니다.

디바이스는 다음과 같은 역할을 합니다.

  • IoT Hub에서 보낸 직접 메서드 요청 처리
  • 디바이스에서 해당 디바이스별 작업 시작
  • 보고된 속성을 통해 IoT Hub에 상태 업데이트 제공

이 문서에서는 백 엔드 앱과 디바이스 앱이 함께 작동하여 직접 메서드를 사용하여 원격 디바이스 작업을 시작하고 모니터링하는 방법을 보여 줍니다.

  • 서비스 앱은 직접 메서드를 호출하여 IoT Hub를 통해 디바이스 앱에서 다시 부팅합니다.
  • 디바이스 앱은 디바이스를 다시 부팅하는 직접 메서드를 처리합니다.

참고 항목

이 문서에서 설명하는 기능은 IoT Hub의 표준 계층에서만 사용할 수 있습니다. 기본 및 표준/무료 IoT Hub 계층에 대한 자세한 내용은 솔루션에 적합한 IoT Hub 계층 선택을 참조하세요.

참고 항목

이 문서는 이 문서 내에서 참조되는 Azure IoT SDK를 보완하기 위한 것입니다. SDK 도구를 사용하여 디바이스 및 백 엔드 애플리케이션을 모두 빌드할 수 있습니다.

필수 조건

  • IoT 허브

  • 등록된 디바이스

  • 애플리케이션이 MQTT 프로토콜을 사용하는 경우 포트 8883이 방화벽에서 열려 있는지 확인합니다. MQTT 프로토콜은 포트 8883을 통해 통신합니다. 이 포트는 일부 회사 및 교육용 네트워크 환경에서 차단될 수 있습니다. 이 문제를 해결하는 자세한 내용과 방법은 IoT Hub에 연결(MQTT)을 참조하세요.

  • Visual Studio 필요

개요

이 문서에서는 .NET용 Azure IoT SDK를 사용하여 디바이스 직접 메시지에 대한 디바이스 및 백 엔드 서비스 애플리케이션 코드를 만드는 방법을 설명합니다.

디바이스 애플리케이션 만들기

이 섹션에서는 디바이스 애플리케이션 코드를 사용하여 직접 메서드 콜백 수신기를 만드는 방법을 설명합니다.

Important

이 문서에서는 공유 액세스 서명(대칭 키 인증이라고도 함)을 사용하여 디바이스를 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, X.509 인증서를 사용하여 디바이스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 연결 보안을 참조하세요.

필수 디바이스 NuGet 패키지

C#으로 작성된 디바이스 클라이언트 애플리케이션에는 Microsoft.Azure.Devices.Client NuGet 패키지가 필요합니다.

using 이러한 문을 추가하여 디바이스 라이브러리를 사용합니다.

using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;

디바이스에 연결

DeviceClient 클래스는 디바이스의 디바이스 메시지와 상호 작용하는 데 필요한 모든 메서드를 노출합니다.

디바이스 연결 문자열 및 연결 전송 프로토콜과 함께 CreateFromConnectionString 메서드를 사용하여 디바이스에 연결합니다.

CreateFromConnectionString TransportType 전송 프로토콜 매개 변수는 다음 전송 프로토콜을 지원합니다.

  • Mqtt
  • Mqtt_WebSocket_Only
  • Mqtt_Tcp_Only
  • Amqp
  • Amqp_WebSocket_Only
  • Amqp_Tcp_Only
  • Http1

이 예제에서는 Mqtt 전송 프로토콜을 사용하여 디바이스에 연결합니다.

static string DeviceConnectionString = "{IoT hub device connection string}";
static deviceClient = null;
deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
   TransportType.Mqtt);

직접 메서드 콜백 수신기 만들기

SetMethodHandlerAsync를 사용하여 직접 메서드 콜백 수신기를 초기화합니다. 수신기는 "reboot"과 같은 메서드 이름 키워드와 연결됩니다. IoT Hub 또는 백 엔드 애플리케이션에서 메서드 이름을 사용하여 디바이스에서 콜백 메서드를 트리거할 수 있습니다.

다음은 "reboot" 직접 메서드 이름이 호출될 때 트리거되는 콜 onReboot 백 수신기를 설정하는 예제입니다.

try
{
      // setup callback for "reboot" method
      deviceClient.SetMethodHandlerAsync("reboot", onReboot, null).Wait();
      Console.WriteLine("Waiting for reboot method\n Press enter to exit.");
      Console.ReadLine();

      Console.WriteLine("Exiting...");

      // as a good practice, remove the "reboot" handler
      deviceClient.SetMethodHandlerAsync("reboot", null, null).Wait();
      deviceClient.CloseAsync().Wait();
}
catch (Exception ex)
{
      Console.WriteLine();
      Console.WriteLine("Error in sample: {0}", ex.Message);
}

이 예제 onReboot 를 계속 진행하면서 콜백 메서드는 디바이스에서 직접 메서드를 구현합니다.

처리기 함수는 MethodResponse를 호출하여 응답 승인을 호출 애플리케이션에 보냅니다.

static Task<MethodResponse> onReboot(MethodRequest methodRequest, object userContext)
{
      // In a production device, you would trigger a reboot 
      // scheduled to start after this method returns.
      // For this sample, we simulate the reboot by writing to the console
      // and updating the reported properties.
      try
      {
         Console.WriteLine("Rebooting!");
      }
      catch (Exception ex)
      {
         Console.WriteLine();
         Console.WriteLine("Error in sample: {0}", ex.Message);
      }

      string result = @"{""result"":""Reboot started.""}";
      return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
}

참고 항목

간단히 하기 위해 이 문서에서는 다시 시도 정책을 구현하지 않습니다. 프로덕션 코드에서는 문서 일시적인 오류 처리에서 제시한 대로 재시도 정책(예: 지수 백오프)을 구현해야 합니다.

SDK 디바이스 샘플

.NET용 Azure IoT SDK는 직접 메서드 작업을 처리하는 디바이스 앱의 작업 샘플을 제공합니다. 자세한 내용은 다음을 참조하세요.

백 엔드 애플리케이션 만들기

이 섹션에서는 디바이스에서 직접 메서드를 트리거하는 방법을 설명합니다.

ServiceClient 클래스는 디바이스에 직접 메서드 호출을 보내는 백 엔드 애플리케이션을 만드는 데 필요한 모든 메서드를 노출합니다.

필수 서비스 NuGet 패키지

백 엔드 서비스 애플리케이션에는 Microsoft.Azure.Devices NuGet 패키지가 필요합니다.

using 이러한 문을 추가하여 서비스 라이브러리를 사용합니다.

using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;

IoT Hub에 연결

다음 방법을 사용하여 백 엔드 서비스를 IoT Hub에 연결할 수 있습니다.

  • 공유 액세스 정책
  • Microsoft Entra

Important

이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.

공유 액세스 정책을 사용하여 연결

CreateFromConnectionString을 사용하여 백 엔드 애플리케이션을 연결합니다.

IoT Hub를 통해 디바이스에서 직접 메서드를 호출하려면 서비스에 서비스 연결 권한이 있어야 합니다. 기본적으로 모든 IoT Hub는 이 사용 권한을 부여하는 service라는 공유 액세스 정책을 사용하여 만듭니다.

매개 변수로 CreateFromConnectionString서비스 공유 액세스 정책을 제공합니다. 공유 액세스 정책에 대한 자세한 내용은 공유 액세스 서명을 사용하여 IoT Hub에 대한 액세스 제어를 참조 하세요.

ServiceClient serviceClient;
string connectionString = "{IoT hub service shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Microsoft Entra를 사용하여 연결

Microsoft Entra를 사용하는 백 엔드 앱은 IoT Hub에 연결하기 전에 보안 토큰 자격 증명을 성공적으로 인증하고 가져와야 합니다. 이 토큰은 IoT Hub 연결 메서드에 전달됩니다. IoT Hub용 Microsoft Entra를 설정하고 사용하는 방법에 대한 일반적인 내용은 Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어를 참조하세요.

Microsoft Entra 앱 구성

기본 인증 자격 증명에 대해 구성된 Microsoft Entra 앱을 설정해야 합니다. 앱에는 백 엔드 애플리케이션에서 인증하는 데 사용되는 클라이언트 암호와 같은 매개 변수가 포함되어 있습니다. 사용 가능한 앱 인증 구성은 다음과 같습니다.

  • 클라이언트 암호
  • 인증서
  • 페더레이션 ID 자격 증명

Microsoft Entra 앱은 수행 중인 작업에 따라 특정 역할 권한이 필요할 수 있습니다. 예를 들어 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기 및 쓰기 액세스를 사용하려면 IoT Hub 쌍 기여자가 필요합니다. 자세한 내용은 Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리를 참조하세요.

Microsoft Entra 앱 설정에 대한 자세한 내용은 빠른 시작: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.

DefaultAzureCredential을 사용하여 인증

Microsoft Entra를 사용하여 백 엔드 애플리케이션을 인증하는 가장 쉬운 방법은 DefaultAzureCredential을 사용하는 것이지만 특정 TokenCredential 또는 구문 분석ChainedTokenCredential된 방법을 포함하여 프로덕션 환경에서 다른 방법을 사용하는 것이 좋습니다. 편의상 이 섹션에서는 인증 사용 DefaultAzureCredential 및 클라이언트 비밀에 대해 설명합니다. 사용 DefaultAzureCredential의 장단점에 대한 자세한 내용은 DefaultAzureCredential에 대한 사용 지침을 참조 하세요.

DefaultAzureCredential 는 다양한 인증 메커니즘을 지원하고 실행 중인 환경에 따라 적절한 자격 증명 유형을 결정합니다. 작업 자격 증명을 찾을 때까지 여러 자격 증명 형식을 순서대로 사용하려고 시도합니다.

Microsoft Entra에는 다음 NuGet 패키지 및 해당 using 문이 필요합니다.

  • Azure.Core
  • Azure.Identity
using Azure.Core;
using Azure.Identity;

이 예제에서는 Microsoft Entra 앱 등록 클라이언트 암호, 클라이언트 ID 및 테넌트 ID가 환경 변수에 추가됩니다. 이러한 환경 변수는 애플리케이션을 인증하는 데 사용됩니다 DefaultAzureCredential . 성공적인 Microsoft Entra 인증의 결과는 IoT Hub 연결 방법으로 전달되는 보안 토큰 자격 증명입니다.

string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";

Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);

TokenCredential tokenCredential = new DefaultAzureCredential();

그러면 결과 TokenCredential 을 Microsoft Entra 자격 증명을 수락하는 모든 SDK 클라이언트에 대한 IoT Hub 메서드에 대한 연결에 전달할 수 있습니다.

이 예제에서는 TokenCredential ServiceClient 연결 개체를 만들기 위해 전달 ServiceClient.Create 됩니다.

string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);

이 예제에서는 TokenCredential RegistryManager 개체를 만들기 위해 전달 RegistryManager.Create 됩니다.

string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
코드 샘플

Microsoft Entra 서비스 인증의 작업 샘플은 역할 기반 인증 샘플을 참조 하세요.

디바이스에서 메서드 호출

디바이스에서 메서드를 호출하려면 다음을 수행합니다.

  1. CloudToDeviceMethod 개체를 만듭니다. 디바이스 직접 메서드 이름을 매개 변수로 전달합니다.
  2. InvokeDeviceMethodAsync를 호출하여 디바이스에서 메서드를 호출합니다.

이 예제에서는 "reboot" 메서드를 호출하여 디바이스에서 다시 부팅을 시작합니다. "reboot" 메서드는 이 문서의 직접 메서드 콜백 수신기 만들기 섹션에 설명된 대로 디바이스의 수신기에 매핑됩니다.

string targetDevice = "myDeviceId";
CloudToDeviceMethod method = new CloudToDeviceMethod("reboot");
method.ResponseTimeout = TimeSpan.FromSeconds(30);

CloudToDeviceMethodResult response = await serviceClient.InvokeDeviceMethodAsync(targetDevice, method);

Console.WriteLine("Invoked firmware update on device.");

SDK 서비스 샘플

.NET용 Azure IoT SDK는 메시지 작업을 처리하는 서비스 앱의 작업 샘플을 제공합니다. 자세한 내용은 다음을 참조하세요.

  • Java SE 개발 키트 8필요합니다. JDK 8용 다운로드로 이동하려면 장기 지원에서 Java 8을 선택해야 합니다.

개요

이 문서에서는 Java용 Azure IoT SDK를 사용하여 디바이스 직접 메서드에 대한 디바이스 및 백 엔드 서비스 애플리케이션 코드를 만드는 방법을 설명합니다.

디바이스 애플리케이션 만들기

이 섹션에서는 디바이스 애플리케이션 코드를 사용하여 직접 메서드 콜백 수신기를 만드는 방법을 설명합니다.

Important

이 문서에서는 공유 액세스 서명(대칭 키 인증이라고도 함)을 사용하여 디바이스를 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, X.509 인증서를 사용하여 디바이스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 연결 보안을 참조하세요.

디바이스 가져오기 문

다음 디바이스 import 문을 사용하여 Java용 Azure IoT SDK에 액세스합니다.

import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException;
import com.microsoft.azure.sdk.iot.device.twin.DirectMethodPayload;
import com.microsoft.azure.sdk.iot.device.twin.DirectMethodResponse;
import com.microsoft.azure.sdk.iot.device.twin.MethodCallback;
import com.microsoft.azure.sdk.iot.device.transport.IotHubConnectionStatus;
import com.microsoft.azure.sdk.iot.device.twin.SubscriptionAcknowledgedCallback;

디바이스에 연결

DeviceClient 클래스는 디바이스에서 직접 메서드와 상호 작용하는 데 필요한 모든 메서드를 노출합니다.

디바이스에 연결하려면 다음을 수행합니다.

  1. IotHubClientProtocol을 사용하여 전송 프로토콜을 선택합니다. 예시:

    IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
    
  2. DeviceClient 생성자를 사용하여 디바이스 기본 연결 문자열 및 프로토콜을 추가합니다.

    String connString = "{IoT hub device connection string}";
    DeviceClient client = new DeviceClient(connString, protocol);
    
  3. open을 사용하여 디바이스를 IoT Hub에 연결합니다. 클라이언트가 이미 열려 있으면 메서드는 아무 작업도 수행하지 않습니다.

    client.open(true);
    

직접 메서드 콜백 수신기 만들기

subscribeToMethods를 사용하여 직접 메서드 콜백 수신기를 초기화합니다. subscribeToMethods 는 연결이 종료될 때까지 들어오는 직접 메서드를 수신 대기합니다. 메서드 이름 및 페이로드는 각 직접 메서드 호출에 대해 수신됩니다.

수신기는 DirectMethodResponse를 호출하여 호출 애플리케이션에 메서드 응답 승인을 보내야 합니다.

예시:

client.subscribeToMethods(
    (methodName, methodData, context) ->
    {
        System.out.println("Received a direct method invocation with name " + methodName + " and payload " + methodData.getPayloadAsJsonString());
        return new DirectMethodResponse(200, methodData);
    },
    null);
System.out.println("Successfully subscribed to direct methods");

참고 항목

간단히 하기 위해 이 문서에서는 다시 시도 정책을 구현하지 않습니다. 프로덕션 코드에서는 문서 일시적인 오류 처리에서 제시한 대로 재시도 정책(예: 지수 백오프)을 구현해야 합니다.

SDK 디바이스 샘플

Java용 Azure IoT SDK에는 이 문서에 설명된 디바이스 앱 개념을 테스트하는 작업 샘플이 포함되어 있습니다. 자세한 내용은 직접 메서드 샘플을 참조 하세요.

백 엔드 애플리케이션 만들기

이 섹션에서는 직접 메서드를 사용하여 디바이스에서 원격 다시 부팅을 시작하는 방법을 설명합니다.

ServiceClient DeviceMethod 클래스에는 서비스에서 디바이스 쌍에 액세스하는 데 사용할 수 있는 메서드가 포함되어 있습니다.

서비스 Import 문

다음 서비스 import 문을 사용하여 Java용 Azure IoT SDK에 액세스합니다.

import com.microsoft.azure.sdk.iot.service.methods.DirectMethodRequestOptions;
import com.microsoft.azure.sdk.iot.service.methods.DirectMethodsClient;
import com.microsoft.azure.sdk.iot.service.methods.DirectMethodResponse;

IoT Hub에 연결

다음 방법을 사용하여 백 엔드 서비스를 IoT Hub에 연결할 수 있습니다.

  • 공유 액세스 정책
  • Microsoft Entra

Important

이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.

공유 액세스 정책을 사용하여 연결

DeviceMethod 생성자를 사용하여 서비스 기본 연결 문자열 추가하고 IoT Hub에 연결합니다.

IoT Hub를 통해 디바이스에서 직접 메서드를 호출하려면 서비스에 서비스 연결 권한이 있어야 합니다. 기본적으로 모든 IoT Hub는 이 사용 권한을 부여하는 service라는 공유 액세스 정책을 사용하여 만듭니다.

생성자에 대한 DeviceMethod 매개 변수로 서비스 공유 액세스 정책을 제공합니다. 공유 액세스 정책에 대한 자세한 내용은 공유 액세스 서명을 사용하여 IoT Hub에 대한 액세스 제어를 참조 하세요.

예시:

String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
DeviceMethod methodClient = new DeviceMethod(iotHubConnectionString);

Microsoft Entra를 사용하여 연결

Microsoft Entra를 사용하는 백 엔드 앱은 IoT Hub에 연결하기 전에 보안 토큰 자격 증명을 성공적으로 인증하고 가져와야 합니다. 이 토큰은 IoT Hub 연결 메서드에 전달됩니다. IoT Hub용 Microsoft Entra를 설정하고 사용하는 방법에 대한 일반적인 내용은 Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어를 참조하세요.

Java SDK 인증에 대한 개요는 Java 및 Azure ID를 사용한 Azure 인증을 참조 하세요.

간단히 하기 위해 이 섹션에서는 클라이언트 암호를 사용하는 인증을 설명하는 데 중점을 둡니다.

Microsoft Entra 앱 구성

기본 인증 자격 증명에 대해 구성된 Microsoft Entra 앱을 설정해야 합니다. 앱에는 백 엔드 애플리케이션에서 인증하는 데 사용되는 클라이언트 암호와 같은 매개 변수가 포함되어 있습니다. 사용 가능한 앱 인증 구성은 다음과 같습니다.

  • 클라이언트 암호
  • 인증서
  • 페더레이션 ID 자격 증명

Microsoft Entra 앱은 수행 중인 작업에 따라 특정 역할 권한이 필요할 수 있습니다. 예를 들어 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기 및 쓰기 액세스를 사용하려면 IoT Hub 쌍 기여자가 필요합니다. 자세한 내용은 Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리를 참조하세요.

Microsoft Entra 앱 설정에 대한 자세한 내용은 빠른 시작: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.

DefaultAzureCredential을 사용하여 인증

Microsoft Entra를 사용하여 백 엔드 애플리케이션을 인증하는 가장 쉬운 방법은 DefaultAzureCredential을 사용하는 것이지만 특정 TokenCredential 또는 구문 분석ChainedTokenCredential된 방법을 포함하여 프로덕션 환경에서 다른 방법을 사용하는 것이 좋습니다. 사용DefaultAzureCredential의 장단점에 대한 자세한 내용은 Java용 Azure ID 클라이언트 라이브러리의 자격 증명 체인을 참조하세요.

DefaultAzureCredential 은 다양한 인증 메커니즘을 지원하고 실행 중인 환경에 따라 적절한 자격 증명 유형을 결정합니다. 작업 자격 증명을 찾을 때까지 여러 자격 증명 형식을 순서대로 사용하려고 시도합니다.

DefaultAzureCredentialBuilder를 사용하여 Microsoft Entra 앱 자격 증명을 인증할 수 있습니다. 클라이언트 비밀 tenantID, clientID 및 클라이언트 비밀 값과 같은 연결 매개 변수를 환경 변수로 저장합니다. TokenCredential 만들어지면 ServiceClient 또는 다른 작성기에서 '자격 증명' 매개 변수로 전달합니다.

이 예제에서는 DefaultAzureCredentialBuilder DefaultAzureCredential에 설명된 목록에서 연결을 인증하려고 시도합니다. 성공적인 Microsoft Entra 인증의 결과는 ServiceClient와 같은 생성자에 전달되는 보안 토큰 자격 증명입니다.

TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
ClientSecretCredentialBuilder를 사용하여 인증

ClientSecretCredentialBuilder를 사용하여 클라이언트 비밀 정보를 사용하여 자격 증명을 만들 수 있습니다. 성공하면 이 메서드는 ServiceClient 또는 다른 작성기에서 '자격 증명' 매개 변수로 전달할 수 있는 TokenCredential을 반환합니다.

이 예제에서는 Microsoft Entra 앱 등록 클라이언트 암호, 클라이언트 ID 및 테넌트 ID 값이 환경 변수에 추가되었습니다. 이러한 환경 변수는 자격 증명을 빌드하는 데 사용됩니다 ClientSecretCredentialBuilder .

string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");

TokenCredential credential =
     new ClientSecretCredentialBuilder()
          .tenantId(tenantID)
          .clientId(clientID)
          .clientSecret(clientSecretValue)
          .build();
기타 인증 클래스

Java SDK에는 Microsoft Entra를 사용하여 백 엔드 앱을 인증하는 다음 클래스도 포함되어 있습니다.

코드 샘플

Microsoft Entra 서비스 인증의 작업 샘플은 역할 기반 인증 샘플을 참조 하세요.

디바이스에서 메서드 호출

DeviceMethod.invoke를 호출하여 디바이스에서 메서드를 호출하고 결과 상태를 반환합니다.

invoke 페이로드 매개 변수는 선택 사항입니다. 제공된 페이로드가 없는 경우 사용합니다 null . 페이로드 매개 변수는 문자열, 바이트 배열 및 HashMap을 비롯한 다양한 데이터 형식을 사용할 수 있습니다. 예제는 직접 메서드 테스트를 참조 하세요.

이 예제에서는 "reboot" 메서드를 호출하여 디바이스에서 다시 부팅을 시작합니다. "reboot" 메서드는 이 문서의 직접 메서드 콜백 수신기 만들기 섹션에 설명된 대로 디바이스의 수신기에 매핑됩니다.

예시:

String deviceId = "myFirstDevice";
String methodName = "reboot";
String payload = "Test payload";
Long responseTimeout = TimeUnit.SECONDS.toSeconds(30);
Long connectTimeout = TimeUnit.SECONDS.toSeconds(5);

MethodResult result = methodClient.invoke(deviceId, methodName, responseTimeout, connectTimeout, payload);
if (result == null)
{
    throw new IOException("Method invoke returns null");
}
System.out.println("Status=" + result.getStatus());

SDK 서비스 샘플

Java용 Azure IoT SDK는 직접 메서드 작업을 처리하는 서비스 앱의 작업 샘플을 제공합니다. 자세한 내용은 다음을 참조하세요.

  • Python SDK - Python 버전 3.7 이상을 사용하는 것이 좋습니다. 설치 프로그램의 요구 사항에 따라 32비트 또는 64비트 설치를 사용해야 합니다. 설치하는 동안 메시지가 나타나면 플랫폼별 환경 변수에 Python을 추가해야 합니다.

개요

이 문서에서는 Python용 Azure IoT SDK를 사용하여 디바이스 직접 메서드에 대한 디바이스 및 백 엔드 서비스 애플리케이션 코드를 만드는 방법을 설명합니다.

패키지 설치

디바이스 애플리케이션을 만들려면 azure-iot-device 라이브러리를 설치해야 합니다.

pip install azure-iot-device

백 엔드 서비스 애플리케이션을 만들려면 azure-iot-hub 라이브러리를 설치해야 합니다.

pip install azure-iot-hub

디바이스 애플리케이션 만들기

이 섹션에서는 디바이스 애플리케이션 코드를 사용하여 직접 메서드 콜백 수신기를 만드는 방법을 설명합니다.

Important

이 문서에서는 공유 액세스 서명(대칭 키 인증이라고도 함)을 사용하여 디바이스를 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, X.509 인증서를 사용하여 디바이스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 연결 보안을 참조하세요.

디바이스 Import 문

이 import 문을 추가하여 액세스 IoTHubDeviceClientMethodResponse.

# import the device client library
from azure.iot.device import IoTHubDeviceClient, MethodResponse

디바이스에 연결

IoTHubDeviceClient 클래스에는 직접 메서드를 사용하는 데 사용할 수 있는 메서드가 포함되어 있습니다.

create_from_connection_string 사용하여 디바이스 연결 문자열 사용하여 디바이스에 애플리케이션을 연결합니다.

# substitute the device connection string in conn_str
# and add it to the IoTHubDeviceClient object
conn_str = "{IoT hub device connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(conn_str)

직접 메서드 콜백 만들기

on_method_request_received 사용하여 직접 메서드를 받을 때 호출되는 처리기 함수 또는 코루틴을 만듭니다. 수신기는 "reboot"과 같은 메서드 이름 키워드와 연결됩니다. IoT Hub 또는 백 엔드 애플리케이션에서 메서드 이름을 사용하여 디바이스에서 콜백 메서드를 트리거할 수 있습니다.

처리기 함수는 MethodResponse만들고 send_method_response 전달하여 호출 애플리케이션에 직접 메서드 응답 승인을 보내야 합니다.

다음은 .라는 직접 메서드 처리기를 설정하는 예제입니다 method_request_handler.

try:
    # Attach the handler to the client
    client.on_method_request_received = method_request_handler
except:
    # In the event of failure, clean up
    client.shutdown()

이 예제에서 콜백 메서드는 method_request_handler 디바이스에서 직접 메서드를 구현합니다. 이 코드는 서비스 애플리케이션에서 "rebootDevice" 직접 메서드를 호출할 때 실행됩니다. 메서드는 호출 애플리케이션에 직접 메서드 응답 승인을 보내기 위해 호출 send_method_response 합니다.

# Define the handler for method requests
def method_request_handler(method_request):
    if method_request.name == "rebootDevice":
        # Act on the method by rebooting the device
        print("Rebooting device")
        time.sleep(20)
        print("Device rebooted")
        # Create a method response indicating the method request was resolved
        resp_status = 200
        resp_payload = {"Response": "This is the response from the device"}
        method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)
    else:
        # Create a method response indicating the method request was for an unknown method
        resp_status = 404
        resp_payload = {"Response": "Unknown method"}
        method_response = MethodResponse(method_request.request_id, resp_status, resp_payload)

    # Send the method response
    client.send_method_response(method_response)

SDK 디바이스 샘플

Python용 Azure IoT SDK는 직접 메서드 작업을 처리하는 디바이스 앱의 작업 샘플을 제공합니다. 자세한 내용은 직접 수신 메서드를 참조 하세요.

백 엔드 애플리케이션 만들기

이 섹션에서는 백 엔드 서비스 애플리케이션을 사용하여 디바이스에서 직접 메서드를 호출하는 방법을 설명합니다.

IoTHubRegistryManager 클래스는 디바이스에 메시지를 보내는 백 엔드 애플리케이션을 만드는 데 필요한 모든 메서드를 노출합니다.

서비스 Import 문

이러한 import 문을 추가하여 IoT Hub에 연결하고, 클라우드-디바이스 직접 메서드를 보내고, 디바이스 직접 메서드 응답을 받습니다.

from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.models import CloudToDeviceMethod, CloudToDeviceMethodResult

IoT Hub에 연결

다음 방법을 사용하여 백 엔드 서비스를 IoT Hub에 연결할 수 있습니다.

  • 공유 액세스 정책
  • Microsoft Entra

Important

이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.

공유 액세스 정책을 사용하여 연결

from_connection_string을 사용하여 IoT Hub에 연결합니다.

IoT Hub를 통해 디바이스에서 직접 메서드를 호출하려면 서비스에 서비스 연결 권한이 있어야 합니다. 기본적으로 모든 IoT Hub는 이 사용 권한을 부여하는 service라는 공유 액세스 정책을 사용하여 만듭니다.

매개 변수로 from_connection_string서비스 공유 액세스 정책을 제공합니다. 공유 액세스 정책에 대한 자세한 내용은 공유 액세스 서명을 사용하여 IoT Hub에 대한 액세스 제어를 참조 하세요.

예시:

# Connect to IoT hub
IOTHUB_CONNECTION_STRING = "{IoT hub service connection string}"
iothub_registry_manager = IoTHubRegistryManager.from_connection_string(IOTHUB_CONNECTION_STRING)

Microsoft Entra를 사용하여 연결

Microsoft Entra를 사용하는 백 엔드 앱은 IoT Hub에 연결하기 전에 보안 토큰 자격 증명을 성공적으로 인증하고 가져와야 합니다. 이 토큰은 IoT Hub 연결 메서드에 전달됩니다. IoT Hub용 Microsoft Entra를 설정하고 사용하는 방법에 대한 일반적인 내용은 Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어를 참조하세요.

Python SDK 인증에 대한 개요는 Python용 Azure SDK를 사용하여 Azure 서비스에 Python 앱 인증을 참조 하세요.

Microsoft Entra 앱 구성

기본 인증 자격 증명에 대해 구성된 Microsoft Entra 앱을 설정해야 합니다. 앱에는 백 엔드 애플리케이션에서 인증하는 데 사용되는 클라이언트 암호와 같은 매개 변수가 포함되어 있습니다. 사용 가능한 앱 인증 구성은 다음과 같습니다.

  • 클라이언트 암호
  • 인증서
  • 페더레이션 ID 자격 증명

Microsoft Entra 앱은 수행 중인 작업에 따라 특정 역할 권한이 필요할 수 있습니다. 예를 들어 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기 및 쓰기 액세스를 사용하려면 IoT Hub 쌍 기여자가 필요합니다. 자세한 내용은 Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리를 참조하세요.

Microsoft Entra 앱 설정에 대한 자세한 내용은 빠른 시작: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.

DefaultAzureCredential을 사용하여 인증

Microsoft Entra를 사용하여 백 엔드 애플리케이션을 인증하는 가장 쉬운 방법은 DefaultAzureCredential을 사용하는 것이지만 특정 TokenCredential 또는 구문 분석ChainedTokenCredential된 방법을 포함하여 프로덕션 환경에서 다른 방법을 사용하는 것이 좋습니다. 편의상 이 섹션에서는 인증 사용 DefaultAzureCredential 및 클라이언트 비밀에 대해 설명합니다. 사용DefaultAzureCredential의 장단점에 대한 자세한 내용은 Python용 Azure ID 클라이언트 라이브러리의 자격 증명 체인을 참조하세요.

DefaultAzureCredential 은 다양한 인증 메커니즘을 지원하고 실행 중인 환경에 따라 적절한 자격 증명 유형을 결정합니다. 작업 자격 증명을 찾을 때까지 여러 자격 증명 형식을 순서대로 사용하려고 시도합니다.

Microsoft Entra에는 이 가져오기 패키지 및 해당 import 문이 필요합니다.

pip install azure-identity
from azure.identity import DefaultAzureCredential

이 예제에서는 Microsoft Entra 앱 등록 클라이언트 암호, 클라이언트 ID 및 테넌트 ID가 환경 변수에 추가되었습니다. 이러한 환경 변수는 애플리케이션을 인증하는 데 사용됩니다 DefaultAzureCredential . 성공적인 Microsoft Entra 인증의 결과는 IoT Hub 연결 방법으로 전달되는 보안 토큰 자격 증명입니다.

from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()

그러면 결과 AccessToken전달하여 from_token_credential Microsoft Entra 자격 증명을 수락하는 모든 SDK 클라이언트의 IoT Hub에 연결할 수 있습니다.

from_token_credential 에는 다음 두 개의 매개 변수가 필요합니다.

  • Azure 서비스 URL - Azure 서비스 URL은 접두사 없이 https:// 형식 {Your Entra domain URL}.azure-devices.net 이어야 합니다. 예들 들어 MyAzureDomain.azure-devices.net입니다.
  • Azure 자격 증명 토큰

이 예제에서는 .를 사용하여 DefaultAzureCredentialAzure 자격 증명을 가져옵니다. 그런 다음 Azure 서비스 URL 및 자격 증명을 제공하여 IoTHubRegistryManager.from_token_credential IoT Hub에 대한 연결을 만듭니다.

import sys
import os

from azure.identity import DefaultAzureCredential
from azure.iot.hub import IoTHubRegistryManager

# Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'

# Set environment variables
os.environ['AZURE_CLIENT_SECRET'] = clientSecretValue
os.environ['AZURE_CLIENT_ID'] = clientID
os.environ['AZURE_TENANT_ID'] = tenantID

# Acquire a credential object
credential = DefaultAzureCredential()

# Use Entra to authorize IoT Hub service
print("Connecting to IoTHubRegistryManager...")
iothub_registry_manager = IoTHubRegistryManager.from_token_credential(
url="MyAzureDomain.azure-devices.net",
token_credential=credential)
코드 샘플

Microsoft Entra 서비스 인증의 작업 샘플은 Python용 MSAL(Microsoft 인증 라이브러리)을 참조 하세요.

디바이스에서 메서드 호출

디바이스에서 이름으로 직접 메서드를 호출할 수 있습니다. 메서드 이름은 메서드를 식별합니다. 직접 메서드 콜백 만들기에 표시된 다음 및 이전 디바이스 예제에서 직접 메서드 이름은 "rebootDevice"입니다.

디바이스에서 직접 메서드를 호출하려면 다음을 수행합니다.

  1. CloudToDeviceMethod 개체를 만듭니다. 메서드 이름과 페이로드를 매개 변수로 제공합니다.
  2. invoke_device_method 호출하여 디바이스에서 직접 메서드를 호출합니다. 디바이스 ID 및 CloudToDeviceMethod 페이로드 개체를 매개 변수로 제공합니다.

이 예제에서는 CloudToDeviceMethod 디바이스에서 "rebootDevice"라는 직접 메서드를 호출합니다. 직접 메서드가 성공적으로 호출되면 직접 메서드 응답 페이로드가 표시됩니다.

CONNECTION_STRING = "{IoTHubConnectionString}"
DEVICE_ID = "{deviceId}"

METHOD_NAME = "rebootDevice"
METHOD_PAYLOAD = "{\"method_number\":\"42\"}"
TIMEOUT = 60
WAIT_COUNT = 10

try:
    print ( "" )
    print ( "Invoking device to reboot..." )

    # Call the direct method.
    deviceMethod = CloudToDeviceMethod(method_name=METHOD_NAME, payload=METHOD_PAYLOAD)
    response = registry_manager.invoke_device_method(DEVICE_ID, deviceMethod)

    print ( "Successfully invoked the device to reboot." )

    print ( "The device has returned this payload:" )
    print ( response.payload )

except Exception as ex:
    print ( "" )
    print ( "Unexpected error {0}".format(ex) )
    return

SDK 서비스 샘플

Python용 Azure IoT SDK는 직접 메서드 작업을 처리하는 서비스 앱의 작업 샘플을 제공합니다. 자세한 내용은 다음을 참조하세요.

  • Node.js 버전 10.0.x 이상이 필요합니다.

개요

이 문서에서는 Node.js Azure IoT SDK를 사용하여 디바이스 직접 메서드에 대한 디바이스 및 백 엔드 서비스 애플리케이션 코드를 만드는 방법을 설명합니다.

디바이스 애플리케이션 만들기

이 섹션에서는 디바이스 애플리케이션 코드를 사용하여 직접 메서드 콜백을 만드는 방법을 설명합니다.

SDK 패키지 설치

azure-iot-device 패키지에는 IoT 디바이스와 인터페이스하는 개체가 포함되어 있습니다. 이 명령을 실행하여 개발 머신에 azure-iot-device 디바이스 SDK를 설치합니다.

npm install azure-iot-device --save

전송 프로토콜 선택

Client 개체는 다음 프로토콜을 지원합니다.

  • Amqp
  • Http - Http를 사용할 때 Client 인스턴스는 IoT Hub의 메시지를 자주(최소 25분마다) 확인합니다.
  • Mqtt
  • MqttWs
  • AmqpWs

개발 머신에 필요한 전송 프로토콜을 설치합니다.

예를 들어 이 명령은 Amqp 프로토콜을 설치합니다.

npm install azure-iot-device-amqp --save

MQTT, AMQP, HTTPS 지원 간 차이점에 대한 자세한 내용은 클라우드-디바이스 통신 지침통신 프로토콜 선택을 참조하세요.

클라이언트 개체 만들기

Client 설치된 패키지를 사용하여 개체를 만듭니다.

예시:

const Client = require('azure-iot-device').Client;

프로토콜 개체 만들기

Protocol 설치된 전송 패키지를 사용하여 개체를 만듭니다.

이 예제에서는 AMQP 프로토콜을 할당합니다.

const Protocol = require('azure-iot-device-amqp').Amqp;

디바이스 연결 문자열 및 전송 프로토콜 추가

ConnectionString을 호출하여 디바이스 연결 매개 변수를 제공합니다.

  • connStr - 디바이스 연결 문자열.
  • transportCtor - 전송 프로토콜입니다.

이 예제에서는 Amqp 전송 프로토콜을 사용합니다.

const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);

IoT Hub에 대한 연결 열기

열린 메서드를 사용하여 IoT 디바이스와 IoT Hub 간의 연결을 엽니다.

예시:

client.open(function(err) {
  if (err) {
    console.error('error connecting to hub: ' + err);
    process.exit(1);
  }
})

직접 메서드 콜백 만들기

onDeviceMethod를 호출하여 직접 메서드를 받을 때 호출되는 콜백 처리기 함수 또는 코루틴을 만듭니다. 수신기는 "reboot"과 같은 메서드 이름 키워드와 연결됩니다. IoT Hub 또는 백 엔드 애플리케이션에서 메서드 이름을 사용하여 디바이스에서 콜백 메서드를 트리거할 수 있습니다.

콜백 처리기 함수는 호출 애플리케이션에 응답 승인 메시지를 보내기 위해 호출 response.send 해야 합니다.

다음은 "reboot" 직접 메서드 이름을 사용할 때 호출되는 직접 onReboot 메서드 처리기를 설정하는 예제입니다.

client.onDeviceMethod('reboot', onReboot);

이 예제에서 콜백 메서드는 onReboot 디바이스에서 직접 메서드를 구현합니다. 이 코드는 서비스 애플리케이션에서 "reboot" 직접 메서드를 호출할 때 실행됩니다. 함수는 호출 애플리케이션에 응답 승인 메시지를 보내기 위해 호출 response.send 합니다.

var onReboot = function(request, response) {

    // Respond the cloud app for the direct method
    response.send(200, 'Reboot started', function(err) {
        if (err) {
            console.error('An error occurred when sending a method response:\n' + err.toString());
        } else {
            console.log('Response to method \'' + request.methodName + '\' sent successfully.');
        }
    });

    // Add your device's reboot API for physical restart.
    console.log('Rebooting!');
};

SDK 디바이스 샘플

Node.js용 Azure IoT SDK는 디바이스 관리 작업을 처리하는 디바이스 앱의 작업 샘플을 제공합니다. 자세한 내용은 다음을 참조하세요.

백 엔드 애플리케이션 만들기

이 섹션에서는 디바이스에서 직접 메서드를 호출하는 방법을 설명합니다.

서비스 SDK 패키지 설치

이 명령을 실행하여 개발 머신에 azure-iothub를 설치합니다.

npm install azure-iothub --save

IoT Hub에 연결

다음 방법을 사용하여 백 엔드 서비스를 IoT Hub에 연결할 수 있습니다.

  • 공유 액세스 정책
  • Microsoft Entra

Important

이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.

공유 액세스 정책을 사용하여 연결

fromConnectionString을 사용하여 IoT Hub에 연결합니다.

IoT Hub를 통해 디바이스에서 직접 메서드를 호출하려면 서비스에 서비스 연결 권한이 있어야 합니다. 기본적으로 모든 IoT Hub는 이 사용 권한을 부여하는 service라는 공유 액세스 정책을 사용하여 만듭니다.

매개 변수CreateFromConnectionString로 서비스 공유 액세스 정책 연결 문자열 제공합니다. 공유 액세스 정책에 대한 자세한 내용은 공유 액세스 서명을 사용하여 IoT Hub에 대한 액세스 제어를 참조 하세요.

var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);

Microsoft Entra를 사용하여 연결

Microsoft Entra를 사용하는 백 엔드 앱은 IoT Hub에 연결하기 전에 보안 토큰 자격 증명을 성공적으로 인증하고 가져와야 합니다. 이 토큰은 IoT Hub 연결 메서드에 전달됩니다. IoT Hub용 Microsoft Entra를 설정하고 사용하는 방법에 대한 일반적인 내용은 Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어를 참조하세요.

Node.js SDK 인증에 대한 개요는 다음을 참조하세요.

Microsoft Entra 앱 구성

기본 인증 자격 증명에 대해 구성된 Microsoft Entra 앱을 설정해야 합니다. 앱에는 백 엔드 애플리케이션에서 인증하는 데 사용되는 클라이언트 암호와 같은 매개 변수가 포함되어 있습니다. 사용 가능한 앱 인증 구성은 다음과 같습니다.

  • 클라이언트 암호
  • 인증서
  • 페더레이션 ID 자격 증명

Microsoft Entra 앱은 수행 중인 작업에 따라 특정 역할 권한이 필요할 수 있습니다. 예를 들어 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기 및 쓰기 액세스를 사용하려면 IoT Hub 쌍 기여자가 필요합니다. 자세한 내용은 Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리를 참조하세요.

Microsoft Entra 앱 설정에 대한 자세한 내용은 빠른 시작: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.

DefaultAzureCredential을 사용하여 인증

Microsoft Entra를 사용하여 백 엔드 애플리케이션을 인증하는 가장 쉬운 방법은 DefaultAzureCredential을 사용하는 것이지만 특정 TokenCredential 또는 구문 분석ChainedTokenCredential된 방법을 포함하여 프로덕션 환경에서 다른 방법을 사용하는 것이 좋습니다. 편의상 이 섹션에서는 인증 사용 DefaultAzureCredential 및 클라이언트 비밀에 대해 설명합니다. 사용 DefaultAzureCredential의 장단점에 대한 자세한 내용은 JavaScript용 Azure ID 클라이언트 라이브러리의 자격 증명 체인을 참조 하세요.

DefaultAzureCredential 은 다양한 인증 메커니즘을 지원하고 실행 중인 환경에 따라 적절한 자격 증명 유형을 결정합니다. 작업 자격 증명을 찾을 때까지 여러 자격 증명 형식을 순서대로 사용하려고 시도합니다.

Microsoft Entra에는 다음 패키지가 필요합니다.

npm install --save @azure/identity

이 예제에서는 Microsoft Entra 앱 등록 클라이언트 암호, 클라이언트 ID 및 테넌트 ID가 환경 변수에 추가되었습니다. 이러한 환경 변수는 애플리케이션을 인증하는 데 사용됩니다 DefaultAzureCredential . 성공적인 Microsoft Entra 인증의 결과는 IoT Hub 연결 방법으로 전달되는 보안 토큰 자격 증명입니다.

import { DefaultAzureCredential } from "@azure/identity";

// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();

그러면 결과 자격 증명 토큰을 fromTokenCredential로 전달하여 Microsoft Entra 자격 증명을 수락하는 모든 SDK 클라이언트에 대해 IoT Hub에 연결할 수 있습니다.

fromTokenCredential 에는 다음 두 개의 매개 변수가 필요합니다.

  • Azure 서비스 URL - Azure 서비스 URL은 접두사 없이 https:// 형식 {Your Entra domain URL}.azure-devices.net 이어야 합니다. 예들 들어 MyAzureDomain.azure-devices.net입니다.
  • Azure 자격 증명 토큰

이 예제에서는 .를 사용하여 DefaultAzureCredentialAzure 자격 증명을 가져옵니다. 그런 다음 Azure 도메인 URL 및 자격 증명을 제공하여 Registry.fromTokenCredential IoT Hub에 대한 연결을 만듭니다.

const { DefaultAzureCredential } = require("@azure/identity");

let Registry = require('azure-iothub').Registry;

// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'

// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;

// Acquire a credential object
const credential = new DefaultAzureCredential()

// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
코드 샘플

Microsoft Entra 서비스 인증의 작업 샘플은 Azure ID 예제를 참조 하세요.

디바이스에서 메서드 호출

invokeDeviceMethod를 사용하여 디바이스에서 이름으로 직접 메서드를 호출합니다. 메서드 이름 매개 변수는 직접 메서드를 식별합니다.

이 예제에서는 "reboot" 메서드를 호출하여 디바이스에서 다시 부팅을 시작합니다. "reboot" 메서드는 이 문서의 직접 메서드 콜백 만들기 섹션에 설명된 대로 디바이스의 콜백 처리기 함수에 매핑됩니다.

var startRebootDevice = function(deviceToReboot) {

    var methodName = "reboot";

    var methodParams = {
        methodName: methodName,
        payload: null,
        timeoutInSeconds: 30
    };

    client.invokeDeviceMethod(deviceToReboot, methodParams, function(err, result) {
        if (err) {
            console.error("Direct method error: "+err.message);
        } else {
            console.log("Successfully invoked the device to reboot.");  
        }
    });
};

SDK 서비스 샘플

Node.js용 Azure IoT SDK는 디바이스 관리 작업을 처리하는 서비스 앱의 작업 샘플을 제공합니다. 자세한 내용은 다음을 참조하세요.