自動リソースプロビジョニングを使用して 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 IoT および IAM リソースをプロビジョニングする権限を持つ AWS 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 CLI を使用して Docker イメージを実行する場合のみ必要です。

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 という名前の設定ファイルを作成します。

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

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

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

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

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

    • GreengrassV2TokenExchangeRole。Greengrass コアデバイスが一時的な AWS 認証情報を取得できるようにする IAM トークン交換ロールの名前に置き換えます。ロールが存在しない場合、インストーラはロールを作成し、GreengrassV2TokenExchangeRoleAccess という名前のポリシーを作成してアタッチします。詳細については、「コアデバイスが AWS サービスを操作できるように認証する」を参照してください。

    • GreengrassCoreTokenExchangeRoleAlias。トークン交換ロールエイリアス。ロールエイリアスが存在しない場合、インストーラがロールエイリアスを作成し、指定したIAMトークン交換ロールを指します。詳細については、以下を参照してください。

    注記

    DEPLOY_DEV_TOOLS 環境変数を true に設定して、[Greengrass CLI component] (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 コンテナポートをホストマシンに公開します。AWS IoT Greengrass は MQTT トラフィックにポート 8883 を使用するため、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 コンポーネントとコンテナで実行されている他のプロセスがそれらにアクセスできます。AWS 認証情報を Greengrass コンポーネントに提供する必要がある場合は、トークン交換サービスを使用します。詳細については、「AWS サービスとやり取り」を参照してください。

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

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

    nano docker-compose.yml
    注記

    から AWSが提供する Compose ファイルの最新バージョンをダウンロードして使用することもできます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 コンテナポートをホストマシンに公開します。AWS IoT Greengrass は MQTT トラフィックにポート 8883 を使用するため、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 コンポーネントとコンテナで実行されている他のプロセスがそれらにアクセスできます。AWS 認証情報を Greengrass コンポーネントに提供する必要がある場合は、トークン交換サービスを使用します。詳細については、「AWS サービスとやり取り」を参照してください。

次のステップ

現在、Docker コンテナで AWS IoT Greengrass Core ソフトウェアが実行されています。次のコマンドを実行して、現在実行中のコンテナのコンテナ 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 コンテナは、プロセス PID 1 として docker-init の実行可能ファイルで初期化されます。これは、残っているゾンビプロセスを削除するのに役立ちます。詳細については、Docker ドキュメントの「Specify an init process」を参照してください。

Docker コンテナで AWS IoT Greengrass を実行する際の問題のトラブルシューティングについては、「Docker コンテナでの AWS IoT Greengrass のトラブルシューティング」を参照してください。