Azure Iot Hub의 직접 메소드를 REST API에서 호출

개요



Azure Iot Hub에 등록된 모든 디바이스에 대해 직접 메서드를 실행합니다.

1대만이라면 Azure Portal에서 실행하는 것이 빠르지만, 대수가 많거나 실행 결과를 다른 곳에서 사용하고 싶은 경우 등은 Azure Portal 이외에서 호출하고 싶습니다.

이번에는 다이렉트 메소드를 실행해, 결과를 보존하는 곳까지를 시험해 보았습니다.

직접 메소드 REST API 호출



다이렉트 메소드를 호출하는 방법에 대해서는, 공식 문서로서 정중하게 기재되어 있습니다.
  • IoT Hub에서 직접 메서드 호출 정보 > 예
  • curl -X POST \
      https://iothubname.azure-devices.net/twins/myfirstdevice/methods?api-version=2018-06-30 \
      -H 'Authorization: SharedAccessSignature sr=iothubname.azure-devices.net&sig=x&se=x&skn=iothubowner' \
      -H 'Content-Type: application/json' \
      -d '{
        "methodName": "reboot",
        "responseTimeoutInSeconds": 200,
        "payload": {
            "input1": "someInput",
            "input2": "anotherInput"
        }
    }'
    
    SharedAccessSignature sr=iothubname.azure-devices.net&sig=x&se=x&skn=iothubowner 의 부분은 SAS token 생성을 할 때 자동으로 만들어진다.
  • az iot hub > az iot hub generate-sas-token
  • az iot hub generate-sas-token -n {iothub_name}
    
    {iothub_name}는 적절한 자원 이름으로 다시 씁니다.
    그리고 이것을 Cloud Shell에서 실행하면 ...

    `az iot hub: 'generate-sas-token' is not in the 'az iot hub' command group. See 'az iot hub --help'

    라고 화난다.
    음.

    Azure Cloud Shell에서 generate-sas-token을 사용할 수 있도록 설정



    먼저 Cloud Shell은 Azure 포털에서 > _ 아이콘으로 열립니다.


    Bash에서도 PowerShell에서도 사용하기 쉬운 분을 선택하는 것이 좋다고 생각합니다.


    로그 또는 뭔가를 저장할지 스토리지가 필요할 것 같습니다.
    스토리지 이름은 "고급 설정 표시"에서 설정할 수 있습니다. (이번에는 기본값으로 작성해 보았습니다)


    초기화 처리에 약간의 시간이 필요합니다.

    마찬가지로 오류가 발생하여 곤란한 사람의 해결책을 원 팩합니다.
  • generate-sas-token cannot be used with az iot hub command #7345
  • az extension add --name azure-cli-iot-ext
    

    에러가 나오지 않으면 OK!
    에서 다시 토큰을 발행해 보겠습니다.
    az iot hub generate-sas-token -n a4f2d132-4cc0-4d6e-8737-9bff40ac4729
    

    결국 이런 느낌으로 할 수 있었습니다.


    --du or --duration 참고



    토큰 수명은 기본적으로 3600초입니다.

    --du --duration
    Valid token duration in seconds.
     default value: 3600

    만약, 1시간 지나버리면, unauthorized 라고 화가 되기 때문에, 주의해 주세요.

    준비 완료



    그래서 처음으로 돌아가서 만든 토큰을 사용하면 액세스 할 수 있습니다. (아래)
    curl -X POST \
      https://iothubname.azure-devices.net/twins/myfirstdevice/methods?api-version=2018-06-30 \
      -H 'Authorization: SharedAccessSignature sr=a4f2d132-4cc0-4d6e-8737-9bff40ac4729.azure-devices.net&sig=YM1USuqL5yHj%2B30GDT71xT9H%2FFuEKnjKNKf3TqUslX8%3D&se=1569424734&skn=iothubowner' \
      -H 'Content-Type: application/json' \
      -d '{
        "methodName": "reboot",
        "responseTimeoutInSeconds": 200,
        "payload": {
            "input1": "someInput",
            "input2": "anotherInput"
        }
    }'
    

    덧붙여서 myfirstdevice 의 부분은 디바이스명입니다.

    잡감



    그런 다음 장치 이름 목록을 수동으로 가져와 Bash에서 루프를 돌리면서 결과를 얻습니다.

    하지만, 괜찮지 않기 때문에, 디바이스명의 일람도 자동으로 취득해, sas token도 매번 취득해···라고 사촌까지 자동화할 수 있으면 최고라고 생각하고 있습니다.

    이상.
    봐 주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기