1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Iot HubのダイレクトメソッドをREST APIから呼んでみる

Last updated at Posted at 2019-09-25

概要

Azure Iot Hubに登録された全てのデバイスに対して、ダイレクトメソッドを実行します。

1台だけであれば、Azure Portal上から実行するのが手っ取り早いのですが、台数が多かったり、実行結果を他で使いたい場合などはAzure Portal以外から呼び出したくなります。

今回はダイレクトメソッドを実行し、結果を保存するところまでを試してみました。

ダイレクトメソッドのREST API呼び出し

ダイレクトメソッドを呼び出す方法については、公式ドキュメントとして丁寧に記載されています。

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 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 Portal 上の、> _アイコンで開きます。
image.png

BashでもPowerShellでも使いやすい方を選択するのがいいと思います。
image.png

ログか何かを保存するのか、ストレージが必要になるようです。
ストレージ名とかは「詳細設定の表示」で設定できます。(今回はデフォルトのまま作成してみました)
image.png

初期化処理に少し時間が必要です。

同じようにエラーになって困っていた人の解決策を丸パクります。

az extension add --name azure-cli-iot-ext

エラーが出なければOK!
で、もう一度tokenを発行してみます。

az iot hub generate-sas-token -n a4f2d132-4cc0-4d6e-8737-9bff40ac4729

最終的にはこんな感じでできました。
image.png

--du or --duration に注意

tokenの有効期間はデフォルトで3600秒です。

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

もしも、1時間過ぎちゃうと、unauthorized って怒られることになりますので、ご注意ください。

準備完了

で、冒頭に戻って、作成したtokenを使えば、アクセスできるようになります。(下記)

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も都度取得して・・ってとこまで自動化できれば最高だなって思っています。

以上。
ご覧いただきましてありがとうございました!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?