AWS IoT Greengrass コンポーネントを作成する - AWS IoT Greengrass

AWS IoT Greengrass コンポーネントを作成する

カスタム AWS IoT Greengrass コンポーネントは、ローカルの開発用コンピュータや Greengrass コアデバイスで開発することができます。AWS IoT Greengrass では、AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) を提供しており、定義済みのコンポーネントテンプレートやコミュニティコンポーネントからコンポーネントを作成、ビルド、公開することができます。組み込みのシェルコマンドを実行して、コンポーネントを作成、ビルド、パブリッシュすることもできます。カスタム Greengrass コンポーネントを作成するには、次のオプションから選択します。

  • Greengrass Development Kit CLI を使用する

    GDK CLI を使用して、ローカル開発コンピュータ上でコンポーネントを開発します。GDK CLI は、コンポーネントのソースコードを構築して recipe とアーティファクトにパッケージ化するため、AWS IoT Greengrass サービスへのプライベートコンポーネントとしてパブリッシュすることができます。コンポーネントをパブリッシュするときにコンポーネントのバージョンとアーティファクト URI を自動的に更新するように GDK CLI を設定できるため、recipe を毎回更新する必要はありません。GDK CLI を使用してコンポーネントを開発する場合、テンプレートまたは Greengrass ソフトウェアカタログにあるコミュニティコンポーネントを使って開始することができます。詳細については、「AWS IoT Greengrass Development Kit Command-Line Interface」を参照してください。

  • 組み込みのシェルコマンドを実行する

    組み込みのシェルコマンドを実行して、ローカル開発コンピュータまたは Greengrass コアデバイス上でコンポーネントを開発できます。シェルコマンドを使用して、コンポーネントのソースコードをアーティファクトにコピーするか構築します。コンポーネントの新しいバージョンを作成するたびに、新しいコンポーネントバージョンで recipe を作成または更新する必要があります。コンポーネントを AWS IoT Greengrass サービスにパブリッシュするときには、recipe 内の各コンポーネントアーティファクトに URI を更新する必要があります。

コンポーネントを作成する (GDK CLI)

このセクションの指示に従って、GDK CLI を使用してコンポーネントを作成および構築します。

Greengrass コンポーネントを開発するには (GDK CLI)
  1. GDK CLI をまだインストールしていない場合は、開発コンピュータにインストールします。詳細については、「AWS IoT Greengrass Development Kit Command-Line Interface をインストールまたは更新する」を参照してください。

  2. コンポーネントフォルダを作成するフォルダに移動します。

    Linux or Unix
    mkdir ~/greengrassv2 cd ~/greengrassv2
    Windows Command Prompt (CMD)
    mkdir %USERPROFILE%\greengrassv2 cd %USERPROFILE%\greengrassv2
    PowerShell
    mkdir ~/greengrassv2 cd ~/greengrassv2
  3. ダウンロードするコンポーネントテンプレートまたはコミュニティコンポーネントを選択します。GDK CLI がテンプレートまたはコミュニティコンポーネントをダウンロードし、実用的な例を使って開始することができます。component list コマンドを使用して、利用可能なテンプレートとコミュニティコンポーネントのリストを取得します。

    • コンポーネントテンプレートをリスト表示するには、次のコマンドを実行します。レスポンスの各行には、テンプレートの名前とプログラミング言語が含まれています。

      gdk component list --template
    • コミュニティコンポーネントをリスト表示するには、次のコマンドを実行します。

      gdk component list --repository
  4. GDK CLI がテンプレートまたはコミュニティコンポーネントをダウンロードするコンポーネントフォルダを作成および変更します。HelloWorld をコンポーネントの名前、またはこのコンポーネントフォルダを識別するのに役立つ別の名前に置き換えます。

    Linux or Unix
    mkdir HelloWorld cd HelloWorld
    Windows Command Prompt (CMD)
    mkdir HelloWorld cd HelloWorld
    PowerShell
    mkdir HelloWorld cd HelloWorld
  5. テンプレートまたはコミュニティコンポーネントを現在のフォルダにダウンロードします。component init コマンドを使用します。

    • テンプレートからコンポーネントフォルダを作成するには、次のコマンドを実行します。HelloWorld をテンプレートの名前に置き換えて、python をプログラミング言語の名前に置き換えます。

      gdk component init --template HelloWorld --language python
    • コミュニティコンポーネントからコンポーネントフォルダを作成するには、次のコマンドを実行します。ComponentName をコミュニティコンポーネントの名前に置き換えます。

      gdk component init --repository ComponentName
    注記

    GDK CLI v1.0.0 を使用している場合は、このコマンドは空のフォルダで実行する必要があります。GDK CLI がテンプレートまたはコミュニティコンポーネントを現在のフォルダにダウンロードします。

    GDK CLI v1.1.0 以降を使用する場合、--name 引数を使用して、GDK CLI がテンプレートまたはコミュニティコンポーネントをダウンロードするフォルダを指定することができます。この引数を使用する場合は、存在しないフォルダを指定します。GDK CLI によってフォルダが作成されます。この引数を指定しなかった場合、GDK CLI は現在のフォルダを使用しますが、このフォルダは空である必要があります。

  6. GDK CLI は gdk-config.json という名の GDK CLI 設定ファイルから読み込むことで、コンポーネントをビルドおよびパブリッシュします。この設定ファイルは、コンポーネントフォルダのルートにあります。前の手順では、このファイルが作成されました。このステップでは、gdk-config.json をコンポーネントに関する情報で更新します。次のコマンドを実行します

    1. テキストエディタで gdk-config.json を開きます。

    2. (オプション) コンポーネントの名前を変更します。コンポーネント名は、component オブジェクトのキーです。

    3. コンポーネントの作成者を変更します。

    4. (オプション) コンポーネントのバージョンを変更します。次のいずれかを指定します。

      • NEXT_PATCH - このオプションを選択すると、コンポーネントをパブリッシュするときに GDK CLI がバージョンを設定します。GDK CLI は AWS IoT Greengrass サービスを照会して、コンポーネントの最新のパブリッシュバージョンを特定します。次に、そのバージョンの後の次のパッチバージョンにバージョンを設定します。コンポーネントをまだパプリッシュしていない場合は、GDK CLI はバージョン1.0.0 を使用します。

        このオプションを選択する場合、AWS IoT Greengrass Core ソフトウェアが動作するローカル開発用コンピュータにコンポーネントをデプロイしテストするために、Greengrass CLI を使用することはできません。ローカルデプロイを有効にするには、代わりにセマンティックバージョンを指定する必要があります。

      • 1.0.0 などのセマンティックバージョンです。セマンティックバージョンは、major.minor.patch という番号方式になっています。詳細については、「セマンティックバージョンの仕様」を参照してください。

        コンポーネントをデプロイしてテストする Greengrass コアデバイスでコンポーネントを開発する場合は、このオプションを選択します。Greengrass CLI を使用してローカルデプロイを作成する場合は、特定のバージョンでコンポーネントを構築する必要があります。

    5. (オプション) コンポーネントのビルド設定を変更します。ビルド設定では、GDK CLI がコンポーネントのソースをアーティファクトにビルドする方法を定義します。次の build_system のオプションの中から選択します。

      • zip - コンポーネントのフォルダを ZIP ファイルにパッケージ化し、コンポーネントの唯一のアーティファクトとして定義します。次のタイプのコンポーネントには、このオプションを選択します。

        • Python や JavaScript などのインタプリタ形式のプログラミング言語を使用するコンポーネント。

        • 機械学習モデルやその他のリソースなどの、コード以外のファイルをパッケージ化するコンポーネント。

        GDK CLI は、コンポーネントのフォルダをコンポーネントフォルダと同じ名前の zip ファイルに圧縮します。例えば、コンポーネントフォルダの名前が HelloWorld の場合、GDK CLI は HelloWorld.zip という名前の zip ファイルを作成します。

        注記

        Windows デバイスで GDK CLI バージョン 1.0.0 を使用する場合、コンポーネントフォルダと zip ファイル名には小文字のみを含める必要があります。

        GDK CLI がコンポーネントのフォルダを zip ファイルに圧縮する際、次のファイルはスキップされます。

        • gdk-config.json ファイル

        • recipe ファイル (recipe.json または recipe.yaml)

        • ビルドフォルダ (greengrass-build など)

      • maven - mvn clean package コマンドを実行して、コンポーネントのソースをアーティファクト内にビルドします。Java コンポーネントなどの Maven を使用するコンポーネントの場合は、このオプションを選択します。

        Windows デバイスでは、この機能は GDK CLI v1.1.0 以降で利用できます。

      • gradle - gradle build コマンドを実行して、コンポーネントのソースをアーティファクト内にビルドします。Gradle を使用するコンポーネントの場合は、このオプションを選択します。

        この機能は GDK CLI v1.1.0 以降で利用できます。

      • custom - カスタムコマンドを実行して、コンポーネントのソースを recipe とアーティファクトにビルドします。custom_build_command パラメータでカスタムコマンドを指定します。

    6. build_systemcustom を指定する場合は、build オブジェクトに custom_build_command を追加します。custom_build_command で、1 つの文字列または文字列のリストを指定します。各文字列が、コマンド内の単語になります。例えば、C++ コンポーネントのカスタムビルドコマンドを実行する場合は、 ["cmake", "--build", "build", "--config", "Release"] を指定することができます。

    7. GDK CLI v1.1.0 以降を使用する場合、--bucket 引数を指定して、GDK CLI がコンポーネントのアーティファクトをアップロードする S3 バケットを指定します。この引数を指定しない場合、GDK CLI は名前が bucket-region-accountId である S3 バケットにアップロードします。ここでは、gdk-config.json で指定する値は bucketregion であり、accountId は AWS アカウント ID です。GDK CLI は、バケットが存在しない場合に作成します。

      コンポーネントのパブリッシュ設定を変更します。次のコマンドを実行します

      1. コンポーネントのアーティファクトをホストするために使用する S3 バケット名を指定します。

      2. GDK CLI がコンポーネントをパブリッシュする場所となる AWS リージョン を指定します。

    このステップを終了した時点で、gdk-config.json ファイルは、次の例のようになります。

    { "component": { "com.example.PythonHelloWorld": { "author": "Amazon", "version": "NEXT_PATCH", "build": { "build_system" : "zip" }, "publish": { "bucket": "greengrass-component-artifacts", "region": "us-west-2" } } }, "gdk_version": "1.0.0" }
  7. recipe.yaml または recipe.json という名のコンポーネント recipe ファイルを更新します。次のコマンドを実行します

    1. zip ビルドシステムを使用するテンプレートまたはコミュニティコンポーネントをダウンロードした場合は、ZIP アーティファクト名がコンポーネントフォルダの名前と一致していることを確認してください。GDK CLI は、コンポーネントのフォルダをコンポーネントフォルダと同じ名前の zip ファイルに圧縮します。recipe では、コンポーネントアーティファクトのリストと、ZIP アーティファクト内のファイルを使用するライフサイクルスクリプトの中に、ZIP アーティファクトの名前が含まれます。ZIP ファイル名がコンポーネントフォルダの名前と一致するように Artifacts および Lifecycle の定義を更新します。次の recipe 例では、ArtifactsLifecycle の定義内の zip ファイルの名前が強調表示されています。

      JSON
      { ... "Manifests": [ { "Platform": { "os": "all" }, "Artifacts": [ { "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}" } } ] }
      YAML
      --- ... Manifests: - Platform: os: all Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip" Unarchive: ZIP Lifecycle: Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
    2. (オプション) コンポーネントの説明、デフォルト設定、アーティファクト、ライフサイクルスクリプト、およびプラットフォームサポートを更新します。詳細については、「AWS IoT Greengrass コンポーネントレシピのリファレンス」を参照してください。

      重要

      GDK CLI を使用するとき、recipe 属性名は大文字と小文字を区別します。また、コンポーネント recipe のリファレンスにある大文字のパターンと一致する必要があります。

    このステップを終了した時点で、recipe ファイルは、次の例のようになります。

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "{COMPONENT_NAME}", "ComponentVersion": "{COMPONENT_VERSION}", "ComponentDescription": "This is a simple Hello World component written in Python.", "ComponentPublisher": "{COMPONENT_AUTHOR}", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "World" } }, "Manifests": [ { "Platform": { "os": "all" }, "Artifacts": [ { "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}" } } ] }
    YAML
    --- RecipeFormatVersion: "2020-01-25" ComponentName: "{COMPONENT_NAME}" ComponentVersion: "{COMPONENT_VERSION}" ComponentDescription: "This is a simple Hello World component written in Python." ComponentPublisher: "{COMPONENT_AUTHOR}" ComponentConfiguration: DefaultConfiguration: Message: "World" Manifests: - Platform: os: all Artifacts: - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip" Unarchive: ZIP Lifecycle: Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
  8. Greengrass コンポーネントを開発して構築します。コンポーネントビルドコマンドは、コンポーネントフォルダにある greengrass-build フォルダに recipe とアーティファクトを作成します。以下のコマンドを実行します。

    gdk component build

コンポーネントをテストする準備ができたら、GDK CLI を使用して、AWS IoT Greengrass サービスにパブリッシュします。その後に、コンポーネントを Greengrass コアデバイスにデプロイできます。詳細については、「コアデバイスにデプロイするコンポーネントをパブリッシュ」を参照してください。

コンポーネントを作成する (シェルコマンド)

このセクションの手順に従って、複数のコンポーネントのソースコードとアーティファクトが含まれる recipe とアーティファクトフォルダを作成します。

Greengrass コンポーネントを開発するには (シェルコマンド)
  1. recipe とアーティファクトのサブフォルダを含むコンポーネントのフォルダを作成します。Greengrass コアデバイスで次のコマンドを実行してこれらのフォルダを作成し、コンポーネントフォルダに変更します。~/greengrassv2 または %USERPROFILE%\greengrassv2 をローカル開発に使用するフォルダへのパスに置き換えます。

    Linux or Unix
    mkdir -p ~/greengrassv2/{recipes,artifacts} cd ~/greengrassv2
    Windows Command Prompt (CMD)
    mkdir %USERPROFILE%\greengrassv2\recipes, %USERPROFILE%\greengrassv2\artifacts cd %USERPROFILE%\greengrassv2
    PowerShell
    mkdir ~/greengrassv2/recipes, ~/greengrassv2/artifacts cd ~/greengrassv2
  2. テキストエディタを使用して、コンポーネントのメタデータ、パラメータ、依存関係、ライフサイクル、プラットフォーム機能を定義する recipe ファイルを作成します。recipe ファイル名にコンポーネントのバージョンを含めるようにして、どの recipe がどのコンポーネントバージョンを反映しているのかを特定できるようにします。recipe には YAML 形式または JSON 形式を選択できます。

    例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

    JSON
    nano recipes/com.example.HelloWorld-1.0.0.json
    YAML
    nano recipes/com.example.HelloWorld-1.0.0.yaml
    注記

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

  3. コンポーネントの recipe を定義します。詳細については、「AWS IoT Greengrass コンポーネントレシピのリファレンス」を参照してください。

    recipe は、次 Hello World の recipe 例のようになります。

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first AWS IoT Greengrass component.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "world" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" } } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.HelloWorld ComponentVersion: '1.0.0' ComponentDescription: My first AWS IoT Greengrass component. ComponentPublisher: Amazon ComponentConfiguration: DefaultConfiguration: Message: world Manifests: - Platform: os: linux Lifecycle: Run: | python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}" - Platform: os: windows Lifecycle: Run: | py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"

    この recipe は、Hello World Python スクリプトを実行します。次のスクリプト例のようになります。

    import sys message = "Hello, %s!" % sys.argv[1] # Print the message to stdout, which Greengrass saves in a log file. print(message)
  4. 開発するコンポーネントバージョン用のフォルダを作成します。どのアーティファクトがどのコンポーネントバージョンのものなのかを識別できるように、各コンポーネントバージョンのアーティファクトに対して個別のフォルダを使用することをお勧めします。以下のコマンドを実行します。

    Linux or Unix
    mkdir -p artifacts/com.example.HelloWorld/1.0.0
    Windows Command Prompt (CMD)
    mkdir artifacts/com.example.HelloWorld/1.0.0
    PowerShell
    mkdir artifacts/com.example.HelloWorld/1.0.0
    重要

    アーティファクトフォルダのパスには、次のフォーマットを使用する必要があります。recipe で指定したコンポーネント名とバージョンを含めてください。

    artifacts/componentName/componentVersion/
  5. 前のステップで作成したフォルダに、コンポーネントのアーティファクトを作成します。アーティファクトには、ソフトウェア、イメージ、およびその他のコンポーネントが使用するバイナリを含めることができます。

    コンポーネントの準備ができたら、コンポーネントをテストします