다음을 통해 공유


빠른 시작: Azure CLI를 사용하여 단일 가상 IoT 디바이스 관리

중요하다

이 문서는 더 이상 업데이트되지 않으며 제거됩니다. OSConfig 시나리오를 시도하는 up-to-date 지침은 다음과 같습니다.

  1. 먼저 5분 OSConfig(Azure IoT 포함) 랩 환경 만들기의 단계를 따릅니다.
  2. 다음으로, 프로비전하고 관리할 수 있는 시나리오를 시도해 보세요.

이 빠른 시작의 목표는 IoT용 OSConfig를 통해 IoT/Edge 디바이스의 원격 관리를 숙지하는 것입니다. 1부에서는 가상 IoT 디바이스 역할을 하는 VM 만들기를 포함하여 테스트 환경을 설정합니다. 2부에서는 다음과 같은 여러 디바이스 관리 작업을 수행합니다.

  • 디바이스의 IP 주소를 원격으로 검색
  • 디바이스의 관점에서 엔드포인트 연결을 원격으로 테스트
  • 디바이스를 원격으로 다시 부팅

이 빠른 시작에서는 단일 예제 디바이스를 사용합니다. OSConfig를 대규모로 사용하려면 개별 Azure CLI 명령이 아닌 컨트롤 플레인으로 IoT Hub 디바이스 관리 서비스를 사용합니다.

필수 구성 요소

  1. 활성 구독이 있는 Azure 계정이 필요합니다. 필요한 경우 무료계정을 만들 있습니다.
  2. Azure Cloud Shellbash 환경을 사용합니다.
    • 참고: Azure Cloud Shell을 처음 사용하는 경우 포털에서 계속하기 전에 일부 스토리지 공간을 만드는 방법을 안내합니다. 이것은 정상입니다.
    • 참고: Azure Cloud Shell에는 이미 최신 Azure CLI 도구가 있으며 Azure 계정에 자동으로 로그인됩니다. 클라우드 셸 대신 고유한 환경을 사용하려는 경우 고유한 환경에서 Azure CLI 설치하고 구성할 있습니다.
  3. 다음 명령을 사용하여 추가할 수 있는 Azure CLI용 Azure IOT 확장이 필요합니다.
az extension add --name azure-iot

az extension add --name azure-iot 보여 주는 스크린샷

필수 구성 요소 확인

  • Azure Cloud Shell(또는 대체 bash 환경)에서 Azure CLI가 사용하려는 Azure 계정 및 구독 컨텍스트에 로그인되어 있는지 확인합니다.
az account show

명령의 스크린샷: az account show

다른 계정으로 로그인하거나 구독을 변경해야 하는 경우 az loginaz account set 명령을 사용할 수 있습니다.

빠른 시작 환경 개요

컨텍스트에 대한 다이어그램, Azure CLI가 IoT Hub 및 VM을 만드는 데 사용되고 OSConfig 사용하는 데 사용됨을 보여 줍니다.

1부: 환경 설정

1.1: Azure IoT 리소스 만들기

1.1.1: IoT Hub의 고유한 이름 정의

"QuickStart12345" 또는 "HelloWorld98765"IoT Hub의 고유한 이름을 구성해야 합니다. 이 이름은 이후 명령에서 반복적으로 사용되므로 다음과 같이 bash 변수에 저장합니다.

# In the following command replace <Your_Made_Up_Name_Here> 
# with your own preferred hub name, for example:
# MY_IOT_HUB_NAME="MyQuickStart54321"
MY_IOT_HUB_NAME="<Your_Made_Up_Name_Here>"

변수 MY_IOT_HUB_NAME IOT Hub에 대해 선택한 고유 이름을 할당하는 bash 예제의 스크린샷

1.1.2: 리소스 그룹 및 IoT Hub 만들기

az group create --resource-group QuickstartOSConfig --location westus
az iot hub create --resource-group QuickstartOSConfig --name "$MY_IOT_HUB_NAME" --query id

az group create 명령 스크린샷

az iot hub create 명령 스크린샷

이름을 사용할 수 없다는 오류와 함께 az iot hub create... 명령이 실패하면 선택한 이름이 Azure의 다른 곳에서 이미 사용 중이었다는 의미입니다. 이 문제를 해결하려면 위의 MY_IOT_HUB_NAME="<Your_Made_Up_Name_Here>" 단계를 새롭고 고유한 이름으로 반복한 다음 az iot hub create ... 명령을 다시 시도합니다.

az iot hub create... 명령을 완료하는 데 몇 분 정도 걸리는 것은 드문 일이 아닙니다.

1.1.3: 디바이스 ID를 만들고 디바이스 연결 문자열 가져오기

az iot hub device-identity create --hub-name "$MY_IOT_HUB_NAME" -d device01 --query deviceId
az iot hub device-identity connection-string show --hub-name "$MY_IOT_HUB_NAME" --device-id device01

예제 az iot 명령 스크린샷

마지막 명령에서 반환된 connectionString 값을 기록해 둡니다(HostName=시작). 이후 단계에서 이 연결 문자열을 사용합니다.

1.2: 가상 IoT 디바이스 역할을 하는 Azure VM 만들기

다음 명령을 사용하여 가상 머신을 만듭니다.

az vm create --resource-group QuickstartOSConfig --name device01 --image Canonical:UbuntuServer:18.04-lts:latest --admin-username azureuser --generate-ssh-keys --query publicIpAddress

az vm create 명령 스크린샷

마지막 명령에서 반환된 IP 주소 기록해 둡니다. 다음 단계에서 이 주소를 사용합니다.

1.3: 가상 IoT 디바이스에 클라이언트 소프트웨어 설치

1.3.1: 가상 디바이스에 대한 터미널 액세스 설정

다음 몇 가지 명령은 방금만든 VM에서 실행해야 합니다. SSH를 사용하여 연결:

# In the following command, replace <public ip address from previous step> with
# the actual IP address. For example:
# ssh azureuser@1.2.3.4
ssh azureuser@<ip address from previous step>

ssh 명령 스크린샷

ssh 클라이언트를 계속하려면 yes 입력해야 할 수 있습니다. 이것은 정상입니다.

계속하기 전에 이제 가상 IoT 디바이스에 연결되어 있는지 확인합니다. 명령 프롬프트가 <your name>@azure:azureuser@device01:. 명령 프롬프트가 azureuser@device01:변경되지 않은 경우 위의 ssh 명령을 다시 실행합니다.

1.3.2: 가상 디바이스에서 aziot-identity-service 설치합니다.

sudo apt-get update
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add
sudo apt-add-repository https://packages.microsoft.com/ubuntu/18.04/multiarch/prod
sudo apt-get update
sudo apt install -y aziot-identity-service

apt 명령 스크린샷

apt 명령 스크린샷 2

1.3.3: 가상 디바이스에서 연결 문자열 적용할 있습니다.

다음 명령을 사용하여 Azure IoT에 인증하도록 디바이스를 구성합니다. 앞에서 얻은 연결 문자열 값을 Azure IoT 리소스만듭니다.

sudo aziotctl config mp --connection-string "<your connection string>"
sudo aziotctl config apply

aziotctl 명령 스크린샷

1.3.4: 가상 디바이스에서 OSConfig 패키지 설치하고 실행 중인지 확인합니다.

sudo apt install -y osconfig
sudo systemctl status osconfig | grep --color=never Active

osconfig sudo apt 설치 -y 스크린샷

1.2.5: SSH 세션 종료

exit

ssh 세션에서 종료하고 클라우드 셸 세션 반환하는 스크린샷

2부: IoT용 OSConfig 사용

당신은 그것을 했다! 이제 환경이 준비되었으므로 OSConfig를 사용하여 IoT Hub를 통해 호스트 수준 구성 및 상태를 가져와서 설정할 수 있습니다. Azure Cloud Shell 또는 컴퓨터에서 다음 Azure CLI 명령을 사용하여 각 예제를 완료합니다.

2.1: 이게 있죠?

먼저 디바이스의 IoT Hub deviceId가져오고 OSConfig가 활성 상태임을 보여 줍니다.

az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,moduleId,connectionState from devices.modules where deviceID='device01' and moduleId='osconfig'"

az iot hub query command 스크린샷

2.2: IoT Hub에서 OSConfig 사용 디바이스에 대한 IP 주소 및 DNS 서버와 같은 디바이스 네트워크 상태 가져오기

관리되는 디바이스에서 네트워크 상태를 보고하는 데는 많은 사용 사례가 있습니다. 예를 들어 로컬 IP 비디오 스트림을 연결하려면 로컬 IP 주소가 필요할 수 있습니다. 마찬가지로 문제 해결에 사용 중인 DNS 서버에 보고하거나 디바이스가 예상 네트워크 인프라를 사용하고 있는지 확인할 수 있습니다. 다음 예제에서는 각 네트워크 어댑터에 할당된 IP 주소 및 DNS 서버를 검색합니다.

az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.reported.Networking.NetworkConfiguration.IpAddresses,properties.reported.Networking.NetworkConfiguration.DnsServers from devices.modules where moduleId='osconfig'"

az iot query(추가) 스크린샷

반환된 IP 정보는 디바이스의 관점에서 ifconfig 실행하거나 디바이스에서 로컬로 ip address 것과 일치합니다. Azure 공용 IP 주소(SSH에 이전에 사용됨)는 NAT가 VM 외부에서 라우팅되므로 여기에 표시되지 않습니다.

2.3: ADHS(Azure Device Health Service) 원격 분석 정책 구성 및 규정 준수 확인

ADHS는 일부 디바이스에 포함된 진단 에이전트입니다. 방금 만든 VM에는 ADHS가 설치되어 있지 않지만 정책을 사전에 예로 설정할 수 있습니다.

첫 번째 명령은 ADHS에 대한 쌍 desired 속성을 2 설정합니다(옵트인을 의미). 두 번째 명령은 디바이스가 정책을 수신하고 적용했는지 확인하기 위해 속성의 원하는(사용자, 관리자가 설정) 및 보고(디바이스에서 보낸) 버전을 비교합니다.

az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"Settings":{"__t":"c","DeviceHealthTelemetryConfiguration":2}}' > /dev/null
az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.desired.Settings.DeviceHealthTelemetryConfiguration AS ADHSLevel_Desired,properties.reported.Settings.DeviceHealthTelemetryConfiguration.value AS ADHSLevel_Reported from devices.modules where moduleId='osconfig'"

az iot query(또 다른 추가 예제) 스크린샷

2.4: 사용자 지정 구성 적용(표준 시간대 예제)

OSConfig의 CommandRunner 기능을 사용하면 디바이스에서 거의 모든 항목을 가져와서 설정할 수 있습니다. 다음은 디바이스의 OS 표준 시간대를 UTC로 설정하는 예제입니다. 실제 위치에 관계없이 엔드포인트에 균일한 표준 시간대를 적용하는 것은 분산 솔루션 전체에서 타임스탬프 처리를 개선하는 일반적인 방법입니다.

다음 Azure CLI 명령은 OSConfig에 timedatectl사용하여 표준 시간대를 설정하고 결과 표준 시간대를 다시 보고하도록 지시합니다.

az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"CommandRunner":{"__t":"c","CommandArguments":{"CommandId":"my_timezone_config", "Action":3, "Arguments": "timedatectl set-timezone UTC; timedatectl | grep zone | tr -d '[:space:]'"}}}' --query "properties.desired.CommandRunner"

az iot hub module-twin update 명령 스크린샷

출력은 트윈에서 원하는 명령을 설정했음을 보여줍니다. 작동하는지 확인하기 위해 추가 단계를 수행합니다. 먼저 디바이스가 명령을 수신하고, 처리하고, 결과를 사용하여 트윈을 업데이트할 시간을 주기 30초 이상 기다립니다.

이전 명령 이후 30초 이상 기다린 후 다음을 사용하여 출력을 검색합니다.

az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.reported.CommandRunner.CommandStatus from devices.modules where moduleId='osconfig'"

az iot query(표준 시간대 예제) 스크린샷

2.5: 디바이스 연결 테스트(ping 예제)

이 예제에서는 ping 함께 CommandRunner 기능을 사용하여 디바이스의 관점에서 네트워크 연결을 테스트합니다.

az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"CommandRunner":{"__t":"c","CommandArguments":{"CommandId":"connectivity_test_1", "Action":3, "Arguments":"ping -c 2 example.com"}}}' --query "properties.desired.CommandRunner"

az iot hub module-twin update 명령(ping 예제) 스크린샷

이전 예제와 마찬가지로 az iot hub module-twin update 출력은 트윈에서 원하는 명령 속성을 설정했음을 보여 하며 두 번째 단계를 사용하여 결과를 검색합니다.

이전 명령 이후 30초 이상 기다렸다가 다음을 사용하여 결과를 검색합니다.

az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.reported.CommandRunner.CommandStatus from devices.modules where moduleId='osconfig'"

az iot query(ping example) 스크린샷

2.6: CommandRunner 미리 정의된 작업을 사용하여 다시 부팅 또는 종료

다음 예제에서는 디바이스를 다시 부팅합니다. 대신 종료하려면 Action: 1 원하는 속성 값의 Action: 2 변경합니다.

az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"CommandRunner":{"__t":"c","CommandArguments":{"CommandId":"my_reboot_command", "Action":1}}}' --query "properties.desired.CommandRunner"

az iot hub module-twin update(재부팅 예제) 스크린샷

리소스 정리

리소스를 유지하지 않으려는 경우 이전에 만든 리소스 그룹을 삭제하여 삭제할 수 있습니다.

az group delete --resource-group QuickstartOSConfig

스크린샷 az group delete

다음 단계

  • 이 가이드에서는 하나의 디바이스만 사용하여 빠르게 시작했습니다. 대규모로 디바이스를 구성하려면 OSConfig와 IoT Hub 디바이스 관리 함께 OSConfig를 사용할 수 있습니다.
  • OSConfig에 대한 자세한 내용은 다음을 참조하세요. OSConfig 설명서.