다음을 통해 공유


자습서: 엔드투엔드 솔루션 빌드

이 Azure Digital Twins 자습서에서는 서비스의 기능을 설명하는 엔드투엔드 솔루션의 구축 방법을 설명합니다. 환경의 라이브 데이터를 기반으로 전체 엔드투엔드 솔루션을 설정하기 위해 디바이스 및 데이터 관리를 위해 다른 Azure 서비스에 Azure Digital Twins 인스턴스를 연결할 수 있습니다.

이 자습서에서는 다음을 수행합니다.

  • Azure Digital Twins 인스턴스 설정
  • 샘플 빌딩 시나리오에 대해 알아보고 미리 작성된 구성 요소를 인스턴스화합니다.
  • Azure Functions 앱을 사용하여 IoT Hub 디바이스에서 시뮬레이션된 원격 분석을 디지털 트윈 속성으로 라우팅합니다.
  • Azure Functions, 엔드포인트 및 경로를 사용하여 디지털 트윈 알림을 처리함으로써 트윈 그래프를 통해 변경 내용을 전파합니다.

필수 조건

이 자습서를 시작하기 전에 다음 필수 구성 요소를 시작합니다.

  • Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • 이 자습서에서는 .NET을 사용합니다. .NET 다운로드에서 여러 플랫폼용 .NET SDK의 최신 버전을 다운로드할 수 있습니다.

그런 다음, 이 섹션의 나머지 부분을 계속 진행하여 나머지 필수 구성 요소를 설정합니다.

샘플 리소스 가져오기

자습서는 C#으로 작성된 Azure Digital Twins 엔드투엔드 샘플 프로젝트를 기반으로 합니다. 샘플 링크로 이동하여 제목 아래에서 코드 찾아보기 단추를 선택하여 머신에서 샘플 프로젝트를 가져옵니다.

그러면 코드 단추를 선택한 다음, ZIP 다운로드를 선택하여 .zip으로 다운로드할 수 있는 샘플용 GitHub 리포지토리로 이동합니다.

Screenshot of the digital-twins-samples repo on GitHub, highlighting the steps to download it as a zip.

그러면 .zip 폴더가 digital-twins-samples-master.zip으로 컴퓨터에 다운로드됩니다. 폴더의 압축을 풀고 파일을 추출합니다.

Azure Digital Twins 인스턴스 준비하기

이 문서에서 Azure Digital Twins로 작업하려면 Azure Digital Twins 인스턴스와 이를 사용하는 데 필요한 권한이 필요합니다. 이미 Azure Digital Twins 인스턴스를 설정한 경우 해당 인스턴스를 사용하고 다음 섹션으로 건너뛸 수 있습니다. 그렇지 않으면 인스턴스 및 인증 설정의 지침을 따릅니다. 지침에는 각 단계를 성공적으로 완료했는지 확인하는 데 도움이 되는 정보가 포함되어 있습니다.

인스턴스가 설정되면 인스턴스의 호스트 이름을 적어 둡니다. Azure Portal에서 호스트 이름을 찾을 수 있습니다.

Azure CLI에 대한 환경 준비

CLI 세션 설정

CLI에서 Azure Digital Twins 작업을 시작하려면 가장 먼저 로그인하여 CLI 컨텍스트를 이 세션의 구독으로 설정해야 합니다. CLI 창에서 다음 명령을 실행합니다.

az login
az account set --subscription "<your-Azure-subscription-ID>"

위의 명령에서 ID 대신 제품 이름을 사용할 수도 있습니다.

Azure Digital Twins에서 이 구독을 처음 사용하는 경우 이 명령을 실행하여 Azure Digital Twins 네임스페이스에 등록합니다. (확실하지 않으면 이전에 수행한 적이 있더라도 다시 실행해도 됩니다.)

az provider register --namespace 'Microsoft.DigitalTwins'

다음으로 Azure CLI용 Microsoft Azure IoT 확장을 추가하여 Azure Digital Twins 및 기타 IoT 서비스와 상호 작용하기 위한 명령을 사용하도록 설정합니다. 다음 명령을 실행하여 최신 버전의 확장이 있는지 확인합니다.

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

이제 Azure CLI에서 Azure Digital Twins를 사용할 준비가 되었습니다.

사용 가능한 최상위 Azure Digital Twins 명령 목록을 보려면 언제든지 az dt --help를 실행하여 이를 확인할 수 있습니다.

샘플 프로젝트 구성

다음으로, Azure Digital Twins 인스턴스와 상호 작용하는 샘플 클라이언트 애플리케이션을 설정합니다.

컴퓨터에서 이전에 Azure Digital Twins 엔드투엔드 샘플에서 다운로드한 파일로 이동합니다. 아직 압축을 풀지 않은 경우 압축을 풉니다.

폴더 내부에서 digital-twins-samples-main\AdtSampleApp\SampleClientApp으로 이동하여 appsettings.json 파일을 엽니다. 이 JSON 파일에는 프로젝트를 실행하는 데 필요한 구성 변수가 포함되어 있습니다.

파일 본문에서 instanceUrl을 Azure Digital Twins 인스턴스 호스트 이름 URL로 변경합니다(아래와 같이 호스트 이름 앞에 https:// 추가).

{
  "instanceUrl": "https://<your-Azure-Digital-Twins-instance-host-name>"
}

파일을 저장 후 닫습니다.

로컬 Azure 자격 증명 설정

이 샘플은 로컬 컴퓨터에서 실행할 때 DefaultAzureCredential(Azure.Identity 라이브러리의 일부)을 사용하여 Azure Digital Twins 인스턴스에서 사용자를 인증합니다. 클라이언트 앱에서 Azure Digital Twins를 사용하여 인증하는 여러 방법에 대한 자세한 내용은 앱 인증 코드 작성을 참조하세요.

DefaultAzureCredential을 사용하면 샘플에서 로컬 Azure CLI 또는 Visual Studio 또는 Visual Studio Code의 Azure 로그인과 같은 로컬 환경에서 자격 증명을 검색합니다. 이러한 이유로 샘플에 대한 자격 증명을 설정하려면 이러한 메커니즘 중 하나를 통해 Azure에 로컬로 로그인해야 합니다.

Visual Studio 또는 Visual Studio Code를 사용하여 코드 샘플을 실행하는 경우 Azure Digital Twins 인스턴스에 액세스하는 데 사용하려는 것과 동일한 Azure 자격 증명을 사용하여 해당 편집기에 로그인했는지 확인합니다. 로컬 CLI 창을 사용하는 경우 az login 명령을 실행하여 Azure 계정에 로그인합니다. 그런 다음 코드 샘플을 실행하면 자동으로 인증을 받아야 합니다.

빌딩 시나리오 시작

이 자습서에서 사용되는 샘플 프로젝트는 층, 방 및 자동 온도 조절기 디바이스를 포함하는 실제 빌딩 시나리오를 나타냅니다. 이러한 구성 요소는 Azure Digital Twins 인스턴스에 디지털로 표시되며, 이 인스턴스는 IoT Hub, Event Grid 및 2개의 Azure 함수에 연결하여 데이터 이동을 가능하게 합니다.

다음은 전체 시나리오를 나타내는 다이어그램입니다.

먼저 Azure Digital Twins 인스턴스(다이어그램의 섹션 A)를 만들고, 디지털 트윈(화살표 B)으로 디바이스 원격 측정 데이터 흐름을 설정한 다음, 트윈 그래프를 통한 데이터 전파(화살표 C)를 설정합니다.

Diagram of the full building scenario, which shows the data flowing from a device into and out of Azure Digital Twins through various Azure services.

이 시나리오를 진행하기 위해 이전에 다운로드한 미리 작성된 샘플 앱의 구성 요소와 상호 작용합니다.

다음은 빌딩 시나리오 AdtSampleApp 샘플 앱에서 구현하는 구성 요소입니다.

  • 디바이스 인증
  • .NET(C#) SDK 사용 예(CommandLoop.cs에 있음)
  • Azure Digital Twins API를 호출하는 콘솔 인터페이스
  • SampleClientApp - 샘플 Azure Digital Twins 솔루션
  • SampleFunctionsApp - IoT Hub 및 Azure Digital Twins 이벤트에서 디바이스 원격 분석을 기준으로 Azure Digital Twins 그래프를 업데이트하는 Azure Functions 앱

미리 만든 트윈 그래프 인스턴스화

먼저 샘플 프로젝트의 AdtSampleApp 솔루션을 사용하여 엔드투엔드 시나리오(섹션 A)의 Azure Digital Twins 부분을 빌드합니다.

Diagram of an excerpt from the full building scenario diagram highlighting the Azure Digital Twins instance section.

로컬 콘솔 창을 열고, digital-twins-samples-main\AdtSampleApp\SampleClientApp 폴더로 이동합니다. 다음 dotnet 명령을 사용하여 SampleClientApp 프로젝트를 실행합니다.

dotnet run

프로젝트에서 실행을 시작하고, 인증을 수행하고, 명령을 기다립니다. 이 콘솔에서 다음 명령을 실행하여 샘플 Azure Digital Twins 솔루션을 인스턴스화합니다.

Important

이 명령을 실행하면 Azure Digital Twins 인스턴스에 이미 있는 디지털 트윈과 관계가 삭제되고 샘플 시나리오의 트윈과 관계로 대체됩니다.

SetupBuildingScenario

Azure Digital Twins에서 이름이 각각 floor1, room21, thermostat67인 층, 방, 온도 센서, 이렇게 3개의 디지털 트윈이 만들어지고 연결됨에 따라 일련의 확인 메시지가 출력됩니다. 이러한 디지털 트윈은 실제 환경에 존재하는 엔터티를 나타냅니다.

이들 엔터티는 관계를 통해 다음과 같은 트윈 그래프에 연결됩니다. 트윈 그래프는 엔터티가 서로 상호 작용하고 관련되는 방식을 포함하여 환경 전체를 나타냅니다.

Diagram showing that floor1 contains room21, and room21 contains thermostat67.

포함된 모든 디지털 트윈에 대해 연결된 Azure Digital Twins 인스턴스를 쿼리하는 다음 명령을 실행하여 만들어진 트윈을 확인할 수 있습니다.

Query

이제 프로젝트 실행을 중지할 수 있습니다. 하지만 자습서의 뒷부분에서 이 앱을 다시 사용하므로 이 위치에서 콘솔 창을 열어 둡니다.

샘플 함수 앱 설정

다음 단계는 이 자습서 전체에서 데이터를 처리하는 데 사용할 Azure Functions 앱을 설정하는 것입니다. 함수 앱인 SampleFunctionsApp에는 2개의 함수가 들어 있습니다.

  • ProcessHubToDTEvents: 들어오는 IoT Hub 데이터를 처리하고 그에 따라 Azure Digital Twins를 업데이트합니다.
  • ProcessDTRoutedData: 디지털 트윈의 데이터를 처리하고 그에 따라 Azure Digital Twins의 부모 트윈을 업데이트합니다.

이 섹션에서는 미리 작성된 함수 앱을 게시하고 Microsoft Entra ID를 할당하여 함수 앱이 Azure Digital Twins에 액세스할 수 있는지 확인합니다.

함수 앱은 digital-twins-samples-기본\AdtSampleApp\SampleFunctionsApp 폴더에 있는 다운로드한 샘플 프로젝트의 일부입니다.

앱 게시

함수 앱을 Azure에 게시하려면 스토리지 계정을 만든 다음, Azure에서 함수 앱을 만들고, 마지막으로 함수를 Azure 함수 앱에 게시해야 합니다. 이 섹션에서는 Azure CLI를 사용하여 이러한 작업을 완료합니다. 각 명령에서 꺾쇠 괄호 안의 자리 표시자를 사용자 고유의 리소스에 대한 세부 정보로 바꿉니다.

  1. 다음 명령을 입력하여 Azure Storage 계정을 만듭니다.

    az storage account create --name <name-for-new-storage-account> --location <location> --resource-group <resource-group> --sku Standard_LRS
    
  2. 다음 명령을 실행하여 Azure 함수 앱을 만듭니다.

    az functionapp create --name <name-for-new-function-app> --storage-account <name-of-storage-account-from-previous-step> --functions-version 4 --consumption-plan-location <location> --runtime dotnet-isolated --resource-group <resource-group>
    
  3. 다음으로 함수를 압축하고 새 Azure 함수 앱에 게시합니다.

    1. 컴퓨터에서 콘솔 창을 열고, 다운로드한 샘플 프로젝트 내의 digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp 폴더로 이동합니다.

    2. 콘솔에서 다음 명령을 실행하여 프로젝트를 로컬로 게시합니다.

      dotnet publish -c Release -o publish
      

      이 명령은 프로젝트를 digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\publish 디렉터리에 게시합니다.

    3. 원하는 방법을 사용하여 digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\publish 디렉터리에 내부에 있는 게시된 파일의 zip을 만듭니다. 압축된 폴더의 이름을 publish.zip으로 지정합니다.

      Important

      압축된 폴더에 게시 폴더 자체에 대한 추가 계층이 포함되어 있지 않은지 확인합니다. 게시 폴더 내에 있던 내용만 포함해야 합니다.

      다음은 zip 콘텐츠의 모양에 대한 이미지입니다(.NET 버전에 따라 변경될 수 있음).

      Screenshot of File Explorer in Windows showing the contents of the publish zip folder.

    이제 프로젝트를 준비하는 데 사용한 로컬 콘솔 창을 닫을 수 있습니다. 마지막 단계는 Azure CLI에서 수행됩니다.

  4. Azure CLI에서 다음 명령을 실행하여 게시된 함수 및 압축된 함수를 Azure 함수 앱에 배포합니다.

    az functionapp deployment source config-zip --resource-group <resource-group> --name <name-of-your-function-app> --src "<full-path-to-publish.zip>"
    

    Azure CLI를 로컬로 사용하는 경우 머신의 해당 경로를 사용하여 컴퓨터의 ZIP 파일에 직접 액세스할 수 있습니다.

    Azure Cloud Shell을 사용하는 경우 명령을 실행하기 전에 이 단추를 사용하여 ZIP 파일을 Cloud Shell에 업로드합니다.

    Screenshot of the Azure Cloud Shell highlighting how to upload files.

    이 경우 파일은 Cloud Shell 스토리지의 루트 디렉터리에 업로드되므로 명령의 --src 매개 변수에 대해 해당 파일을 이름으로 직접 참조할 수 있습니다(예: --src publish.zip).

    배포가 성공하면 상태 코드 202를 사용하여 응답하고 새 함수의 세부 정보를 포함하는 JSON 개체를 출력합니다. 결과에서 이 필드를 검색하여 배포가 성공적으로 수행되었는지 확인할 수 있습니다.

    "provisioningState": "Succeeded",
    

이제 함수가 Azure의 함수 앱에 게시됩니다. 다음 CLI 명령을 사용하여 두 함수가 성공적으로 게시되었는지 확인할 수 있습니다. 각 명령에는 리소스 그룹에 대한 자리 표시자와 함수 앱의 이름이 있습니다. 명령은 게시된 ProcessDTRoutedDataProcessHubToDTEvents 함수에 대한 정보를 출력합니다.

az functionapp function show --resource-group <your-resource-group> --name <your-function-app> --function-name ProcessDTRoutedData
az functionapp function show --resource-group <your-resource-group> --name <your-function-app> --function-name ProcessHubToDTEvents

그러면 함수 앱에 Azure Digital Twins 인스턴스에 액세스하는 데 적합한 권한이 있어야 합니다. 이 액세스 권한은 다음 섹션에서 구성합니다.

함수 앱에 대한 권한 구성

함수 앱이 Azure Digital Twins 인스턴스에 액세스하도록 하려면 두 가지 설정을 지정해야 합니다. 둘 다 Azure CLI를 사용하여 수행할 수 있습니다.

액세스 역할 할당

첫 번째 설정은 Azure Digital Twins 인스턴스의 Azure Digital Twins 데이터 소유자 역할을 함수 앱에 부여합니다. 이 역할은 인스턴스에서 여러 데이터 평면 활동을 수행하려는 모든 사용자 또는 함수에 필요합니다. 보안 및 역할 할당에 대해 Azure Digital Twins 솔루션 보안에서 자세히 알아보세요.

  1. 다음 명령을 사용하여 함수에 대한 시스템 할당 ID를 만듭니다. 출력에는 만들어진 ID의 세부 정보가 표시됩니다. 다음 단계에서 사용할 수 있도록 출력의 principalId 필드를 적어 둡니다.

    az functionapp identity assign --resource-group <your-resource-group> --name <your-function-app-name>
    
  2. 다음 명령의 principalId 값을 사용하여 함수 앱의 ID를 Azure Digital Twins 인스턴스의 Azure Digital Twins 데이터 소유자 역할에 할당합니다.

    az dt role-assignment create --resource-group <your-resource-group> --dt-name <your-Azure-Digital-Twins-instance> --assignee "<principal-ID>" --role "Azure Digital Twins Data Owner"
    

이 명령을 실행하면 사용자가 만든 역할 할당에 대한 정보가 출력됩니다. 이제 함수 앱에는 Azure Digital Twins 인스턴스의 데이터에 액세스할 수 있는 권한이 있습니다.

애플리케이션 설정 구성

두 번째 설정은 Azure Digital Twins 인스턴스의 URL을 사용하여 함수에 대한 환경 변수를 만듭니다. 함수 코드는 이 변수의 값을 사용하여 인스턴스를 참조합니다. 환경 변수에 대한 자세한 내용은 함수 앱 관리를 참조하세요.

아래 명령을 실행하여 자리 표시자를 리소스 세부 정보로 채웁니다.

az functionapp config appsettings set --resource-group <your-resource-group> --name <your-function-app-name> --settings "ADT_SERVICE_URL=https://<your-Azure-Digital-Twins-instance-host-name>"

Azure 함수에 대한 설정 목록이 출력됩니다. 여기에는 이제 ADT_SERVICE_URL이라는 항목을 포함합니다.

IoT Hub 디바이스에서 시뮬레이션된 원격 분석 처리

Azure Digital Twins 그래프는 실제 디바이스의 원격 분석에 의해 구동됩니다.

이 단계에서는 IoT Hub에 등록된 시뮬레이션된 자동 온도 조절기 디바이스를 Azure Digital Twins에서 이를 나타내는 디지털 트윈에 연결합니다. 시뮬레이션된 디바이스가 원격 분석을 내보내면 디지털 트윈에서 해당 업데이트를 트리거하는 ProcessHubToDTEvents Azure 함수를 통해 데이터가 전달됩니다. 이러한 방식으로 디지털 트윈은 실제 디바이스의 데이터를 사용하여 최신 상태로 유지됩니다. Azure Digital Twins에서 이벤트 데이터를 한 곳에서 다른 곳으로 전달하는 프로세스를 라우팅 이벤트라고 합니다.

시뮬레이션된 원격 분석 처리는 엔드투엔드 시나리오(화살표 B)의 이 부분에서 발생합니다.

Diagram of an excerpt from the full building scenario diagram highlighting the section that shows elements before Azure Digital Twins.

다음은 이 디바이스 연결 설정을 위해 완료해야 하는 작업입니다.

  1. 시뮬레이션된 디바이스를 관리할 IoT 허브 만들기
  2. 이벤트 구독을 설정하여 적절한 Azure 함수에 IoT 허브 연결
  3. IoT 허브에 시뮬레이션된 디바이스 등록
  4. 시뮬레이션 디바이스 실행 및 원격 분석 생성
  5. Azure Digital Twins를 쿼리하여 라이브 결과 보기

IoT Hub 인스턴스 만들기

Azure Digital Twins는 디바이스와 해당 데이터를 관리하는 Azure 서비스인 IoT Hub와 함께 작동하도록 설계되었습니다. 이 단계에서는 이 자습서의 샘플 디바이스를 관리할 IoT 허브를 설정합니다.

Azure CLI에서 다음 명령을 사용하여 새 IoT 허브를 만듭니다.

az iot hub create --name <name-for-your-IoT-hub> --resource-group <your-resource-group> --sku S1

이 명령을 실행하면 만들어진 IoT 허브에 대한 정보가 출력됩니다.

IoT 허브에 지정한 이름을 저장합니다. 나중에 필요합니다.

Azure 함수에 IoT 허브 연결

그런 다음, 데이터가 Azure Digital Twins를 업데이트하는 함수를 통해 IoT Hub의 디바이스에서 흐를 수 있게 앞에서 게시한 함수 앱의 ProcessHubToDTEvents Azure 함수에 IoT 허브를 연결합니다.

이렇게 하려면 Azure 함수를 엔드포인트로 사용하여 IoT Hub에서 이벤트 구독을 만듭니다. 그러면 IoT Hub에서 발생하는 이벤트에 함수가 "구독"됩니다.

다음 CLI 명령을 사용하여 이벤트 구독을 만듭니다. 이벤트 구독의 이름을 입력할 자리 표시자가 있으며 구독 ID, 리소스 그룹, IoT 허브 이름 및 함수 앱의 이름을 입력할 수 있는 자리 표시자도 있습니다.

az eventgrid event-subscription create --name <name-for-hub-event-subscription> --event-delivery-schema eventgridschema --source-resource-id /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Devices/IotHubs/<your-IoT-hub> --included-event-types Microsoft.Devices.DeviceTelemetry --endpoint-type azurefunction --endpoint /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Web/sites/<your-function-app>/functions/ProcessHubToDTEvents

출력에는 생성된 이벤트 구독에 대한 정보가 표시됩니다. 결과의 provisioningState 값을 확인하여 작업이 성공적으로 완료되었는지 확인할 수 있습니다.

"provisioningState": "Succeeded",

명령에서 리소스 공급자 오류를 반환하는 경우 Microsoft.EventGrid를 리소스 공급자로 구독에 추가합니다. 이 작업은 리소스 공급자 등록의 지침에 따라 Azure Portal에서 수행할 수 있습니다.

IoT Hub에 시뮬레이션된 디바이스 등록

이 섹션에서는 ID thermostat67을 사용하여 IoT Hub에서 디바이스 표현을 만듭니다. 시뮬레이션된 디바이스는 원격 분석 이벤트가 디바이스에서 IoT Hub로 이동하는 방식인 이 표현에 연결됩니다. IoT 허브는 이전 단계에서 구독한 Azure 함수가 수신 대기하면서 이벤트를 선택하고 처리를 계속하는 곳입니다.

Azure CLI에서 다음 명령을 사용하여 디바이스를 IoT Hub에 만듭니다.

az iot hub device-identity create --device-id thermostat67 --hub-name <your-IoT-hub-name> --resource-group <your-resource-group>

만든 디바이스에 대한 정보가 출력됩니다.

시뮬레이션 구성 및 실행

다음으로, IoT Hub 인스턴스에 데이터를 보내도록 디바이스 시뮬레이터를 구성합니다.

먼저 다음 명령을 사용하여 IoT 허브 연결 문자열을 가져옵니다. 연결 문자열 값은 HostName=로 시작합니다.

az iot hub connection-string show --hub-name <your-IoT-hub-name>

그리고 다음 명령을 사용하여 디바이스 연결 문자열을 가져옵니다.

az iot hub device-identity connection-string show --device-id thermostat67 --hub-name <your-IoT-hub-name>

다음으로 시뮬레이터를 이 IoT 허브와 IoT 허브 디바이스에 연결하기 위해 이러한 값을 로컬 프로젝트의 디바이스 시뮬레이터 코드에 삽입합니다.

로컬 컴퓨터에서 다운로드한 샘플 폴더, digital-twins-samples-main\DeviceSimulator\DeviceSimulator 폴더로 차례로 이동합니다. 편집을 위해 AzureIoTHub.cs 파일을 엽니다. 다음 연결 문자열 값을 위에서 수집한 값으로 변경합니다.

private const string iotHubConnectionString = "<your-hub-connection-string>";
//...
private const string deviceConnectionString = "<your-device-connection-string>";

파일을 저장합니다.

이제 설정한 데이터 시뮬레이션의 결과를 보려면 새 로컬 콘솔 창을 열고 digital-twins-samples-main\DeviceSimulator\DeviceSimulator로 이동합니다.

참고 항목

이제 2개의 콘솔 창이 열려 있습니다. 하나는 DeviceSimulator\DeviceSimulator 폴더에 열려 있는 창이고, 다른 하나는 여전히 AdtSampleApp\SampleClientApp 폴더에 열려 있는 창입니다.

다음 dotnet 명령을 사용하여 디바이스 시뮬레이터 프로젝트를 실행합니다.

dotnet run

프로젝트에서 실행을 시작하고, 시뮬레이션된 온도 원격 분석 메시지를 표시하기 시작합니다. 이 메시지는 IoT Hub에 전송되며, 여기에서 Azure 함수에 의해 선택되고 처리됩니다.

Screenshot of the console output of the device simulator showing temperature telemetry being sent.

이 콘솔에서 다른 작업을 수행할 필요는 없지만 다음 단계를 완료하는 동안 콘솔을 실행 상태로 둡니다.

Azure Digital Twins에서 결과 보기

이전에 게시한 ProcessHubToDTEvents 함수는 IoT Hub 데이터를 수신 대기하고 Azure Digital Twins API를 호출하여 thermostat67 트윈의 Temperature 속성을 업데이트합니다.

Azure Digital Twins 쪽에서 데이터를 보려면 AdtSampleApp\SampleClientApp 폴더에 열려 있는 다른 콘솔 창으로 전환합니다. dotnet run을 사용하여 SampleClientApp 프로젝트를 실행합니다.

dotnet run

프로젝트가 실행되고 명령을 수락하면 다음 명령을 실행하여 thermostat67 디지털 트윈에서 보고하는 온도를 가져옵니다.

ObserveProperties thermostat67 Temperature

2초마다 Azure Digital Twins 인스턴스에서 라이브 업데이트된 온도가 콘솔에 기록되는 것을 확인할 수 있습니다. 데이터 시뮬레이터에서 생성하는 값을 반영해야 합니다(콘솔 창을 나란히 배치하여 값이 조정되는지 확인할 수 있음).

참고 항목

디바이스의 데이터가 쌍으로 전파되는 데 몇 초 정도 걸릴 수 있습니다. 처음 몇 개의 온도 판독값은 데이터가 도착할 때까지 0으로 표시될 수 있습니다.

Screenshot of the console output showing log of temperature messages from digital twin thermostat67.

라이브 온도 로깅을 성공적으로 수행하고 있다고 확인되면 두 프로젝트의 실행을 모두 중지할 수 있습니다. 자습서의 뒷부분에서 다시 사용하므로 콘솔 창을 열어 두세요.

그래프를 통해 Azure Digital Twins 이벤트 전파

지금까지 이 자습서에서 외부 디바이스 데이터에서 Azure Digital Twins를 업데이트하는 방법을 살펴보았습니다. 다음으로, 한 디지털 트윈의 변경 내용이 Azure Digital Twins 그래프를 통해 어떻게 전파 될 수 있는지 즉, 서비스 내부 데이터에서 트윈을 업데이트하는 방법을 살펴보겠습니다.

이를 위해 ProcessDTRoutedData Azure 함수를 사용하여 연결된 Thermostat 트윈이 업데이트될 때 Room 트윈을 업데이트합니다. 이 업데이트 기능은 엔드투엔드 시나리오의 다음 부분(화살표 C)에서 발생합니다.

Diagram of an excerpt from the full building scenario diagram highlighting the section that shows the elements after Azure Digital Twins.

다음은 이 데이터 흐름 설정을 위해 완료해야 하는 작업입니다.

  1. Azure 서비스 간에 데이터를 이동할 수 있도록 Event Grid 토픽을 만듭니다.
  2. Azure Digital Twins에서 인스턴스를 Event Grid 토픽에 연결하는 엔드포인트를 만듭니다.
  3. Azure Digital Twins 내에 엔드포인트로 트윈 속성 변경 이벤트를 보내는 경로 설정
  4. 엔드포인트에서 Event Grid 토픽을 수신 대기하고, 여기에 전송되는 트윈 속성 변경 이벤트를 받고, 이에 따라 그래프의 다른 트윈을 업데이트하는 Azure 함수를 설정합니다.

Event Grid 토픽 만들기

Event Grid는 Azure 서비스에서 Azure 내의 다른 위치로 이벤트를 라우팅하고 전송하는 데 도움이 되는 Azure 서비스입니다. Event Grid 토픽을 만들어 원본에서 특정 이벤트를 수집할 수 있고, 그러면 구독자가 토픽에서 수신 대기하여 이벤트가 올 때 해당 이벤트를 받을 수 있습니다.

Azure CLI에서 다음 명령을 실행하여 Event Grid 토픽을 만듭니다.

az eventgrid topic create --resource-group <your-resource-group> --name <name-for-your-event-grid-topic> --location <region>

이 명령을 실행하면 사용자가 만든 Event Grid 토픽에 대한 정보가 출력됩니다. 나중에 사용되게 되므로 Event Grid 토픽에 지정한 이름을 저장합니다.

엔드포인트 만들기

다음으로, 인스턴스를 Event Grid 토픽에 연결하는 Azure Digital Twins에 Event Grid 엔드포인트를 만듭니다. 아래 명령을 사용하여 필요에 따라 이전 단계의 Event Grid 토픽 및 다른 자리 표시자 필드의 이름을 입력합니다.

az dt endpoint create eventgrid --dt-name <Azure-Digital-Twins-instance> --eventgrid-resource-group <your-resource-group> --eventgrid-topic <your-event-grid-topic> --endpoint-name <name-for-your-Azure-Digital-Twins-endpoint>

이 명령을 실행하면 만든 엔드포인트에 대한 정보가 출력됩니다.

출력에서 provisioningState 필드를 찾아 해당 값이 "성공"인지 확인합니다.

Screenshot of the result of the endpoint query in the Cloud Shell of the Azure portal, showing the endpoint with a provisioningState of Succeeded.

"프로비저닝"을 나타낼 수도 있습니다. 즉, 엔드포인트가 아직 생성되고 있음을 의미합니다. 이 경우 몇 초 정도 기다렸다가 다음 명령을 실행하여 엔드포인트의 상태를 확인합니다. provisioningState에 "성공이" 표시될 때까지 반복합니다.

az dt endpoint show --dt-name <your-Azure-Digital-Twins-instance> --endpoint-name <your-Azure-Digital-Twins-endpoint> 

나중에 사용하므로 엔드포인트의 이름을 저장합니다.

경로 만들기

그런 다음, 만들었던 Event Grid 엔드포인트에 이벤트를 보내는 Azure Digital Twins 경로를 만듭니다.

다음 CLI 명령을 사용하여 필요에 따라 이전 단계의 엔드포인트 및 다른 자리 표시자 필드의 이름을 입력합니다. 이 명령은 트윈 그래프에서 발생하는 모든 이벤트를 전달합니다.

필터를 사용하여 원하는 경우 이벤트를 특정 이벤트로만 제한할 수 있습니다.

az dt route create --dt-name <your-Azure-Digital-Twins-instance> --endpoint-name <your-Azure-Digital-Twins-endpoint> --route-name <name-for-your-Azure-Digital-Twins-route>

이 명령을 실행하면 만든 경로에 대한 일부 정보가 출력됩니다.

참고 항목

엔드포인트(이전 단계에서)는 프로비저닝을 완료해야 해당 엔드포인트를 사용하는 이벤트 경로를 설정할 수 있습니다. 엔드포인트가 준비되지 않았기 때문에 경로를 만들지 못한 경우 몇 분 정도 기다린 다음, 다시 시도하세요.

Azure 함수 연결

그런 다음으로, ProcessDTRoutedData Azure 함수를 이전에 만든 Event Grid 토픽에 구독합니다. 그러면 원격 분석 데이터가 thermostat67 트윈에서 Event Grid 토픽을 통해 함수로 흐를 수 있습니다. 이에 따라 함수는 Azure Digital Twins로 돌아가서 room21 트윈을 업데이트합니다.

이렇게 하려면 데이터를 이전에 만든 Event Grid 토픽에서 ProcessDTRoutedData Azure 함수로 보내는 Event Grid 구독을 만듭니다.

다음 CLI 명령을 사용하여 이벤트 구독을 만듭니다. 이 이벤트 구독에 대한 이름을 입력하기 위한 자리 표시자가 있고, 구독 ID, 리소스 그룹, Event Grid 토픽 이름 및 함수 앱 이름을 입력하기 위한 자리 표시자도 있습니다.

az eventgrid event-subscription create --name <name-for-topic-event-subscription> --event-delivery-schema eventgridschema --source-resource-id /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.EventGrid/topics/<your-event-grid-topic> --endpoint-type azurefunction --endpoint /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Web/sites/<your-function-app>/functions/ProcessDTRoutedData

시뮬레이션을 실행하고 결과를 확인합니다.

이제 이벤트가 시뮬레이션된 디바이스에서 Azure Digital Twins 및 Azure Digital Twins 그래프로 흐르고 트윈을 적절하게 업데이트할 수 있습니다. 이 섹션에서는 디바이스 시뮬레이터를 다시 실행하여 설정한 전체 이벤트 흐름을 시작하고 Azure Digital Twins를 쿼리하여 라이브 결과를 확인합니다.

DeviceSimulator\DeviceSimulator 폴더에 열려 있는 콘솔 창으로 이동하고, dotnet run을 사용하여 디바이스 시뮬레이터 프로젝트를 실행합니다.

디바이스 시뮬레이터를 처음 실행했을 때와 마찬가지로 프로젝트에서 실행을 시작하고 시뮬레이션된 온도 원격 분석 메시지를 표시합니다. 이러한 이벤트는 이전에 설정한 흐름을 통과하여 thermostat67 트윈을 업데이트한 다음, 최근에 설정한 흐름을 통과하여 그에 맞게 room21 트윈을 업데이트합니다.

Screenshot of the console output of the device simulator showing temperature telemetry being sent.

이 콘솔에서 다른 작업을 수행할 필요는 없지만 다음 단계를 완료하는 동안 콘솔을 실행 상태로 둡니다.

Azure Digital Twins 쪽에서 데이터를 보려면 AdtSampleApp\SampleClientApp 폴더에 열려 있는 다른 콘솔 창으로 이동하고, dotnet run을 사용하여 SampleClientApp 프로젝트를 실행합니다.

프로젝트가 실행되고 명령을 수락하면 다음 명령을 실행하여 thermostat67 디지털 트윈 및 room21 디지털 트윈 모두에서 보고하는 온도를 가져옵니다.

ObserveProperties thermostat67 Temperature room21 Temperature

2초마다 Azure Digital Twins 인스턴스에서 라이브 업데이트된 온도가 콘솔에 기록되는 것을 확인할 수 있습니다. thermostat67의 업데이트 내용에 맞게 room21의 온도가 업데이트되고 있음을 확인합니다.

Screenshot of the console output showing a log of temperature messages, from a thermostat and a room.

인스턴스에서 라이브 온도 로깅이 성공적으로 수행되는 것을 확인한 후에는 두 프로젝트의 실행을 모두 중지할 수 있습니다. 이제 자습서가 완료되었으므로 두 콘솔 창을 모두 닫을 수도 있습니다.

검토

이 자습서에서 빌드한 시나리오에 대한 검토는 다음과 같습니다.

  1. Azure Digital Twins 인스턴스는 층, 방 및 자동 온도 조절기를 디지털 방식으로 표시합니다(아래 다이어그램에서섹션 A로 표시됨).
  2. 시뮬레이션된 디바이스 원격 분석이 IoT Hub에 전송되며, 여기에서 ProcessHubToDTEvents Azure 함수가 원격 분석 이벤트를 수신 대기합니다. ProcessHubToDTEvents Azure 함수는 이러한 이벤트의 정보를 사용하여 thermostat67에 Temperature 속성을 설정합니다(다이어그램의 화살표 B).
  3. Azure Digital Twins의 속성 변경 이벤트는 ProcessDTRoutedData Azure 함수에서 이벤트를 수신 대기하는 Event Grid 토픽으로 라우팅됩니다. ProcessDTRoutedData Azure 함수는 이러한 이벤트의 정보를 사용하여 room21에 Temperature 속성을 설정합니다(다이어그램의 화살표 C).

Diagram from the beginning of the article showing the full building scenario.

리소스 정리

이 자습서를 완료한 후 다음에 수행하려는 작업에 따라 제거할 리소스를 선택할 수 있습니다.

  • 이 자습서에서 만든 리소스가 필요하지 않으면 az group delete CLI 명령을 사용하여 이 문서의 Azure Digital Twins 인스턴스 및 기타 모든 리소스를 삭제할 수 있습니다. 이는 리소스 그룹의 모든 Azure 리소스와 리소스 그룹 자체를 삭제합니다.

    Important

    리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 그 안에 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 해야 합니다.

    Azure Cloud Shell 또는 로컬 CLI 창을 열고, 다음 명령을 실행하여 리소스 그룹과 이 그룹에 포함된 모든 항목을 삭제합니다.

    az group delete --name <your-resource-group>
    
  • 이 문서에서 설정한 Azure Digital Twines 인스턴스를 계속 사용하지만 해당 모델, 트윈 및 관계의 일부 또는 전부를 지우려면 az dt CLI 명령을 사용하여 제거하려는 요소를 삭제할 수 있습니다.

    이 옵션은 이 자습서에서 만든 다른 Azure 리소스(IoT Hub, Azure Functions 앱 등)를 제거하지 않습니다. 각 리소스 유형에 적절한 dt 명령을 사용하여 이를 개별적으로 삭제할 수 있습니다.

로컬 머신에서 프로젝트 폴더를 삭제해야 할 수도 있습니다.

다음 단계

이 자습서에서는 라이브 디바이스 데이터로 구동되는 Azure Digital Twins를 보여주는 엔드투엔드 시나리오를 만들었습니다.

다음으로, 개념 설명서를 통해 자습서에서 작업한 요소에 대해 자세히 알아보세요.