自動リソースプロビジョニングを使用して Docker コンテナ AWS IoT Greengrass で を実行する - AWS IoT Greengrass

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

自動リソースプロビジョニングを使用して Docker コンテナ AWS IoT Greengrass で を実行する

このチュートリアルでは、自動的にプロビジョニングされた 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 ポリシー

  • AWS IoT Greengrass Docker イメージ。AWS IoT Greengrass Dockerfile からイメージを構築できます。

  • 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 ポリシー

  1. 次のいずれかを取得します。

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

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

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

    nano ./greengrass-v2-credentials/credentials
  4. 次の形式で 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 コンテナに環境変数を設定する、または docker-compose.yml ファイルの environment ブロックで変数を設定することもできます。

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

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

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

    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 環境変数を使用して、この値を設定します。

    • region。 リソースを AWS リージョン 作成した 。

    • MyGreengrassCore。 AWS IoT モノの名前。モノが存在しない場合、インストーラによって作成されます。インストーラは証明書をダウンロードして、 AWS IoT モノとして認証します。

    • MyGreengrassCoreGroup。 AWS IoT モノのグループの名前。モノグループが存在しない場合、インストーラはそのグループを作成してモノを追加します。モノグループが存在してアクティブなデプロイがある場合、コアデバイスはデプロイで指定されたソフトウェアをダウンロードして実行します。

    • GreengrassV2TokenExchangeRole。 を、Greengrass コアデバイスが一時的な AWS 認証情報を取得できるようにするIAMトークン交換ロールの名前に置き換えます。ロールが存在しない場合、インストーラはロールを作成し、 という名前のポリシーを作成してアタッチします。GreengrassV2TokenExchangeRoleアクセス。詳細については、「コアデバイスが 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
  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 に次の引数を使用します。

    • --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 機能)」を参照してください。

  2. ホストデバイスで ./greengrass-v2-credentials から認証情報を削除します。

    rm -rf ./greengrass-v2-credentials
    重要

    これらの認証情報は、コアデバイスがセットアップ時にのみ必要とする広範なアクセス許可を提供するため、削除します。これらの認証情報を削除しないと、Greengrass コンポーネントとコンテナで実行されている他のプロセスがそれらにアクセスできます。Greengrass コンポーネントに AWS 認証情報を提供する必要がある場合は、トークン交換サービスを使用します。詳細については、「AWS サービスとやり取り」を参照してください。

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

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

    nano docker-compose.yml
    注記

    から が提供する Compose AWSファイルの最新バージョンをダウンロードして使用することもできますGitHub

  2. 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"

    この例の Compose ファイルでは、以下のパラメータはオプションです。

    • ports - 8883 コンテナポートをホストマシンに公開します。このパラメータは、 がMQTTトラフィックにポート 8883 AWS IoT Greengrass を使用するMQTTため、 を介して接続および通信する場合に必要です。

    • env_file— Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。このパラメータは、環境変数を設定するための [environment file] (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、[environment] (環境) パラメータを使用して、Compose ファイルで環境変数を直接設定できます。

    注記

    セキュリティを強化して Docker コンテナを実行するには、Compose ファイルで cap_drop および cap_add を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[Runtime privilege and Linux capabilities] (ランタイム特権と Linux 機能)」を参照してください。

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

    docker-compose -f docker-compose.yml up
  4. ホストデバイスで ./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/v2/logs。コンポーネントログファイルも同じディレクトリにあります。Greengrass ログをホストの一時ディレクトリにコピーするには、次のコマンドを実行します。

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

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

実行中の AWS IoT Greengrass Docker コンテナを停止するには、 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 のトラブルシューティング」を参照してください。