View a markdown version of this page

Docker コンテナとして AWS IoT Greengrass V2 実行されている にコンテナ化されたアプリケーションをデプロイする - AWS 規範ガイダンス

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

Docker コンテナとして AWS IoT Greengrass V2 実行されている にコンテナ化されたアプリケーションをデプロイする

Salih Bakir、Giuseppe Di Bella、Gustav Svalander、Amazon Web Services

概要

AWS IoT Greengrass Version 2は、Docker コンテナとしてデプロイされた場合、Docker アプリケーションコンテナの実行をネイティブにサポートしていません。このパターンは、Docker-in-Docker (DinD) 機能 AWS IoT Greengrass V2 を有効にする の最新バージョンに基づいてカスタムコンテナイメージを作成する方法を示しています。DinD を使用すると、 AWS IoT Greengrass V2 環境内でコンテナ化されたアプリケーションを実行できます。

このパターンは、スタンドアロンソリューションとしてデプロイすることも、Amazon ECS Anywhere などのコンテナオーケストレーションプラットフォームと統合することもできます。どちらのデプロイモデルでも、スケーラブルなコンテナベースのデプロイを有効にしながら、 AWS IoT SiteWise エッジ処理機能を含む完全な AWS IoT Greengrass V2 機能を維持します。

前提条件と制限事項

前提条件

  • アクティブ AWS アカウント。

  • 一般的な AWS IoT Greengrass Version 2 前提条件については、 AWS IoT Greengrass Version 2 ドキュメントの「前提条件」を参照してください。

  • Linux、macOS、または Windows にインストールおよび設定された Docker エンジン。

  • Docker Compose (Docker Compose コマンドラインインターフェイス (CLI) を使用して Docker イメージを実行する場合)。

  • Linux オペレーティングシステム。

  • 仮想化をサポートするホストサーバーを持つハイパーバイザー。

  • システム要件:

    • 2 GB の RAM (最小)

    • 使用可能なディスク容量 5 GB (最小)

    • AWS IoT SiteWise Edge の場合、16 GB の RAM と 50 GB の使用可能なディスク容量を備えた x86_64 クアッドコア CPU。 AWS IoT SiteWise データ処理の詳細については、 AWS IoT SiteWise ドキュメントの「データ処理パックの要件」を参照してください。

製品バージョン

  • AWS IoT Greengrass Version 2 バージョン 2.5.3 以降

  • Docker-in-Docker バージョン 1.0.0 以降

  • Docker Compose バージョン 1.22 以降

  • Docker エンジンバージョン 20.10.12 以降

制限事項

アーキテクチャ

ターゲットテクノロジースタック

  • データソース – 処理用のデータを生成する IoT デバイス、センサー、または産業機器

  • AWS IoT Greengrass V2 – エッジインフラストラクチャにデプロイされた D-in-D 機能を備えた Docker コンテナとしての実行

  • コンテナ化されたアプリケーション – ネストされた Docker コンテナとして AWS IoT Greengrass V2 環境内で実行されるカスタムアプリケーション

  • (オプション) Amazon ECS Anywhere – コンテナのデプロイを管理する AWS IoT Greengrass V2 コンテナオーケストレーション

  • その他 AWS のサービス – AWS IoT Core AWS IoT SiteWiseデータ処理と管理 AWS のサービス のための など

ターゲットアーキテクチャ

次の図は、コンテナ管理ツールである Amazon ECS Anywhere を使用するターゲットデプロイアーキテクチャの例を示しています。

Amazon ECS Anywhere を使用したデプロイアーキテクチャ。

この図表は、次のワークフローを示しています:

1: コンテナイメージストレージ – Amazon ECR は、エッジ処理に必要な AWS IoT Greengrass コンテナイメージとカスタムアプリケーションコンテナを保存します。

2 および 3: コンテナのデプロイ – Amazon ECS Anywhere は AWS IoT Greengrass 、コンテナイメージを Amazon ECR からエッジロケーションにデプロイし、コンテナのライフサイクルとデプロイプロセスを管理します。

4: コンポーネントのデプロイ — デプロイされた AWS IoT Greengrass コアは、設定に基づいて関連するコンポーネントを自動的にデプロイします。コンポーネントには、コンテナ化された環境内の AWS IoT SiteWise Edge やその他の必要なエッジ処理コンポーネントが含まれます。

5: データインジェスト – 完全に設定されると、 はエッジロケーションのさまざまな IoT データソースからのテレメトリデータとセンサーデータの取り込み AWS IoT Greengrass を開始します。

6: データ処理とクラウド統合 – コンテナ化された AWS IoT Greengrass コアは、デプロイされたコンポーネント (産業用データの AWS IoT SiteWise Edge を含む) を使用してデータをローカルで処理します。次に、処理されたデータを AWS クラウド サービスに送信して、さらなる分析と保存を行います。

ツール

AWS のサービス

  • Amazon ECS Anywhere は、Amazon ECS タスクとサービスを独自のインフラストラクチャにデプロイ、使用、管理する際に役立ちます。

  • Amazon Elastic Compute Cloud (Amazon EC2) は、 AWS クラウドでスケーラブルなコンピューティング容量を提供します。仮想サーバーを必要な数だけ起動して、迅速にスケールアップまたはスケールダウンができます。

  • Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。

  • AWS IoT Greengrass は、デバイス上で IoT アプリケーションを構築、デプロイ、管理するのに役立つオープンソースの IoT エッジランタイムおよびクラウドサービスです。

  • AWS IoT SiteWise は、産業用機器からデータを大規模に収集、モデル化、分析、視覚化するのに役立ちます。

その他のツール

  • Docker は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしての Platform as a Service (PaaS) 製品のセットです。

  • Docker Compose は、マルチコンテナアプリケーションを定義および実行するためのツールです。

  • Docker Engine は、アプリケーションを構築およびコンテナ化するためのオープンソースのコンテナ化テクノロジーです。

コードリポジトリ

このパターンのコードは、GitHub AWS IoT Greengrass v2 Docker-in-Docker リポジトリで入手できます。

エピック

タスク説明必要なスキル

クローンを作成してリポジトリに移動します。

リポジトリのクローンを作成するには、次のコマンドを使用します。

git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git

docker ディレクトリに移動するには、次のコマンドを使用します。

cd aws-iot-greengrass-v2-docker-in-docker/docker

DevOps エンジニア、AWS DevOps

Docker イメージを作成します。

デフォルト (最新) バージョンで Docker イメージを構築するには、次のコマンドを実行します。

docker build -t x86_64/aws-iot-greengrass:latest .

または、特定のバージョンで Docker イメージを構築するには、次のコマンドを実行します。

docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .

ビルドを確認するには、次のコマンドを実行します。

docker images | grep aws-iot-greengrass

 

AWS DevOps、DevOps エンジニア

(オプション) Amazon ECR にプッシュします。

  1. リポジトリを作成するには、次のコマンドを実行します。

    aws ecr create-repository --repository-name aws-iot-greengrass-dind --region us-east-1

  2. 認証するには、次のコマンドを実行します。

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com

  3. タグを付けてプッシュするには、次のコマンドを実行します。

    docker tag x86_64/aws-iot-greengrass:latest <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

    docker push <ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

アプリ開発者、AWS DevOps、DevOps エンジニア
タスク説明必要なスキル

認証方法を選択します。

以下のオプションのいずれかを選択してください。

  • オプション 1 (推奨): IAM ロール – 適切な IAM ロールを持つ Amazon EC2、Amazon ECS、または Amazon EKS で実行されている場合に使用します。追加の設定は必要ありません。

  • オプション 2: 環境変数 – テストと開発用。

  • オプション 3: 認証情報ファイル – 本番稼働用には推奨されません。

  • オプション 4: レガシーenv.cfgファイル。

AWS 管理者

認証方法を設定します。

選択した認証方法では、次の設定ガイダンスを使用します。

  • オプション 2 (環境変数)AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY、およびオプションで を準備しますAWS_SESSION_TOKEN

  • オプション 3 (認証情報ファイル) – 認証情報ディレクトリとファイルを作成します。

    • (a) 次のコマンドを実行します。

      mkdir -p ~/greengrass-v2-credentials

    • (b) で次のファイルを作成します~/greengrass-v2-credentials/credentials

      [default]

      aws_access_key_id=YourAccessKey

      aws_secret_access_key=YourSecretKey

    • (c) ファイルを次のように保護します。

      chmod 600 ~/greengrass-v2-credentials/credentials

  • オプション 4 (env.cfg) – 次のように docker ディレクトリに env.cfg ファイルを作成します。

    GGC_ROOT_PATH=/greengrass/v2

    AWS_REGION=us-east-1

    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

AWS 管理者
タスク説明必要なスキル

docker-compose.yml を設定します。

次のように、 docker-compose.yml ファイルを環境変数で更新します。

  • キー変数: PROVISION, AWS_REGIONTHING_NAMETHING_GROUP_NAMETES_ROLE_NAMETES_ROLE_ALIAS_NAME

  • 環境変数による認証情報については、次のコメントを解除します。

    environment:

    - AWS_ACCESS_KEY_ID=YourKey

    - AWS_SECRET_ACCESS_KEY=YourSecret

  • 認証情報ファイルの場合は、次のコメントを解除します。

    volumes:

    - ~/greengrass-v2-credentials:/root/.aws/:ro

  • ログの永続性については、以下を追加します。

    volumes:

    - ./logs:/greengrass/v2/logs

DevOps エンジニア

コンテナを起動して検証します。

フォアグラウンドで を開始するには、次のコマンドを実行します。

docker-compose up --build

または、バックグラウンドで開始するには、次のコマンドを実行します。

docker-compose up --build -d

ステータスを確認するには、次のコマンドを実行します。

docker-compose ps

ログをモニタリングするには、次のコマンドを実行します。

docker-compose logs -f

DevOps エンジニア
タスク説明必要なスキル

Docker CLI でコンテナを実行します。

  • プロビジョニングなしで基本実行を開始するには、次のコマンドを実行します。

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  • 環境変数を使用して実行を開始するには、次のコマンドを実行します。

    docker run --init --privileged -it --name aws-iot-greengrass -e PROVISION=true -e AWS_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=YourKey -e AWS_SECRET_ACCESS_KEY=YourSecret -e THING_NAME=MyGreengrassCore -e THING_GROUP_NAME=MyGreengrassCoreGroup -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • 認証情報ファイルを使用して実行を開始するには、次のコマンドを実行します。

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro -e PROVISION=true -e AWS_REGION=us-east-1 -e THING_NAME=MyGreengrassCore -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • env.cfg ファイルを使用して実行を開始するには、次のコマンドを実行します。

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro --env-file env.cfg -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • 永続ログを使用して実行を開始するには、次のコマンドを実行します。

    docker run --init --privileged -it --name aws-iot-greengrass -v \$(pwd)/logs:/greengrass/v2/logs x86_64/aws-iot-greengrass:latest

DevOps エンジニア

コンテナを確認します。

  • コンテナのステータスを確認するには、次のコマンドを実行します。

    docker ps | grep aws-iot-greengrass

  • ログをモニタリングするには、次のコマンドを実行します。

    docker logs -f aws-iot-greengrass

DevOps エンジニア
タスク説明必要なスキル

アプリケーションをデプロイします。

  • アプリケーションコンテナをデプロイするには、次のコマンドを実行します。

    docker run -d --name my-app nginx:alpine

  • デプロイを確認するには、次のコマンドを実行します。

    docker ps

  • ログにアクセスするには、次のコマンドを実行します。

    cd /greengrass/v2/logs && cat greengrass.log

アプリ開発者

Docker-in-Docker にアクセスしてテストします。

  1. コンテナでシェルを開くには、次のコマンドを実行します。

    docker exec -it aws-iot-greengrass sh

  2. Docker を確認するには、次のコマンドを実行します。

    docker --version

    docker ps

  3. Docker-in-Docker をテストするには、次のコマンドを実行します。

    docker run --rm hello-world

DevOps エンジニア
タスク説明必要なスキル

Amazon ECS クラスターをセットアップします。

  • Amazon ECS クラスターを作成するには、次のコマンドを実行します。

    aws ecs create-cluster --cluster-name greengrass-cluster --region us-east-1

  • SSM アクティベーションを作成するには、次のコマンドを実行します。

    aws ssm create-activation --default-instance-name greengrass-edge --iam-role GreengrassECSAnywhereRole --registration-limit 10 --region us-east-1

  • エッジデバイスに SSM エージェントをインストールするには、次のコマンドを実行します。

    curl -o install.sh https://s3.amazonaws.com/aws-ssm-downloads/latest/linux_amd64/install.sh

    chmod +x install.sh

    ./install.sh activation-code activation-id us-east-1

AWS 管理者

Amazon ECS タスクをデプロイします。

  • greengrass-task-definition.json 、環境変数privileged:true、 および タスクのボリュームマウントを含む/var/lib/docker/greengrass/v2.Registerタスク設定containerDefinitionsで を作成します。次のコマンドを実行します。

    aws ecs register-task-definition --cli-input-json file://greengrass-task-definition.json

  • サービスを作成するには、次のコマンドを実行します。

    aws ecs create-service --cluster greengrass-cluster --service-name greengrass-service --task-definition greengrass-dind --desired-count 1 --launch-type EXTERNAL --region us-east-1

  • デプロイを確認するには、次のコマンドを実行します。

    aws ecs describe-services --cluster greengrass-cluster --services greengrass-service --region us-east-1

AWS 管理者
タスク説明必要なスキル

コンテナを停止します。

  • Docker Compose を使用してコンテナを停止するには、次のコマンドを実行します。

    docker-compose stop

    docker-compose down

    docker-compose down -v

  • Docker CLI を使用してコンテナを停止 (ボリュームを削除) するには、次のコマンドを実行します。

    docker stop aws-iot-greengrass

    docker rm aws-iot-greengrass

  • 強制削除を使用してコンテナを停止するには、次のコマンドを実行します。

    docker rm -f aws-iot-greengrass

DevOps エンジニア

トラブルシューティング

問題ソリューション

コンテナはアクセス許可エラーで開始できません。

  1. コンテナが Docker-in-Docker に必要な --privilegedフラグで実行されていることを確認するには、次のコマンドを実行します。

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  2. docker-compose.yml ファイルで、以下を設定します。

    privileged: true

警告

--privileged は、コンテナに拡張された権限を付与します。

プロビジョニングは認証情報エラーで失敗します。

認証情報が正しく設定されていることを確認するには、次の手順を実行します。

  1. IAM ロールを確認します。

    aws sts get-caller-identity

  2. 環境変数を確認します。

    docker exec -it aws-iot-greengrass sh -c 'echo \$AWS_ACCESS_KEY_ID'

  3. 認証情報ファイルを確認します。

    docker exec -it aws-iot-greengrass sh -c 'cat /root/.aws/credentials'

IAM アクセス許可に iot:CreateThingiot:CreatePolicy、、iot:AttachPolicyiam:CreateRole、 が含まれていることを確認しますiam:AttachRolePolicy

コンテナ内の Docker デーモンに接続できません。

  1. Docker デーモンのステータスを確認します。

    docker exec -it aws-iot-greengrass sh -c 'ps aux | grep dockerd'

  2. Docker ソケットが存在することを確認します。

    docker exec -it aws-iot-greengrass sh -c 'ls -la /var/run/docker.sock'

  3. 必要に応じて手動で起動します。

    docker exec -it aws-iot-greengrass sh -c 'dockerd > /var/log/docker.log 2>&1 &'

コンテナのディスク容量が不足しています。

  1. ディスク容量を確認します。

    df -h

  2. Docker リソースのクリーンアップ:

    docker system prune -a --volumes

  3. 古い Greengrass アーティファクトを削除します。

    docker exec -it aws-iot-greengrass sh -c 'rm -rf /greengrass/v2/work/*'

最小ディスク容量を確保する: 基本オペレーションの場合は 5 GB、 AWS IoT SiteWise Edge の場合は 50 GB

ビルドの問題。

  1. docker ディレクトリにあることを確認します。

    cd docker && pwd

  2. Dockerfile が存在することを確認します。

    ls -la Dockerfile

  3. Docker がインストールされ、実行されていることを確認します。

    docker --version && docker ps

ネットワーク接続の問題。

  1. DNS 解決をテストします。

    docker exec -it aws-iot-greengrass sh -c 'nslookup google.com'

  2. AWS 接続をテストする:

    docker exec -it aws-iot-greengrass sh -c 'curl https://iot.us-east-1.amazonaws.com'

ファイアウォールがアウトバウンド HTTPS (443) および MQTT (8883) トラフィックを許可していることを確認します。

Greengrass コンポーネントはデプロイに失敗します。

  1. Greengrass ログを確認します。

    docker exec -it aws-iot-greengrass sh -c 'cat /greengrass/v2/logs/greengrass.log'

  2. TES ロール設定を確認します。

    aws iot describe-role-alias --role-alias TES_ROLE_ALIAS_NAME

/greengrass/v2/logs/ ディレクトリのコンポーネント固有のログを確認します。

コンテナは起動直後に終了します。

  1. コンテナログにエラーがないか確認します。

    docker logs aws-iot-greengrass

  2. デバッグ用のインタラクティブシェルで を実行します。

    docker run --init --privileged -it --entrypoint sh x86_64/aws-iot-greengrass:latest

の場合、必要なすべての環境変数が正しく設定されていることを確認しますPROVISION=true。コンテナの起動時に --initフラグが使用されていることを確認します。

関連リソース

AWS リソース

その他のリソース

追加情報

  • AWS IoT SiteWise Edge データ処理の場合、Docker は AWS IoT Greengrass 環境内で利用できる必要があります。

  • ネストされたコンテナを実行するには、管理者レベルの認証情報を使用して AWS IoT Greengrass コンテナを実行する必要があります。