

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

# 手動リソースプロビジョニングを使用して Docker コンテナ AWS IoT Greengrass で を実行する
<a name="run-greengrass-docker-manual-provisioning"></a>

このチュートリアルでは、手動でプロビジョニングされた AWS リソースを使用して Docker コンテナに AWS IoT Greengrass Core ソフトウェアをインストールして実行する方法について説明します。

**Topics**
+ [前提条件](#docker-manual-provisioning-prereqs)
+ [AWS IoT エンドポイントを取得する](#retrieve-iot-endpoints)
+ [AWS IoT モノを作成する](#create-iot-thing)
+ [モノの証明書を作成する](#create-thing-certificate-mp)
+ [トークン交換ロールを作成する](#create-token-exchange-role)
+ [デバイスに証明書をダウンロードする](#download-thing-certificates)
+ [設定ファイルを作成する](#create-docker-install-configuration-file)
+ [環境ファイルを作成する](#create-env-file-manual-provisioning)
+ [コンテナで AWS IoT Greengrass Core ソフトウェアを実行する](#run-greengrass-image-manual-provisioning)
+ [次の手順](#run-greengrass-docker-next-steps)

## 前提条件
<a name="docker-manual-provisioning-prereqs"></a>

このチュートリアルを完了するには、以下が必要です。
+  AWS アカウント。アカウントをお持ちでない場合は、「[のセットアップ AWS アカウント](setting-up.md#set-up-aws-account)」を参照してください。
+ Docker AWS IoT Greengrass イメージ。[Dockerfile AWS IoT Greengrass からイメージを構築](build-greengrass-dockerfile.md)できます。
+ Docker コンテナを実行するホストコンピュータは、以下の要件を満たしている必要があります。
  + <a name="docker-host-reqs"></a>インターネットに接続された Linux ベースのオペレーティングシステム。
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) バージョン 18.09 以降。
  + <a name="docker-compose-reqs"></a>(オプション) [Docker Compose](https://docs.docker.com/compose/install/) バージョン 1.22 以降。Docker Compose は、Docker Compose CLI を使用して Docker イメージを実行する場合のみ必要です。

## AWS IoT エンドポイントを取得する
<a name="retrieve-iot-endpoints"></a>

の AWS IoT エンドポイントを取得し AWS アカウント、後で使用するために保存します。デバイスはこれらのエンドポイントを使用して AWS IoTに接続します。以下の操作を実行します。

1.  AWS IoT のデータエンドポイントを取得します AWS アカウント。

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. の AWS IoT 認証情報エンドポイントを取得します AWS アカウント。

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## AWS IoT モノを作成する
<a name="create-iot-thing"></a>

AWS IoT *モノ*は、 に接続するデバイスと論理エンティティを表します AWS IoT。Greengrass コアデバイスは AWS IoT モノです。デバイスを AWS IoT モノとして登録すると、そのデバイスはデジタル証明書を使用して認証できます AWS。

このセクションでは、デバイスを表す AWS IoT モノを作成します。

**AWS IoT モノを作成するには**

1. デバイスの AWS IoT モノを作成します。開発用コンピュータに次のコマンドを実行します。
   + *MyGreengrassCore* を使用するモノの名前に置き換えます。この名前は Greengrass コアデバイスの名前でもあります。
**注記**  <a name="install-argument-thing-name-constraint"></a>
モノの名前にコロン (`:`) 記号を含むことができません。

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (オプション) AWS IoT モノを新規または既存のモノグループに追加します。モノグループを使用して Greengrass コアデバイスのフリートを管理します。ソフトウェアコンポーネントをデバイスにデプロイするとき、個々のデバイスまたはデバイスのグループを対象にできます。アクティブな Greengrass デプロイを持つモノグループにデバイスを追加して、そのモノグループのソフトウェアコンポーネントをデバイスにデプロイできます。以下の操作を実行します。

   1. (オプション) AWS IoT モノのグループを作成します。
      + *MyGreengrassCoreGroup* を作成するモノグループの名前に置き換えます。
**注記**  <a name="install-argument-thing-group-name-constraint"></a>
モノグループ名にコロン (`:`) 記号を含めることはできません。

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1.  AWS IoT モノをモノのグループに追加します。
      + *MyGreengrassCore* を AWS IoT モノの名前に置き換えます。
      + *MyGreengrassCoreGroup* をモノグループの名前に置き換えます。

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      要求が正常に処理された場合、コマンドは出力されません。

## モノの証明書を作成する
<a name="create-thing-certificate-mp"></a>

<a name="create-thing-certificate-intro-1"></a>デバイスを AWS IoT モノとして登録すると、そのデバイスはデジタル証明書を使用して認証できます AWS。この証明書により、デバイスは AWS IoT および と通信できます AWS IoT Greengrass。

<a name="create-thing-certificate-intro-2"></a>このセクションでは、デバイスが AWSに接続する際に使用できる証明書を作成してダウンロードします。<a name="create-thing-certificate-cloud-steps"></a>

**モノの証明書を作成するには**

1.  AWS IoT モノの証明書をダウンロードするフォルダを作成します。

   ```
   mkdir greengrass-v2-certs
   ```

1.  AWS IoT モノの証明書を作成してダウンロードします。

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   後で証明書を設定するために使用する証明書の Amazon リソースネーム (ARN) を保存します。

次に、モノの証明書を設定します。詳細については、「[モノの証明書を設定する](manual-installation.md#configure-thing-certificate)」を参照してください。

## トークン交換ロールを作成する
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass コアデバイスは、*トークン交換ロールと呼ばれる IAM サービスロール*を使用して、 AWS サービスへの呼び出しを承認します。デバイスは認証情報 AWS IoT プロバイダーを使用して、このロールの一時的な AWS 認証情報を取得します。これにより、デバイスは Amazon CloudWatch Logs とやり取り AWS IoTしたり、Amazon CloudWatch Logs にログを送信したり、Amazon S3 からカスタムコンポーネントアーティファクトをダウンロードしたりできます。 Amazon CloudWatch 詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

<a name="installation-create-token-exchange-role-alias-intro"></a> AWS IoT *ロールエイリアス*を使用して、Greengrass コアデバイスのトークン交換ロールを設定します。ロールエイリアスは、デバイスのトークン交換ロールを変更できるようにしますが、デバイス設定は同じ内容に保たれます。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[Authorizing direct calls to AWS services](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)」を参照してください。

このセクションでは、トークン交換 IAM ロールと AWS IoT 、ロールを指すロールエイリアスを作成します。Greengrass コアデバイスを既に設定している場合、新しく作成せず、トークン交換ロールとロールエイリアスを使用できます。次に、デバイスの AWS IoT モノを設定してそのロールとエイリアスを使用します。

**トークン交換 IAM ロールを作成するには**

1. <a name="create-token-exchange-role-create-iam-role"></a>デバイスがトークン交換ロールとして使用できる IAM ロールを作成します。以下の操作を実行します。

   1. トークン交換ロールが必要とする、信頼できるポリシードキュメントが含まれるファイルを作成します。

      <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      ```
      nano device-role-trust-policy.json
      ```

      次の JSON をファイルにコピーします。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 信頼ポリシードキュメントでトークン交換ロールを作成します。
      + *GreengrassV2TokenExchangeRole* を、作成する IAM ロールの名前に置き換えます。

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. トークン交換ロールが必要なアクセスポリシードキュメントを含むファイルを作成します。

      <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      ```
      nano device-role-access-policy.json
      ```

      次の JSON をファイルにコピーします。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**注記**  
このアクセスポリシーでは、S3 バケットのコンポーネントアーティファクトへのアクセスが許可されていません。Amazon S3 でアーティファクトを定義するカスタムコンポーネントをデプロイするには、コアデバイスがコンポーネントアーティファクトを取得できるようにする許可をロールに追加する必要があります。詳細については、「[コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する](device-service-role.md#device-service-role-access-s3-bucket)」を参照してください。  
コンポーネントアーティファクトに S3 バケットをまだ持っていない場合、バケットを作成した後でこれらのアクセス許可を追加できます。

   1. ポリシードキュメントから IAM ポリシーを作成します。
      + *GreengrassV2TokenExchangeRoleAccess* を作成する IAM ポリシーの名前に置き換えます。

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. IAM ポリシーをトークン交換ロールにアタッチします。
      + *GreengrassV2TokenExchangeRole* を、IAM ロールの名前に置き換えます。
      + ポリシー ARN を前のステップで作成した IAM ポリシーの ARN に置き換えます。

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      要求が正常に処理された場合、コマンドは出力されません。

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>トークン交換 AWS IoT ロールを指すロールエイリアスを作成します。
   + *GreengrassCoreTokenExchangeRoleAlias* を作成するロールエイリアスの名前に置き換えます。
   + ロール ARN を前のステップで作成した IAM ロールの ARN に置き換えます。

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**注記**  
ロールエイリアスを作成するには、トークン交換 IAM ロールを AWS IoTに渡す許可が必要です。ロールエイリアスを作成しようとしたときにエラーメッセージが表示された場合は、 AWS ユーザーにこのアクセス許可があることを確認してください。詳細については、「 *AWS Identity and Access Management ユーザーガイド*[」の「 AWS サービスにロールを渡すアクセス許可をユーザーに付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)する」を参照してください。

1. Greengrass コアデバイスがロールエイリアスを使用してトークン交換ロールを引き受けることを許可する AWS IoT ポリシーを作成してアタッチします。Greengrass コアデバイスを以前にセットアップしたことがある場合は、新しいロールエイリアスポリシーを作成する代わりに、そのロールエイリアス AWS IoT ポリシーをアタッチできます。以下の操作を実行します。

   1. (オプション) ロールエイリアスに必要な AWS IoT ポリシードキュメントを含むファイルを作成します。

      <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      次の JSON をファイルにコピーします。
      + リソース ARN をロールエイリアスの ARN に置き換えます。

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1.  AWS IoT ポリシードキュメントから ポリシーを作成します。
      + *GreengrassCoreTokenExchangeRoleAliasPolicy* を、作成する AWS IoT ポリシーの名前に置き換えます。

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1.  AWS IoT モノの証明書に AWS IoT ポリシーをアタッチします。
      + *GreengrassCoreTokenExchangeRoleAliasPolicy* をロールエイリアス AWS IoT ポリシーの名前に置き換えます。
      + ターゲット ARN を AWS IoT モノの証明書の ARN に置き換えます。

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      要求が正常に処理された場合、コマンドは出力されません。

## デバイスに証明書をダウンロードする
<a name="download-thing-certificates"></a>

以前に、デバイスの証明書を開発用コンピュータにダウンロードしました。このセクションでは、Amazon ルート認証局 (CA) の証明書もダウンロードします。次に、開発用コンピュータとは異なるコンピュータで Docker で AWS IoT Greengrass Core ソフトウェアを実行する場合は、証明書をそのホストコンピュータにコピーします。 AWS IoT Greengrass Core ソフトウェアは、これらの証明書を使用して AWS IoT クラウドサービスに接続します。

**証明書をデバイスにダウンロードするには**

1. 開発用コンピュータで、Amazon ルート認証局 (CA) 証明書をダウンロードします。 AWS IoT 証明書は、デフォルトで Amazon のルート CA 証明書に関連付けられています。

------
#### [ Linux or Unix ]

   ```
   sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
   ```

------

1. 開発用コンピュータとは異なるデバイスで Docker で AWS IoT Greengrass Core ソフトウェアを実行する場合は、証明書をホストコンピュータにコピーします。開発用コンピュータとホストコンピュータで SSH と SCP が有効になっている場合、開発用コンピュータの `scp` コマンドを実行して、証明書を転送できます。*device-ip-address* をホストコンピュータの IP アドレスに置き換えます。

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

## 設定ファイルを作成する
<a name="create-docker-install-configuration-file"></a>

1. ホストコンピュータで、設定ファイルを配置するフォルダを作成します。

   ```
   mkdir ./greengrass-v2-config
   ```

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

   例えば、次のコマンドを実行し、GNU nano を使用して `config.yaml` を作成できます。

   ```
   nano ./greengrass-v2-config/config.yaml
   ```

1. 次の YAML コンテンツをファイルにコピーします。この部分設定ファイルは、システムパラメータと Greengrass nucleus パラメータを指定します。

   ```
   ---
   system:
     certificateFilePath: "/tmp/certs/device.pem.crt"
     privateKeyPath: "/tmp/certs/private.pem.key"
     rootCaPath: "/tmp/certs/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "nucleus-version"
       configuration:
         awsRegion: "region"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"
   ```

   次に、以下の値を置き換えます。
   + */tmp/certs*。コンテナの起動時にダウンロードした証明書をマウントする Docker コンテナ内のディレクトリ。
   + `/greengrass/v2`。インストールに使用する Greengrass ルートフォルダ。`GGC_ROOT` 環境変数を使用して、この値を設定します。
   + *MyGreengrassCore*。 AWS IoT モノの名前。
   + *nucleus バージョン*。インストールする AWS IoT Greengrass Core ソフトウェアのバージョン。この値は、ダウンロードした Docker イメージまたは Dockerfile のバージョンと一致する必要があります。`latest` タグ付きの Greengrass Docker イメージをダウンロードした場合は、****docker inspect *image-id***** を使用してイメージのバージョンを確認してください。
   + *リージョン*。 AWS IoT リソースを作成した AWS リージョン 。また、[環境ファイル](#create-env-file-manual-provisioning)の `AWS_REGION` 環境変数に同じ値を指定する必要があります。
   + *GreengrassCoreTokenExchangeRoleAlias*。トークン交換ロールエイリアス。
   + *デバイスデータプレフィックス*。 AWS IoT データエンドポイントのプレフィックス。
   + *device-credentials-prefix*。 AWS IoT 認証情報エンドポイントのプレフィックス。

## 環境ファイルを作成する
<a name="create-env-file-manual-provisioning"></a>

このチュートリアルでは、環境ファイルを使用して、Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定します。また、`docker run` コマンドで [`-e` または `--env` 引数](https://docs.docker.com/engine/reference/commandline/run/#env)を使用して、Docker コンテナに環境変数を設定する、または `docker-compose.yml` ファイルの [`environment` ブロック](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment)で変数を設定することもできます。

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

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

   ```
   nano .env
   ```

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

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=false
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   INIT_CONFIG=/tmp/config/config.yaml
   ```

   次に、以下の値を置き換えます。
   + `/greengrass/v2`。 AWS IoT Greengrass Core ソフトウェアのインストールに使用するルートフォルダへのパス。
   + *リージョン*。 AWS IoT リソースを作成した AWS リージョン 。[[configuration file]](#create-docker-install-configuration-file) (設定ファイル) の `awsRegion` 設定パラメータに同じ値を指定する必要があります。
   + */tmp/config/*。Docker コンテナの起動時に設定ファイルをマウントするフォルダ。
**注記**  <a name="docker-local-dev-tools-production-environment-warning"></a>
`DEPLOY_DEV_TOOLS` 環境変数を `true` に設定して、[[Greengrass CLI component]](greengrass-cli-component.md) (Greengrass CLI コンポーネント) をデプロイできます。これにより、Docker コンテナ内でカスタムコンポーネントを開発できます。<a name="local-dev-tools-production-environment-warning"></a>このコンポーネントは、本番環境ではなく、開発環境でのみで使用することをお勧めします。このコンポーネントは、通常、本番環境では必要とされない情報や操作へのアクセスを提供します。このコンポーネントを必要なコアデバイスにのみデプロイして、最小特権の原則に従います。

## コンテナで AWS IoT Greengrass Core ソフトウェアを実行する
<a name="run-greengrass-image-manual-provisioning"></a>

このチュートリアルでは、Docker コンテナでビルドした Docker イメージを起動する方法を説明します。Docker CLI または Docker Compose CLI を使用して、Docker コンテナで AWS IoT Greengrass Core ソフトウェアイメージを実行できます。

------
#### [ Docker ]
+ このチュートリアルでは、Docker コンテナでビルドした Docker イメージを起動する方法を説明します。

  ```
  docker run --rm --init -it --name docker-image \
   -v path/to/greengrass-v2-config:/tmp/config/:ro \
   -v path/to/greengrass-v2-certs:/tmp/certs:ro \ 
   --env-file .env \
   -p 8883 \
   your-container-image:version
  ```

  このコマンド例は、[docker run](https://docs.docker.com/engine/reference/commandline/run/) に次の引数を使用します。
  + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm): コンテナの終了時にクリーンアップを実行します。
  + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process): コンテナで init プロセスを使用します。
**注記**  
Docker コンテナを停止するときに AWS IoT Greengrass Core ソフトウェアをシャットダウンするには、 `--init`引数が必要です。
  + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground): (オプション) Docker コンテナを対話型プロセスとしてフォアグラウンドで実行します。これを `-d` 引数に置き換えて、代わりに Docker コンテナをデタッチモードで実行できます。詳細については、「Docker ドキュメント」の「[デタッチ vs フォアグラウンド](https://docs.docker.com/engine/reference/run/#detached-vs-foreground)」を参照してください。
  + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name): `aws-iot-greengrass` という名前のコンテナを実行します。
  + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/)。 ボリュームを Docker コンテナにマウントして、設定ファイルと証明書ファイルをコンテナ内で AWS IoT Greengrass 実行できるようにします。
  + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env)。 (オプション) Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。この引数は、環境変数を設定するための [[environment file]](#create-env-file-manual-provisioning) (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、`--env` 引数を使用して、「Docker 実行コマンド」で環境変数を直接設定できます。
  + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish): (オプション) 8883 コンテナポートをホストマシンに公開します。 AWS IoT Greengrass は MQTT トラフィックにポート 8883 を使用するため、MQTT を介して接続および通信する場合は、この引数が必要です。他のポートを開くには、追加の `-p` 引数を使用します。
**注記**  <a name="docker-run-cap-drop"></a>
セキュリティを強化して Docker コンテナを実行するには、`--cap-drop` 引数および `--cap-add` 引数を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[[Runtime privilege and Linux capabilities]](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) (ランタイム特権と Linux 機能)」を参照してください。

------
#### [ Docker Compose ]

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

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

   ```
   nano docker-compose.yml
   ```
**注記**  
 AWSが提供する Compose ファイルの最新バージョンを [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/) からダウンロードして使用することもできます。

1. Compose ファイルに以下の内容を追加します。ファイルは次の例のようになります。*コンテナ名:バージョン*を Docker イメージの名前に置き換えます。

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       build:
         context: .
       container_name: aws-iot-greengrass
       image: your-container-name:version
       volumes:
         - /path/to/greengrass-v2-config:/tmp/config/:ro
         - /path/to/greengrass-v2-certs:/tmp/certs:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   この例の Compose ファイルでは、以下のパラメータはオプションです。
   + `ports` - 8883 コンテナポートをホストマシンに公開します。は MQTT トラフィックにポート 8883 AWS IoT Greengrass を使用するため、このパラメータは MQTT 経由で接続および通信する場合に必要です。
   + `env_file`— Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。このパラメータは、環境変数を設定するための [[environment file]](#create-env-file-manual-provisioning) (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、[[environment]](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) (環境) パラメータを使用して、Compose ファイルで環境変数を直接設定できます。
**注記**  <a name="docker-compose-cap-drop"></a>
セキュリティを強化して Docker コンテナを実行するには、Compose ファイルで `cap_drop` および `cap_add` を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[[Runtime privilege and Linux capabilities]](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) (ランタイム特権と Linux 機能)」を参照してください。

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

   ```
   docker-compose -f docker-compose.yml up
   ```

------

## 次の手順
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Core ソフトウェアが Docker コンテナで実行されています。次のコマンドを実行して、現在実行中のコンテナのコンテナ ID を取得します。

```
docker ps
```

その後、次のコマンドを実行してコンテナにアクセスし、コンテナ内で実行されている AWS IoT Greengrass Core ソフトウェアを調べることができます。

```
docker exec -it container-id /bin/bash
```

単純なコンポーネントの作成については、「[チュートリアル: AWS IoT Greengrass V2 の開始方法](getting-started.md)」の「[ステップ 4: デバイス上でコンポーネントを開発およびテストする](create-first-component.md)」を参照してください。

**注記**  <a name="run-greengrass-commands-in-docker-note"></a>
`docker exec` を使用して Docker コンテナ内でコマンドを実行すると、これらのコマンドは Docker ログに記録されません。Docker ログにコマンドを記録するには、Docker コンテナに対話型シェルをアタッチします。詳細については、「[インタラクティブシェルを Docker コンテナにアタッチする](docker-troubleshooting.md#debugging-docker-attach-shell)」を参照してください。

 AWS IoT Greengrass Core ログファイルは と呼ばれ`greengrass.log`、 にあります`/greengrass/v2/logs`。コンポーネントログファイルも同じディレクトリにあります。Greengrass ログをホストの一時ディレクトリにコピーするには、次のコマンドを実行します。

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

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

<a name="greengrass-docker-stop"></a>実行中の Docker AWS IoT Greengrass コンテナを停止するには、 `docker stop`または を実行します`docker-compose -f docker-compose.yml stop`。このアクションは、`SIGTERM` を Greengrass プロセスに送信し、コンテナで開始されたすべての関連プロセスをシャットダウンします。Docker コンテナは、プロセス PID 1 として `docker-init` の実行可能ファイルで初期化されます。これは、残っているゾンビプロセスを削除するのに役立ちます。詳細については、Docker ドキュメントの「[Specify an init process](https://docs.docker.com/engine/reference/run/#specify-an-init-process)」を参照してください。

<a name="see-docker-troubleshooting"></a>Docker コンテナで AWS IoT Greengrass を実行する際の問題のトラブルシューティングについては、「[Docker コンテナ AWS IoT Greengrass でのトラブルシューティング](docker-troubleshooting.md)」を参照してください。