

サポート終了通知: 2026 年 10 月 7 日、 AWS はサポートを終了します AWS IoT Greengrass Version 1。2026 年 10 月 7 日以降、 AWS IoT Greengrass V1 リソースにアクセスできなくなります。詳細については、[「 からの移行 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)」を参照してください。

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

# Docker アプリケーションのデプロイコネクタ
<a name="docker-app-connector"></a>

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

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

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

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

このコネクタは、[コンテナなし](lambda-group-config.md#no-container-mode)モードで実行されるため、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](#docker-app-connector-changelog)」を参照してください。

## 要件
<a name="docker-app-connector-req"></a>

このコネクタには以下の要件があります。
+ AWS IoT Greengrass Core ソフトウェア v1.10 以降。
**注記**  
このコネクタは OpenWrt ディストリビューションではサポートされていません。
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) バージョン 3.7 または 3.8 が Core デバイスにインストールされ、PATH 環境変数に追加されている。
**注記**  <a name="use-runtime-py3.8"></a>
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](https://docs.docker.com/install/) 1.9.1 以降は Greengrass コアにインストールされています。バージョン 19.0.3 は、コネクタで動作することが確認された最新バージョンです。

  `docker` 実行可能ファイルは、`/usr/bin` ディレクトリまたは `/usr/local/bin` ディレクトリにある必要があります。
**重要**  
Docker 認証情報のローカルコピーを保護するために、認証情報ストアをインストールすることをお勧めします。詳細については、「[セキュリティ上の考慮事項](#docker-app-connector-security)」を参照してください。

  Amazon Linux ディストリビューションに Docker をインストールする方法については、「Amazon Elastic Container Service デベロッパーガイド」の「[Amazon ECS で使用するコンテナイメージの作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)」を参照してください。
+ [Docker Compose](https://docs.docker.com/compose/install/) は、Greengrass のコアにインストールされています。`docker-compose` 実行可能ファイルは、`/usr/bin` ディレクトリまたは `/usr/local/bin` ディレクトリにある必要があります。

  次の Docker Compose のバージョンは、コネクタで動作することが確認されています。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/docker-app-connector.html)
+ 1 つの Docker Compose ファイル (例えば、`docker-compose.yml`) が、Amazon Simple Storage Service (Amazon S3) に格納されている。フォーマットは、コアにインストールされている Docker Compose のバージョンと互換性がある必要があります。コアで使用する前に、ファイルをテストする必要があります。Greengrass グループのデプロイ後にファイルを編集する場合は、グループを再デプロイして、コア上のローカルコピーを更新する必要があります。
+ ローカルの Docker デーモンを呼び出し、Compose ファイルのローカルコピーを格納するディレクトリに書き込む権限を持つ Linux ユーザー。詳細については、「[コアでの Docker ユーザーの設定](#docker-app-connector-linux-user)」を参照してください。
+ Compose ファイルを含む S3 バケットでの `s3:GetObject` アクションを許可する [Greengrass グループロール](group-role.md)。このアクセス許可は、次の IAM ポリシーの例に示されています。

------
#### [ JSON ]

****  

  ```
  {
      "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」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)(バージョニングの使用) を参照してください。

  <a name="set-up-group-role"></a>グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、[Greengrass グループロールの管理 (コンソール)](group-role.md#manage-group-role-console)または[Greengrass グループロールの管理 (CLI)](group-role.md#manage-group-role-cli)を参照してください。
+ <a name="docker-app-connector-ecr-perms"></a>Docker Compose ファイルが Amazon ECR に保存されている Docker イメージを参照する場合、[Greengrass グループロール](group-role.md)は次のことを許可するように設定されています。
  + `ecr:GetDownloadUrlForLayer` および `ecr:BatchGetImage` は、Docker イメージを含む Amazon ECR リポジトリで実行します。
  + `ecr:GetAuthorizationToken` は、リソースを実行します。

  リポジトリは、コネクタと同じ AWS アカウント および AWS リージョン にある必要があります。
**重要**  
グループロールのアクセス許可は、Greengrass グループ内のすべての Lambda 関数とコネクタによって引き継ぐことができます。詳細については、「[セキュリティ上の考慮事項](#docker-app-connector-security)」を参照してください。

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

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowGetEcrRepositories",
              "Effect": "Allow",
              "Action": [
                  "ecr:GetDownloadUrlForLayer",
                  "ecr:BatchGetImage"
              ],
              "Resource": [
                  "arn:aws:ecr:us-east-1:123456789012:repository/repository-name"
              ]	
          },
          {
              "Sid": "AllowGetEcrAuthToken",
              "Effect": "Allow",
              "Action": "ecr:GetAuthorizationToken",
              "Resource": "*"
          }
      ]
  }
  ```

------

  詳細については、「Amazon ECR ユーザーガイド」の「[Amazon ECR Repository Policy Examples](https://docs.aws.amazon.com/AmazonECR/latest/userguide/RepositoryPolicyExamples.html)」(Amazon ECR リポジトリポリシーの例) を参照してください。

  <a name="set-up-group-role"></a>グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、[Greengrass グループロールの管理 (コンソール)](group-role.md#manage-group-role-console)または[Greengrass グループロールの管理 (CLI)](group-role.md#manage-group-role-cli)を参照してください。
+ Docker Compose ファイルが [AWS Marketplace](https://aws.amazon.com/marketplace) から Docker イメージを参照する場合、コネクタには次の要件もあります。
  +  AWS Marketplace コンテナ製品をサブスクライブする必要があります。詳細については、「AWS Marketplace 購入者ガイド」の「[Finding and subscribing to container products](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-finding-and-subscribing-to-container-products.html)」(コンテナ製品の検索とサブスクライブ) を参照してください。
  + AWS IoT Greengrass は、「シークレット[の要件」で説明されているように、ローカルシークレット](secrets.md#secrets-reqs)をサポートするように設定する必要があります。コネクタは、シークレットの保存ではなく AWS Secrets Manager、シークレットの取得にのみこの機能を使用します。
  + Compose ファイルで参照される Docker イメージを保存する AWS Marketplace レジストリごとに、Secrets Manager でシークレットを作成する必要があります。詳細については、「[プライベートリポジトリからの Docker イメージへのアクセス](#access-private-repositories)」を参照してください。
+ Docker Compose ファイルが Amazon ECR レジストリ以外のレジストリ (Docker Hub など) のプライベートリポジトリから Docker イメージを参照する場合、コネクタには次の要件もあります。
  + AWS IoT Greengrass は、「シークレット[の要件」で説明されているように、ローカルシークレット](secrets.md#secrets-reqs)をサポートするように設定する必要があります。コネクタは、シークレットの保存ではなく AWS Secrets Manager、シークレットの取得にのみこの機能を使用します。
  + Compose ファイルで参照される Docker イメージの格納先プライベートリポジトリごとに、Secrets Manager にシークレットを作成する必要があります。詳細については、「[プライベートリポジトリからの Docker イメージへのアクセス](#access-private-repositories)」を参照してください。
+ このコネクタを含む Greengrass グループをデプロイするときは、Docker デーモンが実行されている必要があります。

### プライベートリポジトリからの Docker イメージへのアクセス
<a name="access-private-repositories"></a>

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

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

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

**注記**  
Secrets Manager は、認証情報、キー、およびその他のシークレットを AWS クラウドに安全に保存および管理するために使用できるサービスです。詳細については、「 *AWS Secrets Manager ユーザーガイド*」の[「What is AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)」を参照してください。

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


| キー | 値 | 
| --- | --- | 
| `username` | リポジトリまたはレジストリへのアクセスに使用するユーザー名。 | 
| `password` | リポジトリまたはレジストリへのアクセスに使用するパスワード。 | 
| `registryUrl` | レジストリのエンドポイント。これは、Compose ファイル内の対応するレジストリ URL と一致する必要があります。 | 

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

**Docker イメージのログイン情報を取得するには AWS Marketplace**  

1. `aws ecr get-login-password` コマンド AWS Marketplace を使用して、 から Docker イメージのパスワードを取得します。詳細については、「AWS CLI コマンドリファレンス」の「[get-login-password](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login.html)」を参照してください。

   ```
   aws ecr get-login-password
   ```

1. Docker イメージのレジストリ URL を取得します。 AWS Marketplace ウェブサイトを開き、コンテナ製品の起動ページを開きます。**[Container Images]** (コンテナイメージ) で、**[View container image details]** (コンテナイメージの詳細を表示) をクリックして、ユーザー名とレジストリ URL を検索します。
取得したユーザー名、パスワード、レジストリ URL を使用して、Compose ファイルで参照される Docker イメージを保存する各 AWS Marketplace レジストリのシークレットを作成します。

**シークレットを作成するには (コンソール)**  
 AWS Secrets Manager コンソールで、**その他のタイプのシークレット**を選択します。[** このシークレットに保存するキーと値のペアを指定します **] で以下の操作を行い、`username`、`password` および `registryUrl` の行を追加します。詳細については、「AWS Secrets Manager ユーザーガイド」の「[Creating a basic secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)」(基本的なシークレットの作成) を参照してください。  

![\[ユーザー名 、パスワード、および registryUrl キーを使用してシークレットを作成します。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/connectors/secret-docker-trusted-registry.png)


**シークレットを作成するには (CLI)**  
で AWS CLI、次の例に示すように Secrets Manager `create-secret` コマンドを使用します。詳細については、「AWS CLI コマンドリファレンス」の「[create-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/create-secret.html)」を参照してください。  

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

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

## パラメータ
<a name="docker-app-connector-param"></a>

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

------
#### [ Version 7 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「[バケットの名前付け](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」に従ってください。  
 AWS IoT コンソールでの名前の表示: **S3 の Docker Compose ファイル**  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[オブジェクトメタデータの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileS3Version`  
Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `false`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileDestinationPath`  
Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。`DockerUserId` に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「[AWS IoT Greengrass コアでの Docker ユーザーのセットアップ](#docker-app-connector-linux-user)」を参照してください。  
このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「[セキュリティ上の考慮事項](#docker-app-connector-security)」を参照してください。
 AWS IoT コンソールの表示名: **ローカル Compose ファイルのディレクトリパス**  
必須: `true`  
型: `string`  
有効なパターン `\/.*\/?`  
例: `/home/username/myCompose`

`DockerUserId`  
コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの `docker` Linux グループに属し、`DockerComposeFileDestinationPath` ディレクトリへの書き込み権限を持っている必要があります。詳細については、「[コアでの Docker ユーザーの設定](#docker-app-connector-linux-user)」を参照してください。  
<a name="avoid-running-as-root"></a>やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、 AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
 AWS IoT コンソールの表示名: **Docker ユーザー ID**  
必須: `false`  
型: `string`  
有効なパターン: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
プライベートリポジトリ内の Docker イメージへのアクセスに使用されるログイン情報を含む AWS Secrets Manager のシークレットの Amazon リソースネーム (ARNs)。詳細については、「[プライベートリポジトリからの Docker イメージへのアクセス](#access-private-repositories)」を参照してください。  
 AWS IoT コンソールでの名前の表示: **プライベートリポジトリの認証情報**  
必須: `false` このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。  
タイプ: `string` の `array`  
有効なパターン: `[( ?,? ?"(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 コンソールの表示名: **ログ記録の頻度**  
必須: `false`  
型: `string`  
有効なパターン: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は `False` です。  
 AWS IoT コンソールの表示名: **強制デプロイ**  
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

`DockerPullBeforeUp`  
デプロイヤがプルダウンアップ動作で `docker-compose up` の実行前に `docker-compose pull` を実行する必要があるかどうかを示します。デフォルト値は `True` です。  
 AWS IoT コンソールの表示名: **Docker Pull Before Up**  
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

`StopContainersOnNewDeployment`  
GGC が停止した時に、Docker デプロイヤが管理する Docker コンテナをコネクタが停止させるかどうかを示します (GGC が停止するのは新しいグループがデプロイされた時、またはカーネルがシャットダウンされた時です)。デフォルト値は `True` です。  
 AWS IoT コンソールの表示名: **新しいデプロイで Docker が停止**する  
このパラメータはデフォルトの `True` のままにしておくことをお勧めします。パラメータを `False`に設定すると、 AWS IoT Greengrass コアを終了した後や新しいデプロイを開始した後でも、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 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「[バケットの名前付け](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」に従ってください。  
 AWS IoT コンソールでの名前の表示: **S3 の Docker Compose ファイル**  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[オブジェクトメタデータの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileS3Version`  
Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `false`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileDestinationPath`  
Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。`DockerUserId` に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「[AWS IoT Greengrass コアでの Docker ユーザーのセットアップ](#docker-app-connector-linux-user)」を参照してください。  
このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「[セキュリティ上の考慮事項](#docker-app-connector-security)」を参照してください。
 AWS IoT コンソールの表示名: **ローカル Compose ファイルのディレクトリパス**  
必須: `true`  
型: `string`  
有効なパターン `\/.*\/?`  
例: `/home/username/myCompose`

`DockerUserId`  
コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの `docker` Linux グループに属し、`DockerComposeFileDestinationPath` ディレクトリへの書き込み権限を持っている必要があります。詳細については、「[コアでの Docker ユーザーの設定](#docker-app-connector-linux-user)」を参照してください。  
<a name="avoid-running-as-root"></a>やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、 AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
 AWS IoT コンソールの表示名: **Docker ユーザー ID**  
必須: `false`  
型: `string`  
有効なパターン: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
プライベートリポジトリ内の Docker イメージへのアクセスに使用されるログイン情報を含む AWS Secrets Manager のシークレットの Amazon リソースネーム (ARNs)。詳細については、「[プライベートリポジトリからの Docker イメージへのアクセス](#access-private-repositories)」を参照してください。  
 AWS IoT コンソールでの名前の表示: **プライベートリポジトリの認証情報**  
必須: `false` このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。  
タイプ: `string` の `array`  
有効なパターン: `[( ?,? ?"(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 コンソールの表示名: **ログ記録の頻度**  
必須: `false`  
型: `string`  
有効なパターン: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は `False` です。  
 AWS IoT コンソールの表示名: **強制デプロイ**  
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

`DockerPullBeforeUp`  
デプロイヤがプルダウンアップ動作で `docker-compose up` の実行前に `docker-compose pull` を実行する必要があるかどうかを示します。デフォルト値は `True` です。  
 AWS IoT コンソールの表示名: **Docker Pull Before Up**  
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

`StopContainersOnNewDeployment`  
GGC が停止した時に、Docker デプロイヤが管理する Docker コンテナを、コネクタが停止させるかどうかを示します (新しいグループがデプロイされた時、またはカーネルがシャットダウンされた時)。デフォルト値は `True` です。  
 AWS IoT コンソールの表示名: **新しいデプロイで Docker が停止**する  
このパラメータはデフォルトの `True` のままにしておくことをお勧めします。パラメータを `False`に設定すると、 AWS IoT Greengrass コアを終了した後や新しいデプロイを開始した後でも、Docker コンテナの実行が続行されます。このパラメータを `False` に設定する場合は、`docker-compose` サービス名の変更や追加があった時などの必要に応じて、Docker コンテナが正常に管理されていることを確認する必要があります。  
 詳細については、`docker-compose` Compose ファイルのドキュメントを参照してください。
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

------
#### [ Version 5 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「[バケットの名前付け](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」に従ってください。  
 AWS IoT コンソールでの名前の表示: **S3 の Docker Compose ファイル**  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[オブジェクトメタデータの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileS3Version`  
Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `false`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileDestinationPath`  
Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。`DockerUserId` に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「[AWS IoT Greengrass コアでの Docker ユーザーのセットアップ](#docker-app-connector-linux-user)」を参照してください。  
このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「[セキュリティ上の考慮事項](#docker-app-connector-security)」を参照してください。
 AWS IoT コンソールでの名前の表示: **ローカル Compose ファイルのディレクトリパス**  
必須: `true`  
型: `string`  
有効なパターン `\/.*\/?`  
例: `/home/username/myCompose`

`DockerUserId`  
コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの `docker` Linux グループに属し、`DockerComposeFileDestinationPath` ディレクトリへの書き込み権限を持っている必要があります。詳細については、「[コアでの Docker ユーザーの設定](#docker-app-connector-linux-user)」を参照してください。  
<a name="avoid-running-as-root"></a>やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、 AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
 AWS IoT コンソールでの名前の表示: **Docker ユーザー ID**  
必須: `false`  
型: `string`  
有効なパターン: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
プライベートリポジトリ内の Docker イメージへのアクセスに使用されるログイン情報を含む AWS Secrets Manager のシークレットの Amazon リソースネーム (ARNs)。詳細については、「[プライベートリポジトリからの Docker イメージへのアクセス](#access-private-repositories)」を参照してください。  
 AWS IoT コンソールでの名前の表示: **プライベートリポジトリの認証情報**  
必須: `false` このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。  
タイプ: `string` の `array`  
有効なパターン: `[( ?,? ?"(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 コンソールの表示名: **ログ記録の頻度**  
必須: `false`  
型: `string`  
有効なパターン: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は `False` です。  
 AWS IoT コンソールの表示名: **強制デプロイ**  
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

`DockerPullBeforeUp`  
デプロイヤがプルダウンアップ動作で `docker-compose up` の実行前に `docker-compose pull` を実行する必要があるかどうかを示します。デフォルト値は `True` です。  
 AWS IoT コンソールの表示名: **Docker Pull Before Up**  
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

------
#### [ Versions 2 - 4 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「[バケットの名前付け](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」に従ってください。  
 AWS IoT コンソールでの名前の表示: **S3 の Docker Compose ファイル**  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[オブジェクトメタデータの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileS3Version`  
Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `false`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileDestinationPath`  
Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。`DockerUserId` に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「[AWS IoT Greengrass コアでの Docker ユーザーのセットアップ](#docker-app-connector-linux-user)」を参照してください。  
このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「[セキュリティ上の考慮事項](#docker-app-connector-security)」を参照してください。
 AWS IoT コンソールの表示名: **ローカル Compose ファイルのディレクトリパス**  
必須: `true`  
型: `string`  
有効なパターン `\/.*\/?`  
例: `/home/username/myCompose`

`DockerUserId`  
コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの `docker` Linux グループに属し、`DockerComposeFileDestinationPath` ディレクトリへの書き込み権限を持っている必要があります。詳細については、「[コアでの Docker ユーザーの設定](#docker-app-connector-linux-user)」を参照してください。  
<a name="avoid-running-as-root"></a>やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、 AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
 AWS IoT コンソールの表示名: **Docker ユーザー ID**  
必須: `false`  
型: `string`  
有効なパターン: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
プライベートリポジトリ内の Docker イメージへのアクセスに使用されるログイン情報を含む AWS Secrets Manager のシークレットの Amazon リソースネーム (ARNs)。詳細については、「[プライベートリポジトリからの Docker イメージへのアクセス](#access-private-repositories)」を参照してください。  
 AWS IoT コンソールでの名前の表示: **プライベートリポジトリの認証情報**  
必須: `false` このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。  
タイプ: `string` の `array`  
有効なパターン: `[( ?,? ?"(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 コンソールの表示名: **ログ記録の頻度**  
必須: `false`  
型: `string`  
有効なパターン: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
最後のデプロイの不適切なクリーンアップが原因で Docker デプロイが失敗する場合に、Docker デプロイを強制するかどうかを示します。デフォルト値は `False` です。  
 AWS IoT コンソールの表示名: **強制デプロイ**  
必須: `false`  
型: `string`  
有効なパターン: `^(true|false)$`

------
#### [ Version 1 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Docker Compose ファイルを含む S3 バケットの名前。バケットの作成時は、「Amazon Simple Storage Service ユーザーガイド」の「[バケットの名前付け](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」に従ってください。  
 AWS IoT コンソールでの名前の表示: **S3 の Docker Compose ファイル**  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
Amazon S3 の Docker Compose ファイルのオブジェクトキー。オブジェクトの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[オブジェクトメタデータの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `true`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileS3Version`  
Amazon S3 の Docker Compose ファイルのオブジェクトバージョン。オブジェクトキーの命名ガイドラインなどの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。  
コンソールでは、**S3 プロパティの Docker Compose ファイル**は、`DockerComposeFileS3Bucket`、`DockerComposeFileS3Key`、および `DockerComposeFileS3Version` の各パラメータを結合します。
必須: `false`  
型: `string`  
有効なパターン `.+`

`DockerComposeFileDestinationPath`  
Docker Compose ファイルのコピーを格納するために使用されるローカルディレクトリの絶対パス。これは既存のディレクトリでなければなりません。`DockerUserId` に指定したユーザーには、このディレクトリにファイルを作成する権限が必要です。詳細については、「[AWS IoT Greengrass コアでの Docker ユーザーのセットアップ](#docker-app-connector-linux-user)」を参照してください。  
このディレクトリには、Docker Compose ファイルとプライベートリポジトリからの Docker イメージの資格情報が格納されます。このディレクトリを保護するのはユーザーの責任です。詳細については、「[セキュリティ上の考慮事項](#docker-app-connector-security)」を参照してください。
 AWS IoT コンソールの表示名: **ローカル Compose ファイルのディレクトリパス**  
必須: `true`  
型: `string`  
有効なパターン `\/.*\/?`  
例: `/home/username/myCompose`

`DockerUserId`  
コネクタが実行される Linux ユーザーの UID。このユーザーは、コアデバイスの `docker` Linux グループに属し、`DockerComposeFileDestinationPath` ディレクトリへの書き込み権限を持っている必要があります。詳細については、「[コアでの Docker ユーザーの設定](#docker-app-connector-linux-user)」を参照してください。  
<a name="avoid-running-as-root"></a>やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、 AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
 AWS IoT コンソールの表示名: **Docker ユーザー ID**  
必須: `false`  
型: `string`  
有効なパターン: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
プライベートリポジトリ内の Docker イメージへのアクセスに使用されるログイン情報を含む AWS Secrets Manager のシークレットの Amazon リソースネーム (ARNs)。詳細については、「[プライベートリポジトリからの Docker イメージへのアクセス](#access-private-repositories)」を参照してください。  
 AWS IoT コンソールでの名前の表示: **プライベートリポジトリの認証情報**  
必須: `false` このパラメータは、プライベートリポジトリに格納された Docker イメージにアクセスするために必要です。  
タイプ: `string` の `array`  
有効なパターン: `[( ?,? ?"(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 コンソールの表示名: **ログ記録の頻度**  
必須: `false`  
型: `string`  
有効なパターン: `^[1-9]{1}[0-9]{0,3}$`

------

### サンプルコネクタを作成する (AWS CLI)
<a name="docker-app-connector-create"></a>

以下の 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": "amzn-s3-demo-bucket",
                "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 関数には[存続期間の長い](lambda-functions.md#lambda-lifecycle)ライフサイクルがあります。

## 入力データ
<a name="docker-app-connector-data-input"></a>

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

## 出力データ
<a name="docker-app-connector-data-output"></a>

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

<a name="topic-filter"></a>**サブスクリプションのトピックフィルター**  
`dockerapplicationdeploymentconnector/message/status`

**出力例: 成功**  

```
{
  "status":"success",
  "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", 
  "S3Bucket":"amzn-s3-demo-bucket",
  "ComposeFileName":"production-docker-compose.yml",
  "ComposeFileVersion":"123"
}
```

**出力例: 失敗**  

```
{
  "status":"fail",
  "error_message":"description of error",
  "error":"InvalidParameter"
}
```
エラーの種類は `InvalidParameter` または `InternalError` です。

## AWS IoT Greengrass コアでの Docker ユーザーのセットアップ
<a name="docker-app-connector-linux-user"></a>

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

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

**注記**  
デフォルト `ggc_user` を使用する代わりに、Linux ユーザーを作成することをお勧めします。それ以外の場合は、Greengrass グループの任意の Lambda 関数が Compose ファイルと Docker の認証情報にアクセスできます。
<a name="avoid-running-as-root"></a>やむを得ない場合を除き、root として実行することは避けてください。ルートユーザーを指定する場合は、 AWS IoT Greengrass Core で Lambda 関数をルートとして実行できるようにする必要があります。詳細については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。

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

   ```
   sudo useradd -u 1234 user-name
   ```

1. コア上の `docker` グループにユーザーを追加します。例:

   ```
   sudo usermod -aG docker user-name
   ```

   `docker` グループの作成方法などの詳細については、Docker のドキュメントの「[Docker を非ルートユーザーとして管理する](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)」を参照してください。

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

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

      ```
      chown 1234 docker-compose-file-destination-path
      ```

   1. 所有者に読み取りおよび書き込み権限を与えます。

      ```
      chmod 700 docker-compose-file-destination-path
      ```

      詳細については、Linux Foundation のドキュメントの「[Linux でファイルとフォルダのアクセス許可を管理する方法](https://www.linux.com/tutorials/how-manage-file-and-folder-permissions-linux/)」を参照してください。

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

      ```
      id -u user-name
      ```

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

## 使用状況の情報
<a name="docker-app-connector-usage-info"></a>

Greengrass Docker アプリケーションデプロイコネクタを使用する時は、次の実装固有の使用状況の情報に注意する必要があります。
+ **プロジェクト名の固定プレフィックス。**コネクタは、開始する Docker コンテナの名前の前に `greengrassdockerapplicationdeployment` プレフィックスを追加します。コネクタは、実行する `docker-compose` コマンドで、このプレフィックスをプロジェクト名として使用します。
+ **ログ記録の動作。**コネクタは、ステータス情報とトラブルシューティング情報をログファイルに書き込みます。CloudWatch Logs にログを送信し、ログをローカルに書き込むように AWS IoT Greengrass を設定できます。詳細については、「[コネクタのログ記録](connectors.md#connectors-logging)」を参照してください。これは、コネクタのローカルログへのパスです。

  ```
  /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](https://docs.docker.com/engine/reference/commandline/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 ファイルまたはローカルイメージが存在しない場合は、コネクタは失敗します。`ForceDeploy` と `StopContainersOnNewDeployment` パラメータの動作はオフラインモードでも変わりません。

## Docker コンテナとの通信
<a name="docker-app-connector-communicating"></a>

AWS IoT Greengrass は、Greengrass コンポーネントと Docker コンテナ間の次の通信チャネルをサポートしています。
+ Greengrass Lambda 関数は、REST API を使用して Docker コンテナ内のプロセスと通信できます。Docker コンテナ内に、ポートを開くサーバーを設定できます。Lambda 関数はこのポートを介してコンテナと通信できます。
+ Docker コンテナ内のプロセスは、ローカルの Greengrass メッセージブローカーを介して MQTT メッセージを交換することができます。Docker コンテナを Greengrass グループのクライアントデバイスとして設定し、サブスクリプションを作成して、コンテナがグループ内の Greengrass Lambda 関数、クライアントデバイス、およびその他のコネクタ、または AWS IoT およびローカルシャドウサービスと通信できるようにします。詳細については、「[Docker コンテナを使用した MQTT 通信の設定](#docker-app-connector-mqtt-communication)」を参照してください。
+ Greengrass Lambda 関数は、共有ファイルを更新して Docker コンテナに情報を渡すことができます。Compose ファイルを使用して、Docker コンテナの共有ファイルパスをバインドできます。

### Docker コンテナを使用した MQTT 通信の設定
<a name="docker-app-connector-mqtt-communication"></a>

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

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

**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
   ```

1. <a name="console-gg-groups"></a> AWS IoT コンソールナビゲーションペインの**「管理**」で **Greengrass デバイス**を展開し、**「グループ (V1)**」を選択します。

1. <a name="group-choose-target-group"></a>ターゲットグループを選択します。

1. <a name="gg-group-add-device"></a>グループの設定ページで、**[Client device]** (クライアントデバイス)、**[Associate]** (アソシエイト) の順に選択します。

1. <a name="gg-group-create-device"></a>**クライアントデバイスをこのグループモーダルに関連付けるで**、**新しい AWS IoT モノを作成する**を選択します。

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

1. <a name="gg-group-create-single-thing"></a>**[Creating things]** (モノを作成する) ページで、**[Create a single thing]** (単一のモノを作成する) を選択し、**[Next]** (次へ) を選択します。

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

1. <a name="gg-group-create-device-configure-certificate"></a>**[Configure device certificate]** (デバイス証明書の設定) ページで **[Next]** (次へ) を選択します。

1. <a name="gg-group-create-device-attach-policy"></a>**[Attach policies to certificate]** (証明書へのポリシーのアタッチ) を選択し、次のいずれかを実行します。
   + クライアントデバイスが必要とする権限をグラントする既存のポリシーを選択し、**[Create thing]** (モノを作成する) を選択します。

     モーダルが開き、デバイスが とコアへの接続に使用する証明書 AWS クラウド とキーをダウンロードできます。
   + クライアントデバイスにアクセス許可を付与する新しいポリシーを作成してアタッチします。以下の操作を実行します。

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

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

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

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

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

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

------
#### [ JSON ]

****  

           ```
           {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
               {
                 "Effect": "Allow",
                 "Action": [
                   "iot:Publish",
                   "iot:Subscribe",
                   "iot:Connect",
                   "iot:Receive"
                 ],
                 "Resource": [
                   "*"
                 ]
               },
               {
                 "Effect": "Allow",
                 "Action": [
                   "greengrass:*"
                 ],
                 "Resource": [
                   "*"
                 ]
               }
             ]
           }
           ```

------

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

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

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

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

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

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

1. <a name="gg-group-create-device-download-certs"></a>**[Download certificates and keys]** (証明書と鍵をダウンロードする) モーダルで、デバイスの証明書をダウンロードします。
**重要**  
**[Done]** (完了) を選択する前に、セキュリティリソースをダウンロードします。

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

   1. **[デバイス証明書]** で、**[ダウンロード]** を選択してデバイス証明書をダウンロードします。

   1. **[パブリックキーファイル]** で、**[ダウンロード]** を選択して証明書のパブリックキーをダウンロードします。

   1. **[プライベートキーファイル]** で、**[ダウンロード]** を選択して証明書のプライベートキーファイルをダウンロードします。

   1. 「*AWS IoT デベロッパーガイド*」の「[サーバー認証](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html)」を確認して、適切なルート CA 証明書を選択します。Amazon Trust Services (ATS) エンドポイントと ATS ルート CA 証明書の使用をお勧めします。**[ルート CA 証明書]** で、ルート CA 証明書の **[ダウンロード]** を選択します。

   1. **[完了]** をクリックします。

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

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

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

**注記**  
シャドウドキュメントの最大サイズは 8 KB です。詳細については、「AWS IoT デベロッパーガイド」の「[AWS IoT のクォータ](https://docs.aws.amazon.com/iot/latest/developerguide/limits-iot.html)」を参照してください。

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

1. <a name="shared-subscriptions-addsubscription"></a>グループ設定ページの **[Subscriptions]** (サブスクリプション) タブで、**[Add Subscription]** (サブスクリプションの追加) を選択します。

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

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

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

   1. [**次へ**] を選択します。

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

   1. [**Finish**] を選択してください。

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)
```

## セキュリティ上の考慮事項
<a name="docker-app-connector-security"></a>

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

  
**Docker の Compose ファイルのローカルストレージ**  
コネクタは、`DockerComposeFileDestinationPath` パラメータに指定されたディレクトリに Compose ファイルのコピーを格納します。  
このディレクトリを保護するのはあなたの責任です。ディレクトリへのアクセスを制限するには、ファイルシステムの権限を使用する必要があります。

  
**Docker 認証情報のローカルストレージ**  
Docker イメージがプライベートリポジトリに格納されている場合、コネクタは、`DockerComposeFileDestinationPath` パラメータに指定されたディレクトリに Docker 認証情報を格納します。  
これらの認証情報を保護するのはお客様の責任です。例えば、Docker Engine をインストールするときは、コアデバイスで[資格情報ヘルパー](https://docs.docker.com/engine/reference/commandline/login/#credentials-store)を使用する必要があります。

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

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

## ライセンス
<a name="docker-app-connector-license"></a>

Greengrass Docker アプリケーションデプロイコネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。<a name="boto-3-licenses"></a>
+ [AWS SDK for Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF ライセンス
+ [docutils](https://pypi.org/project/docutils/)/BSD ライセンス、GNU 一般パブリックライセンス (GPL)、Python Software Foundation ライセンス、パブリックドメイン
+ [jmespath](https://pypi.org/project/jmespath/)/MIT ライセンス
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT ライセンス

このコネクタは、[Greengrass Core ソフトウェアライセンス契約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)に従ってリリースされます。

## 変更ログ
<a name="docker-app-connector-changelog"></a>

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


|  バージョン  |  変更  | 
| --- | --- | 
|  7  |  がオフライン AWS IoT Greengrass で開始するときに既存の Docker Compose ファイルを使用する`DockerOfflineMode`ように を追加しました。`docker login` コマンドの再試行を実装しました。32 ビット UID に対応しました。  | 
|  6  |  新しいデプロイが行われた時、または GGC が停止した時にコンテナのクリーンアップを上書きする `StopContainersOnNewDeployment` を追加しました。より安全なシャットダウンと起動の仕組み。YAML 検証でのバグを修正しました。  | 
|  5  |  `docker-compose down` 実行前にイメージをプルしました。  | 
|  4  |  Docker イメージを更新する起動前プルの動作を追加しました。  | 
|  3  |  環境変数の検索に関する問題が修正されました。  | 
|  2  |  `ForceDeploy` パラメータが追加されました。  | 
|  1  |  初回リリース。  | 

<a name="one-conn-version"></a>Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「[コネクタのバージョンのアップグレード](connectors.md#upgrade-connector-versions)」を参照してください。

## 関連情報
<a name="docker-app-connector-see-also"></a>
+ [Greengrass コネクタを使用したサービスおよびプロトコルとの統合](connectors.md)
+ [Greengrass コネクタの開始方法 (コンソール)](connectors-console.md)
+ [Greengrass コネクタの開始方法 (CLI)](connectors-cli.md)