

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# コアデバイスにデプロイするコンポーネントをパブリッシュ
<a name="publish-components"></a>

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

[Greengrass Development Kit CLI (GDK CLI)](greengrass-development-kit-cli.md) を使用して[コンポーネントを開発と構築](create-components.md)する場合、[GDK CLI を使用](#publish-component-gdk-cli)してコンポーネントを AWS クラウド にパブリッシュできます。それ以外の場合、[組込み型のシェルコマンドと AWS CLI を使用](#publish-component-shell-commands)してコンポーネントをパブリッシュします。

AWS CloudFormation を使用して、テンプレートでコンポーネントと他の AWS リソースを作成することもできます。詳細については、「AWS CloudFormation ユーザーガイド」の「[AWS CloudFormation とは](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)」と「[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html)」を参照してください。

**Topics**
+ [コンポーネントをパブリッシュ (GDK CLI)](#publish-component-gdk-cli)
+ [コンポーネントをパブリッシュ (シェルコマンド)](#publish-component-shell-commands)

## コンポーネントをパブリッシュ (GDK CLI)
<a name="publish-component-gdk-cli"></a>

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

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

**重要**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
コアデバイスのロールは、デフォルトで S3 バケットへのアクセスを許可しません。この S3 バケットを初めて使用する場合、コアデバイスがこの S3 バケットからコンポーネントアーティファクトを取得するため、ロールに許可を追加する必要があります。詳細については、「[コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する](device-service-role.md#device-service-role-access-s3-bucket)」を参照してください。

**Greengrass コンポーネントをパブリッシュするには (GDK CLI)**

1. コマンドプロントまたはターミナルでコンポーネントフォルダを開きます。

1. まだ作成していない場合、Greengrass コンポーネントを作成します。[コンポーネントビルド](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build)コマンドは、コンポーネントフォルダにある `greengrass-build` フォルダに recipe とアーティファクトを作成します。以下のコマンドを実行してください。

   ```
   gdk component build
   ```

1. コンポーネントを AWS クラウド にパブリッシュします。[コンポーネントをパブリッシュ](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-publish)コマンドは、コンポーネントのアーティファクトを Amazon S3 にアップロードし、各アーティファクトの URI でコンポーネントの recipe を更新します。次に、コンポーネントを AWS IoT Greengrass サービスに作成します。
**注記**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass は、コンポーネントの作成時に各アーティファクトのダイジェストを計算します。つまり、コンポーネントを作成した後、S3 バケットのアーティファクトファイルを修正することはできません。そうした場合、ファイルダイジェストが一致しないため、このコンポーネントを含むデプロイは失敗します。アーティファクトファイルを修正する場合、コンポーネントの新しいバージョンを作成する必要があります。

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

   以下のコマンドを実行してください。

   ```
   gdk component publish
   ```

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

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

## コンポーネントをパブリッシュ (シェルコマンド)
<a name="publish-component-shell-commands"></a>

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

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

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

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

**注記**  <a name="component-version-uniqueness-note"></a>
<a name="component-version-uniqueness-para"></a>アップロードする各コンポーネントバージョンは一意である必要があります。アップロード後は編集できないため、必ず正しいコンポーネントバージョンをアップロードしてください。

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

**コンポーネントをパブリッシュするには (シェルコマンド)**

1. コンポーネントが、AWS IoT Greengrass サービスに存在するバージョンを使用している場合、コンポーネントのバージョンを変更する必要があります。テキストエディタで recipe を開き、バージョンをインクリメントしてファイルを保存します。コンポーネントに加えた変更を反映する新しいバージョンを選択します。
**注記**  <a name="semver-note"></a>
<a name="semver-para"></a>AWS IoT Greengrass はコンポーネントのセマンティックバージョンを使用します。セマンティックバージョンは、major.minor.patch といった番号システムに準拠します。例えば、バージョン `1.0.0` は、コンポーネントの最初のメジャーリリースを表しています。詳細については、「[セマンティックバージョンの仕様](https://semver.org/)」を参照してください。

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

   1. AWS アカウント の S3 バケットにコンポーネントのアーティファクトをパブリッシュします。
**ヒント**  <a name="artifact-path-tip"></a>
S3 バケットのアーティファクトへのパスに、コンポーネント名とバージョンを含めることをお勧めします。この命名規則は、以前のバージョンのコンポーネントが使用していたアーティファクトを維持するうえで役立ち、以前のコンポーネントバージョンを引き続きサポートできるようにします。

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

      ```
      aws s3 cp artifacts/com.example.HelloWorld/1.0.0/artifact.py s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      ```
**重要**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
コアデバイスのロールは、デフォルトで S3 バケットへのアクセスを許可しません。この S3 バケットを初めて使用する場合、コアデバイスがこの S3 バケットからコンポーネントアーティファクトを取得するため、ロールに許可を追加する必要があります。詳細については、「[コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する](device-service-role.md#device-service-role-access-s3-bucket)」を参照してください。

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

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

      ```
      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      ```

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

------
#### [ JSON ]

   ```
   {
     ...
     "Manifests": [
       {
         "Lifecycle": {
           ...
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py",
             "Unarchive": "NONE"
           }
         ]
       }
     ]
   }
   ```

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

------
#### [ YAML ]

   ```
   ...
   Manifests:
     - Lifecycle:
         ...
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py
           Unarchive: NONE
   ```

**注記**  
コンポーネントのデプロイ時に ZIP アーティファクトを解凍するため、`Unarchive: ZIP` オプションを使用して AWS IoT Greengrass Core ソフトウェアを設定できます。コンポーネントで ZIP アーティファクトを使用する方法の詳細については、[アーティファクト: decompressedPath recipe 変数](component-recipe-reference.md#component-recipe-artifacts-decompressed-path)を参照してください。

------

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

1. 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` をコピーして、次のステップでコンポーネントの状態をチェックします。
**注記**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass は、コンポーネントの作成時に各アーティファクトのダイジェストを計算します。つまり、コンポーネントを作成した後、S3 バケットのアーティファクトファイルを修正することはできません。そうした場合、ファイルダイジェストが一致しないため、このコンポーネントを含むデプロイは失敗します。アーティファクトファイルを修正する場合、コンポーネントの新しいバージョンを作成する必要があります。

1. AWS IoT Greengrass サービスの各コンポーネントには状態があります。次のコマンドを実行して、この手順でパブリッシュするコンポーネントバージョンの状態を確認します。*com.example.HelloWorld* と *1.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 コンポーネントをデバイスにデプロイする](manage-deployments.md)」を参照してください。