メニュー
AWS Greengrass
開発者ガイド

AWS Greengrass とは

AWS Greengrass は、AWS クラウドの機能をローカルデバイスに拡張するソフトウェアです。ローカルデバイスは、ローカルネットワーク上で相互に安全に通信しながら、情報のソースに近いデータを収集して分析できます。具体的には、AWS Greengrass を使用する開発者は、クラウドでサーバーレスコード (AWS Lambda 関数) を作成して、このコードをデバイスに簡単にデプロイし、ローカルでアプリケーションを実行できます。

AWS Greengrass の基本的なアーキテクチャを次の図に示します。

AWS Greengrass により、お客様は Lambda 関数を使用して IoT デバイスとアプリケーションロジックを構築できます。特に、AWS Greengrass ではクラウドで管理するアプリケーションをローカルにデプロイして実行できます。ローカルにデプロイした Lambda 関数は、ローカルイベント、クラウドからのメッセージ、またはその他のソースによってトリガーされます。

AWS Greengrass では、デバイスをクラウドに接続することなく、ローカルネットワークにおいてデバイス相互で安全に通信し、メッセージをやり取りします。AWS Greengrass のローカルの発行とサブスクライブ (pub/sub) メッセージマネージャーでは、接続が失われた場合にインテリジェントにメッセージがバッファされるため、クラウドとのインバウンド/アウトバウンドメッセージが保持されます。

AWS Greengrass でのユーザーデータの保護方法は以下のとおりです。

  • デバイスの安全な認証と認可を介して保護。

  • ローカルネットワークの安全な接続を介して保護。

  • ローカルデバイスとクラウドの間で保護。

デバイスのセキュリティ認証情報は、クラウドへの接続が中断された場合でも、失効するまでグループ内で機能するため、デバイスはローカルで安全に通信を続けることができます。

AWS Greengrass は、Lambda 関数の安全な無線によるソフトウェア更新をサポートします。

AWS Greengrass の構成要素は以下のとおりです。

  • ソフトウェアディストリビューション

    • AWS Greengrass コア ソフトウェア

    • AWS Greengrass コア SDK

  • クラウドサービス

    • AWS Greengrass API

  • 特徴

    • Lambda ランタイム

    • Thing Shadow の実装

    • メッセージマネージャー

    • グループ管理

    • 検出サービス

Greengrass コアソフトウェア

AWS Greengrass コア ソフトウェアでは、以下の機能を利用できます。

  • Lambda 関数で作成してデプロイ API で管理するローカルアプリケーションのデプロイと実行を許可する。

  • MQTT プロトコルを介して管理されるサブスクリプションスキームを使用し、安全なネットワーク上でデバイス相互のローカルメッセージングを有効にする。

  • デバイスの認証と認可を使用してデバイスとクラウド間の安全な接続を確保する。

  • ユーザー定義の Lambda 関数の安全な無線によるソフトウェア更新を提供する。

AWS Greengrass コア ソフトウェアの構成要素は以下のとおりです。

  • デバイス、Lambda 関数、および AWS IoT の間でメッセージをルーティングするメッセージマネージャー。

  • ユーザー定義の Lambda 関数を実行する Lambda ランタイム。

  • デバイスを表す Thing Shadow のローカルコピーを提供する Thing Shadow サービスの実装。Thing Shadow はクラウドと同期するように設定できます。

  • 新規作成または更新された AWS Greengrass グループ設定の通知先のデプロイエージェント。新規作成または更新された設定を検出すると、デプロイエージェントは設定データをダウンロードして AWS Greengrass コア を再起動します。

AWS Greengrass コア インスタンスを設定するには AWS Greengrass API を使用します。AWS Greengrass API は、AWS Greengrass グループ定義を作成し、クラウドに保存された AWS Greengrass グループ定義を更新します。

AWS Greengrass コア バージョン:

GCC v1.0.0GCC v1.1.0
GCC v1.0.0

当初のバージョン

GCC v1.1.0

現行のバージョン

以前のバージョンの AWS Greengrass コア から移行するには:

  • 証明書を /greengrass/configuration/certs フォルダから /greengrass/certs にコピーします

  • /greengrass/configuration/config.json/greengrass/config/config.json にコピーします

  • /greengrass/greengrassd の代わりに /greengrass/gcc/core/greengrassd を実行します

  • 新規コアにグループをデプロイします。

AWS Greengrass グループ

AWS Greengrass グループ定義は、AWS Greengrass コア デバイスおよびこれらと通信するデバイスの設定のコレクションです。AWS Greengrass グループ を構成するオブジェクトを次の図に示します。

前の図の各オブジェクトについて説明します。

A: AWS Greengrass グループの定義

AWS Greengrass グループ に関する情報のコレクション。

B: AWS Greengrass グループの設定

具体的には次のとおりです。

  • AWS Greengrass グループ ロール。

  • ログ設定。

  • 認証機関とローカル接続の設定。

  • AWS Greengrass コア 接続情報。

C: AWS Greengrass コア

AWS Greengrass コア を表す AWS IoT モノ。

D: Lambda 関数の定義

グループの AWS Greengrass コア にデプロイする Lambda 関数のリスト。

E: サブスクリプションの定義。

AWS Greengrass グループ にデプロイするサブスクリプションのコレクション (以下を含む)。

  • メッセージルール ID。メッセージルーティングサブスクリプションの一意の識別子です。

  • メッセージソース。メッセージの送信元を識別する ARN。有効な値は、モノの ARN、Lambda 関数、または "cloud" です。

  • 件名。メッセージデータのフィルタに使用する MQTT トピックまたはトピックフィルタ。

  • 送信先。メッセージの送信元から発行されたメッセージの送信先を識別する ARN。有効な値は、モノの ARN、Lambda 関数、または "cloud" です。

F: デバイスの定義

AWS Greengrass グループ のメンバーである AWS Greengrass コア および AWS IoT モノ、ならびに関連する設定データを含むリスト。このデータにより、どのデバイスが AWS Greengrass コア であり、どのデバイスで Thing Shadow データと AWS IoT を同期させるかを指定します。

デプロイすると、AWS Greengrass グループ の定義、Lambda 関数、およびサブスクリプションテーブルが AWS Greengrass コア デバイスにコピーされます。

AWS Greengrass のデバイス

次の 2 種類のデバイスがあります。

  • AWS Greengrass コア。

  • AWS Greengrass コア に接続された AWS IoT デバイス。

AWS Greengrass コア は、AWS IoT および AWS Greengrass クラウドサービスと直接通信するように特化された AWS Greengrass ソフトウェアを実行する AWS IoT デバイスです。この AWS IoT デバイスには、AWS IoT で認証するための独自の証明書があります。また、デバイスシャドウを持ち、AWS IoT デバイスレジストリ内に存在します。AWS Greengrass コア は、ローカル Lambda ランタイム、デプロイエージェント、および IP アドレストラッカーを実行します。IP アドレストラッカーから AWS Greengrass クラウドサービスに IP アドレス情報が送信されることで、AWS IoT デバイスはそのグループおよびコア接続情報を自動的に検出できます。

どの AWS IoT デバイスからでも AWS Greengrass コア に接続できます。AWS Greengrass コア は、AWS IoT デバイス SDK で記述されたソフトウェアを実行します。

これらのデバイスタイプ間の関係を次の表に示します。

SDK

AWS Greengrass の操作時に以下の SDK を使用します。

GGC v1.0.0GGC v1.1.0
GGC v1.0.0
AWS SDK

AWS SDK では、Amazon S3、Amazon DynamoDB、AWS IoT、AWS Greengrass など、AWS のサービスと連携するアプリケーションを構築できます。AWS Greengrass のコンテキストでは、デプロイした Lambda 関数内で AWS SDK を使用して AWS のサービスを直接呼び出すことができます。

AWS IoT デバイス SDK

AWS IoT デバイス SDK では、デバイスを AWS IoT または AWS Greengrass サービスに接続できます。デバイスは、所属先の AWS Greengrass コア と接続先の AWS Greengrass グループ の IP アドレスを認識している必要があります。

AWS Greengrass コア への接続には任意の AWS IoT デバイス SDK を使用できます。ただし、AWS Greengrass 検出サービスや AWS Greengrass コア ルート CA のダウンロードなど、AWS Greengrass 固有の機能を利用できるのは C++ および Python デバイス SDK のみです。詳細については、「AWS IoT デバイス SDK」を参照してください。

AWS Greengrass コア SDK

AWS Greengrass コア SDK を使用すると、Lambda 関数はそれが実行されている AWS Greengrass コア とやり取りし、メッセージの発行、ローカルの Thing Shadow サービスとのやり取り、または他のデプロイされた Lambda 関数の呼び出しを行うことができます。この SDK は、AWS Greengrass コア の Lambda ランタイムで実行されている Lambda 関数を記述するためだけに使用します。AWS Greengrass コア で実行されている Lambda 関数は、AWS SDK を使用して AWS クラウドサービスと直接やり取りできます。AWS Greengrass コア SDK と AWS SDK は別々のパッケージに含まれているため、両方のパッケージを同時に使用できます。AWS Greengrass コア SDK は、AWS IoT コンソールの [Software] セクションからダウンロードできます。

AWS Greengrass コア SDK は、AWS SDK プログラミングモデルに従っています。これにより、クラウド向けに開発された Lambda 関数を、AWS Greengrass コア 上で実行される Lambda 関数に簡単に移植できます。たとえば、AWS SDK の場合、次の Lambda 関数はクラウドのトピック "/some/topic" にメッセージを発行します。

Copy
import boto3 client = boto3.client('iot-data') response = client.publish( topic = "/some/topic", qos = 0, payload = "Some payload".encode() )

この Lambda 関数を AWS Greengrass コア に移植して実行するには、次の例に示すように、import boto3 ステートメントを import greengrasssdk に置き換えます。

Copy
import greengrasssdk client = greengrasssdk.client('iot-data') response = client.publish( topic='/some/topic', qos=0, payload='some payload'.encode() )

これにより、クラウドでテストした Lambda 関数を最小限の労力で AWS Greengrass に移行できます。

注記

AWS Greengrass コア SDK では、QoS = 0 の MQTT メッセージのみを送信できます。AWS SDK は、AWS クラウドで Lambda 関数を実行するときに、環境のネイティブな一部として機能します。AWS Greengrass コア にデプロイした Lambda 関数で boto3 を使用する場合は、パッケージに必ず AWS SDK を含めてください。さらに、AWS Greengrass コア SDK と AWS SDK の両方を同じパッケージで同時に使用する場合は、Lambda 関数で正しい名前空間を使用する必要があります。デプロイパッケージを作成する方法の詳細については、次を参照します。

GGC v1.1.0
AWS SDK

AWS SDK では、Amazon S3、Amazon DynamoDB、AWS IoT、AWS Greengrass など、AWS のサービスと連携するアプリケーションを構築できます。AWS Greengrass のコンテキストでは、デプロイした Lambda 関数内で AWS SDK を使用して AWS のサービスを直接呼び出すことができます。

AWS IoT デバイス SDK

AWS IoT デバイス SDK では、デバイスを AWS IoT または AWS Greengrass サービスに接続できます。デバイスは、所属先の AWS Greengrass コア と接続先の AWS Greengrass グループ の IP アドレスを認識している必要があります。

AWS Greengrass コア への接続には任意の AWS IoT デバイス SDK を使用できます。ただし、AWS Greengrass 検出サービスや AWS Greengrass コア ルート CA のダウンロードなど、AWS Greengrass 固有の機能を利用できるのは C++ および Python デバイス SDK のみです。詳細については、「AWS IoT デバイス SDK」を参照してください。

AWS Greengrass コア SDK

AWS Greengrass コア SDK を使用すると、Lambda 関数はそれが実行されている AWS Greengrass コア とやり取りし、メッセージの発行、ローカルの Thing Shadow サービスとのやり取り、または他のデプロイされた Lambda 関数の呼び出しを行うことができます。この SDK は、AWS Greengrass コア の Lambda ランタイムで実行されている Lambda 関数を記述するためだけに使用します。AWS Greengrass コア で実行されている Lambda 関数は、AWS SDK を使用して AWS クラウドサービスと直接やり取りできます。AWS Greengrass コア SDK と AWS SDK は別々のパッケージに含まれているため、両方のパッケージを同時に使用できます。AWS Greengrass コア SDK は、AWS IoT コンソールの [Software] セクションからダウンロードできます。

AWS Greengrass コア SDK は、AWS SDK プログラミングモデルに従っています。これにより、クラウド向けに開発された Lambda 関数を、AWS Greengrass コア 上で実行される Lambda 関数に簡単に移植できます。たとえば、AWS SDK の場合、次の Lambda 関数はクラウドのトピック "/some/topic" にメッセージを発行します。

Copy
import boto3 client = boto3.client('iot-data') response = client.publish( topic = "/some/topic", qos = 0, payload = "Some payload".encode() )

この Lambda 関数を AWS Greengrass コア に移植して実行するには、次の例に示すように、import boto3 ステートメントを import greengrasssdk に置き換えます。

Copy
import greengrasssdk client = greengrasssdk.client('iot-data') response = client.publish( topic='/some/topic', qos=0, payload='some payload'.encode() )

これにより、クラウドでテストした Lambda 関数を最小限の労力で AWS Greengrass に移行できます。

注記

AWS Greengrass コア SDK では、QoS = 0 の MQTT メッセージのみを送信できます。AWS SDK は、AWS クラウドで Lambda 関数を実行するときに、環境のネイティブな一部として機能します。AWS Greengrass コア にデプロイした Lambda 関数で boto3 を使用する場合は、パッケージに必ず AWS SDK を含めてください。さらに、AWS Greengrass コア SDK と AWS SDK の両方を同じパッケージで同時に使用する場合は、Lambda 関数で正しい名前空間を使用する必要があります。デプロイパッケージを作成する方法の詳細については、次を参照します。