Docker アプリケーションのデプロイコネクタ - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は、2023 年 6 月 30 日に延長ライフサイクルフェーズに入りました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日付を過ぎる AWS IoT Greengrass V1 と、 は機能、機能強化、バグ修正、セキュリティパッチを提供する更新プログラムをリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行する AWS IoT Greengrass Version 2ことを強くお勧めします。これにより、重要な新機能が追加され、追加のプラットフォームのサポートが追加されます

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

Docker アプリケーションのデプロイコネクタ

Greengrass Docker アプリケーションデプロイコネクタを使用すると、AWS IoT Greengrass Core での Docker イメージの実行が容易になります。コネクタは、Docker Compose を使用して、docker-compose.yml ファイルからマルチコンテナ Docker アプリケーションを起動します。具体的には、コネクタは、単一のコアデバイス上の Docker コンテナを管理する docker-compose コマンドを実行します。詳細については、Docker ドキュメントの「Docker 作成の概要」を参照してください。コネクタは、Amazon Elastic Container Registry (Amazon ECR)、Docker Hub、プライベート Docker の信頼できるレジストリなど、Docker コンテナレジストリに格納された Docker イメージにアクセスできます。

Greengrass グループをデプロイすると、コネクタによって最新のイメージがプルされて Docker コンテナが起動します。実行されるコマンドは docker-compose pulldocker-compose up です。コネクタは次にそのコマンドのステータスを、出力 MQTT トピックに発行します。また、Docker コンテナの実行に関するステータス情報をログに記録します。これにより、Amazon でアプリケーションログをモニタリングできます CloudWatch。詳細については、「AWS IoT Greengrass ログでのモニタリング」を参照してください。このコネクタは、Greengrass デーモンが再起動するたびに Docker コンテナも起動します。コアで実行できる Docker コンテナの数は、ハードウェアによって異なります。

Docker コンテナはコアデバイス上の Greengrass ドメインの外部で実行されるため、コアのプロセス間通信 (IPC) にアクセスできません。ただし、ローカル Lambda 関数など、一部の通信チャネルを Greengrass コンポーネントで構成できます。詳細については、「Docker コンテナとの通信」を参照してください。

コネクタは、コアデバイスで Web サーバーや MySQL サーバーをホストするなどのシナリオに使用できます。Docker アプリケーションのローカルサービスは、相互に、ローカル環境内の他のプロセス、およびクラウドサービスと通信できます。例えば、Lambda 関数からクラウド内の Web サービスにリクエストを送信する Web サーバーをコアで実行できます。

このコネクタは、コンテナなしモードで実行されるため、Greengrass コンテナ化なしで実行される Greengrass グループにデプロイできます。

このコネクタには、次のバージョンがあります。

バージョン

ARN

7

arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/7

6

arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/6

5

arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/5

4

arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/4

3

arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/3

2

arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/2

1

arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/1

バージョンの変更については、「Changelog」を参照してください。

要件

このコネクタには以下の要件があります。

  • AWS IoT Greengrass Core ソフトウェア v1.10 以降。

    注記

    このコネクタは OpenWrt ディストリビューションではサポートされていません。

  • Python バージョン 3.7 または 3.8 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

    注記

    Python 3.8 を使用するには、次のコマンドを実行して、Python 3.7 のデフォルトのインストールフォルダからインストール済みの Python 3.8 バイナリへのシンボリックリンクを作成します。

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    これにより、AWS IoT Greengrass の Python 要件を満たすようにデバイスが設定されます。

  • Docker コンテナの実行を監視するためのコネクタ用の Greengrass コアには、最低 36 MB の RAM が必要です。総メモリ要件は、コアで実行される Docker コンテナの数によって異なります。

  • Docker Engine 1.9.1 以降は Greengrass コアにインストールされています。バージョン 19.0.3 は、コネクタで動作することが確認された最新バージョンです。

    docker 実行可能ファイルは、/usr/bin ディレクトリまたは /usr/local/bin ディレクトリにある必要があります。

    重要

    Docker 認証情報のローカルコピーを保護するために、認証情報ストアをインストールすることをお勧めします。詳細については、「セキュリティ上の考慮事項」を参照してください。

    Amazon Linux ディストリビューションに Docker をインストールする方法については、「Amazon Elastic Container Service デベロッパーガイド」の「Amazon ECS で使用するコンテナイメージの作成」を参照してください。

  • Docker Compose は、Greengrass のコアにインストールされています。docker-compose 実行可能ファイルは、/usr/bin ディレクトリまたは /usr/local/bin ディレクトリにある必要があります。

    次の Docker Compose のバージョンは、コネクタで動作することが確認されています。

    コネクタのバージョン

    検証済みの Docker Compose バージョン

    7

    1.25.4

    6

    1.25.4

    5

    1.25.4

    4

    1.25.4

    3

    1.25.4

    2

    1.25.1

    1

    1.24.1

  • 1 つの Docker Compose ファイル (例えば、docker-compose.yml) が、Amazon Simple Storage Service (Amazon S3) に格納されている。フォーマットは、コアにインストールされている Docker Compose のバージョンと互換性がある必要があります。コアで使用する前に、ファイルをテストする必要があります。Greengrass グループのデプロイ後にファイルを編集する場合は、グループを再デプロイして、コア上のローカルコピーを更新する必要があります。

  • ローカルの Docker デーモンを呼び出し、Compose ファイルのローカルコピーを格納するディレクトリに書き込む権限を持つ Linux ユーザー。詳細については、「コアでの Docker ユーザーの設定」を参照してください。

  • Compose ファイルを含む S3 バケットでの s3:GetObject アクションを許可する Greengrass グループロール。このアクセス許可は、次の IAM ポリシーの例に示されています。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": "arn:aws:s3:::bucket-name/*" } ] }
    注記

    S3 バケットでバージョニングが有効になっている場合は、ロールについても s3:GetObjectVersion アクションを許可するように設定されている必要があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」「Using versioning」(バージョニングの使用) を参照してください。

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、Greengrass グループロールの管理 (コンソール)またはGreengrass グループロールの管理 (CLI)を参照してください。

  • Docker Compose ファイルが Amazon ECR に保存されている Docker イメージを参照する場合、Greengrass グループロールは次のことを許可するように設定されています。

    • ecr:GetDownloadUrlForLayer および ecr:BatchGetImage は、Docker イメージを含む Amazon ECR リポジトリで実行します。

    • ecr:GetAuthorizationToken は、リソースを実行します。

    リポジトリは、コネクタと同じ AWS アカウント と AWS リージョン に存在する必要があります。

    重要

    グループロールのアクセス許可は、Greengrass グループ内のすべての Lambda 関数とコネクタによって引き継ぐことができます。詳細については、「セキュリティ上の考慮事項」を参照してください。

    これらのアクセス許可は、次のポリシーの例に示されています。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetEcrRepositories", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:region:account-id:repository/repository-name" ] }, { "Sid": "AllowGetEcrAuthToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }

    詳細については、「Amazon ECR ユーザーガイド」の「Amazon ECR Repository Policy Examples」(Amazon ECR リポジトリポリシーの例) を参照してください。

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、Greengrass グループロールの管理 (コンソール)またはGreengrass グループロールの管理 (CLI)を参照してください。

  • Docker Compose ファイルが AWS Marketplace から Docker イメージを参照する場合、コネクタには次の要件もあります。

    • AWS Marketplace コンテナ製品にサブスクライブする必要があります。詳細については、「AWS Marketplace 購入者ガイド」の「Finding and subscribing to container products」(コンテナ製品の検索とサブスクライブ) を参照してください。

    • シークレットの要件で説明されているように、AWS IoT Greengrass はローカルシークレットをサポートするように設定する必要があります。コネクタは、シークレットを AWS Secrets Manager から取り出すためにのみこの機能を使用します。シークレットは格納されません。

    • Compose ファイルで参照される Docker イメージを格納する AWS Marketplace レジストリごとに、Secrets Manager にシークレットを作成する必要があります。詳細については、「プライベートリポジトリからの Docker イメージへのアクセス」を参照してください。

  • Docker Compose ファイルが Amazon ECR レジストリ以外のレジストリ (Docker Hub など) のプライベートリポジトリから Docker イメージを参照する場合、コネクタには次の要件もあります。

    • シークレットの要件で説明されているように、AWS IoT Greengrass はローカルシークレットをサポートするように設定する必要があります。コネクタは、シークレットを AWS Secrets Manager から取り出すためにのみこの機能を使用します。シークレットは格納されません。

    • Compose ファイルで参照される Docker イメージの格納先プライベートリポジトリごとに、Secrets Manager にシークレットを作成する必要があります。詳細については、「プライベートリポジトリからの Docker イメージへのアクセス」を参照してください。

  • このコネクタを含む Greengrass グループをデプロイするときは、Docker デーモンが実行されている必要があります。

プライベートリポジトリからの Docker イメージへのアクセス

認証情報を使用して Docker イメージにアクセスする場合は、コネクタがイメージにアクセスできるようにする必要があります。これを行う方法は、Docker イメージの場所によって異なります。

Amazon ECR に保存された Docker イメージの場合 、Greengrass グループロールで認証トークンを取得する権限を付与します。詳細については、「要件」を参照してください。

他のプライベートリポジトリまたはレジストリに保存された Docker イメージの場合、ログイン情報を格納するために AWS Secrets Manager にシークレットを作成する必要があります。これには、AWS Marketplace で購読した Docker イメージも含まれます。リポジトリごとに 1 つのシークレットを作成します。Secrets Manager でシークレットを更新すると、その変更は次にグループをデプロイするときにコアに伝達されます。

注記

Secrets Manager は、認証情報、キー、およびその他のシークレットを AWS クラウド に安全に保存および管理するために使用できるサービスです。詳細については、『AWS Secrets Manager ユーザーガイド』の「What is AWS Secrets Manager? ( とは?)」 を参照してください。

各シークレットには、次のキーが含まれている必要があります。

キー

username

リポジトリまたはレジストリへのアクセスに使用するユーザー名。

password

リポジトリまたはレジストリへのアクセスに使用するパスワード。

registryUrl

レジストリのエンドポイント。これは、Compose ファイル内の対応するレジストリ URL と一致する必要があります。

注記

デフォルトでシークレットにアクセス AWS IoT Greengrass できるようにするには、シークレットの名前が greengrass- で始まる必要があります。それ以外の場合、Greengrass サービスロールはアクセスを許可する必要があります。詳細については、「シークレットの値を取得することを AWS IoT Greengrass に許可する」を参照してください。

Docker イメージのログイン情報を取得するには AWS Marketplace
  1. aws ecr get-login-password コマンドを使用して、AWS Marketplace から Docker イメージのパスワードを取得します。詳細については、AWS CLI コマンドリファレンスget-login-password を参照してください。

    aws ecr get-login-password
  2. Docker イメージのレジストリ URL を取得します。AWS Marketplace ウェブサイトを開き、コンテナ製品の起動ページを開きます。[Container Images] (コンテナイメージ) で、[View container image details] (コンテナイメージの詳細を表示) をクリックして、ユーザー名とレジストリ URL を検索します。

取得したユーザー名、パスワード、レジストリ URL を使用して、Compose ファイルで参照される Docker イメージの格納先となるそれぞれの AWS Marketplace レジストリ用にシークレットを作成します。

シークレットを作成するには (コンソール)

AWS Secrets Manager コンソールで、[その他の種類のシークレット] を選択します。[ このシークレットに保存するキーと値のペアを指定します ] で以下の操作を行い、usernamepassword および registryUrl の行を追加します。詳細については、「AWS Secrets Manager ユーザーガイド」の「Creating a basic secret」(基本的なシークレットの作成) を参照してください。


                                ユーザー名 、パスワード、および registryUrl キーを使用してシークレットを作成します。
シークレットを作成するには (CLI)

AWS CLI で、次の例のように Secrets Manager の create-secret コマンドを実行します。詳細については、「AWS CLI コマンドリファレンス」の「create-secret」を参照してください。

aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
重要

Docker Compose ファイルを格納する DockerComposeFileDestinationPath ディレクトリと、Docker イメージの資格情報をプライベートリポジトリから保護するのはユーザーの責任です。詳細については、「セキュリティ上の考慮事項」を参照してください。

パラメータ

このコネクタには、以下のパラメータが用意されています。

Version 7
DockerComposeFileS3Bucket

Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「バケットの名前付け」に従ってください。

AWS IoT コンソールでの表示名: [Docker Compose file in S3] (S3 の Docker Compose ファイル)

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン [a-zA-Z0-9\\-\\.]{3,63}

DockerComposeFileS3Key

Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン .+

DockerComposeFileS3Version

Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットでのバージョニングの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: false

タイプ: string

有効なパターン .+

DockerComposeFileDestinationPath

Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。DockerUserId に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「AWS IoT Greengrass コアでの Docker ユーザーの設定」を参照してください。

重要

このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「セキュリティ上の考慮事項」を参照してください。

AWS IoT コンソールでの表示名: [Directory path for local Compose file] (ローカル Compose ファイルのディレクトリパス)

必須: true

タイプ: string

有効なパターン \/.*\/?

例: /home/username/myCompose

DockerUserId

コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの docker Linux グループに属し、DockerComposeFileDestinationPath ディレクトリへの書き込み権限を持っている必要があります。詳細については、「コアでの Docker ユーザーの設定」を参照してください。

注記

やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「root としての Lambda 関数の実行」を参照してください。

AWS IoT コンソールでの表示名: [Docker user ID] (Docker のユーザー ID)

必須: false

タイプ: string

有効なパターン: ^[0-9]{1,5}$

AWSSecretsArnList

プライベートリポジトリ内の AWS Secrets Manager Docker イメージにアクセスするために使用されるログイン情報を含むのシークレットの Amazon リソースネーム (ARN)。詳細については、「プライベートリポジトリからの Docker イメージへのアクセス」を参照してください。

AWS IoT コンソールでの表示名: [Credentials for private repositories] (プライベートリポジトリの認証情報)

必須: false このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。

タイプ: stringarray

有効なパターン: [( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]

DockerContainerStatusLogFrequency

コネクタがコアで実行されている Docker コンテナに関するステータス情報をログに記録する頻度 (秒単位)。デフォルトは 300 秒 (5 分) です。

AWS IoT コンソールでの表示名: [Logging frequency] (ログ記録の頻度)

必須: false

タイプ: string

有効なパターン: ^[1-9]{1}[0-9]{0,3}$

ForceDeploy

最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は、Falseです。

AWS IoT コンソールでの表示名: [Force deployment] (強制デプロイ)

必須: false

タイプ: string

有効なパターン: ^(true|false)$

DockerPullBeforeUp

pull-down-up 動作docker-compose upに対して を実行するdocker-compose pull前に、デプロイを実行する必要があるかどうかを示します。デフォルト値は、Trueです。

AWS IoT コンソールでの表示名: [Docker Pull Before Up] (Docker の起動前プル)

必須: false

タイプ: string

有効なパターン: ^(true|false)$

StopContainersOnNewDeployment

GGC が停止した時に、Docker デプロイヤが管理する Docker コンテナをコネクタが停止させるかどうかを示します (GGC が停止するのは新しいグループがデプロイされた時、またはカーネルがシャットダウンされた時です)。デフォルト値は、Trueです。

AWS IoT コンソールでの表示名: [Docker stop on new deployment] (Docker を新規デプロイ時に停止)

注記

このパラメータはデフォルトの True のままにしておくことをお勧めします。このパラメータが False の場合、AWS IoT Greengrass Core の終了後や新しいデプロイの開始後も Docker コンテナは動作し続けます。このパラメータを False に設定する場合は、docker-compose サービス名の変更や追加があった時などの必要に応じて、Docker コンテナが正常に管理されていることを確認する必要があります。

詳細については、docker-compose Compose ファイルのドキュメントを参照してください。

必須: false

タイプ: string

有効なパターン: ^(true|false)$

DockerOfflineMode

AWS IoT Greengrass をオフラインで起動する時に、既存の Docker Compose ファイルを使用するかどうかを示します。デフォルト値は、Falseです。

必須: false

タイプ: string

有効なパターン: ^(true|false)$

Version 6
DockerComposeFileS3Bucket

Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「バケットの名前付け」に従ってください。

AWS IoT コンソールでの表示名: [Docker Compose file in S3] (S3 の Docker Compose ファイル)

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン [a-zA-Z0-9\\-\\.]{3,63}

DockerComposeFileS3Key

Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン .+

DockerComposeFileS3Version

Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットでのバージョニングの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: false

タイプ: string

有効なパターン .+

DockerComposeFileDestinationPath

Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。DockerUserId に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「AWS IoT Greengrass コアでの Docker ユーザーの設定」を参照してください。

重要

このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「セキュリティ上の考慮事項」を参照してください。

AWS IoT コンソールでの表示名: [Directory path for local Compose file] (ローカル Compose ファイルのディレクトリパス)

必須: true

タイプ: string

有効なパターン \/.*\/?

例: /home/username/myCompose

DockerUserId

コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの docker Linux グループに属し、DockerComposeFileDestinationPath ディレクトリへの書き込み権限を持っている必要があります。詳細については、「コアでの Docker ユーザーの設定」を参照してください。

注記

やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「root としての Lambda 関数の実行」を参照してください。

AWS IoT コンソールでの表示名: [Docker user ID] (Docker のユーザー ID)

必須: false

タイプ: string

有効なパターン: ^[0-9]{1,5}$

AWSSecretsArnList

プライベートリポジトリ内の AWS Secrets Manager Docker イメージにアクセスするために使用されるログイン情報を含むのシークレットの Amazon リソースネーム (ARN)。詳細については、「プライベートリポジトリからの Docker イメージへのアクセス」を参照してください。

AWS IoT コンソールでの表示名: [Credentials for private repositories] (プライベートリポジトリの認証情報)

必須: false このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。

タイプ: stringarray

有効なパターン: [( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]

DockerContainerStatusLogFrequency

コネクタがコアで実行されている Docker コンテナに関するステータス情報をログに記録する頻度 (秒単位)。デフォルトは 300 秒 (5 分) です。

AWS IoT コンソールでの表示名: [Logging frequency] (ログ記録の頻度)

必須: false

タイプ: string

有効なパターン: ^[1-9]{1}[0-9]{0,3}$

ForceDeploy

最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は、Falseです。

AWS IoT コンソールでの表示名: [Force deployment] (強制デプロイ)

必須: false

タイプ: string

有効なパターン: ^(true|false)$

DockerPullBeforeUp

pull-down-up 動作docker-compose upに対して を実行するdocker-compose pull前に、デプロイを実行する必要があるかどうかを示します。デフォルト値は、Trueです。

AWS IoT コンソールでの表示名: [Docker Pull Before Up] (Docker の起動前プル)

必須: false

タイプ: string

有効なパターン: ^(true|false)$

StopContainersOnNewDeployment

GGC が停止した時に、Docker デプロイヤが管理する Docker コンテナを、コネクタが停止させるかどうかを示します (新しいグループがデプロイされた時、またはカーネルがシャットダウンされた時)。デフォルト値は、Trueです。

AWS IoT コンソールでの表示名: [Docker stop on new deployment] (Docker を新規デプロイ時に停止)

注記

このパラメータはデフォルトの True のままにしておくことをお勧めします。このパラメータが False の場合、AWS IoT Greengrass Core の終了後や新しいデプロイの開始後も Docker コンテナは動作し続けます。このパラメータを False に設定する場合は、docker-compose サービス名の変更や追加があった時などの必要に応じて、Docker コンテナが正常に管理されていることを確認する必要があります。

詳細については、docker-compose Compose ファイルのドキュメントを参照してください。

必須: false

タイプ: string

有効なパターン: ^(true|false)$

Version 5
DockerComposeFileS3Bucket

Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「バケットの名前付け」に従ってください。

AWS IoT コンソールでの表示名: [Docker Compose file in S3] (S3 の Docker Compose ファイル)

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン [a-zA-Z0-9\\-\\.]{3,63}

DockerComposeFileS3Key

Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン .+

DockerComposeFileS3Version

Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットでのバージョニングの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: false

タイプ: string

有効なパターン .+

DockerComposeFileDestinationPath

Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。DockerUserId に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「AWS IoT Greengrass コアでの Docker ユーザーの設定」を参照してください。

重要

このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「セキュリティ上の考慮事項」を参照してください。

AWS IoT コンソールでの表示名: [Directory path for local Compose file] (ローカル Compose ファイルのディレクトリパス)

必須: true

タイプ: string

有効なパターン \/.*\/?

例: /home/username/myCompose

DockerUserId

コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの docker Linux グループに属し、DockerComposeFileDestinationPath ディレクトリへの書き込み権限を持っている必要があります。詳細については、「コアでの Docker ユーザーの設定」を参照してください。

注記

やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「root としての Lambda 関数の実行」を参照してください。

AWS IoT コンソールでの表示名: [Docker user ID] (Docker のユーザー ID)

必須: false

タイプ: string

有効なパターン: ^[0-9]{1,5}$

AWSSecretsArnList

プライベートリポジトリ内の AWS Secrets Manager Docker イメージにアクセスするために使用されるログイン情報を含むのシークレットの Amazon リソースネーム (ARN)。詳細については、「プライベートリポジトリからの Docker イメージへのアクセス」を参照してください。

AWS IoT コンソールでの表示名: [Credentials for private repositories] (プライベートリポジトリの認証情報)

必須: false このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。

タイプ: stringarray

有効なパターン: [( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]

DockerContainerStatusLogFrequency

コネクタがコアで実行されている Docker コンテナに関するステータス情報をログに記録する頻度 (秒単位)。デフォルトは 300 秒 (5 分) です。

AWS IoT コンソールでの表示名: [Logging frequency] (ログ記録の頻度)

必須: false

タイプ: string

有効なパターン: ^[1-9]{1}[0-9]{0,3}$

ForceDeploy

最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は、Falseです。

AWS IoT コンソールでの表示名: [Force deployment] (強制デプロイ)

必須: false

タイプ: string

有効なパターン: ^(true|false)$

DockerPullBeforeUp

pull-down-up 動作docker-compose upに対して を実行するdocker-compose pull前に、デプロイを実行する必要があるかどうかを示します。デフォルト値は、Trueです。

AWS IoT コンソールでの表示名: [Docker Pull Before Up] (Docker の起動前プル)

必須: false

タイプ: string

有効なパターン: ^(true|false)$

Versions 2 - 4
DockerComposeFileS3Bucket

Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「バケットの名前付け」に従ってください。

AWS IoT コンソールでの表示名: [Docker Compose file in S3] (S3 の Docker Compose ファイル)

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン [a-zA-Z0-9\\-\\.]{3,63}

DockerComposeFileS3Key

Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン .+

DockerComposeFileS3Version

Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットでのバージョニングの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: false

タイプ: string

有効なパターン .+

DockerComposeFileDestinationPath

Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。DockerUserId に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「AWS IoT Greengrass コアでの Docker ユーザーの設定」を参照してください。

重要

このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「セキュリティ上の考慮事項」を参照してください。

AWS IoT コンソールでの表示名: [Directory path for local Compose file] (ローカル Compose ファイルのディレクトリパス)

必須: true

タイプ: string

有効なパターン \/.*\/?

例: /home/username/myCompose

DockerUserId

コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの docker Linux グループに属し、DockerComposeFileDestinationPath ディレクトリへの書き込み権限を持っている必要があります。詳細については、「コアでの Docker ユーザーの設定」を参照してください。

注記

やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「root としての Lambda 関数の実行」を参照してください。

AWS IoT コンソールでの表示名: [Docker user ID] (Docker のユーザー ID)

必須: false

タイプ: string

有効なパターン: ^[0-9]{1,5}$

AWSSecretsArnList

プライベートリポジトリ内の AWS Secrets Manager Docker イメージにアクセスするために使用されるログイン情報を含むのシークレットの Amazon リソースネーム (ARN)。詳細については、「プライベートリポジトリからの Docker イメージへのアクセス」を参照してください。

AWS IoT コンソールでの表示名: [Credentials for private repositories] (プライベートリポジトリの認証情報)

必須: false このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。

タイプ: stringarray

有効なパターン: [( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]

DockerContainerStatusLogFrequency

コネクタがコアで実行されている Docker コンテナに関するステータス情報をログに記録する頻度 (秒単位)。デフォルトは 300 秒 (5 分) です。

AWS IoT コンソールでの表示名: [Logging frequency] (ログ記録の頻度)

必須: false

タイプ: string

有効なパターン: ^[1-9]{1}[0-9]{0,3}$

ForceDeploy

最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は、Falseです。

AWS IoT コンソールでの表示名: [Force deployment] (強制デプロイ)

必須: false

タイプ: string

有効なパターン: ^(true|false)$

Version 1
DockerComposeFileS3Bucket

Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「バケットの名前付け」に従ってください。

AWS IoT コンソールでの表示名: [Docker Compose file in S3] (S3 の Docker Compose ファイル)

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン [a-zA-Z0-9\\-\\.]{3,63}

DockerComposeFileS3Key

Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: true

タイプ: string

有効なパターン .+

DockerComposeFileS3Version

Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットでのバージョニングの使用」を参照してください。

注記

コンソールでは、S3 プロパティの Docker Compose ファイル は、DockerComposeFileS3BucketDockerComposeFileS3Key、および DockerComposeFileS3Version の各パラメータを結合します。

必須: false

タイプ: string

有効なパターン .+

DockerComposeFileDestinationPath

Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。DockerUserId に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「AWS IoT Greengrass コアでの Docker ユーザーの設定」を参照してください。

重要

このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「セキュリティ上の考慮事項」を参照してください。

AWS IoT コンソールでの表示名: [Directory path for local Compose file] (ローカル Compose ファイルのディレクトリパス)

必須: true

タイプ: string

有効なパターン \/.*\/?

例: /home/username/myCompose

DockerUserId

コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの docker Linux グループに属し、DockerComposeFileDestinationPath ディレクトリへの書き込み権限を持っている必要があります。詳細については、「コアでの Docker ユーザーの設定」を参照してください。

注記

やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「root としての Lambda 関数の実行」を参照してください。

AWS IoT コンソールでの表示名: [Docker user ID] (Docker のユーザー ID)

必須: false

タイプ: string

有効なパターン: ^[0-9]{1,5}$

AWSSecretsArnList

プライベートリポジトリ内の AWS Secrets Manager Docker イメージにアクセスするために使用されるログイン情報を含むのシークレットの Amazon リソースネーム (ARN)。詳細については、「プライベートリポジトリからの Docker イメージへのアクセス」を参照してください。

AWS IoT コンソールでの表示名: [Credentials for private repositories] (プライベートリポジトリの認証情報)

必須: false このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。

タイプ: stringarray

有効なパターン: [( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]

DockerContainerStatusLogFrequency

コネクタがコアで実行されている Docker コンテナに関するステータス情報をログに記録する頻度 (秒単位)。デフォルトは 300 秒 (5 分) です。

AWS IoT コンソールでの表示名: [Logging frequency] (ログ記録の頻度)

必須: false

タイプ: string

有効なパターン: ^[1-9]{1}[0-9]{0,3}$

サンプルコネクタを作成する (AWS CLI)

以下の CLI コマンドは、Greengrass Docker アプリケーションデプロイコネクタを含む初期バージョンで ConnectorDefinition を作成します。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyDockerAppplicationDeploymentConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/5", "Parameters": { "DockerComposeFileS3Bucket": "myS3Bucket", "DockerComposeFileS3Key": "production-docker-compose.yml", "DockerComposeFileS3Version": "123", "DockerComposeFileDestinationPath": "/home/username/myCompose", "DockerUserId": "1000", "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret1-hash\",\"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret2-hash\"]", "DockerContainerStatusLogFrequency": "30", "ForceDeploy": "True", "DockerPullBeforeUp": "True" } } ] }'
注記

このコネクタの Lambda 関数には存続期間の長いライフサイクルがあります。

入力データ

このコネクタは入力データを必要としません。

出力データ

このコネクタは、docker-compose up コマンドのステータスを出力データとして公開します。

サブスクリプションのトピックフィルター

dockerapplicationdeploymentconnector/message/status

出力例: 成功
{ "status":"success", "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", "S3Bucket":"myS3Bucket", "ComposeFileName":"production-docker-compose.yml", "ComposeFileVersion":"123" }
出力例: 失敗
{ "status":"fail", "error_message":"description of error", "error":"InvalidParameter" }

エラーの種類は InvalidParameter または InternalError です。

AWS IoT Greengrass コアでの Docker ユーザーの設定

Greengrass Docker アプリケーションデプロイコネクタは、DockerUserId パラメータで指定したユーザーを実行者として実行されます。値を指定しない場合、コネクタは ggc_user として実行されます。これは、デフォルトの Greengrass アクセス ID です。

コネクタが Docker デーモンと対話できるようにするには、Docker ユーザーがコアの docker Linux グループに属している必要があります。Docker ユーザーには、DockerComposeFileDestinationPath ディレクトリへの書き込み権限も必要です。これは、コネクタがローカル docker-compose.yml ファイルと Docker の資格情報を格納する場所です。

注記
  • デフォルト ggc_user を使用する代わりに、Linux ユーザーを作成することをお勧めします。それ以外の場合は、Greengrass グループの任意の Lambda 関数が Compose ファイルと Docker の認証情報にアクセスできます。

  • やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「root としての Lambda 関数の実行」を参照してください。

  1. ユーザーを作成します。useradd コマンドを実行し、UID を割り当てる任意の -u オプションを含めることができます。例:

    sudo useradd -u 1234 user-name
  2. コア上の docker グループにユーザーを追加します。例:

    sudo usermod -aG docker user-name

    docker グループの作成方法などの詳細については、Docker のドキュメントの「Docker を非ルートユーザーとして管理する」を参照してください。

  3. DockerComposeFileDestinationPath パラメータに指定されたディレクトリへの書き込み権限をユーザーに付与します。例:

    1. ユーザーをディレクトリの所有者として設定します。この例では、手順 1 の UID を使用します。

      chown 1234 docker-compose-file-destination-path
    2. 所有者に読み取りおよび書き込み権限を与えます。

      chmod 700 docker-compose-file-destination-path

      詳細については、Linux Foundation のドキュメントの「Linux でファイルとフォルダのアクセス許可を管理する方法」を参照してください。

    3. ユーザーの作成時に UID を割り当てなかった場合、または既存のユーザーを使用している場合は、id コマンドを実行して UID を検索します。

      id -u user-name

      UID を使用して、コネクタの DockerUserId パラメータを構成します。

使用状況の情報

Greengrass Docker アプリケーションデプロイコネクタを使用する時は、次の実装固有の使用状況の情報に注意する必要があります。

  • プロジェクト名の固定プレフィックス。コネクタは、開始する Docker コンテナの名前の前に greengrassdockerapplicationdeployment プレフィックスを追加します。コネクタは、実行する docker-compose コマンドで、このプレフィックスをプロジェクト名として使用します。

  • ログ記録の動作。コネクタは、ステータス情報とトラブルシューティング情報をログファイルに書き込みます。ログAWS IoT Greengrassを CloudWatch Logs に送信し、ログをローカルに書き込むように を設定できます。詳細については、「コネクタのログ記録」を参照してください。これは、コネクタのローカルログへのパスです。

    /greengrass-root/ggc/var/log/user/region/aws/DockerApplicationDeployment.log

    ローカルログにアクセスするには、root 権限が必要です。

  • Docker イメージの更新。Docker はコアデバイスにイメージをキャッシュします。Docker イメージを更新し、変更をコアデバイスに伝播する場合は、Compose ファイルでイメージのタグを変更してください。変更は、Greengrass グループがデプロイされた後に有効になります。

  • クリーンアップ操作の 10 分タイムアウト。Greengrass デーモンが再起動中に停止すると、docker-compose down コマンドが開始されます。すべての Docker コンテナには、docker-compose down が開始されてからクリーンアップ操作を実行するために 最大 10 分の時間が与えられます。10 分以内にクリーンアップが完了しない場合は、残りのコンテナを手動でクリーンアップする必要があります。詳細については、Docker CLI ドキュメントの「docker rm」を参照してください。

  • Docker コマンドの実行。問題のトラブルシューティングを行うには、コアデバイスのターミナルウィンドウで Docker コマンドを実行します。例えば、次のコマンドを実行して、コネクタによって起動された Docker コンテナを表示します。

    docker ps --filter name="greengrassdockerapplicationdeployment"
  • 予約済みリソース ID。コネクタは、Greengrass グループで作成した Greengrass リソースの DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_index ID を使用します。リソース ID はグループ内で一意である必要があるため、この予約済みリソース ID と競合する可能性のあるリソース ID を割り当てないでください。

  • オフラインモード。DockerOfflineMode 設定パラメータを True に設定すると、Docker コネクタはオフラインモードで動作します。これは、コアデバイスがオフラインの時に Greengrass グループのデプロイが再起動し、コネクタが Amazon S3 または Amazon ECR への接続を確立できず Docker Compose ファイルを取得できない場合に発生します。

    オフラインモードを有効にすると、コネクタは Compose ファイルのダウンロードを試み、通常の再起動の時と同じように docker login コマンドを実行します。ダウンロードに失敗すると、コネクタは DockerComposeFileDestinationPath パラメータで指定されたローカルのフォルダに保存されている Compose ファイルを検索します。ローカルの Compose ファイルが存在する場合、コネクタは docker-compose コマンドの通常処理に沿って動作し、ローカルのイメージからプルを実行します。Compose ファイルまたはローカルイメージが存在しない場合は、コネクタは失敗します。ForceDeployStopContainersOnNewDeployment パラメータの動作はオフラインモードでも変わりません。

Docker コンテナとの通信

AWS IoT Greengrass は、Greengrass コンポーネントと Docker コンテナ間の以下の通信チャネルをサポートしています。

  • Greengrass Lambda 関数は、REST API を使用して Docker コンテナ内のプロセスと通信できます。Docker コンテナ内に、ポートを開くサーバーを設定できます。Lambda 関数はこのポートを介してコンテナと通信できます。

  • Docker コンテナ内のプロセスは、ローカルの Greengrass メッセージブローカーを介して MQTT メッセージを交換することができます。Docker コンテナを Greengrass グループのクライアントデバイスとして設定し、サブスクリプションを作成して、コンテナがグループ内の Greengrass Lambda 関数、クライアントデバイス、その他のコネクタ、または AWS IoT やローカルシャドウサービスと通信できるようにします。詳細については、「Docker コンテナを使用した MQTT 通信の設定」を参照してください。

  • Greengrass Lambda 関数は、共有ファイルを更新して Docker コンテナに情報を渡すことができます。Compose ファイルを使用して、Docker コンテナの共有ファイルパスをバインドできます。

Docker コンテナを使用した MQTT 通信の設定

Docker コンテナを Greengrass デバイスとして設定し、クライアントグループに追加することができます。次に、Docker コンテナと Greengrass コンポーネントまたは AWS IoT の間の MQTT 通信を許可するサブスクリプションを作成できます。次の手順では、Docker コンテナデバイスがローカルのシャドウサービスからシャドウ更新メッセージを受信できるようにするサブスクリプションを作成します。このパターンに従って、他のサブスクリプションを作成できます。

注記

この手順では、Greengrass グループと Greengrass Core (v1.10 以降) が既に作成されていることを前提としています。Greengrass グループと Core の作成の詳細については、「AWS IoT Greengrass の開始方法」を参照してください。

Docker コンテナをクライアントデバイスとして設定し、それを Greengrass グループに追加するには
  1. コアデバイス上にフォルダを作成し、Greengrass デバイスの認証に使用する証明書とキーを保存します。

    ファイルパスは、起動する Docker コンテナにマウントする必要があります。次のスニペットは、Compose ファイルにファイルパスをマウントする方法を示しています。この例では、 はこのステップで作成したフォルダpath-to-device-certsを表します。

    version: '3.3' services: myService: image: user-name/repo:image-tag volumes: - /path-to-device-certs/:/path-accessible-in-container
  2. AWS IoT コンソールのナビゲーションペインの [Manage](管理)で、[Greengrass devices](Greengrass デバイス)を展開して、[Group (V1)](グループ (V1))を選択します。

  3. ターゲットグループを選択します。

  4. グループの設定ページで、[Client device] (クライアントデバイス)、[Associate] (アソシエイト) の順に選択します。

  5. [クライアントデバイスをこのグループに関連付ける] モーダルで、[新しい AWS IoT モノの作成] を選択します。

    新しいタブに [Create things] (モノの作成) ページが開きます。

  6. [Creating things] (モノを作成する) ページで、[Create a single thing] (単一のモノを作成する) を選択し、[Next] (次へ) を選択します。

  7. [Specify thing properties] (モノのプロパティを指定する) ページで、デバイスの名前を入力し、[Next] (次へ) を選択します。

  8. [Configure device certificate] (デバイス証明書の設定) ページで [Next] (次へ) を選択します。

  9. [Attach policies to certificate] (証明書へのポリシーのアタッチ) を選択し、次のいずれかを実行します。

    • クライアントデバイスが必要とする権限をグラントする既存のポリシーを選択し、[Create thing] (モノを作成する) を選択します。

      モーダルが開き、デバイスが AWS クラウド とコアとの接続に使用する証明書とキーをダウンロードできます。

    • クライアントデバイスにアクセス許可を付与する新しいポリシーを作成してアタッチします。以下の操作を実行します。

      1. [ポリシーの作成] を選択します。

        新しいタブで ポリシーの作成 ページが開きます。

      2. [ポリシーの作成] ページで、次の操作を行います。

        1. [Policy name] (ポリシー名) には、GreengrassV1ClientDevicePolicy など、ポリシーを説明する名前を入力します。

        2. [Policy statements] (ポリシーステートメント) タブの [Policy document] (ポリシードキュメント) で、[JSON] を選択します。

        3. 次のポリシードキュメントを入力します。このポリシーにより、クライアントデバイスは Greengrass コアを検出し、すべての MQTT トピックで通信できます。このポリシーのアクセスを制限する方法については、「AWS IoT Greengrass のデバイス認証と認可」を参照してください。

          { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Connect", "iot:Receive" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": [ "*" ] } ] }
        4. [Create] (作成) を選択して、ポリシーを作成します。

      3. [Attach policies to certificate] (証明書にポリシーをアタッチ) ページを開き、ブラウザタブに戻ります。以下の操作を実行します。

        1. [Policies] (ポリシー) 一覧で、[GreengrassV1ClientDevicePolicy] など、作成したポリシーを選択します。

          新しいポリシーが表示されない場合は、更新ボタンを押します。

        2. [モノを作成する] を選択します。

          モーダルが開き、デバイスが AWS クラウド とコアとの接続に使用する証明書とキーをダウンロードできます。

  10. [Download certificates and keys] (証明書と鍵をダウンロードする) モーダルで、デバイスの証明書をダウンロードします。

    重要

    [Done] (完了) を選択する前に、セキュリティリソースをダウンロードします。

    以下の操作を実行します。

    1. [Device certificate] (デバイス証明書) には、[Download] (ダウンロード) を選択してデバイス証明書をダウンロードします。

    2. [Public key file] (パブリックキーファイル) には、[Download] (ダウンロード) を選択して証明書のパブリックキーをダウンロードします。

    3. [Private key file] (プライベートキーファイル) には、[Download] (ダウンロード) を選択して証明書のプライベートキーファイルをダウンロードします。

    4. 「AWS IoT デベロッパーガイド」の「サーバー認証」を確認して、適切なルート CA 証明書を選択します。Amazon Trust Services (ATS) エンドポイントと ATS ルート CA 証明書の使用をお勧めします。[Root CA certificates] (ルート CA 証明書)から、ルート CA 証明書の[Download] を選択します。

    5. [完了] を選択します。

    デバイス証明書とキーのファイル名に含まれる共通の証明書 ID を書き留めます。これは、後で必要になります。

  11. ステップ 1 で作成したフォルダに、証明書とキーをコピーします。

次に、グループにサブスクリプションを作成します。この例では、Docker コンテナデバイスがローカルシャドウサービスから MQTT メッセージを受信できるようにするサブスクリプションを作成します。

注記

シャドウドキュメントの最大サイズは 8 KB です。詳細については、「AWS IoT デベロッパーガイド」の「AWS IoT のクォータ」を参照してください。

Docker コンテナデバイスがローカルシャドウサービスから MQTT メッセージを受信できるようにするサブスクリプションを作成するには
  1. グループ設定ページの [Subscriptions] (サブスクリプション) タブで、[Add Subscription] (サブスクリプションの追加) を選択します。

  2. [ソースとターゲットの選択] ページで、ソースおよびターゲットを次のように設定します。

    1. [ソースの選択] で、[サービス]、[Local Shadow Service (ローカルシャドウサービス)] の順に選択します。

    2. [ターゲットの選択] で [デバイス] を選択し、あなたのデバイスを選択します。

    3. [次へ] をクリックします。

    4. [Filter your data with a topic] (トピックでデータをフィルタリングする) ページで、[Topic filter] (トピックのフィルター) に「$aws/things/MyDockerDevice/shadow/update/accepted」と入力し、[Next] (次へ) を選択します。を、前に作成したデバイスの名前MyDockerDeviceに置き換えます。

    5. [終了] を選択します。

Compose ファイルで参照する Docker イメージに次のコードスニペットを含めます。これは Greengrass のデバイスコードです。また、コンテナ内で Greengrass デバイスを起動する Docker コンテナにコードを追加します。イメージ内の別のプロセスとして、または別のスレッドで実行できます。

import os import sys import time import uuid from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Replace thingName with the name you registered for the Docker device. thingName = "MyDockerDevice" clientId = thingName # Replace host with the IoT endpoint for your &AWS-account;. host = "myPrefix.iot.region.amazonaws.com" # Replace topic with the topic where the Docker container subscribes. topic = "$aws/things/MyDockerDevice/shadow/update/accepted" # Replace these paths based on the download location of the certificates for the Docker container. rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem" certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt" privateKeyPath = "/path-accessible-in-container/certId-private.pem.key" # Discover Greengrass cores. discoveryInfoProvider = DiscoveryInfoProvider() discoveryInfoProvider.configureEndpoint(host) discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath) discoveryInfoProvider.configureTimeout(10) # 10 seconds. GROUP_CA_PATH = "./groupCA/" MQTT_QOS = 1 discovered = False groupCA = None coreInfo = None try: # Get discovery info from AWS IoT. discoveryInfo = discoveryInfoProvider.discover(thingName) caList = discoveryInfo.getAllCas() coreList = discoveryInfo.getAllCores() # Use first discovery result. groupId, ca = caList[0] coreInfo = coreList[0] # Save the group CA to a local file. groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt" if not os.path.exists(GROUP_CA_PATH): os.makedirs(GROUP_CA_PATH) groupCAFile = open(groupCA, "w") groupCAFile.write(ca) groupCAFile.close() discovered = True except DiscoveryInvalidRequestException as e: print("Invalid discovery request detected!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") except BaseException as e: print("Error in discovery!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath) # Try to connect to the Greengrass core. connected = False for connectivityInfo in coreInfo.connectivityInfoList: currentHost = connectivityInfo.host currentPort = connectivityInfo.port myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort) try: myAWSIoTMQTTClient.connect() connected = True except BaseException as e: print("Error in connect!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) if connected: break if not connected: print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn) sys.exit(-2) # Handle the MQTT message received from GGShadowService. def customCallback(client, userdata, message): print("Received an MQTT message") print(message) # Subscribe to the MQTT topic. myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback) # Keep the process alive to listen for messages. while True: time.sleep(1)

セキュリティ上の考慮事項

Greengrass Docker アプリケーションデプロイコネクタを使用する場合は、次のセキュリティ上の考慮事項に注意してください。

Docker の Compose ファイルのローカルストレージ

コネクタは、DockerComposeFileDestinationPath パラメータに指定されたディレクトリに Compose ファイルのコピーを格納します。

このディレクトリを保護するのはあなたの責任です。ディレクトリへのアクセスを制限するには、ファイルシステムの権限を使用する必要があります。

Docker 認証情報のローカルストレージ

Docker イメージがプライベートリポジトリに格納されている場合、コネクタは、DockerComposeFileDestinationPath パラメータに指定されたディレクトリに Docker 認証情報を格納します。

これらの認証情報を保護するのはお客様の責任です。例えば、Docker Engine をインストールするときは、コアデバイスで資格情報ヘルパーを使用する必要があります。

信頼できるソースから Docker Engine をインストールする

信頼できるソースから Docker Engine をインストールするのはあなたの責任です。このコネクタは、コアデバイス上の Docker デーモンを使用して、Docker アセットにアクセスし、Docker コンテナを管理します。

Greengrass グループの役割権限のスコープ

Greengrass グループロールに追加したアクセス許可は、Greengrass グループのすべての Lambda 関数とコネクタによって引き継ぐことができます。このコネクタには、S3 バケットに格納されている Docker Compose ファイルへのアクセスが必要です。また、Docker イメージが Amazon ECR のプライベートリポジトリに格納されている場合は、Amazon ECR 認証トークンにアクセスする必要があります。

ライセンス

Greengrass Docker アプリケーションデプロイコネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。

このコネクタは、Greengrass Core ソフトウェアライセンス契約に従ってリリースされます。

変更ログ

次の表に、コネクタの各バージョンにおける変更点を示します。

バージョン

変更

7

AWS IoT Greengrass がオフラインで起動した時に既存の Docker Compose ファイルを使用する DockerOfflineMode を追加しました。docker login コマンドの再試行を実装しました。32 ビット UID に対応しました。

6

新しいデプロイが行われた時、または GGC が停止した時にコンテナのクリーンアップを上書きする StopContainersOnNewDeployment を追加しました。より安全なシャットダウンと起動の仕組み。YAML 検証でのバグを修正しました。

5

docker-compose down 実行前にイメージをプルしました。

4

Docker イメージを更新する pull-before-up 動作を追加しました。

3

環境変数の検索に関する問題が修正されました。

2

ForceDeploy パラメータが追加されました。

1

初回リリース。

Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。

以下も参照してください。