6. AWS IoT Device ManagementのJob

この章のゴール

この章ではAWS IoT Management Jobを利用してデバイスの問題を修正する方法について学びます。

Step1

S3のバケットを作成

AWS IoT ManagementのJobではjobの内容が記述されたファイルをS3のバケットに置く必要があります。まずは、このバケットを作成しましょう。 S3のバケット名はドメイン名としても利用されるため、完全にユニークな名前である必要があります。<<ユニークなバケット名>>の部分にかぶらないような値を指定します。 また、コマンドでリージョン名が必要になるので、<<AWS IoTで利用しているリージョン>>を書き換えます。

Cloud9のコンソールに戻りターミナルから以下のコマンドを入力します。<< >>で囲まれている部分は、上記で説明したように環境に合わせて置き換えください。 例) REGION=ap-northeast-1

REGION=<<AWS IoTで利用しているリージョン>>
BUCKET_NAME=<<ユニークなバケット名>>

以下のコマンドをCloud9のターミナルで実行するとバケットが作成されます。

aws s3api create-bucket --bucket $BUCKET_NAME --region $REGION \
--create-bucket-configuration LocationConstraint=$REGION

戻り値(例)

{
    "Location": "http://iotsecurityworkshop-yyyymmdd.s3.amazonaws.com/"
}

Step2

Jobドキュメントの作成

JobドキュメントはJSON形式で記述します。 JSONの中にS3からファイルをダウンロードさせるようなリンクを含める場合は、${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket/key}のような書き方をすると自動的にpre-signed URLを作成してくれます。このワークショップでは特にこの機能は使いません。

Cloud9に戻り、左側のディレクトリツリーで最上位のディレクトリを選択し、メニューのFile > New Fileで新規でファイルを作成します。

chapter6-01

ファイルの中身に以下を貼り付けます。

{
    "comment": "This is a job document.",
    "task": "example",
    "parameters": "none"
}

キーボードでコントロール + Sでファイルを保存します。ファイル名を指定するダイアログが表示されるので、jobdoc.jsonと名前をつけます。

chapter6-02

Step 3

ターミナルから以下のコマンドを入力して、作成したJobドキュメントjobdoc.jsonをS3に保存します。

cd ~/environment

aws s3 cp jobdoc.json s3://$BUCKET_NAME/
chapter6-03

Step 4

では、Jobを作成しましょう。AWS IoTのマネージメントコンソールで、左側のメニューからManage > Jobsと開き、Create a jobをクリックします。

chapter6-04

Create a Custom Jobをクリックします。

chapter6-05

この画面ではJob IdにExampleJob01と入力し、Select devices to updateのところでは、Thing Groupsの中のQuarantine_Staticにチェックを付けます。

chapter6-06

下にスクロールし、Add a job fileSelectをクリックし、先程アップロードしたファイルを指定します。

chapter6-07

最後に一番までスクロールして、Job typeYour job will continue deploying to any devices added to the selected groups (continuous)を選択し、Nextをクリックします。

chapter6-08

この画面では何もせずに、一番下にスクロールしてCreateをクリックします。

chapter6-09

これでJobが作成されました。

chapter6-10

Jobをクリックすると詳細画面が以下のように表示されます。

chapter6-11

Step 5

手順通りにすすめると、Thing GroupのQuarantine_StaticにはThingが登録されていません。このグループにThingを登録しますので、AWS IoTのコンソールのトップに戻り、左側のメニューのManage > Thing Groupsを開き、Quarantine_Staticをクリックします。

chapter6-12

次にJobsを選択し、先ほど作成したJobが実行中であることが確認できます。

chapter6-13

次に、Thingsを選択し、Add a Thingをクリックします。

chapter6-14

表示されているThingの中からThingOneにチェックを付けて、Addをクリックします。

chapter6-15

これで、グループにThingが追加されました。

chapter6-16

Step 6

Cloud9上でスクリプトが実行されたままになっているはずです。Cloud9の画面に戻ってターミナルをみてみましょう。 以下のようなメッセージが確認できます。

chapter6-17

ログの中に先ほど作成したJobドキュメントの中身が出力されているのが確認できます。

最後に、AWS IoTのコンソールでトップに戻り、Manage > Jobs > ExampleJob01とJobの詳細を開くと、Jobが成功しているのが確認できます。

chapter6-18

このJobドキュメントは何らかの作業の指示は書かれていませんが、device-prog.pyのスクリプトでは、Jobを受け取ると8888ポートを開けるのを停止したり、メッセージのサイズを1500以下に変更するように実装していますので、しばらくしてからAWS IoTのコンソールでトップに戻り、Defend > Detect > Violationsを開くと、違反がなくなっていることが確認することが出来ます。(ポートについては他が開いているため、違反は残っています)

chapter6-19

この章では、ダミーのJobドキュメントを登録しただけですが、実際の運用ではJobドキュメントにどの様な処理を行うか記述し、デバイスのプログラムで指示通りの処理を実行できるように実装しておく必要があります。

また、JobsはDynamic Groupに対して実行すると、条件を満たしたデバイスに対して自動的に実行すると言ったことも出来ます。また、Jobsの少しづつ実行するようなロールアウトの仕組みもありますので、Jobが正しく実行されるのを見ながら、全体に広げていくということも可能です。もっと詳しくJobsについて知りたい場合は、こちらのドキュメントを御覧ください。

時間が余ったら、device-prog.pyのソースコードをみて、どの様な処理が行われていたかを確認してみてください。

以上で、ワークショップの手順をすべて終了です。次の章では、今回のワークショップで作成したリソースの削除手順を紹介します。