AWSJobsを使用したIoTデバイスのアップグレードと設定
アマゾンウェブサービス(AWS)は、MicrosoftAzureやGoogleCloud IoTと並んで、モノのインターネット(IoT)で最も人気のあるフレームワーク環境の1つです。スマートデバイスはインターネットを使用してフレームワークに接続され、MQTTプロトコルを使用してフレームワークと対話します。このフレームワークは、デバイスとの対話に加えて、データの保存と処理、ユーザーへのデータ表現、データ分析(人工知能手法を含む)、強力な特権システムによるアクセス制御など、さまざまな機会を提供します。
データを保存するために、AWS環境は(さまざまなリレーショナルおよび非リレーショナルDBMSに加えて)Simple Storage Service(S3)と呼ばれるクラウドベースの階層型ファイルストレージシステムを提供します。 S3ストレージ内の各ファイルには、外部からアクセスできるユニバーサルリソースロケーター(URL)を含めることができます。この場合、適切なアクセス権限が与えられたWebブラウザを介してファイルにアクセスできます。ファイルコンテンツがHTMLページの場合、このファイルを使用すると、インタラクティブユーザーはAWSフレームワークオプションとそれに接続されているインテリジェントデバイスの両方にアクセスできます。このページの機能は、内部にあるJavaScriptコードによって指定されます(このコードは、フレームワーク全体およびその個別のコンポーネントのアプリケーションプログラミングインターフェイス(API)の機能をアクティブ化できます)。
ラムダ関数
ウェブページに加えて、AWSフレームワーク環境のプログラムコードはラムダ関数として保存できます。これらは、Python、Java、C#、またはNode.Jsのいずれかの言語で記述された特別な名前のコードです。それらはクラウドに保存され、特定のイベントで呼び出されます。イベントは、Webページ(特定のURLで特定のHTTP REST APIを呼び出すなど)、別のラムダ関数、またはインテリジェントデバイス(特定のタイプのMQTTメッセージの送信を介して)によって開始できます。これらすべての場合において、イベントはパラメーターを持つことができます。 Lambda関数は、インテリジェントデバイス、AWSリソース(データベースなど)、およびユーザーが直接対話するWebページ間の対話のミドルウェアとして使用されます(図1)。
クリックして大きな画像を表示
図1.AWSコンポーネントの相互作用のアーキテクチャ(出典:Auriga)
AWSラムダには厳しい制限があります。たとえば、単一のリクエストを処理する実行時間は制限されており、単一のリクエストを処理するときにラムダが使用できるメモリの量は制限されています。制限を超えると、ラムダの実行は中止されます。これらの制限は、ラムダを作成するときにユーザーが構成しますが、特定の値を超えることはできません。
IoTデバイスは、データの整合性とバッファリングを提供するTCPプロトコルを使用してクラウドに接続します。接続が遅い場合、プロトコルは送信側でデータを蓄積し、可能になったときにパイプラインを介してデータをプッシュします。また、TCP上のAWSプロトコルは、接続が失われた場合にTCP接続を永続的に再確立します。
ただし、IoTデバイスとクラウド間の接続の問題は、MQTTプロトコルの特定の一方向性のため、通常はラムダに影響を与えません。 IoTデバイスと通信する場合、ラムダはMQTTメッセージを送信するだけで、応答を待ちません。応答が到着した場合、それを処理し、必要に応じて別のMQTTメッセージをIoTデバイスに送信するのは別のラムダ関数の責任です。
AWSジョブ
AWSフレームワークコンポーネントの1つは、ジョブサービス(AWSジョブ)です。これは、AWSに接続された1つまたは複数のIoTデバイスで長期的なアクション(ジョブ)を作成および実行し、これらのジョブを管理するために使用されます。他のAWSサービスと比較して、AWSJobsサービスはかなり最近登場しました。
AWS Jobsサービスへのアクセスは、プログラミングコンソールを介して、また一連のAPI関数を使用してプログラムで提供されます。
これらの関数の特定のサブセットは、インテリジェントデバイス自体で使用できます(MQTTメッセージを送信することで呼び出すことができます)。 MQTTプロトコルを介してアクセス可能な関数は、デバイス側からジョブとそのパラメーターにアクセスするために必要なアクションを実行します:GetPendingJobExecutions、StartNextPendingJobExecution、UpdateJobExecution、DescribeJobExecutionなど。
その他の関数はHTTPSプロトコルを介して定義され、WebページのJavaScriptコード、ラムダ関数のプログラムコード、およびインタラクティブモードのユーザーによって呼び出されることを目的としています。これらの関数は主に、ジョブの作成と削除、およびジョブ実行管理に使用されます:CreateJob、DeleteJob、DescribeJob、ListJobs、ListJobExecutionsForThingなど。
AWS Jobsの用語では、ジョブに関する主な情報はそのジョブドキュメントに保存されます。これは、フレームワークからターゲットデバイスに渡されるJSONドキュメントであり、何をすべきかを説明しています。通常、ジョブドキュメントには、操作の名前と、データジョブパラメータの場所を参照するURLが含まれます。
このURLは、AWSユーザーが「事前署名」することができます。この場合、URLにより、インテリジェントデバイスの特定のオブジェクトに、事前に署名したユーザーの権限でアクセスできます(したがって、デバイスは通常はアクセスできないデータにアクセスできます)。事前署名されたURLの有効期間は限られており、有効期間が終了すると有効期限が切れるため、オブジェクトに再びアクセスできなくなります。
ジョブドキュメントは、ジョブの作成中にその場で作成することも、AWSフレームワークのS3ファイルストレージにファイルとして保存することもできます。このファイルへのリンクは、ジョブの作成時に指定できます。
その他のジョブ属性には、次のものがあります。
-
ターゲットデバイスまたはデバイスグループ。デバイスグループが対象の場合、ジョブはグループのメンバーであるすべてのデバイスで実行されます。
-
スナップショットまたは継続的なジョブ。スナップショットジョブは、選択したデバイスまたはデバイスのグループで終了した後に完了します。継続的なジョブは常にデバイスのグループに適用されます。既存のデバイスで終了し、後でグループに追加されたデバイスで実行された後も存在し続けます。
特定のデバイスでジョブが実行されている場合、そのデバイスには状態があります。限定された状態のセットがフレームワークによって定義されます:QUEUED、IN_PROGRESS、FAILED、SUCCESS、CANCELED、REJECTED、REMOVED。現在の状態は、デバイスからの要求(たとえば、UpdateJobExecution関数の呼び出し)によって、またはユーザーがジョブ管理関数の1つを呼び出したとき(たとえば、CancelJob関数を使用してジョブをキャンセルしたとき)に変更されます。通常、デバイスがジョブを実行している間、ジョブの実行状態はIN_PROGRESSであり、デバイスがジョブを完了した後、ジョブの実行状態はSUCCESSまたはFAILEDになります。
ジョブ実行の状態図を図2に示します(ここでは、デバイスによって開始された遷移が青色で示され、他のAWSコンポーネントによって開始された遷移が緑色で示されています)。
クリックして大きな画像を表示
図2.AWSジョブの実行中の状態の図(出典:Auriga)
モノのインターネットテクノロジー
- プロセッサーはIoTとAIのコンバージェンスに対応します
- 世界的なメリットを提供するIoT
- 適合して忘れる:未構成のIoTによってもたらされる脅威
- IoT採用におけるサイバーセキュリティとプライバシーの確保
- 企業内のIoTトラフィックが増加しており、脅威も増加しています
- IoTネットワークを自宅で安全に保つための7つの重要なヒント
- IoT時代におけるセキュリティ標準と規制の6兆ドルの重要性
- IoTのサイバーリスクを軽減し、解決策を見つける
- IoTを使用して産業を後押しし、より広い経済をサポート
- メンフィスを「スマート」にする:IoTデバイスの可視性、制御、セキュリティ
- IoTとサイバーセキュリティ