翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
このチュートリアルでは、手動でプロビジョニングされた AWS リソースを使用して Docker コンテナに AWS IoT Greengrass Core ソフトウェアをインストールして実行する方法を示します。
トピック
前提条件
このチュートリアルを完了するには、以下が必要です。
-
AWS アカウント。アカウントをお持ちでない場合は、「のセットアップ AWS アカウント」を参照してください。
-
Docker AWS IoT Greengrass イメージ。Dockerfile AWS IoT Greengrass からイメージを構築できます。
-
Docker コンテナを実行するホストコンピュータは、以下の要件を満たしている必要があります。
-
インターネットに接続された Linux ベースのオペレーティングシステム。
-
Docker Engine
バージョン 18.09 以降。 -
(オプション) Docker Compose
バージョン 1.22 以降。Docker Compose は、Docker Compose CLI を使用して Docker イメージを実行する場合のみ必要です。
-
AWS IoT エンドポイントを取得する
の AWS IoT エンドポイントを取得し AWS アカウント、後で使用するために保存します。デバイスはこれらのエンドポイントを使用して AWS IoTに接続します。以下の操作を実行します。
-
AWS IoT のデータエンドポイントを取得します AWS アカウント。
aws iot describe-endpoint --endpoint-type iot:Data-ATS
要求が正常に処理された場合、レスポンスは次の例のようになります。
{ "endpointAddress": "
device-data-prefix
-ats.iot.us-west-2.amazonaws.com" } -
の 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 モノを作成するには
-
デバイスの 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" }
-
-
(オプション) AWS IoT モノを新規または既存のモノグループに追加します。モノグループを使用して Greengrass コアデバイスのフリートを管理します。ソフトウェアコンポーネントをデバイスにデプロイするとき、個々のデバイスまたはデバイスのグループを対象にできます。アクティブな Greengrass デプロイを持つモノグループにデバイスを追加して、そのモノグループのソフトウェアコンポーネントをデバイスにデプロイできます。以下の操作を実行します。
-
(オプション) 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" }
-
-
AWS IoT モノをモノのグループに追加します。
-
MyGreengrassCore
を AWS IoT モノの名前に置き換えます。 -
MyGreengrassCoreGroup
をモノグループの名前に置き換えます。
aws iot add-thing-to-thing-group --thing-name
MyGreengrassCore
--thing-group-nameMyGreengrassCoreGroup
要求が正常に処理された場合、コマンドは出力されません。
-
-
モノの証明書を作成する
デバイスを AWS IoT モノとして登録すると、そのデバイスはデジタル証明書を使用して認証できます AWS。この証明書により、デバイスは AWS IoT および と通信できます AWS IoT Greengrass。
このセクションでは、デバイスが AWSに接続する際に使用できる証明書を作成してダウンロードします。
モノの証明書を作成するには
-
AWS IoT モノの証明書をダウンロードするフォルダを作成します。
mkdir greengrass-v2-certs
-
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 アクセス許可を定義します。
モノの証明書を設定するには
-
証明書を AWS IoT モノにアタッチします。
-
MyGreengrassCore
を AWS IoT モノの名前に置き換えます。 -
証明書 Amazon リソースネーム (ARN) を、前のステップで作成した証明書の ARN に置き換えます。
aws iot attach-thing-principal --thing-name
MyGreengrassCore
--principalarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
要求が正常に処理された場合、コマンドは出力されません。
-
-
Greengrass コアデバイスの AWS IoT アクセス許可を定義する AWS IoT ポリシーを作成してアタッチします。次のポリシーは、すべての MQTT トピックと Greengrass 操作へのアクセスを許可するため、デバイスがカスタムアプリケーションや新しい Greengrass 操作を必要とする今後の変更でも動作するようになります。ユースケースに基づいてこのポリシーを制限できます。詳細については、「AWS IoT Greengrass V2 コアデバイスの最小 AWS IoT ポリシー」を参照してください。
Greengrass コアデバイスを以前にセットアップしたことがある場合は、新しいポリシーを作成する代わりに、その AWS IoT ポリシーをアタッチできます。
以下の操作を実行します。
-
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": [ "*" ] } ] }
-
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" }
-
-
AWS IoT モノの証明書に AWS IoT ポリシーをアタッチします。
-
GreengrassV2IoTThingPolicy
をアタッチするポリシーの名前に置き換えます。 -
ターゲット ARN を AWS IoT モノの証明書の ARN に置き換えます。
aws iot attach-policy --policy-name
GreengrassV2IoTThingPolicy
--targetarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
要求が正常に処理された場合、コマンドは出力されません。
-
-
トークン交換ロールを作成する
Greengrass コアデバイスは、トークン交換ロールと呼ばれる IAM サービスロールを使用して、 AWS サービスへの呼び出しを承認します。デバイスは認証情報 AWS IoT プロバイダーを使用して、このロールの一時的な AWS 認証情報を取得します。これにより、デバイスは Amazon CloudWatch Logs とやり取りし AWS IoT、ログを送信し、Amazon S3 からカスタムコンポーネントアーティファクトをダウンロードできるようになります。詳細については、「コアデバイスが AWS サービスとやり取りできるように承認する」を参照してください。
AWS IoT ロールエイリアスを使用して、Greengrass コアデバイスのトークン交換ロールを設定します。ロールエイリアスは、デバイスのトークン交換ロールを変更できるようにしますが、デバイス設定は同じ内容に保たれます。詳細については、「AWS IoT Core デベロッパーガイド」の「AWS サービスへの直接呼び出しを認証する」を参照してください。
このセクションでは、トークン交換 IAM ロールと AWS IoT 、ロールを指す ロールエイリアスを作成します。Greengrass コアデバイスを既に設定している場合、新しく作成せず、トークン交換ロールとロールエイリアスを使用できます。次に、デバイスの AWS IoT モノを設定してそのロールとエイリアスを使用します。
トークン交換 IAM ロールを作成するには
-
デバイスがトークン交換ロールとして使用できる IAM ロールを作成します。以下の操作を実行します。
-
トークン交換ロールが必要とする、信頼できるポリシードキュメントが含まれるファイルを作成します。
例えば、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" } ] }
-
信頼ポリシードキュメントでトークン交換ロールを作成します。
-
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" } ] } }
-
-
トークン交換ロールが必要なアクセスポリシードキュメントを含むファイルを作成します。
例えば、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 バケットをまだ持っていない場合、バケットを作成した後でこれらのアクセス許可を追加できます。
-
ポリシードキュメントから 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" } }
-
-
IAM ポリシーをトークン交換ロールにアタッチします。
-
GreengrassV2TokenExchangeRole
を、IAM ロールの名前に置き換えます。 -
ポリシー ARN を前のステップで作成した IAM ポリシーの ARN に置き換えます。
aws iam attach-role-policy --role-name
GreengrassV2TokenExchangeRole
--policy-arnarn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
要求が正常に処理された場合、コマンドは出力されません。
-
-
-
トークン交換 AWS IoT ロールを指す ロールエイリアスを作成します。
-
GreengrassCoreTokenExchangeRoleAlias
を作成するロールエイリアスの名前に置き換えます。 -
ロール ARN を前のステップで作成した IAM ロールの ARN に置き換えます。
aws iot create-role-alias --role-alias
GreengrassCoreTokenExchangeRoleAlias
--role-arnarn: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 サービスにロールを渡すアクセス許可をユーザーに付与する」を参照してください。
-
-
Greengrass コアデバイスがロールエイリアスを使用してトークン交換ロールを引き受けることを許可する AWS IoT ポリシーを作成してアタッチします。Greengrass コアデバイスを以前にセットアップしたことがある場合は、新しいロールエイリアスポリシーを作成する代わりに、そのロールエイリアス AWS IoT ポリシーをアタッチできます。以下の操作を実行します。
-
(オプション) ロールエイリアスに必要な 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
" } ] } -
-
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" }
-
-
AWS IoT モノの証明書に AWS IoT ポリシーをアタッチします。
-
GreengrassCoreTokenExchangeRoleAliasPolicy
をロールエイリアス AWS IoT ポリシーの名前に置き換えます。 -
ターゲット ARN を AWS IoT モノの証明書の ARN に置き換えます。
aws iot attach-policy --policy-name
GreengrassCoreTokenExchangeRoleAliasPolicy
--targetarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
要求が正常に処理された場合、コマンドは出力されません。
-
-
デバイスに証明書をダウンロードする
以前に、デバイスの証明書を開発用コンピュータにダウンロードしました。このセクションでは、Amazon ルート認証局 (CA) の証明書もダウンロードします。次に、開発用コンピュータとは異なるコンピュータで Docker で AWS IoT Greengrass Core ソフトウェアを実行する場合は、証明書をそのホストコンピュータにコピーします。 AWS IoT Greengrass Core ソフトウェアは、これらの証明書を使用して AWS IoT クラウドサービスに接続します。
証明書をデバイスにダウンロードするには
-
開発用コンピュータで、Amazon ルート認証局 (CA) 証明書をダウンロードします。 AWS IoT 証明書は、デフォルトで Amazon のルート CA 証明書に関連付けられています。
sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
-
開発用コンピュータとは異なるデバイスで Docker で AWS IoT Greengrass Core ソフトウェアを実行する場合は、証明書をホストコンピュータにコピーします。開発用コンピュータとホストコンピュータで SSH と SCP が有効になっている場合、開発用コンピュータの
scp
コマンドを実行して、証明書を転送できます。device-ip-address
をホストコンピュータの IP アドレスに置き換えます。scp -r greengrass-v2-certs/
device-ip-address
:~
設定ファイルを作成する
-
ホストコンピュータで、設定ファイルを配置するフォルダを作成します。
mkdir ./greengrass-v2-config
-
テキストエディタを使用して、
./greengrass-v2-config
フォルダにconfig.yaml
という名前の設定ファイルを作成します。例えば、次のコマンドを実行し、GNU nano を使用して
config.yaml
を作成できます。nano ./greengrass-v2-config/config.yaml
-
次の YAML コンテンツをファイルにコピーします。この部分設定ファイルは、システムパラメータと Greengrass nucleus パラメータを指定します。
--- system: certificateFilePath: "
/tmp/certs
/device.pem.crt" privateKeyPath: "/tmp/certs
/private.pem.key" rootCaPath: "/tmp/certs
/AmazonRootCA1.pem" rootpath: "
" thingName: "/greengrass/v2
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 ルートフォルダ。/greengrass/v2
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
。トークン交換ロールエイリアス。 -
デバイスデータプレフィックス
。 AWS IoT データエンドポイントのプレフィックス。 -
device-credentials-prefix
。 AWS IoT 認証情報エンドポイントのプレフィックス。
-
環境ファイルを作成する
このチュートリアルでは、環境ファイルを使用して、Docker コンテナ内の AWS IoT Greengrass Core ソフトウェアインストーラに渡される環境変数を設定します。また、docker run
コマンドで -e
または --env
引数docker-compose.yml
ファイルの environment
ブロック
-
テキストエディタを使用して、
.env
という名前の環境ファイルを作成します。例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用して現在のディレクトリに
.env
を作成できます。nano .env
-
次の内容をファイルにコピーします。
GGC_ROOT_PATH=
AWS_REGION=/greengrass/v2
region
PROVISION=false COMPONENT_DEFAULT_USER=ggc_user:ggc_group INIT_CONFIG=/tmp/config/
config.yaml次に、以下の値を置き換えます。
-
。 AWS IoT Greengrass Core ソフトウェアのインストールに使用するルートフォルダへのパス。/greengrass/v2
-
リージョン
。 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 run --rm --init -it --name
docker-image
\ -vpath/to/
greengrass-v2-config:/tmp/config/
:ro \ -vpath/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 機能)」を参照してください。 -
次のステップ
AWS IoT Greengrass Core ソフトウェアが Docker コンテナで実行されています。次のコマンドを実行して、現在実行中のコンテナのコンテナ 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 ログをホストの一時ディレクトリにコピーするには、次のコマンドを実行します。
/logs/greengrass/v2
docker cp
container-id
:/greengrass/v2/logs/tmp/logs
コンテナの終了後、または削除後もログを保持する場合は、Greengrass ディレクトリ全体をマウントするのではなく、
ディレクトリのみをホストの一時ログディレクトリにバインドマウントすることをお勧めします。詳細については、「Docker コンテナの外部で Greengrass ログを永続化する」を参照してください。
/logs/greengrass/v2
実行中の 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
Docker コンテナで AWS IoT Greengrass を実行する際の問題のトラブルシューティングについては、「Docker コンテナ AWS IoT Greengrass でのトラブルシューティング」を参照してください。