Amazon Web Services ブログ

AWS IoT Jobs を利用して複数のタイムゾーンをまたいだデバイスメンテナンスを可能にする

はじめに

IoT (Internet of Things) 技術の利点の1つは、デバイスをクラウドに接続し、世界中から簡単にアクセスできることです。この利点によって多くの機会が生まれましたが、デバイスの更新を維持することが大きな課題となっています。複数の地域とタイムゾーンに広がる IoT デバイスのフリートを管理およびメンテナンスすることは、運用上困難です。この課題を解決するのに役立つために、 AWS IoT Jobs は、世界中のデバイスのフリートに対してタイムゾーンをまたいで OTA (Over-the-Air) 更新をプログラムで スケジュール する機能を提供します。

新しい定期的なメンテナンスウィンドウスケジュール設定機能を使用すると、デバイスが展開されている正確なタイムゾーン内の特定の時間帯で、AWS IoT Jobs を実行するようにスケジュールできるようになりました。 たとえば、世界中の工場に土曜日の夜9時から朝6時の間、工場が閉まっている間に週1回のOTA更新を受信する必要があるデバイスがあるとします。 AWS IoT Jobs、動的なモノのグループAWS IoT デバイスシャドウの組み合わせを使用することで、デバイスを報告されたタイムゾーンでグループ化し、週1回の OTA 更新を土曜日の夜9時から朝6時のデバイスのローカル時間でのみ適用することができます。

このブログ投稿では、 AWS IoT Jobs、動的なモノのグループ、デバイスシャドウを使用して OTA 更新スケジューリングソリューションを完全に作成および有効化するための手順について詳しく説明します。

前提条件

このブログ記事を通して進めるには、次のものが必要です:

  1. AWS アカウント
  2. AWS IoT Core 対応リージョンへのアクセス
  3. AWS IoT デバイスマネジメント対応リージョンへのアクセス
  4. AWS CloudShell へのアクセス

ウォークスルー

この投稿のデモンストレーションでは、週に1回の OTA 更新をスケジュール設定します。この更新は、デバイスのローカル時間で午後9時から午前6時の間にのみ実行できます。これを実現するために、2つの AWS IoT 動的なモノのグループを作成します。1つは中部標準時(CST)用、もう1つは太平洋標準時(PST)用で、各グループはデバイスのタイムゾーンに応じてデバイスが自動的に割り当てられます。デバイスのタイムゾーンは、対応する AWS IoT デバイスシャドウによって報告されます。次に、2つの動的なモノのグループそれぞれに対して、2つの AWS IoT ジョブを作成および設定します。各ジョブには、メンテナンスウィンドウを週に1回、午後9時から午前6時の間に繰り返し発生するようスケジュール設定します。以下のイラストは、このソリューションが完全に実装されたときの様子を詳しく示しています。

2つのデバイスが2つの個別のAWS IoT動的なグループに追加されている図。各デバイスには、それらがいるタイムゾーンに基づいて2つの個別のAWS IoTジョブが実行されています。

ステップ 1: AWS IoT 動的なモノのグループを作成する

AWS IoT 動的なモノのグループを作成するには( AWS CloudShell AWS CLI ):

  1. AWS IoT デバイスマネジメントフリートインデックス を有効にするには、update-indexing-configuration コマンドを発行します。
  2. PST タイムゾーンのデバイス用の AWS IoT 動的モノグループを作成するには、create-dynamic-thing-group コマンドを発行します
    aws iot create-dynamic-thing-group --thing-group-name "pstdevices" --query-string "shadow.reported.timezone:PST"
  3. CST タイムゾーンのデバイス用の AWS IoT 動的モノグループを作成するには、create-dynamic-thing-group コマンドを発行します
    aws iot create-dynamic-thing-group --thing-group-name "cstdevices" --query-string "shadow.reported.timezone:CST"

ステップ 2: デバイスのタイムゾーンを設定する

デバイスのタイムゾーンを設定するには(AWS CloudShellAWS CLI):

  1. PST タイムゾーンに配置されたデバイスの AWS IoT thing を create-thing コマンドを発行して作成します。
    aws iot create-thing --thing-name "vibrationdevicepsttimezone"
  2. CST タイムゾーンに配置されたデバイスの AWS IoT thing を create-thing コマンドを発行して作成します。
    aws iot create-thing --thing-name "vibrationdevicecsttimezone"
  3. PST タイムゾーンに配置されたデバイスの AWS IoT Device Shadow を update-thing-shadow コマンドを発行して作成します。
    aws iot-data update-thing-shadow --cli-binary-format raw-in-base64-out --thing-name vibrationdevicepsttimezone --payload '{"state":{"reported":{"timezone":"PST"}}}' "vibrationdevicepsttimezone.txt"
  4. CST タイムゾーンに配置されたデバイスの AWS IoT Device Shadow を update-thing-shadow コマンドを発行して作成します。
    aws iot-data update-thing-shadow --cli-binary-format raw-in-base64-out --thing-name vibrationdevicecsttimezone --payload '{"state":{"reported":{"timezone":"CST"}}}' "vibrationdevicecsttimezone.txt"
  5. PST タイムゾーンに配置されたデバイスのAWS IoT thing が pstdevices という AWS IoT モノの動的グループに追加されたことを list-thing-groups-for-thing コマンドを発行して確認します。
    aws iot list-thing-groups-for-thing --thing-name vibrationdevicepsttimezone

    コマンドの出力は以下のようになります。

    {
        "thingGroups": [
            {
                "groupName": "pstdevices", 
                "groupArn": "arn:aws:iot:us-east-1:<AWSACCOUNTID>:thinggroup/pstdevices"
            }
        ]
    }
  6. CST タイムゾーンに配置されたデバイスのAWS IoT thingが cstdevices という AWS IoT モノの動的グループに追加されたことを list-thing-groups-for-thing コマンドを発行して確認します。
    aws iot list-thing-groups-for-thing --thing-name vibrationdevicecsttimezone

    コマンドの出力は以下のようになります。

    {
        "thingGroups": [
            {
                "groupName": "cstdevices",
                "groupArn": "arn:aws:iot:us-east-1:<AWSACCOUNTID>:thinggroup/cstdevices"
            }
        ]
    }

ステップ 3: AWS IoT Jobs の作成

AWS IoT Jobs の作成方法(コンソール):

    1. AWS IoT コンソールを開きます
    2. 左側のナビゲーションバーの 管理 の下の リモートアクション からジョブ を選択します
    3. ジョブの作成 を選択します
    4. カスタムジョブの作成 を選択します
    5. ジョブ名を pstdevicesiotjob と入力します
    6. このジョブを実行するモノのグループ で、pstdevices を選択します
    7. このデモンストレーションに使用するジョブテンプレートを選択します
    8. 次へを選択します
    9. ジョブの実行タイプで、連続を選択します
    10. 追加の構成の下で、スケジューリングの構成を選択します
    11. ジョブの開始に、今日の日付と現在時刻より1時間後の時刻を入力します
    12. 定期的なメンテナンスウィンドウで、週次を選択します
    13. これらの曜日で、土曜日を選択します
    14. メンテナンスウィンドウの開始時刻に、21:00 (24時間表記で午後9時)を入力します
    15. メンテナンスウィンドウの期間に、9時間0分を入力します (ジョブの実行を午前6時に終了させます)
      コンソールは次のスクリーンショットのようになります:ジョブ開始日は今日の日付で1時間後に設定されています。繰り返しメンテナンスウィンドウは週単位で土曜日に設定されています。メンテナンス開始時刻は21:00で、期間は9時間0分です。
    16. 送信を選択します
    17. ステップ2から15を繰り返し、次の設定を使用します:
      • ジョブ名を cstdevicesiotjob に設定します
      • このジョブを実行するモノのグループcstdevices に設定します
      • ステップ7で使用したものと同じジョブテンプレートを選択します
      • 送信を選択します
    18. ステータスで、両方のジョブがスケジュール済みと表示されていることを確認してください
      コンソールは次のスクリーンショットのようになります:

AWS IoT コンソールのスクリーンショットで、AWS IoT ジョブがスケジュール済みのステータスを表示しています。

各ジョブのステータスは、設定されたメンテナンスウィンドウの開始日時が過ぎると進行中に変更されます。その後、各ジョブは、土曜日の午後9時のデバイスのローカル時間に、ターゲットとなるAWS IoT 動的スロットルグループ内のすべてのデバイスでジョブ実行を開始し、日曜日の午前6時にジョブ実行を終了します。これらのジョブ実行は、メンテナンスウィンドウの期間が経過するまで、現在および新しく追加されたすべてのデバイスで発生し続けます。メンテナンスウィンドウの期間が経過すると、各ジョブのステータスはスケジュール済みに戻ります。このプロセスは、各ジョブをキャンセルするまで毎週発生します。

クリーンアップ

このブログで作成したリソースは料金が発生し続けることを避けるために終わったら必ず削除してください。
AWS CloudShell 環境から次のコマンドを実行してください:

  1. aws iot delete-thing —thing-name "vibrationdevicepsttimezone"
    Bash
  2. aws iot delete-thing —thing-name "vibrationdevicecsttimezone"
    Bash
  3. aws iot delete-job --job-id "pstdevicesiotjob"
    Bash
  4. aws iot delete-job --job-id "cstdevicesiotjob"
    Bash
  5. aws iot delete-dynamic-thing-group --thing-group-name "pstdevices"
    Bash
  6. aws iot delete-dynamic-thing-group --thing-group-name "cstdevices"
    Bash
  7. aws iot update-indexing-configuration --thing-indexing-configuration thingIndexingMode=OFF
    Bash

まとめ

この投稿では、AWS IoT Jobs、動的なモノのグループ、デバイスシャドウを使用して、複数のタイムゾーンに配備されたデバイスのフリートに対して、承認された時間内にOTA更新を配備する方法を学びました。このアプローチを使用することで、デバイスのフリートにリモートで更新を配備でき、各デバイスが正しい時間に更新を開始し、承認された時間ウィンドウ中にのみ適用するという安心感が得られます。 AWS IoT Jobs のより深い情報については、Get Started with AWS IoT ワークショップと、 AWS IoTデバイスマネジメントジョブを使用したリモート操作のスケジュール に関するこのブログ投稿をチェックしてください。

この記事はNicholas Switzer によって書かれた Enabling device maintenance across multiple time zones using AWS IoT Jobs の日本語訳です。Solutions Architect の 原田裕平 が翻訳しました。

著者紹介

Nicholas Switzerさんは、Amazon Web Services の IoT スペシャリストソリューションアーキテクトです。2022年に AWS に加入し、IoT やエッジコンピューティング、コネクテッドプロダクトスペースを専門としています。米国に拠点を置き、日常生活を改善するスマートプロダクトの構築を楽しんでいます。