

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

# AWS IoT Greengrass 開発ツール
<a name="greengrass-development-tools"></a>

 AWS IoT Greengrass 開発ツールを使用して、カスタム Greengrass コンポーネントを作成、テスト、構築、公開、デプロイします。
+ **[Greengrass Development Kit CLI](greengrass-development-kit-cli.md)**

  ローカル開発環境で AWS IoT Greengrass Development Kit コマンドラインインターフェイス (GDK CLI) を使用して、[Greengrass ソフトウェアカタログ](greengrass-software-catalog.md)のテンプレートとコミュニティコンポーネントからコンポーネントを作成します。GDK CLI を使用してコンポーネントを構築し、そのコンポーネントを のプライベートコンポーネントとして AWS IoT Greengrass サービスに発行できます AWS アカウント。
+ **[Greengrass コマンドラインインターフェイス](gg-cli.md)**

  Greengrass コアデバイスで Greengrass コマンドラインインターフェイス (Greengrass CLI) を使用して、Greengrass コンポーネントのデプロイとデバッグを行います。Greengrass CLI は、コアデバイスにデプロイできるコンポーネントで、ローカルデプロイの作成、インストールされたコンポーネントの詳細の表示、およびログファイルの検索を行うことができます。
+ **[ローカルデバッグコンソール](local-debug-console-component.md)**

  Greengrass コアデバイスのローカルデバッグコンソールで、ローカルダッシュボードウェブインターフェイスを使用して Greengrass コンポーネントをデプロイおよびデバッグします。ローカルデバッグコンソールは、コアデバイスにデプロイしてローカルデプロイを作成し、インストールされているコンポーネントの詳細を表示できるコンポーネントです。

AWS IoT Greengrass には、カスタム Greengrass コンポーネントで使用できる以下の SDKs も用意されています。
+  AWS IoT Device SDK および AWS IoT Greengrass コンポーネント SDK。これには、プロセス間通信 (IPC) ライブラリが含まれています。詳細については、「[を使用して AWS IoT Device SDK Greengrass nucleus、その他のコンポーネント、および と通信します。 AWS IoT CoreGreengrass nucleus、他のコンポーネント、および と通信する AWS IoT Core](interprocess-communication.md)」を参照してください。
+ データストリームを AWS クラウドに転送するために使用できる、Stream Manager SDK。詳細については、「[Greengrass コアデバイスでのデータストリームの管理](manage-data-streams.md)」を参照してください。

**Topics**
+ [AWS IoT Greengrass Development Kit Command-Line Interface](greengrass-development-kit-cli.md)
+ [Greengrass コマンドラインインターフェイス](gg-cli.md)
+ [AWS IoT Greengrass テストフレームワークを使用する](gg-testing-framework.md)

# AWS IoT Greengrass Development Kit Command-Line Interface
<a name="greengrass-development-kit-cli"></a>

AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) は、[カスタム Greengrass コンポーネント](develop-greengrass-components.md)の開発に役立つ機能を提供します。GDK CLI を使用して、カスタムコンポーネントを作成、ビルドおよびパブリッシュできます。GDK CLI でコンポーネントリポジトリを作成する場合、[Greengrass Software Catalog](greengrass-software-catalog.md) (Greengrass ソフトウェアカタログ) のテンプレートまたはコミュニティコンポーネントから開始できます。次に、ファイルを ZIP アーカイブとしてパッケージ化する、Maven または Gradle 構築スクリプトを使用する、またはカスタム構築コマンドを実行する構築システムを選択できます。コンポーネントの作成後、GDK CLI を使用して AWS IoT Greengrass サービスにパブリッシュして、Greengrass コアデバイスにコンポーネントをデプロイするための AWS IoT Greengrass コンソールまたは API を使用できるようにします。

GDK CLI を使用せずに Greengrass コンポーネントを開発する場合は、コンポーネントの新しいバージョンを作成するたびに[コンポーネント recipe ファイル](component-recipe-reference.md)でバージョンとアーティファクト URI を更新する必要があります。GDK CLI を使用すると、新しいバージョンのコンポーネントをパブリッシュするたびに、自動的にバージョンとアーティファクト URI を更新できます。

GDK CLI はオープンソースであり、GitHub で利用できます。GDK CLI は、コンポーネント開発のニーズに合わせてカスタマイズおよび拡張できます。GitHub リポジトリで Issue やプルリクエストを開くことをお勧めます。GDK CLI ソースは、次のリンク先で見つけることができます。[https://github.com/aws-greengrass/aws-greengrass-gdk-cli](https://github.com/aws-greengrass/aws-greengrass-gdk-cli)。

## 前提条件
<a name="gdk-cli-prerequisites"></a>

Greengrass Development Kit CLI をインストールして使用するには、次のものが必要です。
+ AWS アカウント。アカウントをお持ちでない場合は、「[のセットアップ AWS アカウント](setting-up.md#set-up-aws-account)」を参照してください。
+ インターネットに接続された Windows、macOS、または Unix のような開発用コンピュータ。
+ GDK CLI バージョン 1.1.0 以降の場合、[Python](https://www.python.org/downloads/) 3.6 以降がインストールされた開発用コンピュータ。

  GDK CLI バージョン 1.0.0 の場合、[Python](https://www.python.org/downloads/) 3.8 以降がインストールされた開発用コンピュータ。
+ [Git](https://git-scm.com/) が開発コンピュータにインストールされていること。
+ <a name="development-component-aws-cli-prerequisite"></a>開発コンピュータに AWS Command Line Interface (AWS CLI) がインストールされており、認証情報が設定されていること。詳細については、「AWS Command Line Interface ユーザーガイド」の「[AWS CLI のインストール、更新、アンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」と「[AWS CLI の設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」を参照してください。
**注記**  
Raspberry Pi または別の 32 ビット ARM デバイスを使用する場合は、AWS CLI V1.AWS CLI をインストールします。V2 は 32 ビット ARM デバイスでは利用できません。詳細については、「[AWS CLI バージョン 1 のインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html)」を参照してください。
+ GDK CLI を使用して AWS IoT Greengrass サービスにコンポーネントをパブリッシュするには、次の権限が必要です。
  + `s3:CreateBucket`
  + `s3:GetBucketLocation`
  + `s3:PutObject`
  + `greengrass:CreateComponentVersion`
  + `greengrass:ListComponentVersions`
+ GDK CLI を使用して、ローカルファイルシステムではなく S3 バケット内にアーティファクトが存在するコンポーネントを構築するには、以下の権限が必要です。
  + `s3:ListBucket`

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

## 変更ログ
<a name="gdk-cli-changelog"></a>

次の表に、GDK CLI の各バージョンの変更をまとめています。詳細については、GitHub の「[GDK CLI リリースページ](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/releases)」を参照してください。


|  **バージョン**  |  **変更**  | 
| --- | --- | 
|  1.6.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.6.1  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.6.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.5.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.4.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.3.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.0.0  |  当初のバージョン  | 

# AWS IoT Greengrass Development Kit Command-Line Interface をインストールまたは更新する
<a name="install-greengrass-development-kit-cli"></a>

AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) は Python 上に構築されているため、開発用コンピュータへのインストールには `pip` を使用できます。

**ヒント**  
GDK CLI は、[venv](https://docs.python.org/3/library/venv.html#module-venv) などの Python 仮想環境にインストールすることもできます。詳細については、「Python 3 ドキュメント」の「[仮想環境とパッケージ](https://docs.python.org/3/tutorial/venv.html)」を参照してください。

**GDK CLI のインストールまたは更新**

1. [GitHub リポジトリ](https://github.com/aws-greengrass/aws-greengrass-gdk-cli)から GDK CLI の最新バージョンをインストールするには、以下のコマンドを実行します。

   ```
   python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@v1.6.2
   ```
**注記**  
GDK CLI の特定のバージョンをインストールするには、*VersionTag* をインストールするバージョンタグに置き換えます。GDK CLI のバージョンタグは、[GitHub リポジトリ](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/tags)で確認できます。  

   ```
   python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@versionTag
   ```

1. <a name="gdk-cli-verify-installation"></a>GDK CLI が正常にインストールされたことを確認するには、次のコマンドを実行します。

   ```
   gdk --help
   ```

   `gdk` コマンドが見つからない場合は、コマンドのフォルダを PATH に追加してください。
   + Linux デバイスの場合、`/home/MyUser/.local/bin` を PATH に追加して、*MyUser* をユーザーの名前に置き換えます。
   + Windows デバイスの場合、`PythonPath\\Scripts` を PATH に追加して、*PythonPath* をデバイスの Python フォルダへのパスに置き換えます。

GDK CLI を使用して、Greengrass コンポーネントを作成、ビルドおよびパブリッシュできるようになりました。GDK CLI の使用方法の詳細については、「[AWS IoT Greengrass Development Kit Command-Line Interface コマンド](greengrass-development-kit-cli-commands.md)」を参照してください。

# AWS IoT Greengrass Development Kit Command-Line Interface コマンド
<a name="greengrass-development-kit-cli-commands"></a>

AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) は、開発コンピュータで Greengrass コンポーネントを作成、ビルド、パブリッシュするために使用できるコマンドラインインターフェイスを提供します。GDK CLI コマンドは次の形式を使用します。

```
gdk <command> <subcommand> [arguments]
```

[GDK CLI をインストールする](install-greengrass-development-kit-cli.md)際に、コマンドラインから GDK CLI を実行できるように、インストーラでパスに `gdk` が追加されます。

すべてのコマンドに対して、次の引数を使用できます。
+ GDK CLI コマンドの詳細については、`-h` または `--help` を使用します。
+ GDK CLI のどのバージョンがインストールされているかを確認するには、`-v` または `--version` を使用します。
+ GDK CLI のデバッグに使用できる詳細なログを出力するには、`-d` または `--debug` を使用します。

このセクションでは、GDK CLI コマンドについて説明し、各コマンドの例を示します。各コマンドの概要には、その引数とその使用法が示されています。オプションの引数は角括弧で囲んで表示しています。

**Topics**
+ [コンポーネント](greengrass-development-kit-cli-component.md)
+ [config](greengrass-development-kit-cli-config.md)
+ [test-e2e](greengrass-development-kit-cli-test.md)

# コンポーネント
<a name="greengrass-development-kit-cli-component"></a>

Greengrass コンポーネントの作成、ビルド、パブリッシュには、AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) の `component` コマンドを使用します。

**Topics**
+ [初期化](#greengrass-development-kit-cli-component-init)
+ [ビルド](#greengrass-development-kit-cli-component-build)
+ [公開](#greengrass-development-kit-cli-component-publish)
+ [リスト](#greengrass-development-kit-cli-component-list)

## 初期化
<a name="greengrass-development-kit-cli-component-init"></a>

コンポーネントテンプレートまたはコミュニティコンポーネントから Greengrass コンポーネントフォルダを初期化します。

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI は、[Greengrass Software Catalog](greengrass-software-catalog.md) および [GitHub 上の AWS IoT Greengrass コンポーネントテンプレートリポジトリ](https://github.com/aws-greengrass/aws-greengrass-component-templates)のコンポーネントテンプレートからコミュニティコンポーネントを取得します。

**注記**  
<a name="gdk-cli-component-init-empty-folder-requirement"></a>GDK CLI v1.0.0 を使用している場合は、このコマンドは空のフォルダで実行する必要があります。GDK CLI がテンプレートまたはコミュニティコンポーネントを現在のフォルダにダウンロードします。  
<a name="gdk-cli-component-init-empty-folder-requirement-gdk-cli-v1.1.0"></a>GDK CLI v1.1.0 以降を使用する場合、`--name` 引数を使用して、GDK CLI がテンプレートまたはコミュニティコンポーネントをダウンロードするフォルダを指定することができます。この引数を使用する場合は、存在しないフォルダを指定します。GDK CLI によってフォルダが作成されます。この引数を指定しなかった場合、GDK CLI は現在のフォルダを使用しますが、このフォルダは空である必要があります。  
コンポーネントが [Zip ビルドシステム](gdk-cli-configuration-file.md#gdk-cli-configuration-file-build-system)を使用する場合、GDK CLI は、コンポーネントのフォルダ内の特定のファイルを、コンポーネントフォルダと同じ名前の zip ファイルに圧縮します。例えば、コンポーネントフォルダの名前が `HelloWorld` の場合、GDK CLI は `HelloWorld.zip` という名前の zip ファイルを作成します。コンポーネント recipe では、zip アーティファクト名はコンポーネントフォルダの名前と一致する必要があります。Windows デバイスで GDK CLI バージョン 1.0.0 を使用する場合、コンポーネントフォルダと zip ファイル名には小文字のみを含める必要があります。  
zip ビルドシステムを使用するテンプレートまたはコミュニティコンポーネントをテンプレートまたはコンポーネントとは異なる名前のフォルダに初期化する場合は、コンポーネント recipe で zip アーティファクト名を変更する必要があります。ZIP ファイル名がコンポーネントフォルダの名前と一致するように `Artifacts` および `Lifecycle` の定義を更新します。次の例では、`Artifacts` と `Lifecycle` の定義内の zip ファイル名を強調表示しています。  

```
{
  ...
  "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}"
      }
    }
  ]
}
```

```
---
...
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}"
```

**概要**  

```
$ gdk component init
    [--language]
    [--template]
    [--repository]
    [--name]
```

**引数 (コンポーネントテンプレートから初期化)**  
+ `-l`、`--language` - 指定したテンプレートに使用するプログラミング言語。

  `--repository` または `--language` および `--template` を指定する必要があります。
+ `-t`、`--template` - ローカルコンポーネントプロジェクトに使用するコンポーネントテンプレート。利用可能なテンプレートを表示するには、[list](#greengrass-development-kit-cli-component-list) コマンドを使用します。

  `--repository` または `--language` および `--template` を指定する必要があります。
+ `-n`、`--name` - (オプション) GDK CLI がコンポーネントを初期化するローカルフォルダの名前。存在しないフォルダを指定します。GDK CLI によってフォルダが作成されます。

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

**引数 (コミュニティコンポーネントから初期化)**  
+ `-r`、`--repository` - ローカルフォルダにチェックアウトするコミュニティコンポーネント。利用可能なコミュニティコンポーネントを表示するには、[list](#greengrass-development-kit-cli-component-list) コマンドを使用します。

  `--repository` または `--language` および `--template` を指定する必要があります。
+ `-n`、`--name` - (オプション) GDK CLI がコンポーネントを初期化するローカルフォルダの名前。存在しないフォルダを指定します。GDK CLI によってフォルダが作成されます。

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

**出力**:  
次の例は、このコマンドを実行して Python Hello World テンプレートからコンポーネントフォルダを初期化したときに生成される出力を示しています。  

```
$ gdk component init -l python -t HelloWorld
[2021-11-29 12:51:40] INFO - Initializing the project directory with a python component template - 'HelloWorld'.
[2021-11-29 12:51:40] INFO - Fetching the component template 'HelloWorld-python' from Greengrass Software Catalog.
```
次の例は、このコマンドを実行してコミュニティコンポーネントからコンポーネントフォルダを初期化したときに生成される出力を示しています。  

```
$ gdk component init -r aws-greengrass-labs-database-influxdb
[2022-01-24 15:44:33] INFO - Initializing the project directory with a component from repository catalog - 'aws-greengrass-labs-database-influxdb'.
[2022-01-24 15:44:33] INFO - Fetching the component repository 'aws-greengrass-labs-database-influxdb' from Greengrass Software Catalog.
```

## ビルド
<a name="greengrass-development-kit-cli-component-build"></a>

AWS IoT Greengrass サービスにパブリッシュできる recipe とアーティファクトにコンポーネントのソースを構築します。GDK CLI は、[GDK CLI configuration file](gdk-cli-configuration-file.md) (GDK CLI 設定ファイル) で指定した `gdk-config.json` で構築システムを実行します。このコマンドは、`gdk-config.json` ファイルが存在するフォルダと同じフォルダで実行する必要があります。

このコマンドを実行すると、GDK CLI は、コンポーネントフォルダ内の `greengrass-build` フォルダに recipe とアーティファクトを作成します。GDK CLI は、recipe を `greengrass-build/recipes` フォルダに保存し、アーティファクトを `greengrass-build/artifacts/componentName/componentVersion` フォルダに保存します。

GDK CLI v1.1.0 以降を使用すると、コンポーネント recipe で S3 バケットには存在して、ローカルコンポーネントの構築フォルダには存在しないアーティファクトを指定できます。この機能を使用すると、機械学習モデルなどの大きなアーティファクトを有するコンポーネントを開発するときに、帯域幅の使用量を減らすことができます。

コンポーネントの構築後は、以下のいずれかの操作を実行すると Greengrass コアデバイス上でコンポーネントをテストできます。
+ AWS IoT Greengrass Core ソフトウェアの実行場所とは異なるデバイスで開発する場合、Greengrass コアデバイスにデプロイするには、コンポーネントをパブリッシュする必要があります。コンポーネントを AWS IoT Greengrass サービスにパブリッシュし、Greengrass コアデバイスにデプロイします。詳細については、「[パブリッシュ](#greengrass-development-kit-cli-component-build)コマンド」および「[デプロイの作成](create-deployments.md)」を参照してください。
+ AWS IoT Greengrass Core ソフトウェアを実行しているデバイスと同じデバイスで開発する場合、コンポーネントを AWS IoT Greengrass サービスにデプロイするか、ローカルデプロイを作成してコンポーネントをインストールして実行することができます。ローカルデプロイを作成するには、Greengrass CLI を使用します。詳細については、「[Greengrass コマンドラインインターフェイス](gg-cli.md)」および「[ローカルデプロイで AWS IoT Greengrass コンポーネントをテストする](test-components.md)」を参照してください。ローカルデプロイを作成するときは、`greengrass-build/recipes` を recipe フォルダとして、`greengrass-build/artifacts` をアーティファクトフォルダとして使用します。

**概要**  

```
$ gdk component build
```

**引数**:  
なし

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk component build
[2021-11-29 13:18:49] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:18:49] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:18:49] INFO - Building the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:18:49] INFO - Using 'zip' build system to build the component.
[2021-11-29 13:18:49] WARNING - This component is identified as using 'zip' build system. If this is incorrect, please exit and specify custom build command in the 'gdk-config.json'.
[2021-11-29 13:18:49] INFO - Zipping source code files of the component.
[2021-11-29 13:18:49] INFO - Copying over the build artifacts to the greengrass component artifacts build folder.
[2021-11-29 13:18:49] INFO - Updating artifact URIs in the recipe.
[2021-11-29 13:18:49] INFO - Creating component recipe in 'C:\Users\MyUser\Documents\greengrass-components\python\HelloWorld\greengrass-build\recipes'.
```

## 公開
<a name="greengrass-development-kit-cli-component-publish"></a>

このコンポーネントを AWS IoT Greengrass サービスにパブリッシュします。このコマンドは、構築したアーティファクトを S3 バケットにアップロードし、recipe 内のアーティファクト URI を更新し、recipe からコンポーネントの新しいバージョンを作成します。GDK CLI は S3 バケットと、[GDK CLI configuration file](gdk-cli-configuration-file.md) (GDK CLI 設定ファイル) の `gdk-config.json` で指定した AWS リージョンを使用します。このコマンドは、`gdk-config.json` ファイルが存在するフォルダと同じフォルダで実行する必要があります。

<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 は、バケットが存在しない場合に作成します。

GDK CLI v1.2.0 以降を使用する場合には、`--region` パラメータを使用して、GDK CLI 設定ファイル内で指定されている AWS リージョン を上書きできます。`--options` パラメータを使用すると、追加のオプションを指定することも可能です。使用可能なオプションのリストについては、「[Greengrass Development Kit CLI 設定ファイル](gdk-cli-configuration-file.md)」を参照してください。

このコマンドを実行すると、GDK CLI は、recipe で指定したバージョンでコンポーネントをパブリッシュします。`NEXT_PATCH` を指定した場合、GDK CLI は、まだ存在しない次のパッチバージョンを使用します。セマンティックバージョンは、major.minor.patch という番号方式になっています。詳細については、「[セマンティックバージョンの仕様](https://semver.org/)」を参照してください。

**注記**  
GDK CLI v1.1.0 以降を使用する場合、このコマンドを実行すると、GDK CLI はコンポーネントが構築されているかどうかをチェックします。コンポーネントが構築されていない場合は、GDK CLI はコンポーネントをパブリッシュする前に[コンポーネントを構築](#greengrass-development-kit-cli-component-build)します。

**概要**  

```
$ gdk component publish
    [--bucket] [--region] [--options]
```

**引数**:  
+ `-b`,`--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 は、バケットが存在しない場合に作成します。

  GDK CLI は、バケットが存在しない場合に作成します。

  この機能は GDK CLI v1.1.0 以降で利用できます。
+ `-r`、`--region` – (オプション) コンポーネントを作成する際の、送り先となる AWS リージョン の名前を指定します。この引数は、GDK CLI 設定内にあるリージョン名を上書きしま

  この機能は GDK CLI v1.2.0 以降で利用できます。
+ `-o`、`--options` (オプション) コンポーネントを公開するためのオプションのリストを指定します。この引数は、有効な JSON 文字列か、公開オプションが記載されている JSON ファイルへのファイルパスにする必要があります。この引数は、GDK CLI 設定内のオプションよりも優先されます。

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

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk component publish
[2021-11-29 13:45:29] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:45:29] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:45:29] INFO - Found credentials in shared credentials file: ~/.aws/credentials
[2021-11-29 13:45:30] INFO - Publishing the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:45:30] INFO - No private version of the component 'com.example.PythonHelloWorld' exist in the account. Using '1.0.0' as the next version to create.
[2021-11-29 13:45:30] INFO - Uploading the component built artifacts to s3 bucket.
[2021-11-29 13:45:30] INFO - Uploading component artifacts to S3 bucket: {bucket}. If this is your first time using this bucket, add the 's3:GetObject' permission to each core device's token exchange role to allow it to download the component artifacts. For more information, see https://docs.aws.amazon.com/greengrass/v2/developerguide/device-service-role.html.
[2021-11-29 13:45:30] INFO - Not creating an artifacts bucket as it already exists.
[2021-11-29 13:45:30] INFO - Updating the component recipe com.example.PythonHelloWorld-1.0.0.
[2021-11-29 13:45:30] INFO - Creating a new greengrass component com.example.PythonHelloWorld-1.0.0
[2021-11-29 13:45:30] INFO - Created private version '1.0.0' of the component in the account.'com.example.PythonHelloWorld'.
```

## リスト
<a name="greengrass-development-kit-cli-component-list"></a>

利用可能なコンポーネントテンプレートとコミュニティコンポーネントのリストを取得します。

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI は、[Greengrass Software Catalog](greengrass-software-catalog.md) および [GitHub 上の AWS IoT Greengrass コンポーネントテンプレートリポジトリ](https://github.com/aws-greengrass/aws-greengrass-component-templates)のコンポーネントテンプレートからコミュニティコンポーネントを取得します。

このコマンドの出力を [init](#greengrass-development-kit-cli-component-init) コマンドにパスすることで、テンプレートとコミュニティコンポーネントからコンポーネントリポジトリを初期化できます。

**概要**  

```
$ gdk component list
    [--template]
    [--repository]
```

**引数**:  
+ `-t`、`--template` - (オプション) 利用可能なコンポーネントテンプレートを一覧表示するには、この引数を指定します。このコマンドは、各テンプレートの名前と言語を `name-language` の形式で出力します。たとえば、`HelloWorld-python` の場合、テンプレート名は `HelloWorld` そして言語は `python` になります。
+ `-r`、`--repository` - (オプション) 利用可能なコミュニティコンポーネントリポジトリを一覧表示するには、この引数を指定します。

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk component list --template
[2021-11-29 12:29:04] INFO - Listing all the available component templates from Greengrass Software Catalog.
[2021-11-29 12:29:04] INFO - Found '2' component templates to display.
1. HelloWorld-python
2. HelloWorld-java
```

# config
<a name="greengrass-development-kit-cli-config"></a>

AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) の `config` コマンドを使用して、設定ファイル `gdk-config.json` の GDK の設定を変更します。

**Topics**
+ [更新](#greengrass-development-kit-cli-config-update)

## 更新
<a name="greengrass-development-kit-cli-config-update"></a>

インタラクティブプロンプトを起動して、既存の GDK 設定ファイル内のフィールドを変更します。

**概要**  

```
$ gdk config update
    [--component]
```

**引数**:  
+ `-c`、`--component` - `gdk-config.json` ファイル内のコンポーネント関連のフィールドを更新します。この引数は唯一のオプションのため必須です。

**出力**:  
次の例は、このコマンドを実行してコンポーネントを設定するときに生成される出力を示しています。  

```
$ gdk config update --component
Current value of the REQUIRED component_name is (default: com.example.PythonHelloWorld): 
Current value of the REQUIRED author is (default: author): 
Current value of the REQUIRED version is (default: NEXT_PATCH): 
Do you want to change the build configurations? (y/n) 
Do you want to change the publish configurations? (y/n)
[2023-09-26 10:19:48] INFO - Config file has been updated. Exiting...
```

# test-e2e
<a name="greengrass-development-kit-cli-test"></a>

AWS IoT Greengrass Development Kit コマンドラインインターフェイス (GDK CLI) の `test-e2e` コマンドを使用して、GDK プロジェクトのエンドツーエンドのテストモジュールを初期化、構築、実行します。

**Topics**
+ [初期化](#greengrass-development-kit-cli-test-init)
+ [ビルド](#greengrass-development-kit-cli-test-build)
+ [run](#greengrass-development-kit-cli-test-run)

## 初期化
<a name="greengrass-development-kit-cli-test-init"></a>

Greengrass Testing Framework (GTF) を使用するテストモジュールを使用して、既存の GDK CLI プロジェクトを初期化します。

デフォルトでは、GDK CLI は [GitHub の AWS IoT Greengrass コンポーネントテンプレートリポジトリ](https://github.com/aws-greengrass/aws-greengrass-component-templates)から Maven モジュールテンプレートを取得します。この Maven モジュールには、`aws-greengrass-testing-standalone` JAR ファイルに対する依存関係が含まれています。

このコマンドは、GDK プロジェクト内に `gg-e2e-tests` という新しいディレクトリを作成します。テストモジュールディレクトリが既に存在しており、かつ、空でない場合、コマンドは何もせずに終了します。この `gg-e2e-tests` フォルダには、Maven プロジェクトで構造化された Cucumber 機能とステップ定義が含まれています。

デフォルトでは、このコマンドは最新バージョンの GTF を使用しようとします。

**概要**  

```
$ gdk test-e2e init
    [--gtf-version]
```

**引数**:  
+ `-ov`、`--gtf-version` – (オプション) GDK プロジェクトのエンドツーエンドのテストモジュールで使用する GTF のバージョン。この値は、[リリース](https://github.com/aws-greengrass/aws-greengrass-testing/releases)の GTF バージョンの 1 つである必要があります。この引数は、GDK CLI 設定内の `gtf_version` よりも優先されます。

**出力**:  
次の例は、このコマンドを実行し、テストモジュールを使用して GDK プロジェクトを初期化したときに生成される出力を示しています。  

```
$ gdk test-e2e init
[2023-12-06 12:20:28] INFO - Using the GTF version provided in the GDK test config 1.2.0
[2023-12-06 12:20:28] INFO - Downloading the E2E testing template from GitHub into gg-e2e-tests directory...
```

## ビルド
<a name="greengrass-development-kit-cli-test-build"></a>

**注記**  
エンドツーエンドのテストモジュールを構築する前に、**gdk component build** を実行してコンポーネントを構築する必要があります。

エンドツーエンドのテストモジュールを構築します。GDK CLI は、`test-e2e` プロパティの下の [GDK CLI 設定ファイル](gdk-cli-configuration-file.md) `gdk-config.json` で指定したビルドシステムを使用してテストモジュールを構築します。このコマンドは、`gdk-config.json` ファイルが存在するフォルダと同じフォルダで実行する必要があります。

デフォルトでは、GDK CLI は Maven ビルドシステムを使用してテストモジュールを構築します。`gdk test-e2e build` コマンドを実行するには [Maven](https://maven.apache.org/) が必要です。

テスト機能ファイルに補間する `GDK_COMPONENT_NAME` や `GDK_COMPONENT_RECIPE_FILE` などの変数がある場合は、テストモジュールを構築する前に **gdk-component-build** を実行してコンポーネントを構築する必要があります。

このコマンドを実行すると、GDK CLI は GDK プロジェクト設定からすべての変数を補間し、`gg-e2e-tests` モジュールを構築して最終的なテスト JAR ファイルを生成します。

**概要**  

```
$ gdk test-e2e build
```

**引数**:  
なし

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk test-e2e build
[2023-07-20 15:36:48] INFO - Updating feature file: file:///path/to//HelloWorld/greengrass-build/gg-e2e-tests/src/main/resources/greengrass/features/component.feature
[2023-07-20 15:36:48] INFO - Creating the E2E testing recipe file:///path/to/HelloWorld/greengrass-build/recipes/e2e_test_recipe.yaml
[2023-07-20 15:36:48] INFO - Building the E2E testing module
[2023-07-20 15:36:48] INFO - Running the build command 'mvn package'
.........
```

## run
<a name="greengrass-development-kit-cli-test-run"></a>

GDK 設定ファイル内のテストオプションを使用してテストモジュールを実行します。

**注記**  
エンドツーエンドのテストを実行する前に、**gdk test-e2e build** を実行してテストモジュールを構築する必要があります。

**概要**  

```
$ gdk test-e2e run
    [--gtf-options]
```

**引数**:  
+ `-oo`、`--gtf-options` – (オプション) エンドツーエンドのテストを実行するためのオプションのリストを指定します。この引数は、有効な JSON 文字列か、GTF オプションが記載されている JSON ファイルへのファイルパスにする必要があります。設定ファイルで指定されたオプションは、コマンド引数で指定されたオプションとマージされます。両方の場所にオプションが存在する場合、引数内のオプションが設定ファイルのオプションよりも優先されます。

  このコマンドで `tags` オプションが指定されていない場合、GDK はタグに `Sample` を使用します。`ggc-archive` が指定されない場合、GDK は最新バージョンの Greengrass nucleus アーカイブをダウンロードします。

**Output**  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk test-e2e run
[2023-07-20 16:35:53] INFO - Downloading latest nucleus archive from url https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-latest.zip
[2023-07-20 16:35:57] INFO - Running test jar with command java -jar /path/to/greengrass-build/gg-e2e-tests/target/uat-features-1.0.0.jar —ggc-archive=/path/to/aws-greengrass-gdk-cli/HelloWorld/greengrass-build/greengrass-nucleus-latest.zip —tags=Sample

16:35:59.693 [] [] [] [INFO] com.aws.greengrass.testing.modules.GreengrassContextModule - Extracting /path/to/workplace/aws-greengrass-gdk-cli/HelloWorld/greengrass-build/greengrass-nucleus-latest.zip into /var/folders/7g/ltzcb_3s77nbtmkzfb6brwv40000gr/T/gg-testing-7718418114158172636/greengrass
16:36:00.534 [gtf-1.1.0-SNAPSHOT] [] [] [INFO] com.aws.greengrass.testing.features.LoggerSteps - GTF Version is gtf-1.1.0-SNAPSHOT
.......
```

# Greengrass Development Kit CLI 設定ファイル
<a name="gdk-cli-configuration-file"></a>

AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) は、`gdk-config.json` という名前の設定ファイルから読み込んで、コンポーネントを構築およびパブリッシュします。この設定ファイルは、コンポーネントリポジトリのルートに存在する必要があります。GDK CLI [init コマンド](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-init)を使用して、この設定ファイルでコンポーネントリポジトリを初期化することができます。

**Topics**
+ [GDK CLI 設定ファイルの形式](#gdk-config-format)
+ [GDK CLI 設定ファイルの例](#gdk-config-examples)

## GDK CLI 設定ファイルの形式
<a name="gdk-config-format"></a>

コンポーネントの GDK CLI 設定ファイルを定義する場合、次の情報を JSON 形式で指定します。

`gdk_version`  
このコンポーネントとの互換性がある GDK CLI の最小バージョン。この値は、[リリース](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/releases)の GDK CLI バージョンの 1 つである必要があります。

`component`  
このコンポーネントの設定。    
`componentName`    
`author`  
コンポーネントの作成者またはパブリッシャー。  
`version`  
コンポーネントのバージョン。次のいずれかを指定します。  <a name="gdk-cli-configuration-file-component-version-options"></a>
+ `NEXT_PATCH` - このオプションを選択すると、コンポーネントをパブリッシュするときに GDK CLI がバージョンを設定します。GDK CLI は AWS IoT Greengrass サービスを照会して、コンポーネントの最新のパブリッシュバージョンを特定します。次に、そのバージョンの後の次のパッチバージョンにバージョンを設定します。コンポーネントをまだパプリッシュしていない場合は、GDK CLI はバージョン`1.0.0` を使用します。

  このオプションを選択する場合、AWS IoT Greengrass Core ソフトウェアが動作するローカル開発用コンピュータにコンポーネントをデプロイしテストするために、[Greengrass CLI](greengrass-cli-component.md) を使用することはできません。ローカルデプロイを有効にするには、代わりにセマンティックバージョンを指定する必要があります。
+ **1.0.0** などのセマンティックバージョンです。セマンティックバージョンでは、*major*.*minor*.*patch* の番号付けシステムが使用されます。詳細については、「[セマンティックバージョンの仕様](https://semver.org/)」を参照してください。

  コンポーネントをデプロイしてテストする Greengrass コアデバイスでコンポーネントを開発する場合は、このオプションを選択します。[Greengrass CLI](greengrass-cli-component.md) を使用してローカルデプロイを作成する場合は、特定のバージョンでコンポーネントを構築する必要があります。  
`build`  
このコンポーネントのソースをアーティファクトに構築するために使用する設定。このオブジェクトには、次の情報が含まれます。    
  `build_system`   
使用するビルドシステム。次のオプションから選択します。  <a name="gdk-cli-configuration-file-component-build-system-options"></a>
+ `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](https://maven.apache.org/) を使用するコンポーネントの場合は、このオプションを選択します。

  Windows デバイスでは、この機能は GDK CLI v1.1.0 以降で利用できます。
+ `gradle` - `gradle build` コマンドを実行して、コンポーネントのソースをアーティファクト内にビルドします。[Gradle](https://gradle.org/) を使用するコンポーネントの場合は、このオプションを選択します。この機能は GDK CLI v1.1.0 以降で利用できます。

  `gradle` ビルドシステムは、ビルドファイルとして Kotlin DSL をサポートしています。この機能は GDK CLI v1.2.0 以降で利用できます。
+ `gradlew` - `gradlew` コマンドを実行して、コンポーネントのソースをアーティファクト内にビルドします。[Gradle Wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html) を使用するコンポーネントの場合は、このオプションを選択します。

  この機能は GDK CLI v1.2.0 以降で利用できます。
+ `custom` - カスタムコマンドを実行して、コンポーネントのソースを recipe とアーティファクトにビルドします。`custom_build_command` パラメータでカスタムコマンドを指定します。  
`custom_build_command`  
(オプション) カスタムビルドシステムに対して実行するカスタムビルドコマンド。`build_system` の `custom` を指定する場合は、このパラメータを指定する必要があります。  
このコマンドは、コンポーネントフォルダ内の次のフォルダに recipe とアーティファクトを作成する必要があります。GDK CLI は、[コンポーネントビルドコマンド](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build)を実行したときにこれらのフォルダを作成します。  
+ recipe フォルダ: `greengrass-build/recipes`
+ アーティファクトフォルダ: `greengrass-build/artifacts/componentName/componentVersion`

  *ComponentName* をコンポーネント名に置き換えて、*ComponentVersion* を コンポーネントバージョンまたは`NEXT_PATCH` に置き換えます。
1 つの文字列または文字列のリストを指定できます。各文字列が、コマンド内の単語になります。例えば、C\$1\$1 コンポーネントのカスタムビルドコマンドを実行するには、**cmake --build build --config Release** または **["cmake", "--build", "build", "--config", "Release"]** を指定する可能性があります。  
カスタムビルドシステムの例を表示するには、「[GitHub の aws.greengrass.labs.LocalWebServer community component](https://github.com/awslabs/aws-greengrass-labs-local-web-server)」を参照してください。  
`options`  
(オプション) コンポーネントのビルドプロセス中に使用される追加の設定オプション。  
この機能は GDK CLI v1.2.0 以降で利用できます。    
`excludes`  
zip ファイルを構築するときにコンポーネントディレクトリから除外するファイルを定義するグロブパターンのリスト。`build_system` が `zip` の場合にのみ有効です。  
GDK CLI バージョン 1.4.0 以前では、除外リストのエントリに一致するファイルは、コンポーネントのすべてのサブディレクトリから除外されます。GDK CLI バージョン 1.5.0 以降で同じ動作を実現するには、除外リストの既存のエントリに `**/` を付加します。例えば、`*.txt` はディレクトリのみからテキストファイルを除外し、`**/*.txt` はすべてのディレクトリとサブディレクトリからテキストファイルを除外します。  
GDK CLI バージョン 1.5.0 以降では、`excludes` が GDK 設定ファイルで定義されていると、コンポーネントビルド中に警告が表示されることがあります。この警告を無効にするには、環境変数 `GDK_EXCLUDES_WARN_IGNORE` を `true` に設定します。
GDK CLI は、常に zip ファイルから以下のファイルを除外します。  
+ `gdk-config.json` ファイル
+ recipe ファイル (`recipe.json` または `recipe.yaml`)
+ ビルドフォルダ (`greengrass-build` など)
次のファイルはデフォルトで除外されます。ただし、これらのファイルのうち、どのファイルを除外するかは、`excludes` オプションで制御することができます。  
+ 接頭辞「test」で始まる任意のフォルダ (`test*`)
+ 全ての非表示のファイル
+ `node_modules` フォルダ
`excludes` オプションを指定すると、GDK CLI は `excludes` オプションで設定したファイルのみを除外します。`excludes` オプションを指定しない場合、GDK CLI は前述のデフォルトのファイルとフォルダを除外します。  
`zip_name`  
構築プロセス中に zip アーティファクトを作成する際に使用する zip ファイル名。`build_system` が `zip` の場合にのみ有効です。`build_system` が空の場合、コンポーネント名が zip ファイル名として使用されます。  
`publish`  
このコンポーネントを AWS IoT Greengrass サービスにパブリッシュするために使用する設定。  
<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 は、バケットが存在しない場合に作成します。  
このオブジェクトには、次の情報が含まれます。    
`bucket`  
コンポーネントのアーティファクトをホストするために使用する S3 バケット名。  
`region`  
GDK CLI がこのコンポーネントをパブリッシュする場所となる AWS リージョン。  
GDK CLI v1.3.0 以降を使用している場合、このプロパティはオプションです。  
`options`  
(オプション) コンポーネントのバージョン作成時に使用される追加の設定オプション。  
この機能は GDK CLI v1.2.0 以降で利用できます。    
`file_upload_args`  
ファイルをバケットにアップロードする際に Amazon S3 に送信される、引数 (メタデータや暗号化メカニズムなど) を含む JSON 構造。許可される引数のリストについては、*Boto3 ドキュメント*の「[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/customizations/s3.html#boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/customizations/s3.html#boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS)」クラスを参照してください。

`test-e2e`  
(オプション) コンポーネントのエンドツーエンドのテスト中に使用する設定。この機能は GDK CLI v1.3.0 以降で利用できます。    
`build`  
`build_system` – 使用するビルドシステム。デフォルトのオプションは `maven` です。次のオプションから選択します。  
+ `maven` – `mvn package` コマンドを実行してテストモジュールを構築します。[Maven](https://maven.apache.org/) を使用するテストモジュールを構築するには、このオプションを選択します。
+ `gradle` – `gradle build` コマンドを実行してテストモジュールを構築します。[Gradle](https://gradle.org/) を使用するテストモジュールについては、このオプションを選択します。  
`gtf_version`  
(オプション) Greengrass Testing Framework (GTF) を使用して GDK プロジェクトを初期化する際に、エンドツーエンドのテストモジュールの依存関係として使用する GTF のバージョン。この値は、[リリース](https://github.com/aws-greengrass/aws-greengrass-testing/releases)の GTF バージョンの 1 つである必要があります。デフォルトは GTF バージョン 1.1.0 です。  
`gtf_options`  
(オプション) コンポーネントのエンドツーエンドのテスト中に使用される追加の設定オプション。  
<a name="gtf_options"></a>次のリストには、GTF バージョン 1.1.0 で使用できるオプションが含まれています。  
+ `additional-plugins` – (オプション) 追加の Cucumber プラグイン
+ `aws-region` – AWS のサービスの特定のリージョンレベルのエンドポイントをターゲットにします。デフォルトは、AWS SDK が検出するものです。
+ `credentials-path` – オプションの AWS プロファイル認証情報のパス。デフォルトは、ホスト環境で検出された認証情報です。
+ `credentials-path-rotation` – AWS 認証情報のオプションのローテーション期間。デフォルトで 15 分または `PT15M` に設定されます。
+ `csr-path` – デバイス証明書の生成に使用される CSR のパス。
+ `device-mode` – テスト対象のターゲットデバイス。デフォルトはローカルデバイスです。
+ `env-stage` – Greengrass のデプロイ環境をターゲットに設定します。デフォルトは本番です。
+ `existing-device-cert-arn` – Greengrass のデバイス証明書として使用する既存の証明書の ARN。
+ `feature-path` – 追加の機能ファイルを含むファイルまたはディレクトリ。デフォルトでは、追加の機能ファイルは使用されません。
+ `gg-cli-version` – Greengrass CLI のバージョンをオーバーライドします。デフォルトは `ggc.version` にある値です。
+ `gg-component-bucket` – Greengrass コンポーネントを格納する既存の Amazon S3 バケットの名前。
+ `gg-component-overrides` – Greengrass コンポーネントのオーバーライドのリスト。
+ `gg-persist` – テスト実行後に保持されるテスト要素のリスト。デフォルトでは、何も保持しないよう設定されています。許容される値は、`aws.resources`、`installed.software`、および `generated.files` です。
+ `gg-runtime` – テストがテストリソースとどのようにインタラクションするかに影響する値のリスト。これらの値は `gg.persist` パラメータよりも優先されます。デフォルトが空の場合、インストールされている Greengrass ランタイムを含む、すべてのテストリソースがテストケースによって管理されると想定されます。許容される値は、`aws.resources`、`installed.software`、および `generated.files` です。
+ `ggc-archive` – アーカイブされた Greengrass nucleus コンポーネントへのパス。
+ `ggc-install-root` – Greengrass nucleus コンポーネントをインストールするディレクトリ。デフォルトは test.temp.path とテスト実行フォルダです。
+ `ggc-log-level` – テスト実行の Greengrass nucleus ログレベルを設定します。デフォルトは「INFO」です。
+ `ggc-tes-rolename` – AWS のサービスにアクセスするために AWS IoT Greengrass Core が引き受ける IAM ロール。指定された名前のロールが存在しない場合は、ロールとデフォルトのアクセスポリシーが作成されます。
+ `ggc-trusted-plugins` – Greengrass に追加する必要がある、信頼されたプラグインのパス (ホスト上) のカンマ区切りリスト。DUT 自体のパスを指定するには、パスの前に「dut:」というプレフィックスを付けます。
+ `ggc-user-name` – Greengrass nucleus の user:group posixUser の値。デフォルトは、ログインしている現在のユーザー名です。
+ `ggc-version` – 実行中の Greengrass nucleus コンポーネントのバージョンをオーバーライドします。デフォルトは ggc.archive にある値です。
+ `log-level` – テスト実行のログレベル。デフォルトは「INFO」です。
+ `parallel-config` – JSON 文字列としてのバッチインデックスとバッチ数のセット。バッチインデックスのデフォルト値は 0、バッチ数は 1 です。
+ `proxy-url` – この URL を介してトラフィックをルーティングするようにすべてのテストを設定します。
+ `tags` – 機能タグのみを実行します。「&」を使用して組み合わせることができます
+ `test-id-prefix` – AWS リソース名とタグを含むすべてのテスト固有のリソースに適用される共通のプレフィックス。デフォルトは「gg」プレフィックスです。
+ `test-log-path` – テスト実行全体の結果を含むディレクトリ。デフォルトは「testResults」です。
+ `test-results-json` – 結果として得られる Cucumber JSON レポートがディスクに書き込まれた状態で生成されるかどうかを決定するフラグ。デフォルトは true です。
+ `test-results-log` – コンソール出力がディスクに書き込まれた状態で生成されるかどうかを決定するフラグ。デフォルトは false です。
+ `test-results-xml` – 結果として得られる JUnit XML レポートがディスクに書き込まれた状態で生成されるかどうかを決定するフラグ。デフォルトは true です。
+ `test-temp-path` – ローカルテストアーティファクトを生成するディレクトリ。デフォルトは、gg-testing というプレフィックスが付いたランダムな一時ディレクトリです。
+ `timeout-multiplier` – すべてのテストタイムアウトに提供される乗数。デフォルトは 1.0 です。

## GDK CLI 設定ファイルの例
<a name="gdk-config-examples"></a>

次の GDK CLI 設定ファイルの例を参照し、Greengrass コンポーネント環境の設定に役立ててください。

### Hello World (Python)
<a name="gdk-config-example-hello-world-python"></a>

次の GDK CLI 設定ファイルは、Python スクリプトを実行する Hello World コンポーネントをサポートしています。この設定ファイルでは、`zip` ビルドシステムを使用して、GDK CLI がアーティファクトとしてアップロードする ZIP ファイルにコンポーネントの Python スクリプトをパッケージ化しています。

```
{
  "component": {
    "com.example.PythonHelloWorld": {
      "author": "Amazon",
      "version": "NEXT_PATCH",
      "build": {
        "build_system" : "zip",
        "options": {
           "excludes": [".*"]
        }
      },
      "publish": {
        "bucket": "greengrass-component-artifacts",
        "region": "us-west-2",
        "options": {
           "file_upload_args": {
              "Metadata": {
                 "some-key": "some-value"
              }
           }
        }
      }
    },
  "test-e2e":{
    "build":{
        "build_system": "maven"
    },
    "gtf_version": "1.1.0",
    "gtf_options": { 
         "tags": "Sample"
     }
  },
  "gdk_version": "1.6.1"
  }
}
```

### Hello World (Java)
<a name="gdk-config-example-hello-world-java"></a>

次の GDK CLI 設定ファイルは、Java アプリケーションを実行する Hello World コンポーネントをサポートしています。この設定ファイルでは、`maven` ビルドシステムを使用して、GDK CLI がアーティファクトとしてアップロードする JAAR ファイルにコンポーネントの Java ソースコードをパッケージ化しています。

```
{
  "component": {
    "com.example.JavaHelloWorld": {
      "author": "Amazon",
      "version": "NEXT_PATCH",
      "build": {
        "build_system" : "maven"
      },
      "publish": {
        "bucket": "greengrass-component-artifacts",
        "region": "us-west-2",
        "options": {
           "file_upload_args": {
              "Metadata": {
                 "some-key": "some-value"
              }
           }
        }
      }
  },
  "test-e2e":{
    "build":{
        "build_system": "maven"
    },
    "gtf_version": "1.1.0",
    "gtf_options": { 
         "tags": "Sample"
     }
  },
  "gdk_version": "1.6.1"
  }
}
```

### コミュニティコンポーネント
<a name="gdk-config-community-component-examples"></a>

[Greengrass ソフトウェアカタログ](greengrass-software-catalog.md)の複数のコミュニティコンポーネントで GDK CLI を使用しています。GDK CLI 設定ファイルは、これらのコンポーネントのリポジトリで確認できます。

**コミュニティコンポーネントの GDK CLI 設定ファイルを表示するには**

1. 次のコマンドを実行して、GDK CLI を使用するコミュニティコンポーネントをリスト表示します。

   ```
   gdk component list --repository
   ```

   レスポンスには、GDK CLI を使用する各コミュニティコンポーネントの GitHub リポジトリの名前がリストアップされます。各リポジトリは `awslabs` 組織にあります。

   ```
   [2022-02-22 17:27:31] INFO - Listing all the available component repositories from Greengrass Software Catalog.
   [2022-02-22 17:27:31] INFO - Found '6' component repositories to display.
   1. aws-greengrass-labs-database-influxdb
   2. aws-greengrass-labs-telemetry-influxdbpublisher
   3. aws-greengrass-labs-dashboard-grafana
   4. aws-greengrass-labs-dashboard-influxdb-grafana
   5. aws-greengrass-labs-local-web-server
   6. aws-greengrass-labs-lookoutvision-gstreamer
   ```

1. 次の URL でコミュニティコンポーネントの GitHub リポジトリを開きます。*community-component-name* を、前のステップのコミュニティコンポーネント名に置き換えます。

   ```
   https://github.com/awslabs/community-component-name
   ```

# Greengrass コマンドラインインターフェイス
<a name="gg-cli"></a>

Greengrass コマンドラインインターフェイス (CLI) を使用するとデバイスで AWS IoT Greengrass Core とやり取りしてコンポーネントをローカルに開発し、問題をデバッグできます。たとえば、Greengrass CLI を使用してローカルデプロイを作成し、コアデバイスでコンポーネントを再起動できます。

[Greengrass CLI コンポーネント](greengrass-cli-component.md) (`aws.greengrass.Cli`) をデプロイして Greengrass CLI をコアデバイスにインストールします。

**重要**  
 <a name="local-dev-tools-production-environment-warning"></a>このコンポーネントは、本番環境ではなく、開発環境でのみで使用することをお勧めします。このコンポーネントは、通常、本番環境では必要とされない情報や操作へのアクセスを提供します。このコンポーネントを必要なコアデバイスにのみデプロイして、最小特権の原則に従います。

**Topics**
+ [Greengrass CLI のインストール](install-gg-cli.md)
+ [Greengrass CLI コマンド](gg-cli-reference.md)

# Greengrass CLI のインストール
<a name="install-gg-cli"></a>

Greengrass CLI は、次のいずれかの方法でインストールできます。
+ デバイスで AWS IoT Greengrass Core ソフトウェアを初めてセットアップするときは、 `--deploy-dev-tools`引数を使用します。また、この引数を適用するには `--provision true` も指定する必要があります。
+ デバイスに Greengrass CLI コンポーネント (`aws.greengrass.Cli`) をデプロイします。

このセクションでは、Greengrass CLI コンポーネントをデプロイする手順について説明します。初期セットアップ時の Greengrass CLI のインストールについては、「[チュートリアル: AWS IoT Greengrass V2 の開始方法](getting-started.md)」を参照してください。

## 前提条件
<a name="gg-cli-prereqs"></a>

Greengrass CLI コンポーネントをデプロイするには、以下の要件を満たす必要があります。
+ AWS IoT Greengrass コアデバイスにインストールおよび設定されたコアソフトウェア。詳細については、「[チュートリアル: AWS IoT Greengrass V2 の開始方法](getting-started.md)」を参照してください。
+ を使用して Greengrass CLI を AWS CLI デプロイするには、 をインストールして設定しておく必要があります AWS CLI。詳細については、「[AWS CLIユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」の「*AWS Command Line Interface の設定*。」を参照してください。
+ <a name="greengrass-cli-authorization-requirement"></a> AWS IoT Greengrass Core ソフトウェアを操作するには、Greengrass CLI を使用する権限が必要です。Greengrass CLI を使用するには、次のいずれかを実行します。
  +  AWS IoT Greengrass Core ソフトウェアを実行するシステムユーザーを使用します。
  + root 権限または管理者権限を持つユーザーを使用する。Linux コアデバイスでは、`sudo` を使用して root 権限を取得できます。
  + 設定をデプロイする際に、`AuthorizedPosixGroups` または `AuthorizedWindowsGroups` 設定パラメータで指定したグループのシステムユーザーを使用する。詳細については、「[Greengrass CLI コンポーネント設定](greengrass-cli-component.md#greengrass-cli-component-configuration)」を参照してください。

## Greengrass CLI コンポーネントのデプロイ
<a name="gg-cli-deploy"></a>

以下の手順を完了して、コアデバイスに Greengrass CLI コンポーネントをデプロイします。

### Greengrass CLI コンポーネントをデプロイするには (コンソール)
<a name="gg-cli-deploy-console"></a>

1. [AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass) にサインインします。

1. ナビゲーションメニューで、**[Components]** (コンポーネント) を選択します。

1. **[Components]** (コンポーネント) ページの **[Public components]** (公開コンポーネント) タブで、[`aws.greengrass.Cli`] を選択します。

1. [**aws.greengrass.Cli**] ページで、**[Deploy]** (デプロイ) を選択します。

1. **[Add to deployment]** (デプロイに追加) から **[Create new deployment]** (デプロイを新規作成) を選択します。

1. **[Specify target]** (ターゲットを指定) ページの **[Deployment targets]** (デプロイターゲット) の **[Target Name]** (ターゲット名) リストで、デプロイ先にする Greengrass グループを選択し、**[Next]** (次へ) を選択します。

1. **[Select components]** (コンポーネントを選択) ページで、**aws.greengrass.Cli** コンポーネントが選択されていることを確認して、**[Next]** (次へ) を選択します。

1. **[Configure components]** (コンポーネント設定) ページで、デフォルト設定のままにして、**[Next]** (次へ) を選択します。

1. **[Configure advanced setting]** (高度な設定を設定) ページで、デフォルト構成設定のままにして **[Next]** (次) を選択します。

1. **[Review]** (確認) ページで **[Deploy]** (デプロイ) をクリックします。

### Greengrass CLI コンポーネントをデプロイするには (AWS CLI)
<a name="gg-cli-deploy-cli"></a>

1. デバイスで `deployment.json` ファイルを作成して、Greengrass CLI コンポーネントのデプロイ設定を定義します。このファイルは次のようになります:

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.Cli": {
         "componentVersion": "2.17.0",
         "configurationUpdate": {
           "merge": "{\"AuthorizedPosixGroups\":\"<group1>,<group2>,...,<groupN>\",\"AuthorizedWindowsGroups\":\"<group1>,<group2>,...,<groupN>\"}"
         }
       }
     }
   }
   ```
   + `target` フィールドで、`targetArn` を、デプロイの対象となるモノまたはモノグループの Amazon リソースネーム (ARN) に置き換えます。形式は以下のとおりです。
     + モノ: `arn:aws:iot:region:account-id:thing/thingName`
     + モノのグループ: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + `aws.greengrass.Cli` コンポーネントオブジェクトで、以下のように値を指定します。  
`version`  
Greengrass CLI コンポーネントのバージョン。  
`configurationUpdate.AuthorizedPosixGroups`  
(オプション) システムグループのカンマ区切りリストを含む文字列。これらのシステムグループが Greengrass CLI を使用して AWS IoT Greengrass Core ソフトウェアを操作することを承認します。グループ名またはグループ ID を指定できます。例:`group1,1002,group3` は 3 つのシステムグループ (`group1`、`1002` および `group3`) に Greengrass CLI の使用を認可します。  
承認するグループを指定しない場合は、Greengrass CLI をルートユーザー (`sudo`) または AWS IoT Greengrass Core ソフトウェアを実行するシステムユーザーとして使用できます。  
`configurationUpdate.AuthorizedWindowsGroups`  
(オプション) システムグループのカンマ区切りリストを含む文字列。これらのシステムグループが Greengrass CLI を使用して AWS IoT Greengrass Core ソフトウェアを操作することを承認します。グループ名またはグループ ID を指定できます。例:`group1,1002,group3` は 3 つのシステムグループ (`group1`、`1002` および `group3`) に Greengrass CLI の使用を認可します。  
承認するグループを指定しない場合は、Greengrass CLI を管理者または AWS IoT Greengrass Core ソフトウェアを実行するシステムユーザーとして使用できます。

1. 次のコマンドを実行して、デバイスに Greengrass CLI コンポーネントをデプロイします。

   ```
   $ aws greengrassv2 create-deployment --cli-input-json file://path/to/deployment.json
   ```

インストール中、コンポーネントはデバイスの `/greengrass/v2/bin` フォルダの `greengrass-cli` にシンボリックリンクを追加し、Greengrass CLI の実行はこのパスから行います。Greengrass CLI を絶対パスなしで実行するには、PATH 変数に `/greengrass/v2/bin` フォルダを 追加します。Greengrass CLI のインストールを確認するには、以下のコマンドを実行します。

------
#### [ Linux or Unix ]

```
/greengrass/v2/bin/greengrass-cli help
```

------
#### [ Windows ]

```
C:\greengrass\v2\bin\greengrass-cli help
```

------

以下の出力が表示されます。

```
Usage: greengrass-cli [-hV] [--ggcRootPath=<ggcRootPath>] [COMMAND]
Greengrass command line interface

      --ggcRootPath=<ggcRootPath>
                  The AWS IoT Greengrass V2 root directory.
  -h, --help      Show this help message and exit.
  -V, --version   Print version information and exit.
Commands:
  help                Show help information for a command.
  component           Retrieve component information and stop or restart
                        components.
  deployment          Create local deployments and retrieve deployment status.
  logs                Analyze Greengrass logs.
  get-debug-password  Generate a password for use with the HTTP debug view
                        component.
```

`greengrass-cli` が見つからない場合は、デプロイで Greengrass CLI のインストールに失敗した可能性があります。詳細については、「[トラブルシューティング AWS IoT Greengrass V2](troubleshooting.md)」を参照してください。

# Greengrass CLI コマンド
<a name="gg-cli-reference"></a>

Greengrass CLI は、AWS IoT Greengrass コアデバイスとの対話を可能にするコマンドラインインターフェイスを提供します。Greengrass CLI コマンドは次の形式を使用します。

```
$ greengrass-cli <command> <subcommand> [arguments]
```

デフォルトでは、`/greengrass/v2/bin/` フォルダ内の `greengrass-cli` 実行可能ファイルは、`/greengrass/v2` フォルダ内で動作している AWS IoT Greengrass Core ソフトウェアのバージョンと対話します。この場所にない実行ファイルを呼び出す場合、または別の場所にある AWS IoT Greengrass Core ソフトウェアとやり取りする場合は、以下のいずれかの方法を使用して、やり取りする AWS IoT Greengrass Core ソフトウェアのルートパスを明示的に指定する必要があります。<a name="greengrass-cli-set-root-path"></a>
+ `GGC_ROOT_PATH` 環境変数を `/greengrass/v2` に設定します。
+ 次の例のように、コマンドに `--ggcRootPath /greengrass/v2` 引数を追加します。

  ```
  greengrass-cli --ggcRootPath /greengrass/v2 <command> <subcommand> [arguments]
  ```

すべてのコマンドに対して、次の引数を使用できます。
+ 特定の Greengrass CLI コマンドに関する情報には、`--help` を使用します。
+ Greengrass CLI のバージョンに関する情報には、`--version` を使用します。

このセクションでは、Greengrass CLI コマンドについて説明し、各コマンドの例を示します。各コマンドの概要には、その引数とその使用法が示されています。オプションの引数は角括弧で囲んで表示しています。

**Topics**
+ [コンポーネント](gg-cli-component.md)
+ [トラブルシューティング](gg-cli-deployment.md)
+ [ログ](gg-cli-logs.md)
+ [get-debug-password](gg-cli-get-debug-password.md)

# コンポーネント
<a name="gg-cli-component"></a>

`component` コマンドを使用することで、コアデバイス上のローカルコンポーネントとやり取りすることができます。

**サブコマンド**
+ [詳細](#component-details)
+ [リスト](#component-list)
+ [restart](#component-restart)
+ [停止](#component-stop)

## 詳細
<a name="component-details"></a>

1 つのコンポーネントのバージョン、ステータス、および設定を取得します。

**概要**  

```
greengrass-cli component details --name <component-name> 
```

**引数**:  
`--name`、`-n`。コンポーネントの名前。

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ sudo greengrass-cli component details --name MyComponent 

Component Name: MyComponent 
Version: 1.0.0
State: RUNNING
Configuration: null
```

## リスト
<a name="component-list"></a>

デバイスにインストールされている各コンポーネントの名前、バージョン、ステータス、および設定を取得します。

**概要**  

```
greengrass-cli component list
```

**引数**:  
なし

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ sudo greengrass-cli component list

Components currently running in Greengrass:
Component Name: FleetStatusService
Version: 0.0.0
State: RUNNING
Configuration: {"periodicUpdateIntervalSec":86400.0}
Component Name: UpdateSystemPolicyService
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: aws.greengrass.Nucleus
Version: 2.0.0
State: FINISHED
Configuration: {"awsRegion":"region","runWithDefault":{"posixUser":"ggc_user:ggc_group"},"telemetry":{}}
Component Name: DeploymentService
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: TelemetryAgent
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: aws.greengrass.Cli
Version: 2.0.0
State: RUNNING
Configuration: {"AuthorizedPosixGroups":"ggc_user"}
```

## restart
<a name="component-restart"></a>

コンポーネントを再起動します。

**概要**  

```
greengrass-cli component restart --names <component-name>,...
```

**引数**:  
`--names`、`-n`。コンポーネントの名前。少なくとも 1 つのコンポーネント名が必要です。各名前をカンマで区切ることで、追加のコンポーネント名を指定できます。

**出力**:  
なし

## 停止
<a name="component-stop"></a>

実行中のコンポーネントを停止します。

**概要**  

```
greengrass-cli component stop --names <component-name>,...
```

**引数**  
`--names`、`-n`。コンポーネントの名前。少なくとも 1 つのコンポーネント名が必要です。必要に応じて、各名前をカンマで区切ることで、追加のコンポーネント名を指定できます。

**出力**:  
なし

# トラブルシューティング
<a name="gg-cli-deployment"></a>

`deployment` コマンドを使用することで、コアデバイス上のローカルコンポーネントとやり取りすることができます。

ローカルデプロイの進行状況を監視するには、`status` サブコマンドを使用します。コンソールを使用してローカルデプロイの進行状況を監視することはできません。

**サブコマンド**
+ [作成](#deployment-create)
+ [キャンセル](#deployment-cancel)
+ [リスト](#deployment-list)
+ [ステータス](#deployment-status)

## 作成
<a name="deployment-create"></a>

指定されたコンポーネントレシピ、アーティファクト、ランタイム引数を使用して、ローカルデプロイを作成または更新します。

**概要**  

```
greengrass-cli deployment create 
    --recipeDir path/to/component/recipe
    [--artifactDir path/to/artifact/folder ]
    [--update-config {component-configuration}]
    [--groupId <thing-group>]
    [--merge "<component-name>=<component-version>"]...
    [--runWith "<component-name>:posixUser=<user-name>[:<group-name>]"]...
    [--systemLimits "{component-system-resource-limits}]"]...
    [--remove <component-name>,...]
    [--failure-handling-policy <policy name[ROLLBACK, DO_NOTHING]>]
```

**引数**  
+ `--recipeDir`、`-r`。コンポーネントレシピファイルが格納されているフォルダへのフルパス。
+ `--artifactDir`、`-a`。デプロイに含めるアーティファクトファイルが含まれるフォルダへのフルパス。アーティファクトフォルダには、以下のディレクトリ構造が含まれている必要があります。

  ```
  /path/to/artifact/folder/<component-name>/<component-version>/<artifacts>
  ```
+ `--update-config`、`-c`。デプロイの設定引数。JSON 文字列または JSON ファイルとして提供されます。JAON 文字列の形式は次のようになります。

  ```
  { \
    "componentName": { \ 
      "MERGE": {"config-key": "config-value"}, \
      "RESET": ["path/to/reset/"] \
    } \
  }
  ```

  `MERGE` および `RESET` は大文字と小文字を区別するため、大文字にする必要があります。
+ `--groupId`、`-g`。デプロイのターゲットとなるモノグループ。
+ `--merge`、`-m`。追加または更新するターゲットコンポーネントの名前とバージョン。コンポーネント情報は、`<component>=<version>` の形式で提供する必要があります。指定する追加コンポーネントごとに個別の引数を使用します。必要に応じて、`--runWith` 引数を指定して、コンポーネントを実行するための `posixUser`、`posixGroup`、および `windowsUser` 情報を提供します。
+ `--runWith`。汎用コンポーネントまたは Lambda コンポーネントを実行するための `posixUser`、`posixGroup`、および `windowsUser` 情報。`<component>:{posixUser|windowsUser}=<user>[:<=posixGroup>]` 形式でこの情報を提供する必要があります。たとえば、**HelloWorld:posixUser=ggc\$1user:ggc\$1group** や **HelloWorld:windowsUser=ggc\$1user** と指定することができます。指定する追加オプションごとに個別の引数を使用します。

  詳細については、「[コンポーネントを実行するユーザーを設定する](configure-greengrass-core-v2.md#configure-component-user)」を参照してください。
+ `--systemLimits`。コアデバイス上の汎用および非コンテナ型 Lambda コンポーネントのプロセスに適用されるシステムリソースの制限。各コンポーネントのプロセスが使用できる CPU および RAM の最大使用数を設定できます。シリアル化された JSON オブジェクトまたは JSON ファイルへのファイルパスを指定します。JSON オブジェクトは次の形式である必要があります。

  ```
  {  \
    "componentName": { \ 
      "cpus": cpuTimeLimit, \
      "memory": memoryLimitInKb \
    } \
  }
  ```

  各コンポーネントに対して、次のシステムリソース制限を設定できます。
  + `cpus` – <a name="system-resource-limits-cpu-definition-this"></a>このコンポーネントのプロセスがコアデバイスで使用できる CPU 時間の最大量。コアデバイスの合計 CPU 時間は、デバイスの CPU コア数と同じです。例えば、4 つの CPU コアを持つコアデバイスの場合は、この値を `2` に設定することで、このコンポーネントのプロセスを各 CPU コアの 50% の使用率に制限することができます。CPU コアが 1 つのデバイスの場合は、この値を `0.25` に設定することで、このコンポーネントのプロセスを CPU の 25% の使用率に制限することができます。この値を CPU コア数より大きい数に設定した場合、 AWS IoT Greengrass Core ソフトウェアはコンポーネントの CPU 使用率を制限しません。
  + `memory` – <a name="system-resource-limits-memory-definition-this"></a>このコンポーネントのプロセスがコアデバイスで使用できる RAM の最大量 (キロバイト単位)。

  詳細については、「[コンポーネントのシステムリソース制限を設定する](configure-greengrass-core-v2.md#configure-component-system-resource-limits)」を参照してください。

  この機能は、Linux コアデバイスの [Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md) v2.4.0 以降および Greengrass CLI で使用できます。 は現在、Windows AWS IoT Greengrass コアデバイスでこの機能をサポートしていません。
+ `--remove`。ローカルデプロイから削除するターゲットコンポーネントの名前。コンポーネントが[アンインストールライフサイクル](component-recipe-reference.md#uninstall-lifecycle-definition)ステップを定義する場合、 AWS IoT Greengrass Core ソフトウェアはコンポーネントを削除する前にアンインストールスクリプトを実行します。クラウドデプロイからマージされたコンポーネントを削除するには、ターゲットモノグループのグループ ID を次の形式で指定する必要があります。

------
#### [ Greengrass nucleus v2.4.0 and later ]

  ```
  --remove <component-name> --groupId <group-name>
  ```

------
#### [ Earlier than v2.4.0 ]

  ```
  --remove <component-name> --groupId thinggroup/<group-name>
  ```

------
+ `--failure-handling-policy`。デプロイが失敗したときに実行されるアクションを定義します。指定できるアクションは次の 2 つです。
  + `ROLLBACK` – 
  + `DO_NOTHING` – 

  この機能は [Greengrass nucleus](greengrass-nucleus-component.md) の v2.11.0 以降で使用できます。

**出力**  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ sudo greengrass-cli deployment create \
    --merge MyApp1=1.0.0 \
    --merge MyApp2=1.0.0 --runWith MyApp2:posixUser=ggc_user \
    --remove MyApp3 \
    --recipeDir recipes/ \ 
    --artifactDir artifacts/

Local deployment has been submitted! Deployment Id: 44d89f46-1a29-4044-ad89-5151213dfcbc
```

## キャンセル
<a name="deployment-cancel"></a>

指定されたデプロイをキャンセルします。

概要  

```
greengrass-cli deployment cancel
    -i <deployment-id>
```

引数  
`-i`。キャンセルするデプロイの一意の識別子。デプロイ ID は `create` コマンドの出力で返されます。

Output  
+ なし

## リスト
<a name="deployment-list"></a>

過去 10 回分のローカルデプロイのステータスを取得します。

**概要**  

```
greengrass-cli deployment list
```

**引数**  
なし

**出力**  
次の例は、このコマンドを実行したときに生成される出力を示しています。デプロイのステータスに応じて、出力には `IN_PROGRESS`、`SUCCEEDED`、または `FAILED` のいずれかのステータス値が表示されます。  

```
$ sudo greengrass-cli deployment list

44d89f46-1a29-4044-ad89-5151213dfcbc: SUCCEEDED
Created on: 6/27/23 11:05 AM
```

## ステータス
<a name="deployment-status"></a>

特定のデプロイのステータスを取得します。

**概要**  

```
greengrass-cli deployment status -i <deployment-id>
```

**引数**  
`-i`。 デプロイの ID。

**出力**  
次の例は、このコマンドを実行したときに生成される出力を示しています。デプロイのステータスに応じて、出力には `IN_PROGRESS`、`SUCCEEDED`、または `FAILED` のいずれかのステータス値が表示されます。  

```
$ sudo greengrass-cli deployment status -i 44d89f46-1a29-4044-ad89-5151213dfcbc

44d89f46-1a29-4044-ad89-5151213dfcbc: FAILED
Created on: 6/27/23 11:05 AM
Detailed Status: <Detailed deployment status>
Deployment Error Stack: List of error codes
Deployment Error Types: List of error types
Failure Cause: Cause
```

# ログ
<a name="gg-cli-logs"></a>

`logs` コマンドを使用して、コアデバイスの Greengrass ログを分析します。

**サブコマンド**
+ [get](#logs-get)
+ [list-keywords](#logs-list-keywords)
+ [list-log-files](#logs-list-log-files)

## get
<a name="logs-get"></a>

Greengrass ログファイルを収集、フィルタリング、視覚化します。このコマンドは JSON 形式のログファイルのみをサポートします。nucleus 設定の[ログ記録形式](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-logging-format)を指定できます。

**概要**  

```
greengrass-cli logs get
    [--log-dir path/to/a/log/folder]
    [--log-file path/to/a/log/file]
    [--follow true | false ]
    [--filter <filter> ]
    [--time-window <start-time>,<end-time> ]
    [--verbose ]
    [--no-color ]
    [--before <value> ]
    [--after <value> ]
    [--syslog ]
    [--max-long-queue-size <value> ]
```

**引数**:  
+ `--log-dir`、`-ld`。ログファイルをチェックするディレクトリのパス (例:**`/greengrass/v2`/logs** )。`--syslog` と併用しないでください。指定する追加ディレクトリに個別の引数を使用します。少なくくとも `--log-dir`、`--log-file` の内いずれかを指定する必要があります。1 つのコマンドで 両方の引数を使用することもできます。
+ `--log-file`、`-lf`。使用するログディレクトリへのパス。指定する追加ディレクトリに個別の引数を使用します。少なくくとも `--log-dir`、`--log-file` の内いずれかを指定する必要があります。1 つのコマンドで 両方の引数を使用することもできます。
+ `--follow`、`-fol`。発生するに従って、ログの更新を表示します。Greengrass CLI は引き続き実行され、指定されたログから読み取られます。時間ウィンドウを指定している場合、Greengrass CLI はすべての時間ウィンドウが終了した後にログのモニタリングを停止します。
+ `--filter`、`-f`。フィルターとして使用するキーワード、正規表現、またはキーと値のペア。この値は、文字列、正規表現、またはキーと値のペアとして指定します。指定する追加フィルターごとに個別の引数を使用します。

  評価後、単一の引数内に指定されている複数のフィルターは OR 演算子で区切られ、追加の引数で指定されたフィルターは AND 演算子で結合されます。たとえば、コマンドに `--filter "installed" --filter "name=alpha,name=beta"` を含めた場合、Greengrass CLI は、`alpha` または `beta` を値に持つ `installed` キーワードと `name` キーの両方が含まれるログメッセージをフィルタリングして表示します。
+ `--time-window`、`-t`。ログ情報を表示する時間ウィンドウ。正確なタイムスタンプと相対オフセットの両方を使用できます。`<begin-time>,<end-time>` 形式でこの情報を提供する必要があります。開始時間または終了時間を指定しなかった場合、そのオプションの値はデフォルトで、現在のシステムの日付と時刻に設定されます。指定する追加時間ウィンドウごとに個別の引数を使用します。

  Greengrass CLI では、次の形式のタイムスタンプがサポートされています。
  + `yyyy-MM-DD`、例えば `2020-06-30` など。この形式を使用すると、時間のデフォルトは 00:00:00 になります。

    `yyyyMMDD`、例えば `20200630` など。この形式を使用すると、時間のデフォルトは 00:00:00 になります。

    `HH:mm:ss`、例えば `15:30:45` など。この形式を使用すると、日付は現在のシステム日付にデフォルト設定されます。

    `HH:mm:ssSSS`、例えば `15:30:45` など。この形式を使用すると、日付は現在のシステム日付にデフォルト設定されます。

    `YYYY-MM-DD'T'HH:mm:ss'Z'`、例えば `2020-06-30T15:30:45Z` など。

    `YYYY-MM-DD'T'HH:mm:ss`、例えば `2020-06-30T15:30:45` など。

    `yyyy-MM-dd'T'HH:mm:ss.SSS`、例えば `2020-06-30T15:30:45.250` など。

  相対オフセットは、現在のシステム時刻からの時間オフセットを指定します。Greengrass CLI は、相対オフセットに次の形式をサポートしています：`+|-[<value>h|hr|hours][valuem|min|minutes][value]s|sec|seconds`。

  例えば、現在時刻の 1 時間前から 2 時間 15 分前までの時間帯を指定する以下の引数は、`--time-window -2h15min,-1hr` です。
+ `--verbose`。 ログメッセージのすべてのフィールドを表示します。`--syslog` と併用しないでください。
+ `--no-color`、`-nc`。カラーコーディングを削除します。ログメッセージのデフォルトのカラーコードでは、太字の赤いテキストが使用されます。ANSI エスケープシーケンスを使用するため、UNIX 互換の端末のみをサポートします。
+ `--before`、`-b`。一致したログエントリの前に表示する行数。デフォルトは 0 です。
+ `--after`、`-a`。一致したログエントリの後に表示する行数。デフォルトは 0 です。
+ `--syslog`。RFC3164 で定義された syslog プロトコルを使用して、すべてのログファイルを処理します。`--log-dir` および`--verbose` と併用しないでください。syslog プロトコルでは、次の形式を使用します: `"<$Priority>$Timestamp $Host $Logger ($Class): $Message"`。ログファイルを指定しなかった場合、Greengrass CLI は次の場所からログメッセージを読み取ります: `/var/log/messages`、`/var/log/syslog`、または`/var/log/system.log`。

  AWS IoT Greengrass は、現在 Windows コアデバイスにこの機能をサポートしていません。
+ `--max-log-queue-size`、`-m`。メモリに割り当てるログエントリの最大数。このオプションを使用して、メモリ使用量を最適化します。デフォルトは 100 です。

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ sudo greengrass-cli logs get --verbose \
    --log-file /greengrass/v2/logs/greengrass.log \
    --filter deployment,serviceName=DeploymentService \
    --filter level=INFO \
    --time-window 2020-12-08T01:11:17,2020-12-08T01:11:22

2020-12-08T01:11:17.615Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.DeploymentService: Current deployment finished. {DeploymentId=44d89f46-1a29-4044-ad89-5151213dfcbc, serviceName=DeploymentService, currentState=RUNNING}
2020-12-08T01:11:17.675Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.IotJobsHelper: Updating status of persisted deployment. {Status=SUCCEEDED, StatusDetails={detailed-deployment-status=SUCCESSFUL}, ThingName=MyThing, JobId=22d89f46-1a29-4044-ad89-5151213dfcbc
```

## list-keywords
<a name="logs-list-keywords"></a>

ログファイルのフィルタリングに使用できる推奨キーワードを表示します。

**概要**  

```
greengrass-cli logs list-keywords [arguments]
```

**引数**:  
なし

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ sudo greengrass-cli logs list-keywords

Here is a list of suggested keywords for Greengrass log:
level=$str
thread=$str
loggerName=$str
eventType=$str
serviceName=$str
error=$str
```

```
$ sudo greengrass-cli logs list-keywords --syslog

Here is a list of suggested keywords for syslog:
priority=$int
host=$str
logger=$str
class=$str
```

## list-log-files
<a name="logs-list-log-files"></a>

指定したディレクトリにあるログファイルを表示します。

**概要**  

```
greengrass-cli logs list-log-files [arguments]
```

**引数**:  
`--log-dir`、`-ld`。ログファイルをチェックするディレクトリのパス。

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ sudo greengrass-cli logs list-log-files -ld /greengrass/v2/logs/

/greengrass/v2/logs/aws.greengrass.Nucleus.log
/greengrass/v2/logs/main.log
/greengrass/v2/logs/greengrass.log
Total 3 files found.
```

# get-debug-password
<a name="gg-cli-get-debug-password"></a>

`get-debug-password` コマンドを使用すると、[ローカルデバッグコンソールコンポーネント](local-debug-console-component.md) (`aws.greengrass.LocalDebugConsole`) 向けにランダムに生成されたパスワードが出力されます。パスワードは、生成されてから 8 時間後に期限切れになります。

**概要**  

```
greengrass-cli get-debug-password
```

**引数**:  
なし

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ sudo greengrass-cli get-debug-password

Username: debug
Password: bEDp3MOHdj8ou2w5de_sCBI2XAaguy3a8XxREXAMPLE
Password expires at: 2021-04-01T17:01:43.921999931-07:00
The local debug console is configured to use TLS security. The certificate is self-signed so you will need to bypass your web browser's security warnings to open the console.
Before you bypass the security warning, verify that the certificate fingerprint matches the following fingerprints.
SHA-256: 15 0B 2C E2 54 8B 22 DE 08 46 54 8A B1 2B 25 DE FB 02 7D 01 4E 4A 56 67 96 DA A6 CC B1 D2 C4 1B
SHA-1: BC 3E 16 04 D3 80 70 DA E0 47 25 F9 90 FA D6 02 80 3E B5 C1
```

# AWS IoT Greengrass テストフレームワークを使用する
<a name="gg-testing-framework"></a>

Greengrass テストフレームワーク (GTF) は、顧客の立場から見たエンドツーエンドの自動化をサポートする構成要素の集まりです。GTF は機能ドライバーとして [Cucumber](https://cucumber.io) を使用します。 は、同じ構成要素 AWS IoT Greengrass を使用して、さまざまなデバイスでソフトウェアの変更を認定します。詳細については、[Github の「Greengrass テストフレームワーク」](https://github.com/aws-greengrass/aws-greengrass-testing/tree/dev_v1)を参照してください。

GTF は、コンポーネントの動作主導型開発 (BDD) を促進するために、自動テストを実行するツールである Cucumber を使用して実装されています。Cucumber では、このシステムの機能の概要は、`feature` という特殊なタイプのファイルにまとめられています。各機能は、自動テストに変換できる仕様を持つ、シナリオと呼ばれる人間が読める形式で記述されています。各シナリオは、Gherkin と呼ばれるドメイン固有の言語を使用して、テスト対象のシステムの相互作用と結果を定義する一連のステップとして概説されています。[Gherkin ステップ](https://cucumber.io/docs/gherkin/reference/#steps)は、仕様をテストフローに固定するステップ定義と呼ばれる方法を使用してプログラミングコードにリンクされます。GTF のステップ定義は Java で実装されます。

**Topics**
+ [仕組み](#gg-testing-framework-how-gtf-works)
+ [変更ログ](#gtf-changelog)
+ [Greengrass テストフレームワークの設定オプション](configuration-options-gtf.md)
+ [チュートリアル: Greengrass テストフレームワークと Greengrass 開発キットを使用してエンドツーエンドのテストを実行する](run-e2e-tests-tutorial.md)
+ [チュートリアル: 信頼度テストスイートからの信頼度テストを使用する](confidence-tests-tutorial.md)

## 仕組み
<a name="gg-testing-framework-how-gtf-works"></a>

AWS IoT Greengrass は、複数の Java モジュールで構成されるスタンドアロン JAR として GTF を配布します。GTF をコンポーネントのエンドツーエンドのテストに使用するには、Java プロジェクト内でテストを実装する必要があります。テスト用スタンドタブル JAR を Java プロジェクトの依存関係として追加すると、GTF の既存の機能を使用したり、独自のカスタムテストケースを作成することで拡張したりできるようになります。カスタムテストケースを実行するには、Java プロジェクトを構築し、[Greengrass テストフレームワークの設定オプション](configuration-options-gtf.md) で説明されている設定オプションを使用してターゲット JAR を実行します。

### GTF スタンドアロン JAR
<a name="w2ab1c24c19c25c11b5"></a>

Greengrass は Cloudfront を [Maven](https://maven.apache.org/) リポジトリとして使用し、GTF スタンドアロン JAR の異なるバージョンをホストしています。GTF バージョンの全リストについては、[GTF リリース](https://github.com/aws-greengrass/aws-greengrass-testing/releases)を参照してください。

GTF スタンドアロン JAR には以下のモジュールが含まれています。これらのモジュールだけに限定されるものではありません。これらの依存関係をプロジェクト内で個別に選択することも、[テスト用スタンドアロン JAR ファイル](https://github.com/aws-greengrass/aws-greengrass-testing/tree/dev_v1/aws-greengrass-testing-standalone)ですべての依存関係をプロジェクトに一度に含めることもできます。
+ `aws-greengrass-testing-resources`: このモジュールは、テスト中に AWS リソースのライフサイクルを管理するための抽象化を提供します。これを使用して抽`ResourceSpec`象化を使用してカスタム AWS リソースを定義し、GTF がそれらのリソースの作成と削除を自動的に処理できるようにします。
+ `aws-greengrass-testing-platform`: このモジュールは、テストライフサイクル中にテスト対象のデバイスをプラットフォームレベルで抽象化します。プラットフォームとは独立して OS とやりとりするための API が含まれており、デバイスシェルで実行されるコマンドをシミュレートするために使用できます。
+ `aws-greengrass-testing-components`: このモジュールは、デプロイメント、IPC、その他の機能などの Greengrass のコア機能のテストに使用されるサンプルコンポーネントで構成されています。
+ `aws-greengrass-testing-features`: このモジュールは、Greengrass 環境でのテストに使用される再利用可能な共通ステップとその定義で構成されています。

**Topics**
+ [仕組み](#gg-testing-framework-how-gtf-works)
+ [変更ログ](#gtf-changelog)
+ [Greengrass テストフレームワークの設定オプション](configuration-options-gtf.md)
+ [チュートリアル: Greengrass テストフレームワークと Greengrass 開発キットを使用してエンドツーエンドのテストを実行する](run-e2e-tests-tutorial.md)
+ [チュートリアル: 信頼度テストスイートからの信頼度テストを使用する](confidence-tests-tutorial.md)

## 変更ログ
<a name="gtf-changelog"></a>

次の表に、GTF の各バージョンの変更をまとめています。詳細については、GitHub の「[GTF リリースページ](https://github.com/aws-greengrass/aws-greengrass-testing/releases)」を参照してください。


|  **バージョン**  |  **変更**  | 
| --- | --- | 
| 1.2.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/gg-testing-framework.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/gg-testing-framework.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/gg-testing-framework.html)  | 
|  1.0.0  |  当初のバージョン  | 

# Greengrass テストフレームワークの設定オプション
<a name="configuration-options-gtf"></a>

## GTF の設定オプション
<a name="configuration-options-gtf-options"></a>

Greengrass テストフレームワーク (GTF) では、エンドツーエンドのテストプロセスの開始時に特定のパラメータを設定して、テストフローを調整できます。これらの設定オプションは GTF スタンドアロン JAR の CLI 引数として指定できます。

<a name="gtf_options"></a>GTF バージョン 1.1.0 以降には、以下の設定オプションがあります。
+ `additional-plugins` – (オプション) 追加の Cucumber プラグイン
+ `aws-region` – AWS のサービスの特定のリージョンレベルのエンドポイントをターゲットにします。デフォルトは、AWS SDK が検出するものです。
+ `credentials-path` – オプションの AWS プロファイル認証情報のパス。デフォルトは、ホスト環境で検出された認証情報です。
+ `credentials-path-rotation` – AWS 認証情報のオプションのローテーション期間。デフォルトで 15 分または `PT15M` に設定されます。
+ `csr-path` – デバイス証明書の生成に使用される CSR のパス。
+ `device-mode` – テスト対象のターゲットデバイス。デフォルトはローカルデバイスです。
+ `env-stage` – Greengrass のデプロイ環境をターゲットに設定します。デフォルトは本番です。
+ `existing-device-cert-arn` – Greengrass のデバイス証明書として使用する既存の証明書の ARN。
+ `feature-path` – 追加の機能ファイルを含むファイルまたはディレクトリ。デフォルトでは、追加の機能ファイルは使用されません。
+ `gg-cli-version` – Greengrass CLI のバージョンをオーバーライドします。デフォルトは `ggc.version` にある値です。
+ `gg-component-bucket` – Greengrass コンポーネントを格納する既存の Amazon S3 バケットの名前。
+ `gg-component-overrides` – Greengrass コンポーネントのオーバーライドのリスト。
+ `gg-persist` – テスト実行後に保持されるテスト要素のリスト。デフォルトでは、何も保持しないよう設定されています。許容される値は、`aws.resources`、`installed.software`、および `generated.files` です。
+ `gg-runtime` – テストがテストリソースとどのようにインタラクションするかに影響する値のリスト。これらの値は `gg.persist` パラメータよりも優先されます。デフォルトが空の場合、インストールされている Greengrass ランタイムを含む、すべてのテストリソースがテストケースによって管理されると想定されます。許容される値は、`aws.resources`、`installed.software`、および `generated.files` です。
+ `ggc-archive` – アーカイブされた Greengrass nucleus コンポーネントへのパス。
+ `ggc-install-root` – Greengrass nucleus コンポーネントをインストールするディレクトリ。デフォルトは test.temp.path とテスト実行フォルダです。
+ `ggc-log-level` – テスト実行の Greengrass nucleus ログレベルを設定します。デフォルトは「INFO」です。
+ `ggc-tes-rolename` – AWS のサービスにアクセスするために AWS IoT Greengrass Core が引き受ける IAM ロール。指定された名前のロールが存在しない場合は、ロールとデフォルトのアクセスポリシーが作成されます。
+ `ggc-trusted-plugins` – Greengrass に追加する必要がある、信頼されたプラグインのパス (ホスト上) のカンマ区切りリスト。DUT 自体のパスを指定するには、パスの前に「dut:」というプレフィックスを付けます。
+ `ggc-user-name` – Greengrass nucleus の user:group posixUser の値。デフォルトは、ログインしている現在のユーザー名です。
+ `ggc-version` – 実行中の Greengrass nucleus コンポーネントのバージョンをオーバーライドします。デフォルトは ggc.archive にある値です。
+ `log-level` – テスト実行のログレベル。デフォルトは「INFO」です。
+ `parallel-config` – JSON 文字列としてのバッチインデックスとバッチ数のセット。バッチインデックスのデフォルト値は 0、バッチ数は 1 です。
+ `proxy-url` – この URL を介してトラフィックをルーティングするようにすべてのテストを設定します。
+ `tags` – 機能タグのみを実行します。「&」を使用して組み合わせることができます
+ `test-id-prefix` – AWS リソース名とタグを含むすべてのテスト固有のリソースに適用される共通のプレフィックス。デフォルトは「gg」プレフィックスです。
+ `test-log-path` – テスト実行全体の結果を含むディレクトリ。デフォルトは「testResults」です。
+ `test-results-json` – 結果として得られる Cucumber JSON レポートがディスクに書き込まれた状態で生成されるかどうかを決定するフラグ。デフォルトは true です。
+ `test-results-log` – コンソール出力がディスクに書き込まれた状態で生成されるかどうかを決定するフラグ。デフォルトは false です。
+ `test-results-xml` – 結果として得られる JUnit XML レポートがディスクに書き込まれた状態で生成されるかどうかを決定するフラグ。デフォルトは true です。
+ `test-temp-path` – ローカルテストアーティファクトを生成するディレクトリ。デフォルトは、gg-testing というプレフィックスが付いたランダムな一時ディレクトリです。
+ `timeout-multiplier` – すべてのテストタイムアウトに提供される乗数。デフォルトは 1.0 です。

# チュートリアル: Greengrass テストフレームワークと Greengrass 開発キットを使用してエンドツーエンドのテストを実行する
<a name="run-e2e-tests-tutorial"></a>

AWS IoT Greengrass Testing Framework (GTF) と Greengrass Development Kit (GDK) は、開発者がend-to-endのテストを実行する方法を提供します。このチュートリアルでは、コンポーネントで GDK プロジェクトを初期化し、エンドツーエンドのテストモジュールで GDK プロジェクトを初期化し、カスタムテストケースを構築する方法を説明します。カスタムテストケースの作成後、テストを実行できます。

このチュートリアルでは、以下の作業を行います。

1. GDK プロジェクトをコンポーネントで初期化します。

1. エンドツーエンドのテストモジュールで GDK プロジェクトを初期化します。

1. カスタムテストケースを構築します。

1. 新しいテストケースにタグを追加します。

1. テスト JAR をビルドします。

1.  テストを実行します。

**Topics**
+ [前提条件](#run-e2e-tests-tutorial-prerequisites)
+ [ステップ 1: GDK プロジェクトをコンポーネントで初期化する](#init-gdk-with-component)
+ [ステップ 2: エンドツーエンドのテストモジュールで GDK プロジェクトを初期化する](#init-gdk-with-e2e-test)
+ [ステップ 3 : カスタムテストケースを構築する](#run-e2e-tests-tutorial-instructions)
+ [ステップ 4 : 新しいテストケースにタグを追加する](#add-tag-to-test-case)
+ [ステップ 5: テスト JAR を構築する](#build-test-jar)
+ [ステップ 6 : テストを実行する](#run-test-gtf)
+ [例: カスタムテストケースを構築する](#build-test-case-example)

## 前提条件
<a name="run-e2e-tests-tutorial-prerequisites"></a>

このチュートリアルを完了するには、以下が必要です。
+ GDK バージョン 1.3.0 以降
+ Java
+ Maven
+ Git

## ステップ 1: GDK プロジェクトをコンポーネントで初期化する
<a name="init-gdk-with-component"></a>
+ 空のフォルダーを GDK プロジェクトで初期化します。以下のコマンドを実行して Python で実装された `HelloWorld` コンポーネントをダウンロードします。

  ```
  gdk component init -t HelloWorld -l python -n HelloWorld
  ```

  このコマンドで、現在のディレクトリに `HelloWorld` という名前の新しいディレクトリが作成されます。

## ステップ 2: エンドツーエンドのテストモジュールで GDK プロジェクトを初期化する
<a name="init-gdk-with-e2e-test"></a>
+ GDK を使用して、テストモジュールテンプレートをダウンロードできます。このテンプレートには、特定の機能とステップの実装が含まれています。以下のコマンドを実行して `HelloWorld` ディレクトリを開き、テストモジュールを使用して既存の GDK プロジェクトを初期化します。

  ```
  cd HelloWorld
  gdk test-e2e init
  ```

  このコマンドで、`HelloWorld` ディレクトリに `gg-e2e-tests` という名前の新しいディレクトリが作成されます。このテストディレクトリは Greengrass のテスト用スタンドアロン JAR に依存する [Maven](https://maven.apache.org/) プロジェクトです。

## ステップ 3 : カスタムテストケースを構築する
<a name="run-e2e-tests-tutorial-instructions"></a>

カスタムテストケースの作成は、大きく分けて 2 つのステップで構成されます。テストシナリオを持つ機能ファイルを作成することと、もう 1 つはステップ定義を実装することです。カスタムテストケースの作成例については、[例: カスタムテストケースを構築する](#build-test-case-example) を参照してください。以下の手順でカスタムテストケースを構築してください。

1. テストシナリオを持つ機能ファイルを作成する

   機能は通常、テスト対象のソフトウェアの特定の機能を表します。Cucumber では、各機能はタイトル、詳細な説明、シナリオと呼ばれる特定のケースの 1 つまたは複数の例を含む個別の機能ファイルとして指定されます。各シナリオは、タイトル、詳細な説明、相互作用と期待される結果を定義する一連のステップで構成されています。シナリオは、「given」、「when」、「then」というキーワードを使用して構造化された形式で記述されます。

1. ステップ定義を実装する

   ステップ定義は、プログラマティックコードに [Gherkin ステップ](https://cucumber.io/docs/gherkin/reference/#steps) をプレインランゲージでリンクします。Cucumber はシナリオ内の Gherkin ステップを識別すると、一致するステップ定義を探して実行します。

## ステップ 4 : 新しいテストケースにタグを追加する
<a name="add-tag-to-test-case"></a>
+ 機能やシナリオにタグを割り当てて、テストプロセスを整理できます。タグを使用してシナリオのサブセットを分類したり、実行するフックを条件付きで選択したりできます。機能とシナリオには、スペースで区切ることで複数のタグを付けることができます。

  この例では、`HelloWorld` コンポーネントを使用します。

  機能ファイルに、`@Sample` タグの横に `@HelloWorld` という名前の新しいタグを追加します。

  ```
  @Sample @HelloWorld
  Scenario: As a developer, I can create a component and deploy it on my device
  ....
  ```

## ステップ 5: テスト JAR を構築する
<a name="build-test-jar"></a>

1. コンポーネントを構築します。テストモジュールを構築する前に、コンポーネントを構築する必要があります。

   ```
   gdk component build
   ```

1. 次のコマンドを使用してテストモジュールを構築します。このコマンドは、`greengrass-build` フォルダーにテスト用 JAR を構築します。

   ```
   gdk test-e2e build
   ```

## ステップ 6 : テストを実行する
<a name="run-test-gtf"></a>

カスタムテストケースを実行すると、GTF はテスト中に作成されたリソースを管理するとともに、テストのライフサイクルを自動化します。まず、テスト対象デバイス (DUT) を AWS IoT モノとしてプロビジョニングし、そのデバイスに Greengrass コアソフトウェアをインストールします。次に、そのパスで指定されたレシピを使用して `HelloWorld` という名前の新しいコンポーネントを作成します。その後、`HelloWorld` コンポーネントは Greengrass デバイスデプロイメントを通じてコアデバイスにデプロイされます。その後、デプロイが成功したかどうかが検証されます。デプロイが成功すると 3 分以内にデプロイステータスが `COMPLETED` に変わります。

1. プロジェクトディレクトリ内の `gdk-config.json` ファイルに移動し、`HelloWorld` タグを持つテストをターゲットにします。次のコマンドを使用して、`test-e2e` キーをアップデートします。

   ```
     "test-e2e":{
       "gtf_options" : { 
            "tags":"HelloWorld"
        }
     }
   ```

1. テストを実行する前に、ホストデバイスに AWS 認証情報を指定する必要があります。GTF は、テストプロセス中にこれらの認証情報を使用して AWS リソースを管理します。指定したロールに、テストに含まれる必要な操作を自動化する権限があることを確認してください。

   認証情報を指定するには、次のコマンドを実行します AWS 。

   1. 

------
#### [ Linux or Unix ]

     ```
     export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ Windows Command Prompt (CMD) ]

     ```
     set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ PowerShell ]

     ```
     $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
     $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
     ```

------

1. 次のコマンドを使用してテストを実行します。

   ```
   gdk test-e2e run
   ```

   このコマンドは、`greengrass-build` フォルダーにある Greengrass nucleus の最新バージョンをダウンロードし、それを使用してテストを実行します。また、このコマンドは、`HelloWorld` タグを持つシナリオのみをターゲットにし、それらのシナリオのレポートを生成します。このテスト中に作成された AWS リソースは、テストの最後に破棄されます。

## 例: カスタムテストケースを構築する
<a name="build-test-case-example"></a>

**Example**  
GDK プロジェクトにダウンロードされたテストモジュールは、サンプル機能とステップ実装ファイルで構成されています。  
以下の例では、Greengrass ソフトウェアのデバイスデプロイ機能をテストするための機能ファイルを作成します。Greengrass  AWS クラウド を介してコンポーネントをデプロイするシナリオを使用して、この機能の機能を部分的にテストします。これは、このユースケースの相互作用と期待される結果を理解するのに役立つ一連のステップです。  <a name="build-test-case-example-steps"></a>

1. 

**機能ファイルを作成する**

   現在のディレクトリの `gg-e2e-tests/src/main/resources/greengrass/features` フォルダーに移動します。次の例のような `component.feature` サンプルがあります。

   この機能ファイルでは、Greengrass ソフトウェアのデバイスデプロイ機能をテストできます。Greengrass クラウドを介してコンポーネントをデプロイするシナリオを使用して、この機能の機能を部分的にテストできます。このシナリオは、このユースケースの相互作用と期待される結果を理解するのに役立つ一連のステップです。

   ```
   Feature: Testing features of Greengrassv2 component
   
   Background:
       Given my device is registered as a Thing
       And my device is running Greengrass
   
   @Sample
   Scenario: As a developer, I can create a component and deploy it on my device
       When I create a Greengrass deployment with components
           HelloWorld | /path/to/recipe/file
       And I deploy the Greengrass deployment configuration
       Then the Greengrass deployment is COMPLETED on the device after 180 seconds
       And I call my custom step
   ```

   GTF には、`And I call my custom step` という名前のステップを除く以下のすべてのステップのステップ定義が含まれています。

1. 

**ステップ定義を実装する**

   GTF スタンドアロン JAR には、`And I call my custom step` ステップを除くすべてのステップのステップ定義が含まれています。このステップをテストモジュールに実装できます。

   テストファイルのソースコードに移動します。以下のコマンドを使用すると、ステップ定義を使用してカスタムステップをリンクできます。

   ```
   @And("I call my custom step")
   public void customStep() {
       System.out.println("My custom step was called ");
   }
   ```

# チュートリアル: 信頼度テストスイートからの信頼度テストを使用する
<a name="confidence-tests-tutorial"></a>

AWS IoT Greengrass Testing Framework (GTF) と Greengrass Development Kit (GDK) は、開発者がend-to-endのテストを実行する方法を提供します。このチュートリアルでは、コンポーネントで GDK プロジェクトを初期化し、エンドツーエンドのテストモジュールで GDK プロジェクトを初期化し、信頼度テストスイートの信頼度テストを使用します。カスタムテストケースの作成後、テストを実行できます。

信頼度テストは、Greengrass が提供する一般的なテストで、基本的なコンポーネントの動作を検証します。これらのテストは、より具体的なコンポーネントニーズに合わせて変更または拡張できます。

このチュートリアルでは、HelloWorld コンポーネントを使用します。別のコンポーネントを使用する場合は、HelloWorld コンポーネントを自分のコンポーネントに置き換えます。

このチュートリアルでは、以下の作業を行います。

1. GDK プロジェクトをコンポーネントで初期化します。

1. エンドツーエンドのテストモジュールで GDK プロジェクトを初期化します。

1. 信頼度テストスイートからのテストを使用します。

1. 新しいテストケースにタグを追加します。

1. テスト JAR をビルドします。

1.  テストを実行します。

**Topics**
+ [前提条件](#confidence-tests-tutorial-prerequisites)
+ [ステップ 1: GDK プロジェクトをコンポーネントで初期化する](#init-gdk-with-component)
+ [ステップ 2: エンドツーエンドのテストモジュールで GDK プロジェクトを初期化する](#init-gdk-with-e2e-test)
+ [ステップ 3: 信頼度テストスイートからのテストを使用する](#confidence-tests-tutorial-instructions)
+ [ステップ 4 : 新しいテストケースにタグを追加する](#add-tag-to-test-case)
+ [ステップ 5: テスト JAR を構築する](#build-test-jar)
+ [ステップ 6 : テストを実行する](#run-test-gtf)
+ [例: 信頼度テストを使用する](#build-confidence-test-case-example)

## 前提条件
<a name="confidence-tests-tutorial-prerequisites"></a>

このチュートリアルを完了するには、以下が必要です。
+ GDK バージョン 1.6.0 以降
+ Java
+ Maven
+ Git

## ステップ 1: GDK プロジェクトをコンポーネントで初期化する
<a name="init-gdk-with-component"></a>
+ 空のフォルダーを GDK プロジェクトで初期化します。以下のコマンドを実行して Python で実装された `HelloWorld` コンポーネントをダウンロードします。

  ```
  gdk component init -t HelloWorld -l python -n HelloWorld
  ```

  このコマンドで、現在のディレクトリに `HelloWorld` という名前の新しいディレクトリが作成されます。

## ステップ 2: エンドツーエンドのテストモジュールで GDK プロジェクトを初期化する
<a name="init-gdk-with-e2e-test"></a>
+ GDK を使用して、テストモジュールテンプレートをダウンロードできます。このテンプレートには、特定の機能とステップの実装が含まれています。以下のコマンドを実行して `HelloWorld` ディレクトリを開き、テストモジュールを使用して既存の GDK プロジェクトを初期化します。

  ```
  cd HelloWorld
  gdk test-e2e init
  ```

  このコマンドで、`HelloWorld` ディレクトリに `gg-e2e-tests` という名前の新しいディレクトリが作成されます。このテストディレクトリは Greengrass のテスト用スタンドアロン JAR に依存する [Maven](https://maven.apache.org/) プロジェクトです。

## ステップ 3: 信頼度テストスイートからのテストを使用する
<a name="confidence-tests-tutorial-instructions"></a>

提供された機能ファイルを使用する信頼度テストケースを書き、必要に応じてシナリオを変更します。信頼度テストの使用例については、「[例: カスタムテストケースを構築する](run-e2e-tests-tutorial.md#build-test-case-example)」を参照してください。信頼度テストを使用するには、次のステップを使用します。
+ 提供された機能ファイルを使用します。

  現在のディレクトリの `gg-e2e-tests/src/main/resources/greengrass/features` フォルダーに移動します。サンプル `confidenceTest.feature` ファイルを開き、信頼度テストを使用します。

## ステップ 4 : 新しいテストケースにタグを追加する
<a name="add-tag-to-test-case"></a>
+ 機能やシナリオにタグを割り当てて、テストプロセスを整理できます。タグを使用してシナリオのサブセットを分類したり、実行するフックを条件付きで選択したりできます。機能とシナリオには、スペースで区切ることで複数のタグを付けることができます。

  この例では、`HelloWorld` コンポーネントを使用します。

  各シナリオには `@ConfidenceTest` がタグ付けされています。テストスイートのサブセットのみを実行する場合は、タグを変更または追加します。各テストシナリオは、各信頼度テストの上部に記載されています。このシナリオは、各テストケースのインタラクションと期待される結果を理解するのに役立つ一連のステップです。これらのテストは、独自のステップを追加するか、既存のステップを変更することで拡張できます。

  ```
  @ConfidenceTest
  Scenario: As a Developer, I can deploy GDK_COMPONENT_NAME to my device and see it is working as expected
  ....
  ```

## ステップ 5: テスト JAR を構築する
<a name="build-test-jar"></a>

1. コンポーネントを構築します。テストモジュールを構築する前に、コンポーネントを構築する必要があります。

   ```
   gdk component build
   ```

1. 次のコマンドを使用してテストモジュールを構築します。このコマンドは、`greengrass-build` フォルダーにテスト用 JAR を構築します。

   ```
   gdk test-e2e build
   ```

## ステップ 6 : テストを実行する
<a name="run-test-gtf"></a>

信頼度テストを実行すると、GTF はテスト中に作成されたリソースを管理するとともに、テストのライフサイクルを自動化します。まず、テスト対象デバイス (DUT) を AWS IoT モノとしてプロビジョニングし、そのデバイスに Greengrass コアソフトウェアをインストールします。次に、そのパスで指定されたレシピを使用して `HelloWorld` という名前の新しいコンポーネントを作成します。その後、`HelloWorld` コンポーネントは Greengrass デバイスデプロイメントを通じてコアデバイスにデプロイされます。その後、デプロイが成功したかどうかが検証されます。デプロイが成功すると 3 分以内にデプロイステータスが `COMPLETED` に変わります。

1. プロジェクトディレクトリ内の `gdk-config.json` ファイルに移動し、`ConfidenceTest` タグまたはステップ 4 で指定したタグをもつテストをターゲットにします。次のコマンドを使用して、`test-e2e` キーをアップデートします。

   ```
     "test-e2e":{
       "gtf_options" : { 
            "tags":"ConfidenceTest"
        }
     }
   ```

1. テストを実行する前に、ホストデバイスに AWS 認証情報を指定する必要があります。GTF は、テストプロセス中にこれらの認証情報を使用して AWS リソースを管理します。指定したロールに、テストに含まれる必要な操作を自動化する権限があることを確認してください。

   認証情報を指定するには、次のコマンドを実行します AWS 。

   1. 

------
#### [ Linux or Unix ]

     ```
     export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ Windows Command Prompt (CMD) ]

     ```
     set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ PowerShell ]

     ```
     $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
     $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
     ```

------

1. 次のコマンドを使用してテストを実行します。

   ```
   gdk test-e2e run
   ```

   このコマンドは、`greengrass-build` フォルダーにある Greengrass nucleus の最新バージョンをダウンロードし、それを使用してテストを実行します。また、このコマンドは、`ConfidenceTest` タグを持つシナリオのみをターゲットにし、それらのシナリオのレポートを生成します。このテスト中に作成された AWS リソースは、テストの最後に破棄されます。

## 例: 信頼度テストを使用する
<a name="build-confidence-test-case-example"></a>

**Example**  
GDK プロジェクトにダウンロードされたテストモジュールは、サンプル機能ファイルで構成されています。  
以下の例では、Greengrass ソフトウェアのデバイスデプロイ機能をテストするための機能ファイルを使用します。Greengrass  AWS クラウド を介してコンポーネントをデプロイするシナリオを使用して、この機能の機能を部分的にテストします。これは、このユースケースの相互作用と期待される結果を理解するのに役立つ一連のステップです。  <a name="build-confidence-test-case-example-steps"></a>
+ 

**提供された機能ファイルを使用します。**

  現在のディレクトリの `gg-e2e-tests/src/main/resources/greengrass/features` フォルダーに移動します。次の例のような `confidenceTest.feature` サンプルがあります。

  ```
  Feature: Confidence Test Suite
  
  Background:
      Given my device is registered as a Thing
      And my device is running Greengrass
  
  @ConfidenceTest
  Scenario: As a Developer, I can deploy GDK_COMPONENT_NAME to my device and see it is working as expected
      When I create a Greengrass deployment with components
        | GDK_COMPONENT_NAME | GDK_COMPONENT_RECIPE_FILE |
        | aws.greengrass.Cli | LATEST                    |
      And I deploy the Greengrass deployment configuration
      Then the Greengrass deployment is COMPLETED on the device after 180 seconds
      # Update component state accordingly. Possible states: {RUNNING, FINISHED, BROKEN, STOPPING}
      And I verify the GDK_COMPONENT_NAME component is RUNNING using the greengrass-cli
  ```

  各テストシナリオは、各信頼度テストの上部に記載されています。このシナリオは、各テストケースのインタラクションと期待される結果を理解するのに役立つ一連のステップです。これらのテストは、独自のステップを追加するか、既存のステップを変更することで拡張できます。各シナリオには、これらの調整に役立つコメントが含まれています。