手動リソースプロビジョニングを使用して Docker コンテナで AWS IoT Greengrass を実行する - AWS IoT Greengrass

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

手動リソースプロビジョニングを使用して Docker コンテナで AWS IoT Greengrass を実行する

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

前提条件

このチュートリアルを完了するには、以下が必要です。

  • AWS アカウント。アカウントをお持ちでない場合は、「のセットアップ AWS アカウント」を参照してください。

  • AWS IoT Greengrass Docker イメージ。AWS IoT Greengrass Dockerfile からイメージを構築できます。

  • Docker コンテナを実行するホストコンピュータは、以下の要件を満たしている必要があります。

    • インターネットに接続された Linux ベースのオペレーティングシステム。

    • Docker Engine バージョン 18.09 以降。

    • (オプション) Docker Compose バージョン 1.22 以降。Docker Compose は、Docker Compose CLI を使用して Docker イメージを実行する場合のみ必要です。

AWS IoT エンドポイントの取得

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

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

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

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

    { "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com" }
  2. AWS IoT の AWS アカウント 認証情報エンドポイントを取得します。

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

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

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

AWS IoT のモノを作成する

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

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

AWS IoT モノを作成するには
  1. デバイスの AWS IoT モノを作成します。開発用コンピュータに次のコマンドを実行します。

    • を使用するモノの名前MyGreengrassCoreに置き換えます。この名前は Greengrass コアデバイスの名前でもあります。

      注記

      モノの名前にコロン (:) 記号を含むことができません。

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

    1. (オプション) AWS IoT モノグループを作成します。

      • を、作成するモノのグループの名前MyGreengrassCoreGroupに置き換えます。

        注記

        モノグループ名にコロン (:) 記号を含めることはできません。

      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" }
    2. AWS IoT モノをモノグループに追加します。

      • をAWS IoTモノの名前MyGreengrassCoreに置き換えます。

      • をモノのグループの名前MyGreengrassCoreGroupに置き換えます。

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

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

モノの証明書を作成する

デバイスを AWS IoT モノとして登録するとき、そのデバイスはデジタル証明書を使用して AWS で認証できます。この証明書は、デバイスが AWS IoT と AWS IoT Greengrass と通信できるようにします。

このセクションでは、デバイスが AWS に接続する際に使用できる証明書を作成してダウンロードします。

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

    mkdir greengrass-v2-certs
  2. 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) を保存します。

モノの証明書を設定する

モノの証明書を以前に作成した AWS IoT モノにアタッチし、AWS IoT ポリシーを証明書に追加してコアデバイスの AWS IoT 許可を定義します。

モノの証明書を設定するには
  1. 証明書を AWS IoT モノにアタッチします。

    • をAWS IoTモノの名前MyGreengrassCoreに置き換えます。

    • 証明書 Amazon リソースネーム (ARN) を、前のステップで作成した証明書の ARN に置き換えます。

    aws iot attach-thing-principal --thing-name MyGreengrassCore --principal arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

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

  2. Greengrass コアデバイスの AWS IoT 許可を定義する AWS IoT ポリシーを作成してアタッチします。次のポリシーは、すべての MQTT トピックと Greengrass 操作へのアクセスを許可するため、デバイスがカスタムアプリケーションや新しい Greengrass 操作を必要とする今後の変更でも動作するようになります。ユースケースに基づいてこのポリシーを制限できます。詳細については、「AWS IoT Greengrass V2 コアデバイス向けの最低限の AWS IoT ポリシー」を参照してください。

    Greengrass コアデバイスを以前にセットアップしたことがある場合、新しく作成せず、その AWS IoT ポリシーをアタッチできます。

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

    1. Greengrass コアデバイスが必要な AWS IoT ポリシードキュメントを含むファイルを作成します。

      例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      nano greengrass-v2-iot-policy.json

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect", "greengrass:*" ], "Resource": [ "*" ] } ] }
    2. ポリシードキュメントから AWS IoT ポリシーを作成します。

      • GreengrassV2IoTThingPolicy を作成するポリシーの名前に置き換えます。

      aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json

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

      { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{ \\"Version\\": \\"2012-10-17\\", \\"Statement\\": [ { \\"Effect\\": \\"Allow\\", \\"Action\\": [ \\"iot:Publish\\", \\"iot:Subscribe\\", \\"iot:Receive\\", \\"iot:Connect\\", \\"greengrass:*\\" ], \\"Resource\\": [ \\"*\\" ] } ] }", "policyVersionId": "1" }
    3. AWS IoT ポリシーを AWS IoT モノの証明書にアタッチします。

      • GreengrassV2IoTThingPolicy をアタッチするポリシーの名前に置き換えます。

      • ターゲット ARN を AWS IoT モノの証明書の ARN に置き換えます。

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

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

トークン交換ロールを作成する

Greengrass コアデバイスは、トークン交換ロールという IAM サービスロールを使用して、AWS サービスへの通話を承認します。デバイスはAWS IoT認証情報プロバイダーを使用して、このロールの一時的なAWS認証情報を取得します。これにより、デバイスは とやり取りしAWS IoT、Amazon CloudWatch Logs にログを送信し、Amazon S3 からカスタムコンポーネントアーティファクトをダウンロードできるようになります。詳細については、「コアデバイスが AWS サービスとやり取りできるように認証する」を参照してください。

AWS IoT のロールエイリアスを使用して、Greengrass コアデバイスのトークン交換ロールを設定します。ロールエイリアスは、デバイスのトークン交換ロールを変更できるようにしますが、デバイス設定は同じ内容に保たれます。詳細については、「AWS IoT Core デベロッパーガイド」の「AWS サービスへの直接呼び出しを認証する」を参照してください。

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

トークン交換 IAM ロールを作成するには
  1. デバイスがトークン交換ロールとして使用できる IAM ロールを作成します。以下の操作を実行します。

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

      例えば、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" } ] }
    2. 信頼ポリシードキュメントでトークン交換ロールを作成します。

      • 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" } ] } }
    3. トークン交換ロールが必要なアクセスポリシードキュメントを含むファイルを作成します。

      例えば、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 バケットへのアクセスを許可する」を参照してください。

      コンポーネントアーティファクトに S3 バケットをまだ持っていない場合、バケットを作成した後でこれらのアクセス許可を追加できます。

    4. ポリシードキュメントから 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" } }
    5. IAM ポリシーをトークン交換ロールにアタッチします。

      • GreengrassV2TokenExchangeRole を IAM ロールの名前に置き換えます。

      • ポリシー ARN を前のステップで作成した IAM ポリシーの ARN に置き換えます。

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

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

  2. トークン交換ロールを指す 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 サービスにロールをわたす許可をユーザーに付与する」を参照してください。

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

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

      例えば、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" } ] }
    2. ポリシードキュメントから AWS IoT ポリシーを作成します。

      • を作成するAWS IoTポリシーの名前GreengrassCoreTokenExchangeRoleAliasPolicyに置き換えます。

      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" }
    3. AWS IoT ポリシーを AWS IoT モノの証明書にアタッチします。

      • をロールエイリアスAWS IoTポリシーの名前GreengrassCoreTokenExchangeRoleAliasPolicyに置き換えます。

      • ターゲット ARN を AWS IoT モノの証明書の ARN に置き換えます。

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

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

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

以前に、デバイスの証明書を開発用コンピュータにダウンロードしました。このセクションでは、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
  2. 開発用コンピュータとは別のデバイスで Docker の AWS IoT Greengrass Core ソフトウェアを実行する場合は、証明書をホストコンピュータにコピーします。開発用コンピュータとホストコンピュータで SSH と SCP が有効になっている場合、開発用コンピュータの scp コマンドを実行して、証明書を転送できます。をホストコンピュータの IP アドレスdevice-ip-addressに置き換えます。

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

設定ファイルを作成する

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

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

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

    nano ./greengrass-v2-config/config.yaml
  3. 次の 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 リージョン 。また、環境ファイルAWS_REGION 環境変数に同じ値を指定する必要があります。

    • GreengrassCoreTokenExchangeRoleAlias。トークン交換ロールエイリアス。

    • device-data-prefix。AWS IoT データエンドポイントのプレフィックス。

    • device-credentials-prefix。AWS IoT 認証情報エンドポイントのプレフィックス。

環境ファイルを作成する

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

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

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

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

    GGC_ROOT_PATH=/greengrass/v2 AWS_REGION=region PROVISION=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] (設定ファイル) の awsRegion 設定パラメータに同じ値を指定する必要があります。

    • /tmp/config/。Docker コンテナの起動時に設定ファイルをマウントするフォルダ。

    注記

    DEPLOY_DEV_TOOLS 環境変数を true に設定して、[Greengrass CLI component] (Greengrass CLI コンポーネント) をデプロイできます。これにより、Docker コンテナ内でカスタムコンポーネントを開発できます。このコンポーネントは、本番環境ではなく、開発環境でのみで使用することをお勧めします。このコンポーネントは、通常、本番環境では必要とされない情報や操作へのアクセスを提供します。このコンポーネントを必要なコアデバイスにのみデプロイして、最小特権の原則に従います。

コンテナで AWS IoT Greengrass Core ソフトウェアを実行する

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

Docker
  • このチュートリアルでは、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 に次の引数を使用します。

    • --rm: コンテナの終了時にクリーンアップを実行します。

    • --init: コンテナで init プロセスを使用します。

      注記

      Docker コンテナを停止するときに AWS IoT Greengrass Core ソフトウェアをシャットダウンするには、--init 引数が必要です。

    • -it: (オプション) Docker コンテナを対話型プロセスとしてフォアグラウンドで実行します。これを -d 引数に置き換えて、代わりに Docker コンテナをデタッチモードで実行できます。詳細については、「Docker ドキュメント」の「デタッチ vs フォアグラウンド」を参照してください。

    • --name: aws-iot-greengrass という名前のコンテナを実行します。

    • -v: ボリュームを Docker コンテナにマウントして、コンテナ内で実行されている AWS IoT Greengrass で設定ファイルと証明書ファイルを利用可能にします。

    • --env-file: (オプション) Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。この引数は、環境変数を設定するための [environment file] (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、--env 引数を使用して、「Docker 実行コマンド」で環境変数を直接設定できます。

    • -p: (オプション) 8883 コンテナポートをホストマシンに公開します。AWS IoT Greengrass は MQTT トラフィックにポート 8883 を使用するため、MQTT を介して接続および通信する場合は、この引数が必要です。他のポートを開くには、追加の -p 引数を使用します。

    注記

    セキュリティを強化して Docker コンテナを実行するには、--cap-drop 引数および --cap-add 引数を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[Runtime privilege and Linux capabilities] (ランタイム特権と Linux 機能)」を参照してください。

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

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

    nano docker-compose.yml
    注記

    から AWSが提供する Compose ファイルの最新バージョンをダウンロードして使用することもできますGitHub

  2. Compose ファイルに以下の内容を追加します。ファイルは次の例のようになります。your-container-name:version を 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"

    この例の Compose ファイルでは、以下のパラメータはオプションです。

    • ports - 8883 コンテナポートをホストマシンに公開します。AWS IoT Greengrass は MQTT トラフィックにポート 8883 を使用するため、MQTT を介して接続および通信する場合は、このパラメータが必要です。

    • env_file - Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定する環境ファイルを指定します。このパラメータは、環境変数を設定するための [environment file] (環境ファイル) を作成した場合にのみ必要です。環境ファイルを作成していない場合は、[environment] (環境) パラメータを使用して、Compose ファイルで環境変数を直接設定できます。

    注記

    セキュリティを強化して Docker コンテナを実行するには、Compose ファイルで cap_drop および cap_add を使用して、コンテナの Linux 機能を選択的に有効にします。詳細については、「Docker ドキュメント」の「[Runtime privilege and Linux capabilities] (ランタイム特権と Linux 機能)」を参照してください。

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

    docker-compose -f docker-compose.yml up

次のステップ

現在、Docker コンテナで AWS IoT Greengrass Core ソフトウェアが実行されています。次のコマンドを実行して、現在実行中のコンテナのコンテナ ID を取得します。

docker ps

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

docker exec -it container-id /bin/bash

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

注記

docker exec を使用して Docker コンテナ内でコマンドを実行すると、これらのコマンドは Docker ログに記録されません。Docker ログにコマンドを記録するには、Docker コンテナに対話型シェルをアタッチします。詳細については、「インタラクティブシェルを Docker コンテナにアタッチする」を参照してください。

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

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

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

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

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