翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
このチュートリアルでは、自動的にプロビジョニングされた AWS リソースとローカル開発ツールを使用して、Docker コンテナに AWS IoT Greengrass Core ソフトウェアをインストールして実行する方法を示します。この開発環境を使用して、Docker コンテナ AWS IoT Greengrass の機能を調べることができます。ソフトウェアには、これらのリソースをプロビジョニングし、ローカル開発ツールをデプロイするための AWS 認証情報が必要です。
コンテナに AWS 認証情報を提供できない場合は、コアデバイスが動作するために必要なリソースをプロビジョニング AWS できます。開発ツールをコアデバイスにデプロイして、開発デバイスとして使用することもできます。これにより、コンテナの実行時にデバイスに付与するアクセス許可を減らすことができます。詳細については、「手動リソースプロビジョニングを使用して Docker コンテナで AWS IoT Greengrass を実行する」を参照してください。
前提条件
このチュートリアルを完了するには、以下が必要です。
-
AWS アカウント。アカウントをお持ちでない場合は、「のセットアップ AWS アカウント」を参照してください。
-
Greengrass AWS IAMコアデバイスの AWS IoT および IAMリソースをプロビジョニングするアクセス許可を持つ ユーザー。 AWS IoT Greengrass Core ソフトウェアインストーラは、 AWS 認証情報を使用してこれらのリソースを自動的にプロビジョニングします。リソースを自動的にプロビジョニングする最小IAMポリシーの詳細については、「」を参照してくださいインストーラがリソースをプロビジョニングするための最小限の IAM ポリシー。
-
Docker AWS IoT Greengrass イメージ。Dockerfile AWS IoT Greengrass からイメージを構築できます。
-
Docker コンテナを実行するホストコンピュータは、以下の要件を満たしている必要があります。
-
インターネットに接続された Linux ベースのオペレーティングシステム。
-
Docker Engine
バージョン 18.09 以降。 -
(オプション) Docker Compose
バージョン 1.22 以降。Docker Compose は、Docker Compose を使用して Docker イメージCLIを実行する場合にのみ必要です。
-
AWS
認証情報を設定する
このステップでは、 AWS
セキュリティ認証情報を含む認証情報ファイルをホストコンピュータに作成します。 AWS IoT Greengrass Docker イメージを実行するときは、この認証情報ファイルを含むフォルダを Docker コンテナ/root/.aws/
の にマウントする必要があります。 AWS IoT Greengrass インストーラは、これらの認証情報を使用して にリソースをプロビジョニングします AWS アカウント。インストーラがリソースを自動的にプロビジョニングするために必要な最小限のIAMポリシーについては、「」を参照してくださいインストーラがリソースをプロビジョニングするための最小限の IAM ポリシー。
-
次のいずれかを取得します。
-
IAM ユーザーの長期的な認証情報。長期認証情報を取得する方法については、「 IAMユーザーガイド」の「 IAMユーザーのアクセスキーの管理」を参照してください。
-
(推奨) IAMロールの一時的な認証情報。一時的な認証情報を取得する方法については、「 IAMユーザーガイド」の「 での一時的なセキュリティ認証情報 AWS CLIの使用」を参照してください。
-
-
認証情報ファイルを配置するフォルダを作成します。
mkdir ./greengrass-v2-credentials
-
テキストエディタを使用して、
./greengrass-v2-credentials
フォルダにcredentials
という名前の設定ファイルを作成します。たとえば、次のコマンドを実行して nano を使用して
credentials
ファイルGNUを作成できます。nano ./greengrass-v2-credentials/credentials
-
次の形式で 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 ソフトウェアを実行する」を参照してください。
環境ファイルを作成する
このチュートリアルでは、環境ファイルを使用して、Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定します。また、docker run
コマンドで -e
または --env
引数docker-compose.yml
ファイルの environment
ブロック
-
テキストエディタを使用して、
.env
という名前の環境ファイルを作成します。例えば、Linux ベースのシステムでは、次のコマンドを実行して GNU nano を使用して現在のディレクトリ
.env
に を作成できます。nano .env
-
次の内容をファイルにコピーします。
GGC_ROOT_PATH=
AWS_REGION=/greengrass/v2
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 ルートフォルダ。/greengrass/v2
GGC_ROOT
環境変数を使用して、この値を設定します。 -
region
。 リソースを作成した AWS リージョン 。 -
MyGreengrassCore
。 AWS IoT モノの名前。モノが存在しない場合、インストーラによって作成されます。インストーラは証明書をダウンロードして AWS IoT 、モノとして認証します。 -
MyGreengrassCoreGroup
。 AWS IoT モノのグループの名前。モノグループが存在しない場合、インストーラはそのグループを作成してモノを追加します。モノグループが存在してアクティブなデプロイがある場合、コアデバイスはデプロイで指定されたソフトウェアをダウンロードして実行します。 -
GreengrassV2TokenExchangeRole
。 を、Greengrass コアデバイスが一時的な AWS 認証情報を取得できるようにするIAMトークン交換ロールの名前に置き換えます。ロールが存在しない場合、インストーラはロールを作成し、GreengrassV2TokenExchangeRole
Access という名前のポリシーを作成してアタッチします。詳細については、「コアデバイスが AWS サービスとやり取りできるように承認する」を参照してください。 -
GreengrassCoreTokenExchangeRoleAlias
。 トークン交換ロールのエイリアス。ロールエイリアスが存在しない場合、インストーラによって作成され、指定したIAMトークン交換ロールにポイントされます。詳細については、「」を参照してください。
注記
DEPLOY_DEV_TOOLS
環境変数を に設定true
して Greengrass CLIコンポーネントをデプロイできます。これにより、Docker コンテナ内でカスタムコンポーネントを開発できます。このコンポーネントは、本番環境ではなく、開発環境でのみで使用することをお勧めします。このコンポーネントは、通常、本番環境では必要とされない情報や操作へのアクセスを提供します。このコンポーネントを必要なコアデバイスにのみデプロイして、最小特権の原則に従います。 -
コンテナで AWS IoT Greengrass Core ソフトウェアを実行する
このチュートリアルでは、Docker コンテナでビルドした Docker イメージを起動する方法を説明します。Docker CLIまたは Docker Compose を使用してCLI、Docker コンテナで AWS IoT Greengrass Core ソフトウェアイメージを実行できます。
-
次のコマンドを実行して Docker コンテナを起動します。
docker run --rm --init -it --name
docker-image
\ -vpath/to/
greengrass-v2-credentials:/root/.aws/:ro \ --env-file .env \ -p 8883 \your-container-image:version
このコマンド例は、docker run
に次の引数を使用します。 -
--rm
: コンテナの終了時にクリーンアップを実行します。 -
--init
: コンテナで init プロセスを使用します。 注記
Docker コンテナを停止するときに AWS IoT Greengrass Core ソフトウェアをシャットダウンするには、
--init
引数が必要です。 -
-it
: (オプション) Docker コンテナを対話型プロセスとしてフォアグラウンドで実行します。これを -d
引数に置き換えて、代わりに Docker コンテナをデタッチモードで実行できます。詳細については、「Docker ドキュメント」の「デタッチ vs フォアグラウンド」を参照してください。 -
--name
: aws-iot-greengrass
という名前のコンテナを実行します。 -
-v
。 ボリュームを Docker コンテナにマウントして、設定ファイルと証明書ファイルをコンテナ内で AWS IoT Greengrass 実行できるようにします。 -
--env-file
。 (オプション) Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。この引数は、環境変数を設定するための [environment file] (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、 --env
引数を使用して、「Docker 実行コマンド」で環境変数を直接設定できます。 -
-p
: (オプション) 8883 コンテナポートをホストマシンに公開します。この引数は、 がMQTTトラフィックにポート 8883 AWS IoT Greengrass を使用するMQTTため、 を介して接続および通信する場合に必要です。他のポートを開くには、追加の -p
引数を使用します。
注記
セキュリティを強化して Docker コンテナを実行するには、
--cap-drop
引数および--cap-add
引数を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[Runtime privilege and Linux capabilities](ランタイム特権と Linux 機能)」を参照してください。 -
-
ホストデバイスで
./greengrass-v2-credentials
から認証情報を削除します。rm -rf ./greengrass-v2-credentials
重要
これらの認証情報は、コアデバイスがセットアップ時にのみ必要とする広範なアクセス許可を提供するため、削除します。これらの認証情報を削除しないと、Greengrass コンポーネントとコンテナで実行されている他のプロセスがそれらにアクセスできます。Greengrass コンポーネントに AWS 認証情報を指定する必要がある場合は、トークン交換サービスを使用します。詳細については、「AWS サービスとやり取りする」を参照してください。
次のステップ
AWS IoT Greengrass Core ソフトウェアが Docker コンテナで実行されています。次のコマンドを実行して、現在実行中のコンテナのコンテナ ID を取得します。
docker ps
その後、次のコマンドを実行してコンテナにアクセスし、コンテナ内で実行されている AWS IoT Greengrass Core ソフトウェアを試すことができます。
docker exec -it
container-id
/bin/bash
単純なコンポーネントの作成については、「チュートリアル: の開始方法 AWS IoT Greengrass V2」の「ステップ 4: デバイス上でコンポーネントを開発およびテストする」を参照してください。
注記
docker exec
を使用して Docker コンテナ内でコマンドを実行すると、これらのコマンドは Docker ログに記録されません。Docker ログにコマンドを記録するには、Docker コンテナに対話型シェルをアタッチします。詳細については、「インタラクティブシェルを Docker コンテナにアタッチする」を参照してください。
AWS IoT Greengrass Core ログファイルは と呼ばれgreengrass.log
、 にあります
。コンポーネントログファイルも同じディレクトリにあります。Greengrass ログをホストの一時ディレクトリにコピーするには、次のコマンドを実行します。
/logs/greengrass/v2
docker cp
container-id
:/greengrass/v2/logs/tmp/logs
コンテナの終了後、または削除後もログを保持する場合は、Greengrass ディレクトリ全体をマウントするのではなく、
ディレクトリのみをホストの一時ログディレクトリにバインドマウントすることをお勧めします。詳細については、「Docker コンテナの外部で Greengrass ログを永続化する」を参照してください。
/logs/greengrass/v2
実行中の Docker AWS IoT Greengrass コンテナを停止するには、 docker stop
または を実行しますdocker-compose -f docker-compose.yml stop
。このアクションは、SIGTERM
を Greengrass プロセスに送信し、コンテナで開始されたすべての関連プロセスをシャットダウンします。Docker コンテナは、プロセス PID1 docker-init
として実行可能ファイルで初期化されるため、残ったゾンビプロセスを削除できます。詳細については、Docker ドキュメントの「Specify an init process
Docker コンテナで AWS IoT Greengrass を実行する際の問題のトラブルシューティングについては、「Docker コンテナ AWS IoT Greengrass でのトラブルシューティング」を参照してください。