

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

# 自動リソースプロビジョニングを使用して Docker コンテナ AWS IoT Greengrass で を実行する
<a name="run-greengrass-docker-automatic-provisioning"></a>

このチュートリアルでは、自動的にプロビジョニングされた AWS リソースとローカル開発ツールを使用して、Docker コンテナに AWS IoT Greengrass Core ソフトウェアをインストールして実行する方法について説明します。この開発環境を使用して、Docker コンテナ AWS IoT Greengrass の機能を調べることができます。ソフトウェアには、これらのリソースをプロビジョニングし、ローカル開発ツールをデプロイするための AWS 認証情報が必要です。

コンテナに AWS 認証情報を提供できない場合は、コアデバイスが動作するために必要なリソースをプロビジョニング AWS できます。開発ツールをコアデバイスにデプロイして、開発デバイスとして使用することもできます。これにより、コンテナの実行時にデバイスに付与するアクセス許可を減らすことができます。詳細については、「[手動リソースプロビジョニングを使用して Docker コンテナ AWS IoT Greengrass で を実行する](run-greengrass-docker-manual-provisioning.md)」を参照してください。



## 前提条件
<a name="docker-automatic-provisioning-prereqs"></a>

このチュートリアルを完了するには、以下が必要です。
+  AWS アカウント。アカウントをお持ちでない場合は、「[のセットアップ AWS アカウント](setting-up.md#set-up-aws-account)」を参照してください。
+ Greengrass AWS コアデバイスの AWS IoT および IAM リソースをプロビジョニングするアクセス許可を持つ IAM ユーザー。 AWS IoT Greengrass Core ソフトウェアインストーラは、認証情報 AWS を使用してこれらのリソースを自動的にプロビジョニングします。リソースを自動的にプロビジョニングする最小の IAM ポリシーの詳細については、「[インストーラがリソースをプロビジョニングするための最小限の IAM ポリシー](provision-minimal-iam-policy.md)」を参照してください。
+ Docker AWS IoT Greengrass イメージ。[Dockerfile AWS IoT Greengrass からイメージを構築](build-greengrass-dockerfile.md)できます。
+ Docker コンテナを実行するホストコンピュータは、以下の要件を満たしている必要があります。
  + <a name="docker-host-reqs"></a>インターネットに接続された Linux ベースのオペレーティングシステム。
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) バージョン 18.09 以降。
  + <a name="docker-compose-reqs"></a>(オプション) [Docker Compose](https://docs.docker.com/compose/install/) バージョン 1.22 以降。Docker Compose は、Docker Compose CLI を使用して Docker イメージを実行する場合のみ必要です。

## AWS 認証情報を設定する
<a name="configure-aws-credentials-for-docker"></a>

このステップでは、 AWS セキュリティ認証情報を含む認証情報ファイルをホストコンピュータに作成します。 AWS IoT Greengrass Docker イメージを実行するときは、この認証情報ファイルを含むフォルダを Docker コンテナ`/root/.aws/`の にマウントする必要があります。 AWS IoT Greengrass インストーラは、これらの認証情報を使用して のリソースをプロビジョニングします AWS アカウント。インストーラがリソースを自動的にプロビジョニングするために必要な最小 IAM ポリシーについては、「[インストーラがリソースをプロビジョニングするための最小限の IAM ポリシー](provision-minimal-iam-policy.md)」を参照してください。

1. 次のいずれかを取得します。
   + IAM ユーザーの長期的な認証情報。長期認証情報を取得する方法については、「*IAM ユーザーガイド*」の「[IAM ユーザーのアクセスキーを管理します。](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)」を参照してください。
   + (推奨) IAM ロールの一時的な認証情報。一時的な認証情報を取得する方法については、「*IAM ユーザーガイド*」の「[AWS CLIで一時的なセキュリティ認証情報を使用する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli)」を参照してください。

1. 認証情報ファイルを配置するフォルダを作成します。

   ```
   mkdir ./greengrass-v2-credentials
   ```

1. テキストエディタを使用して、`./greengrass-v2-credentials` フォルダに `credentials` という名前の設定ファイルを作成します。

   例えば、次のコマンドを実行し、GNU nano を使用して `credentials` ファイルを作成できます。

   ```
   nano ./greengrass-v2-credentials/credentials
   ```

1. 次の形式で AWS 認証情報を `credentials` ファイルに追加します。

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
   ```

   一時的な認証情報の場合のみ `aws_session_token` を含めます。

**重要**  
 AWS IoT Greengrass コンテナを起動したら、ホストコンピュータから認証情報ファイルを削除します。認証情報ファイルを削除しない場合、 AWS 認証情報はコンテナ内にマウントされたままになります。詳細については、「[コンテナで AWS IoT Greengrass Core ソフトウェアを実行する](#run-greengrass-image-automatic-provisioning)」を参照してください。

## 環境ファイルを作成する
<a name="create-env-file-automatic-provisioning"></a>

このチュートリアルでは、環境ファイルを使用して、Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定します。また、`docker run` コマンドで [`-e` または `--env` 引数](https://docs.docker.com/engine/reference/commandline/run/#env)を使用して、Docker コンテナに環境変数を設定する、または `docker-compose.yml` ファイルの [`environment` ブロック](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment)で変数を設定することもできます。

1. テキストエディタを使用して、`.env` という名前の環境ファイルを作成します。

   例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用して現在のディレクトリに `.env` を作成できます。

   ```
   nano .env
   ```

1. 次の内容をファイルにコピーします。

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=true
   THING_NAME=MyGreengrassCore
   THING_GROUP_NAME=MyGreengrassCoreGroup
   TES_ROLE_NAME=GreengrassV2TokenExchangeRole
   TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   ```

   次に、以下の値を置き換えます。
   + `/greengrass/v2`。インストールに使用する Greengrass ルートフォルダ。`GGC_ROOT` 環境変数を使用して、この値を設定します。
   + *リージョン*。リソースを作成した AWS リージョン 。
   + *MyGreengrassCore*。 AWS IoT モノの名前。モノが存在しない場合、インストーラによって作成されます。インストーラは証明書をダウンロードして AWS IoT 、モノとして認証します。
   + *MyGreengrassCoreGroup*。 AWS IoT モノのグループの名前。モノグループが存在しない場合、インストーラはそのグループを作成してモノを追加します。モノグループが存在してアクティブなデプロイがある場合、コアデバイスはデプロイで指定されたソフトウェアをダウンロードして実行します。
   +  *GreengrassV2TokenExchangeRole*。Greengrass コアデバイスが一時的な AWS 認証情報を取得できるようにする IAM トークン交換ロールの名前に置き換えます。ロールが存在しない場合、インストーラがロールを作成し、*GreengrassV2TokenExchangeRole* という名前のポリシーを作成してアタッチします。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。
   + *GreengrassCoreTokenExchangeRoleAlias*。トークン交換ロールエイリアス。ロールエイリアスが存在しない場合、インストーラがロールエイリアスを作成し、指定した IAM トークン交換ロールを指します。詳細については、以下を参照してください。
**注記**  <a name="docker-local-dev-tools-production-environment-warning"></a>
`DEPLOY_DEV_TOOLS` 環境変数を `true` に設定して、[[Greengrass CLI component]](greengrass-cli-component.md) (Greengrass CLI コンポーネント) をデプロイできます。これにより、Docker コンテナ内でカスタムコンポーネントを開発できます。<a name="local-dev-tools-production-environment-warning"></a>このコンポーネントは、本番環境ではなく、開発環境でのみで使用することをお勧めします。このコンポーネントは、通常、本番環境では必要とされない情報や操作へのアクセスを提供します。このコンポーネントを必要なコアデバイスにのみデプロイして、最小特権の原則に従います。

## コンテナで AWS IoT Greengrass Core ソフトウェアを実行する
<a name="run-greengrass-image-automatic-provisioning"></a>

このチュートリアルでは、Docker コンテナでビルドした Docker イメージを起動する方法を説明します。Docker CLI または Docker Compose CLI を使用して、Docker コンテナで AWS IoT Greengrass Core ソフトウェアイメージを実行できます。

------
#### [ Docker ]

1. 次のコマンドを実行して Docker コンテナを起動します。

   ```
   docker run --rm --init -it --name docker-image \
    -v path/to/greengrass-v2-credentials:/root/.aws/:ro \
    --env-file .env \
    -p 8883 \
    your-container-image:version
   ```

   このコマンド例は、[docker run](https://docs.docker.com/engine/reference/commandline/run/) に次の引数を使用します。
   + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm): コンテナの終了時にクリーンアップを実行します。
   + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process): コンテナで init プロセスを使用します。
**注記**  
Docker コンテナを停止するときに AWS IoT Greengrass Core ソフトウェアをシャットダウンするには、 `--init`引数が必要です。
   + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground): (オプション) Docker コンテナを対話型プロセスとしてフォアグラウンドで実行します。これを `-d` 引数に置き換えて、代わりに Docker コンテナをデタッチモードで実行できます。詳細については、「Docker ドキュメント」の「[デタッチ vs フォアグラウンド](https://docs.docker.com/engine/reference/run/#detached-vs-foreground)」を参照してください。
   + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name): `aws-iot-greengrass` という名前のコンテナを実行します。
   + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/)。 ボリュームを Docker コンテナにマウントして、設定ファイルと証明書ファイルをコンテナ内で AWS IoT Greengrass 実行できるようにします。
   + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env)。 (オプション) Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。この引数は、環境変数を設定するための [[environment file]](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、`--env` 引数を使用して、「Docker 実行コマンド」で環境変数を直接設定できます。
   + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish): (オプション) 8883 コンテナポートをホストマシンに公開します。 AWS IoT Greengrass は MQTT トラフィックにポート 8883 を使用するため、MQTT を介して接続および通信する場合は、この引数が必要です。他のポートを開くには、追加の `-p` 引数を使用します。
**注記**  <a name="docker-run-cap-drop"></a>
セキュリティを強化して Docker コンテナを実行するには、`--cap-drop` 引数および `--cap-add` 引数を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[[Runtime privilege and Linux capabilities]](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) (ランタイム特権と Linux 機能)」を参照してください。

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>ホストデバイスで `./greengrass-v2-credentials` から認証情報を削除します。

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**重要**  
これらの認証情報は、コアデバイスがセットアップ時にのみ必要とする広範なアクセス許可を提供するため、削除します。これらの認証情報を削除しないと、Greengrass コンポーネントとコンテナで実行されている他のプロセスがそれらにアクセスできます。Greengrass コンポーネントに AWS 認証情報を指定する必要がある場合は、トークン交換サービスを使用します。詳細については、「[AWS サービスとやり取り](interact-with-aws-services.md)」を参照してください。

------
#### [ Docker Compose ]

1. テキストエディタを使用して、`docker-compose.yml` という名前の Docker Compose ファイルを作成します。

   例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用して現在のディレクトリに `docker-compose.yml` を作成できます。

   ```
   nano docker-compose.yml
   ```
**注記**  
 AWSが提供する Compose ファイルの最新バージョンを [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/) からダウンロードして使用することもできます。

1. Compose ファイルに以下の内容を追加します。ファイルは次の例のようになります。*docker-image* をお使いの Docker イメージの名前に置き換えます。

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       container_name: aws-iot-greengrass
       image: docker-image
       volumes:
         - ./greengrass-v2-credentials:/root/.aws/:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   この例の Compose ファイルでは、以下のパラメータはオプションです。
   + `ports` - 8883 コンテナポートをホストマシンに公開します。は MQTT トラフィックにポート 8883 AWS IoT Greengrass を使用するため、このパラメータは MQTT 経由で接続および通信する場合に必要です。
   + `env_file`— Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。このパラメータは、環境変数を設定するための [[environment file]](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、[[environment]](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) (環境) パラメータを使用して、Compose ファイルで環境変数を直接設定できます。
**注記**  <a name="docker-compose-cap-drop"></a>
セキュリティを強化して Docker コンテナを実行するには、Compose ファイルで `cap_drop` および `cap_add` を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[[Runtime privilege and Linux capabilities]](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) (ランタイム特権と Linux 機能)」を参照してください。

1. 次のコマンドを実行して Docker コンテナを起動します。

   ```
   docker-compose -f docker-compose.yml up
   ```

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>ホストデバイスで `./greengrass-v2-credentials` から認証情報を削除します。

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**重要**  
これらの認証情報は、コアデバイスがセットアップ時にのみ必要とする広範なアクセス許可を提供するため、削除します。これらの認証情報を削除しないと、Greengrass コンポーネントとコンテナで実行されている他のプロセスがそれらにアクセスできます。Greengrass コンポーネントに AWS 認証情報を指定する必要がある場合は、トークン交換サービスを使用します。詳細については、「[AWS サービスとやり取り](interact-with-aws-services.md)」を参照してください。

------

## 次の手順
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Core ソフトウェアが Docker コンテナで実行されています。次のコマンドを実行して、現在実行中のコンテナのコンテナ ID を取得します。

```
docker ps
```

その後、次のコマンドを実行してコンテナにアクセスし、コンテナ内で実行されている AWS IoT Greengrass Core ソフトウェアを調べることができます。

```
docker exec -it container-id /bin/bash
```

単純なコンポーネントの作成については、「[チュートリアル: AWS IoT Greengrass V2 の開始方法](getting-started.md)」の「[ステップ 4: デバイス上でコンポーネントを開発およびテストする](create-first-component.md)」を参照してください。

**注記**  <a name="run-greengrass-commands-in-docker-note"></a>
`docker exec` を使用して Docker コンテナ内でコマンドを実行すると、これらのコマンドは Docker ログに記録されません。Docker ログにコマンドを記録するには、Docker コンテナに対話型シェルをアタッチします。詳細については、「[インタラクティブシェルを Docker コンテナにアタッチする](docker-troubleshooting.md#debugging-docker-attach-shell)」を参照してください。

 AWS IoT Greengrass Core ログファイルは と呼ばれ`greengrass.log`、 にあります`/greengrass/v2/logs`。コンポーネントログファイルも同じディレクトリにあります。Greengrass ログをホストの一時ディレクトリにコピーするには、次のコマンドを実行します。

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

コンテナの終了後、または削除後もログを保持する場合は、Greengrass ディレクトリ全体をマウントするのではなく、`/greengrass/v2/logs` ディレクトリのみをホストの一時ログディレクトリにバインドマウントすることをお勧めします。詳細については、「[Docker コンテナの外部で Greengrass ログを永続化する](docker-troubleshooting.md#debugging-docker-persist-logs)」を参照してください。

<a name="greengrass-docker-stop"></a>実行中の Docker AWS IoT Greengrass コンテナを停止するには、 `docker stop`または を実行します`docker-compose -f docker-compose.yml stop`。このアクションは、`SIGTERM` を Greengrass プロセスに送信し、コンテナで開始されたすべての関連プロセスをシャットダウンします。Docker コンテナは、プロセス PID 1 として `docker-init` の実行可能ファイルで初期化されます。これは、残っているゾンビプロセスを削除するのに役立ちます。詳細については、Docker ドキュメントの「[Specify an init process](https://docs.docker.com/engine/reference/run/#specify-an-init-process)」を参照してください。

<a name="see-docker-troubleshooting"></a>Docker コンテナで AWS IoT Greengrass を実行する際の問題のトラブルシューティングについては、「[Docker コンテナ AWS IoT Greengrass でのトラブルシューティング](docker-troubleshooting.md)」を参照してください。