ステップ 4: デバイス上でコンポーネントを開発およびテストする
コンポーネントとは、AWS IoT Greengrass コアデバイスで実行されるソフトウェアモジュールです。コンポーネントを使用すると、複雑なアプリケーションを個別のビルディングブロックとして作成し管理することができ、Greengrass コアデバイス間で再利用することができます。すべてのコンポーネントは、recipe とアーティファクトで設定されます。
-
recipe
すべてのコンポーネントには、メタデータを定義する recipe ファイルが含まれています。recipe では、コンポーネントの設定パラメータ、コンポーネントの依存関係、ライフサイクル、プラットフォームの互換性も指定します。コンポーネントのライフサイクルは、コンポーネントのインストール、実行、およびシャットダウンを行うコマンドを定義します。詳細については、「AWS IoT Greengrass コンポーネントレシピのリファレンス」を参照してください。
-
アーティファクト
コンポーネントは、コンポーネントバイナリであるアーティファクトを必要な数だけ持つことができます。アーティファクトには、スクリプト、コンパイルされたコード、静的リソース、およびコンポーネントが消費するその他のファイルが含まれます。コンポーネントはコンポーネントの依存関係からアーティファクトを消費することもできます。
AWS IoT Greengrass では、AWS クラウドを操作することなく、Greengrass CLI を使用して Greengrass コアデバイス上でローカルでコンポーネントを開発しテストすることができます。ローカルコンポーネントを完了すると、コンポーネントの recipe とアーティファクトを使用して、そのコンポーネントを AWS クラウドの AWS IoT Greengrass サービスを作成し、すべての Greengrass コアデバイスにデプロイすることができます。コンポーネントの詳細については、「AWS IoT Greengrass コンポーネントを開発する」を参照してください。
このセクションでは、基本的な Hello World コンポーネントをコアデバイス上でローカルに作成して実行する方法を説明します。
デバイスで Hello World コンポーネントを開発するには
-
recipe とアーティファクトのサブフォルダを含むコンポーネントのフォルダを作成します。Greengrass コアデバイスで次のコマンドを実行してこれらのフォルダを作成し、コンポーネントフォルダに変更します。
~/greengrassv2
または%USERPROFILE%\greengrassv2
をローカル開発に使用するフォルダへのパスに置き換えます。 -
テキストエディタを使用して、コンポーネントのメタデータ、パラメータ、依存関係、ライフサイクル、プラットフォーム機能を定義する recipe ファイルを作成します。recipe ファイル名にコンポーネントのバージョンを含めるようにして、どの recipe がどのコンポーネントバージョンを反映しているのかを特定できるようにします。recipe には YAML 形式または JSON 形式を選択できます。
例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。
注記
AWS IoT Greengrass はコンポーネントのセマンティックバージョンを使用します。セマンティックバージョンは、major.minor.patch といった番号システムに準拠します。例えば、バージョン
1.0.0
は、コンポーネントの最初のメジャーリリースを表しています。詳細については、「セマンティックバージョンの仕様」を参照してください。 -
ファイルに次の recipe を貼り付けます。
この recipe の
ComponentConfiguration
セクションはパラメータであるMessage
を定義しており、デフォルトではworld
になります。Manifests
セクションはマニフェストを定義しており、これは、プラットフォームのライフサイクル指示とアーティファクトのセットです。たとえば、複数のマニフェストを定義して、さまざまなプラットフォームに対して異なるインストール手順を指定することができます。マニフェストでは、Lifecycle
セクションは、Greengrass コアデバイスにMessage
パラメータ値を引数として Hello World スクリプトを実行するように指示します。 -
次のコマンドを実行して、コンポーネントアーティファクト用のフォルダを作成します。
重要
アーティファクトフォルダのパスには、次のフォーマットを使用する必要があります。recipe で指定したコンポーネント名とバージョンを含めてください。
artifacts/
componentName
/componentVersion
/ -
テキストエディタを使用して、Hello World コンポーネントの Python スクリプトアーティファクトファイルを作成します。
例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。
nano artifacts/com.example.HelloWorld/1.0.0/hello_world.py
次の Python スクリプトをコピーしてファイルに貼り付けます。
import sys message = "Hello, %s!" % sys.argv[1] # Print the message to stdout, which Greengrass saves in a log file. print(message)
-
ローカル AWS IoT Greengrass CLI を使用して Greengrass コアデバイスのコンポーネントを管理します。
次のコマンドを実行して、AWS IoT Greengrass コアにコンポーネントをデプロイします。
または/greengrass/v2
C:\greengrass\v2
をご使用の AWS IoT Greengrass V2 ルートフォルダと置き換えて、~/greengrassv2
または%USERPROFILE%\greengrassv2
をコンポーネント開発フォルダに置き換えます。このコマンドは、
recipes
では recipe 、artifacts
では Python スクリプトを使用するコンポーネントを追加します。--merge
オプションは指定したコンポーネントとバージョンを追加または更新します。 -
AWS IoT Greengrass Core ソフトウェアは、コンポーネントプロセスからの標準出力を
logs
フォルダのログファイルに保存します。Hello World コンポーネントが実行され、メッセージが表示されることを確認するには、次のコマンドを実行します。次の例に示すようなメッセージが表示されます。
Hello, world!
注記
ファイルが存在しない場合、ローカルデプロイがまだ完了していない可能性があります。ファイルが 15 秒以内に表示されない場合は、デプロイが失敗している可能性があります。これは、recipe が有効でない場合などに発生します。次のコマンドを実行して、AWS IoT Greengrass コアのログファイルを確認します。このファイルは、Greengrass コアデバイスのデプロイサービスからのログが含まれます。
-
ローカルコンポーネントを変更して、コードを繰り返してテストします。テキストエディタで
hello_world.py
を開き、4 行目に次のコードを追加して、AWS IoT Greengrass コアがログするメッセージを編集します。message += " Greetings from your first Greengrass component."
hello_world.py
スクリプトには次の内容が表示されるはずです。import sys message = "Hello, %s!" % sys.argv[1] message += " Greetings from your first Greengrass component." # Print the message to stdout, which Greengrass saves in a log file. print(message)
-
次のコマンドを実行して、変更内容でコンポーネントを更新します。
このコマンドは、最新の Hello World アーティファクトで
com.example.HelloWorld
コンポーネントを更新します。 -
次のコマンドを実行して、コンポーネントを再起動します。コンポーネントを再起動すると、コアデバイスは最新の変更を使用します。
-
ログをもう一度確認して、Hello World コンポーネントが新しいメッセージを出力することか確認してください。
次の例に示すようなメッセージが表示されます。
Hello, world! Greetings from your first Greengrass component.
-
コンポーネントの設定パラメータを更新して、さまざまな設定をテストできます。コンポーネントをデプロイするときに、設定の更新を指定して、コアデバイス上のコンポーネントの設定を変更する方法を定義することができます。デフォルト値にリセットする設定値と、コアデバイスにマージする新しい設定値を指定することができます。詳細については、「コンポーネント設定の更新」を参照してください。
以下の操作を実行します。
-
テキストエディタを使用して、
hello-world-config-update.json
という名前のファイルを作成し、設定の更新を含めます。例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。
nano hello-world-config-update.json
-
次の JSON オブジェクトをファイルにコピーして貼り付けます。この JSON オブジェクトは、
friend
の値をMessage
パラメータにマージして、その値を更新する設定更新を定義しています。この設定更新では、リセットする値は指定されていません。マージの更新によって既存の値が置き換えられるため、Message
パラメータをリセットする必要はありません。{ "com.example.HelloWorld": { "MERGE": { "Message": "friend" } } }
-
次のコマンドを実行して、設定の更新を Hello World コンポーネントにデプロイします。
-
ログをもう一度確認して、Hello World コンポーネントが新しいメッセージを出力することか確認してください。
次の例に示すようなメッセージが表示されます。
Hello, friend! Greetings from your first Greengrass component.
-
-
コンポーネントのテストが完了したら、コアデバイスから削除します。以下のコマンドを実行します。
重要
この手順は、コンポーネントを AWS IoT Greengrass にアップロードした後、コアデバイスにコンポーネントをデプロイし直すために必要です。そうしなかった場合、ローカルデプロイはコンポーネントの異なるバージョンを指定しているため、デプロイがバージョンの互換性エラーで失敗します。
次のコマンドを実行して、
com.example.HelloWorld
コンポーネントが、デバイス上のコンポーネントリストに表示されないことを確認します。
Hello World コンポーネントが完成しました。これで、AWS IoT Greengrass クラウドサービスにアップロードできます。その後に、コンポーネントを Greengrass コアデバイスにデプロイできます。