コアデバイスにデプロイするコンポーネントをパブリッシュ - AWS IoT Greengrass

コアデバイスにデプロイするコンポーネントをパブリッシュ

コンポーネントのバージョンを構築または完成した後、AWS IoT Greengrass サービスにパブリッシュできます。次に、Greengrass コアデバイスにデプロイできます。

Greengrass Development Kit CLI (GDK CLI) を使用してコンポーネントを開発と構築する場合、GDK CLI を使用してコンポーネントを AWS クラウド にパブリッシュできます。それ以外の場合、組込み型のシェルコマンドと AWS CLI を使用してコンポーネントをパブリッシュします。

AWS CloudFormation を使用して、テンプレートでコンポーネントと他の AWS リソースを作成することもできます。詳細については、「AWS CloudFormation ユーザーガイド」の「AWS CloudFormation とは」と「AWS::GreengrassV2::ComponentVersion」を参照してください。

コンポーネントをパブリッシュ (GDK CLI)

このセクションの指示に従って、GDK CLI を使用してコンポーネントをパブリッシュします。GDK CLI は、S3 バケットにビルドアーティファクトをアップロード、recipe のアーティファクト URI を更新、recipe からコンポーネントを作成します。S3 バケットとリージョンが GDK CLI 設定ファイルを使用するように指定します。

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

重要

コアデバイスのロールは、デフォルトで S3 バケットへのアクセスを許可しません。この S3 バケットを初めて使用する場合、コアデバイスがこの S3 バケットからコンポーネントアーティファクトを取得するため、ロールに許可を追加する必要があります。詳細については、「コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する」を参照してください。

Greengrass コンポーネントをパブリッシュするには (GDK CLI)
  1. コマンドプロントまたはターミナルでコンポーネントフォルダを開きます。

  2. まだ作成していない場合、Greengrass コンポーネントを作成します。コンポーネントビルドコマンドは、コンポーネントフォルダにある greengrass-build フォルダに recipe とアーティファクトを作成します。以下のコマンドを実行します。

    gdk component build
  3. コンポーネントを AWS クラウド にパブリッシュします。コンポーネントをパブリッシュコマンドは、コンポーネントのアーティファクトを Amazon S3 にアップロードし、各アーティファクトの URI でコンポーネントの recipe を更新します。次に、コンポーネントを AWS IoT Greengrass サービスに作成します。

    注記

    AWS IoT Greengrass は、コンポーネントの作成時に各アーティファクトのダイジェストを計算します。つまり、コンポーネントを作成した後、S3 バケットのアーティファクトファイルを修正することはできません。そうした場合、ファイルダイジェストが一致しないため、このコンポーネントを含むデプロイは失敗します。アーティファクトファイルを修正する場合、コンポーネントの新しいバージョンを作成する必要があります。

    GDK CLI 設定ファイルのコンポーネントバージョンに NEXT_PATCH を指定した場合、GDK CLI は AWS IoT Greengrass サービスにまだ存在しない次のパッチバージョンを使用します。

    以下のコマンドを実行します。

    gdk component publish

    出力には、GDK CLI が作成したコンポーネントのバージョンが示されます。

    コンポーネントをパブリッシュした後、コンポーネントをコアデバイスにデプロイできます。詳細については、「デバイスに AWS IoT Greengrass コンポーネントのデプロイ」を参照してください。

コンポーネントをパブリッシュ (シェルコマンド)

シェルコマンドと AWS Command Line Interface (AWS CLI) を使用してコンポーネントをパブリッシュするには、次の手順を実行します。コンポーネントをパブリッシュするときは、次の手順を実行します。

  1. S3 バケットにコンポーネントアーティファクトをパブリッシュします。

  2. 各アーティファクトの Amazon S3 URI をコンポーネント recipe に追加します。

  3. コンポーネント recipe から AWS IoT Greengrass でコンポーネントバージョンを作成します。

注記

アップロードする各コンポーネントバージョンは一意である必要があります。アップロード後は編集できないため、必ず正しいコンポーネントバージョンをアップロードしてください。

これらの手順に従って、開発コンピュータまたは Greengrass コアデバイスからコンポーネントをパブリッシュできます。

コンポーネントをパブリッシュするには (シェルコマンド)
  1. コンポーネントが、AWS IoT Greengrass サービスに存在するバージョンを使用している場合、コンポーネントのバージョンを変更する必要があります。テキストエディタで recipe を開き、バージョンをインクリメントしてファイルを保存します。コンポーネントに加えた変更を反映する新しいバージョンを選択します。

    注記

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

  2. コンポーネントにアーティファクトがある場合、次の手順を実行します。

    1. AWS アカウント の S3 バケットにコンポーネントのアーティファクトをパブリッシュします。

      ヒント

      S3 バケットのアーティファクトへのパスに、コンポーネント名とバージョンを含めることをお勧めします。この命名規則は、以前のバージョンのコンポーネントが使用していたアーティファクトを維持するうえで役立ち、以前のコンポーネントバージョンを引き続きサポートできるようにします。

      次のコマンドを実行して、アーティファクトファイルを S3 バケットにパブリッシュします。DOC-EXAMPLE-BUCKET をバケットの名前に置き換えて、artifacts/com.example.HelloWorld/1.0.0/artifact.py をアーティファクトファイルへのパスに置き換えます。

      aws s3 cp artifacts/com.example.HelloWorld/1.0.0/artifact.py s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      重要

      コアデバイスのロールは、デフォルトで S3 バケットへのアクセスを許可しません。この S3 バケットを初めて使用する場合、コアデバイスがこの S3 バケットからコンポーネントアーティファクトを取得するため、ロールに許可を追加する必要があります。詳細については、「コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する」を参照してください。

    2. Artifacts という名前のリストが存在しない場合、コンポーネント recipe に追加します。Artifacts リストは各マニフェストに表示され、サポートする各プラットフォームにおけるコンポーネントの要件 (またはすべてのプラットフォームに対するコンポーネントのデフォルト要件) を定義します。

    3. 各アーティファクトをアーティファクトのリストに追加、あるいは既存アーティファクトの URI を更新します。Amazon S3 URI は、バケット名とバケット内のアーティファクトオブジェクトへのパスで設定されます。アーティファクトの Amazon S3 URI は次の例のようになります。

      s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.HelloWorld/1.0.0/artifact.py

    これらのステップが完了したら、recipe の Artifacts リストは次のようになります。

    JSON
    { ... "Manifests": [ { "Lifecycle": { ... }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/MyGreengrassComponent/1.0.0/artifact.py", "Unarchive": "NONE" } ] } ] }
    注記

    ZIP アーティファクトに "Unarchive": "ZIP" オプションを追加して AWS IoT Greengrass Core ソフトウェアを設定して、コンポーネントのデプロイ時にアーティファクトを解凍できます。

    YAML
    ... Manifests: - Lifecycle: ... Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/MyGreengrassComponent/1.0.0/artifact.py Unarchive: NONE
    注記

    コンポーネントのデプロイ時に ZIP アーティファクトを解凍するため、Unarchive: ZIP オプションを使用して AWS IoT Greengrass Core ソフトウェアを設定できます。コンポーネントで ZIP アーティファクトを使用する方法の詳細については、アーティファクト: decompressedPath recipe 変数を参照してください。

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

  3. AWS IoT Greengrass コンソールを使用して、recipe ファイルからコンポーネントを作成します。

    次のコマンドを実行して、recipe ファイルからコンポーネントを作成します。このコマンドは、コンポーネントを作成して AWS アカウント のプライベート AWS IoT Greengrass コンポーネントとしてパブリッシュします。path/to/recipeFile を recipe ファイルへのパスに置き換えます。

    aws greengrassv2 create-component-version --inline-recipe fileb://path/to/recipeFile

    レスポンスから arn をコピーして、次のステップでコンポーネントの状態をチェックします。

    注記

    AWS IoT Greengrass は、コンポーネントの作成時に各アーティファクトのダイジェストを計算します。つまり、コンポーネントを作成した後、S3 バケットのアーティファクトファイルを修正することはできません。そうした場合、ファイルダイジェストが一致しないため、このコンポーネントを含むデプロイは失敗します。アーティファクトファイルを修正する場合、コンポーネントの新しいバージョンを作成する必要があります。

  4. AWS IoT Greengrass サービスの各コンポーネントには状態があります。次のコマンドを実行して、この手順でパブリッシュするコンポーネントバージョンの状態を確認します。com.example.HelloWorld1.0.0 をクエリするコンポーネントバージョンに置き換えます。arn を、前のステップで書き留めた ARN に置き換えます。

    aws greengrassv2 describe-component --arn "arn:aws:greengrass:region:account-id:components:com.example.HelloWorld:versions:1.0.0"

    このオペレーションは、コンポーネントのメタデータを含むレスポンスを返します。メタデータには、コンポーネントの状態とエラーを含む status オブジェクトが含まれています (該当する場合)。

    コンポーネントの状態が DEPLOYABLE な場合、コンポーネントをデバイスにデプロイできます。詳細については、「デバイスに AWS IoT Greengrass コンポーネントのデプロイ」を参照してください。