AWS IoT Greengrass コンポーネントを開発する - AWS IoT Greengrass

AWS IoT Greengrass コンポーネントを開発する

Greengrass コアデバイスでコンポーネントの開発とテストを行うことができます。そのため、AWS クラウド と対話することなく、AWS IoT Greengrass ソフトウェアを作成して繰り返すことが可能です。コンポーネントのバージョンが完成したら、クラウドの AWS IoT Greengrass にアップロードすることができるため、自分と自分が所属するチームが、コンポーネントをフリート内の他のデバイスにデプロイすることができます。コンポーネントをデプロイする方法の詳細については、「デバイスに AWS IoT Greengrass コンポーネントのデプロイ」を参照してください。

すべてのコンポーネントは、レシピとアーティファクトで設定されます。

  • recipe

    すべてのコンポーネントには、メタデータを定義する recipe ファイルが含まれています。recipe では、コンポーネントの設定パラメータ、コンポーネントの依存関係、ライフサイクル、プラットフォームの互換性も指定します。コンポーネントのライフサイクルは、コンポーネントのインストール、実行、およびシャットダウンを行うコマンドを定義します。詳細については、「AWS IoT Greengrass コンポーネントレシピのリファレンス」を参照してください。

    recipe は JSON または YAML 形式で定義できます。

  • アーティファクト

    コンポーネントは、コンポーネントバイナリであるアーティファクトを必要な数だけ持つことができます。アーティファクトには、スクリプト、コンパイルされたコード、静的リソース、およびコンポーネントが消費するその他のファイルが含まれます。コンポーネントはコンポーネントの依存関係からアーティファクトを消費することもできます。

AWS IoT Greengrass では、アプリケーションで使用して、デバイスにデプロイすることができる事前に構築済みのコンポーネントが提供されています。例えば、ストリームマネージャーコンポーネントを使って様々な AWS サービスにデータをアップロードしたり、CloudWatch メトリクスコンポーネントを使って Amazon CloudWatch にカスタムメトリクスをパブリッシュしたりすることが可能です。詳細については、「AWS が提供したコンポーネント」を参照してください。

AWS IoT Greengrass は Greengrass ソフトウェアカタログと呼ばれる Greengrass コンポーネントのインデックスをキュレーションします。このカタログは、Greengrass コミュニティによって開発された Greengrass コンポーネントを追跡します。このカタログから、コンポーネントをダウンロード、変更、デプロイして Greengrass アプリケーションを作成できます。詳細については、「コミュニティコンポーネント」を参照してください。

AWS IoT Greengrass Core ソフトウェアは、コアデバイスで設定した ggc_userggc_group などのコンポーネントをシステムユーザーおよびグループとして実行します。これは、コンポーネントがそのシステムユーザーの権限を持っていることを意味します。ホームディレクトリを持たないシステムユーザーを使用した場合、コンポーネントはホームディレクトリを使用する実行コマンドやコードを使用できません。これは、Python パッケージをインストールする場合などに、pip install some-library --user コマンドを使用できないことを意味します。入門チュートリアルに従ってコアデバイスを設定している場合、システムユーザーにはホームディレクトリがありません。コンポーネントを実行するユーザーやグループを設定する方法の詳細については、「コンポーネントを実行するユーザーを設定する」を参照してください。

注記

AWS IoT Greengrass はコンポーネントのセマンティックバージョンを使用します。セマンティックバージョンは、major.minor.patch といった番号システムに準拠します。例えば、バージョン 1.0.0 は、コンポーネントの最初のメジャーリリースを表しています。詳細については、「セマンティックバージョンの仕様」を参照してください。

コンポーネントライフサイクル

コンポーネントライフサイクルは、AWS IoT Greengrass Core ソフトウェアがコンポーネントをインストールして実行するために使用するステージを定義します。各ステージでは、スクリプトと、コンポーネントの動作を指定するその他の情報を定義します。例えば、コンポーネントをインストールするとき、AWS IoT Greengrass Core ソフトウェアはそのコンポーネントの Install ライフサイクルスクリプトを実行します。コアデバイス上のコンポーネントには、次のライフサイクルステータスがあります。

  • NEW - コンポーネントのレシピとアーティファクトはコアデバイスに読み込まれていますが、コンポーネントはインストールされていません。コンポーネントがこの状態になった後、コンポーネントは install script を実行します。

  • INSTALLED - コンポーネントがコアデバイスにインストールされています。コンポーネントは、install script を実行した後にこの状態に入ります。

  • STARTING - コアデバイス上でコンポーネントが開始されています。コンポーネントは、startup script を実行したときにこの状態に入ります。起動に成功すると、コンポーネントは RUNNING 状態に入ります。

  • RUNNING - コアデバイス上でコンポーネントが実行されています。コンポーネントは、run script を実行したとき、またはスタートアップスクリプトからのアクティブなバックグラウンドプロセスがある場合に、この状態になります。

  • FINISHED - コンポーネントが正常に実行され、実行が完了しました。

  • STOPPING - コンポーネントは停止しています。コンポーネントは、shutdown script を実行したときにこの状態に入ります。

  • ERRORED - コンポーネントでエラーが発生しました。コンポーネントがこの状態に入ると、recover script を実行します。その後、コンポーネントは再起動して、通常の使用に戻ろうと試みます。コンポーネントが正常に実行されずに 3 回 ERRORED 状態になると、コンポーネントは BROKEN になります。

  • BROKEN - コンポーネントでエラーが複数回発生し、回復できません。修復するには、コンポーネントをもう一度デプロイする必要があります。

コンポーネントタイプ

コンポーネントタイプは、AWS IoT Greengrass Core ソフトウェアがコンポーネントを実行する方法を指定します。コンポーネントには次のタイプがあります。

  • Nucleus (aws.greengrass.nucleus)

    Greengrass nucleus は、AWS IoT Greengrass Core ソフトウェアの最低限の機能のみを提供するコンポーネントです。詳細については、「Greengrass nucleus」を参照してください。

  • プラグイン (aws.greengrass.plugin)

    Greengrass nucleus は nucleus と同じ Java 仮想マシン (JVM) で、プラグインコンポーネントを実行します。コアデバイス上のプラグインコンポーネントのバージョンが変更されると、nucleus は再起動します。プラグインコンポーネントをインストールして実行するには、Greengrass nucleus をシステムサービスとして実行するように設定する必要があります。詳細については、「Greengrass nucleus をシステムサービスとして設定する」を参照してください。

    AWS から提供されるコンポーネントにはプラグインコンポーネントが複数あり、Greengrass nucleus と直接インターフェイス接続することができます。プラグインコンポーネントは Greengrass nucleus と同じログファイルを使用します。詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。

  • ジェネリック (aws.greengrass.generic)

    Greengrass nucleus は、コンポーネントがライフサイクルを定義している場合、ジェネリックコンポーネントのライフサイクルスクリプトを実行します。

    このタイプは、カスタムコンポーネントのデフォルトタイプです。

  • Lambda (aws.greengrass.lambda)

    Greengrass nucleus は、Lambda ランチャーコンポーネントを使用して Lambda 関数コンポーネントを実行します。

    Lambda 関数からコンポーネントを作成すると、コンポーネントはこのタイプになります。詳細については、「AWS Lambda 関数を実行する」を参照してください。

注記

レシピでコンポーネントタイプを指定することは推奨しません。AWS IoT Greengrass がコンポーネントを作成するときにタイプを設定します。