ジョブ - AWS IoT

ジョブ

AWS IoT ジョブを使用して、AWS IoT に接続された 1 つ以上のデバイスに送信され実行される一連のリモート操作を定義できます。

ヒント

ジョブドキュメントの例については、AWS IoT SDK for JavaScript の jobs-agent.js の例を参照してください。

ジョブの主要な概念

ジョブ

ジョブは、AWS IoT に接続された 1 つ以上のデバイスに送信され実行されるリモート操作です。たとえば、一連のデバイスに対して、アプリケーションやファームウェア更新のダウンロードとインストール、再起動、証明書のローテーション、またはリモートトラブルシューティングオペレーションの実行を指示するジョブを定義できます。

ジョブドキュメント

ジョブを作成するには、デバイスによって実行されるリモートオペレーションの説明であるジョブドキュメントを最初に作成する必要があります。

ジョブドキュメントは、UTF-8 でエンコードされた JSON ドキュメントであり、デバイスがジョブを実行するために必要な情報を含みます。ジョブドキュメントには、デバイスが更新やその他のデータをダウンロードできる URL が 1 つ以上含まれています。ジョブドキュメントは、Amazon S3 バケットに格納することも、ジョブを作成するコマンドにインラインで含めることもできます。

target

ジョブを作成するとき、オペレーションを実行する必要があるデバイスであるターゲットのリストを指定します。ターゲットはモノ、モノのグループ、またはその両方にすることができます。AWS IoT ジョブは、ジョブが利用可能であることを各ターゲットに通知するメッセージを送信します。

ジョブの実行

ジョブの実行は、ターゲットデバイスでのジョブのインスタンスです。ターゲットは、ジョブのドキュメントをダウンロードしてジョブの実行を開始します。次に、ドキュメントで指定されたオペレーションを実行し、AWS IoT にその進行状況をレポートします。実行番号は、特定のターゲットでのジョブ実行の一意の識別子です。ジョブサービスは、ターゲット上のジョブ実行の進捗状況と、すべてのターゲットでのジョブの進捗状況を追跡するコマンドを提供します。

スナップショットジョブ

デフォルトでは、ジョブの作成時に指定したすべてのターゲットにジョブが送信されます。それらのターゲットがジョブを完了した後 (またはそうすることができないと報告した場合)、ジョブは完了となります。

連続ジョブ

ジョブの作成時に指定したすべてのターゲットにジョブが送信されます。引き続き実行され、ターゲットグループに追加された新しいデバイス (モノなど) に送信されます。たとえば、連続ジョブを使用して、グループに追加されたデバイスをオンボードまたはアップグレードできます。ジョブを作成するときにオプションのパラメータを設定することにより、連続ジョブを作成することができます。

ロールアウト

保留中のジョブの実行がターゲットに通知される速度を指定できます。これにより、ステージングされたロールアウトを作成し、更新、再起動、その他のオペレーションをよりよく管理できます。

次のフィールドを CreateJob リクエストに追加して、1 分あたりに通知するジョブターゲットの最大数を指定できます。この例では、静的ロールアウトレートを設定します。

"jobExecutionRolloutConfig": { "maximumPerMinute": "integer" }

可変ロールアウトレートを exponentialRate フィールドに設定することもできます。指数レートがあるロールアウトを作成する例を示しています。

"jobExecutionsRolloutConfig": { "exponentialRate": { "baseRatePerMinute": integer, "incrementFactor": integer, "rateIncreaseCriteria": { "numberOfNotifiedThings": integer, // Set one or the other "numberOfSucceededThings": integer // of these two values. }, "maximumPerMinute": integer } }

ジョブロールアウトの設定の詳細については、「ジョブロールアウトと中止設定」を参照してください。

abort

指定した特定の基準が満たされたときに、ロールアウトを中止する一連の条件を作成できます。詳細については、「ジョブのロールアウトと中止設定」を参照してください。

署名付き URL

デバイスをセキュリティで保護し、ジョブドキュメント自体に含まれるデータ以外のデータに時間制限付きでアクセスできるようにするには、署名付き Amazon S3 URL を使用できます。データを Amazon S3 バケットに配置し、ジョブドキュメント内のデータにプレースホルダーリンクを追加することができます。ジョブサービスは、ジョブドキュメントのリクエストを受け取ると、ジョブドキュメントを解析してプレースホルダーリンクを探し、それを署名付き Amazon S3 URL に置き換えます。

プレースホルダーリンクの形式は次のとおりです。

${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket/key}

ここで、バケット はバケット名で、キーはリンク先のバケット内のオブジェクトです。

北京および寧夏リージョン では、署名付き URL は、リソース所有者が ICP ライセンスを持っている場合にのみ機能します。詳細については、Getting Started with AWS services in China ドキュメントの「Amazon Simple Storage Service」を参照してください。

タイムアウト

ジョブタイムアウトを使用すると、予期せず長時間、ジョブの実行が IN_PROGRESS ステータスのままになるたびに、通知を受けることができます。タイマーには、進捗タイマーとステップタイマーの 2 種類があります。

ジョブを作成するときに、オプションの TimeoutConfig オブジェクトの inProgressTimeoutInMinutes プロパティに値を設定できます。進捗タイマーは更新できず、ジョブのすべての実行に適用されます。ジョブの実行がこの間隔より長時間、IN_PROGRESS ステータスのままになるたびに、ジョブの実行は失敗し、終了ステータス TIMED_OUT に切り替わります。AWS IoT は MQTT 通知も発行します。

また、UpdateJobExecution を呼び出すときに stepTimeoutInMinutes の値を設定することで、ジョブの実行にステップタイマーを設定することもできます。ステップタイマーは更新するジョブ実行にのみ適用されます。ジョブの実行を更新するたびに、このタイマーに新しい値を設定できます。StartNextPendingJobExecution を呼び出すときに、ステップタイマーを作成することもできます。ジョブの実行がステップタイマーの間隔より長い間、IN_PROGRESS ステータスのままになる場合、ジョブの実行は失敗し、終了ステータス TIMED_OUT に切り替わります。ステップタイマーは、ジョブの作成時に設定した進捗タイマーには影響を与えません。

以下の図と説明は、進捗タイムアウトとステップタイムアウトがどのように相互に影響を与えるかを示しています。

ジョブの作成: CreateJob は、20 分で時間切れになる進捗タイマーを設定します。このタイマーはすべてのジョブの実行に適用され、更新することはできません。

12:00 PM: ジョブの実行が開始され、IN_PROGRESS ステータスに切り替わります。進捗タイマーが開始されます。

12:05 PM: UpdateJobExecution は、値 7 分のステップタイマーを作成します。新しいステップタイマーが作成されない場合、ジョブの実行は 12:12 PM にタイムアウトになります。

12:10 PM: UpdateJobExecution は、値 5 分のステップタイマーを作成します。前のステップタイマーは破棄されます。新しいステップタイマーが作成されない場合、ジョブの実行は 12:15 PM にタイムアウトになります。

12:13 PM: UpdateJobExecution は、値 9 分の新しいステップタイマーを作成します。進捗タイマーが 12:20 に時間切れになるため、ジョブの実行は 12:20 にタイムアウトになります。ステップタイマーは、進捗タイマーによって作成された絶対限度時間を超えることはできません。

UpdateJobExecution は、値 -1 の新しいステップタイマーを作成することで、すでに作成されたステップタイマーを破棄することもできます。