ジョブのスケジュールとブロードキャスト (Azure CLI)を試してみた

# 試した記事

https://learn.microsoft.com/ja-jp/azure/iot-hub/schedule-jobs-cli

---
# 実行結果

### 2 つの CLI セッションを準備する

* az extension add コマンドを実行し、Azure CLI 用の Microsoft Azure IoT 拡張機能が CLI シェルにインストールする

```bash
$ az extension add --name azure-iot
Default enabled including preview versions for extension installation now. Disabled in May 2024. Use '--allow-preview true' to enable it specifically if needed. Use '--allow-preview false' to install stable version only. 
Extension 'azure-iot' 0.21.5 is already installed.
$
```
---
### デバイスを作成してシミュレートする

* az iot hub device-identity create コマンドを実行し、シミュレートするデバイスのデバイス ID を作成する。

リソースグループを指定しないといけない模様
```bash
$ az iot hub device-identity create --device-id 20240301device --hub-name 20240301-IoThub
Unable to find IoT Hub: 20240301-IoThub in resource group: rg-aml-us-001
$
```
---

実行しているaz cliのドキュメントでリソースグループを指定する方法があるか確認

https://learn.microsoft.com/ja-jp/cli/azure/iot/hub/device-identity?view=azure-cli-latest#az-iot-hub-device-identity-create

```bash
az iot hub device-identity create --device-id
                                  [--am {shared_private_key, x509_ca, x509_thumbprint}]
                                  [--auth-type {key, login}]
                                  [--device-scope]
                                  [--edge-enabled {false, true}]
                                  [--hub-name]
                                  [--login]
                                  [--od]
                                  [--pk]
                                  [--primary-thumbprint]
                                  [--resource-group]
                                  [--secondary-key]
                                  [--secondary-thumbprint]
                                  [--sta {disabled, enabled}]
                                  [--star]
                                  [--valid-days]
```
引数に`--resource-group`があるのでこれを指定して再度実行し、問題なく実行できた。

```bash
$ az iot hub device-identity create --device-id 20240301device --hub-name 20240301-IoThub --resource-group rg-us-001
{
  "authentication": {
    "symmetricKey": {
      "primaryKey": "<見せられないよ>",
      "secondaryKey": "<見せられないよ>"
    },
    "type": "sas",
    "x509Thumbprint": {
      "primaryThumbprint": null,
      "secondaryThumbprint": null
    }
  },
  "capabilities": {
    "iotEdge": false
  },
  "cloudToDeviceMessageCount": 0,
  "connectionState": "Disconnected",
  "connectionStateUpdatedTime": "0001-01-01T00:00:00+00:00",
  "deviceId": "20240301device",
  "deviceScope": null,
  "etag": "OTQ2NDI5Mzg2",
  "generationId": "638448673261732809",
  "lastActivityTime": "0001-01-01T00:00:00+00:00",
  "parentScopes": null,
  "status": "enabled",
  "statusReason": null,
  "statusUpdatedTime": "0001-01-01T00:00:00+00:00"
}
$
```

---
Azure Portalからも確認できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232184/142b4647-4128-faf8-45f3-985cc60ac0a5.png)

---
* az iot device simulate コマンドを実行し、デバイスをシミュレートする。

https://learn.microsoft.com/ja-jp/cli/azure/iot/device?view=azure-cli-latest#az-iot-device-simulate

---
こちらもリソースグループを指定しないとダメそうなので指定して実行すると3秒おきに100回device-to-cloud メッセージを送る。progresssが100になる前に次の実行を行う。

```bash
$ az iot device simulate --device-id 20240301device --hub-name 20240301-IoThub --resource-group rg-us-001 --method-response-code 201 --method-response-payload '{"result":"Direct method successful"}'
This command is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Device simulation in progress: 100%|###########################################| 100/100 [05:34<00:00,  3.34s/it]
$
```

---
### ダイレクト メソッドを呼び出すようにジョブをスケジュールする

意味不明なエラーが発生し、正常に終了しない。

```bash
$ az iot hub job create --hub-name 20240301-IoThub --job-id job01 --res
ource-group rg-us-001 --job-type scheduleDeviceMethod --method-name 20240301Me
thod1 --method-payload 'null' --query-condition "deviceId = '20240301device'"
{'Message': 'ErrorCode:IotHubFormatError;cannot decode job request json format', 'ExceptionMessage': 'Tracking ID:403C7217E18443C4BDD6A68C61C805D4-G2:-TimeStamp:2024-03-02T14:01:10.976283713+00:00'}
```

GWV2になってるのが影響している気がする。

---
#### REST API で実行してみる

https://learn.microsoft.com/ja-jp/rest/api/iothub/service/jobs/create-scheduled-job?view=rest-iothub-service-2020-03-13

認証にはSASトークンを使用

https://learn.microsoft.com/ja-jp/cli/azure/iot/hub?view=azure-cli-latest#az-iot-hub-generate-sas-token

```bash
$ az iot hub generate-sas-token -n 20240301-IoThub --resource-group rg-us-001
[Warning] This output may compromise security by showing the following secrets: sas. Learn more at: https://go.microsoft.com/fwlink/?linkid=2258669
{
  "sas": "<見せられないよ>"
}
```

Postmanを使って実行したが、同じエラーが発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232184/b54b11a5-9f28-7994-5276-047ea3bcada2.png)