本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本教學課程說明如何使用手動佈建 AWS 的資源,在 Docker 容器中安裝和執行 AWS IoT Greengrass 核心軟體。
主題
先決條件
為了完成本教學,您需要以下項目:
-
AWS 帳戶:如果您沒有帳戶,請參閱 設定 AWS 帳戶。
-
Docker AWS IoT Greengrass 映像。您可以從 Dockerfile AWS IoT Greengrass 建置映像。
-
您執行 Docker 容器的主機電腦必須符合下列要求:
-
具有網際網路連線的 Linux 作業系統。
-
Docker Engine
18.09 版或更新版本。 -
(選用) Docker Compose
1.22 版或更新版本。只有在您想要使用 Docker Compose CLI 執行 Docker 映像時,才需要 Docker Compose。
-
擷取 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 Resource Name (ARN),以便稍後用於設定憑證。
設定物件憑證
將物件憑證連接至您先前建立的 AWS IoT 物件,並將政策 AWS IoT 新增至憑證,以定義核心裝置的 AWS IoT 許可。
設定物件的憑證
-
將憑證連接到 AWS IoT 物件。
-
將
MyGreengrassCore
取代為您物件的名稱 AWS IoT 。 -
將憑證 Amazon Resource Name (ARN) 取代為您在上一個步驟中建立之憑證的 ARN。
aws iot attach-thing-principal --thing-name
MyGreengrassCore
--principalarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
如果請求成功,命令不會有任何輸出。
-
-
建立並連接 AWS IoT 政策,以定義 Greengrass 核心裝置的 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 登入資料,這可讓裝置與 互動 AWS IoT、將日誌傳送至 Amazon CloudWatch Logs,以及從 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 服務的許可。
-
-
建立並連接 AWS IoT 政策,讓您的 Greengrass 核心裝置使用角色別名來擔任字符交換角色。如果您之前已設定 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 軟體使用這些憑證來連線至 AWS IoT 雲端服務。
將憑證下載至裝置
-
在您的開發電腦上,下載 Amazon 根憑證授權機構 (CA) certificate. AWS IoT certificates 依預設會與 Amazon 的根 CA 憑證相關聯。
sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
-
如果您計劃在開發電腦以外的其他裝置上在 Docker 中執行 AWS IoT Greengrass 核心軟體,請將憑證複製到主機電腦。如果在開發電腦和主機電腦上啟用 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 核參數。
--- 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-version
。要安裝 AWS IoT Greengrass 的核心軟體版本。此值必須符合您下載的 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-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 區域 的 。您必須為awsRegion
組態檔案中的組態參數指定相同的值。 -
/tmp/config/
。啟動 Docker 容器時,您掛載組態檔案的資料夾。
注意
您可以將
DEPLOY_DEV_TOOLS
環境變數設定為true
部署 Greengrass CLI 元件,這可讓您在 Docker 容器內開發自訂元件。我們建議您僅在開發環境中使用此元件,而不是在生產環境中。此元件可讓您存取生產環境中通常不需要的資訊和操作。僅將此元件部署到您需要的核心裝置,以遵循最低權限原則。 -
在容器中執行 AWS IoT Greengrass 核心軟體
本教學課程說明如何啟動您在 Docker 容器中建置的 Docker 映像。您可以使用 Docker CLI 或 Docker Compose CLI 在 Docker 容器中執行 AWS IoT Greengrass 核心軟體映像。
-
本教學課程說明如何啟動您在 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 執行
: -
--rm
。 容器結束時,請將其清除。 -
--init
。 在容器中使用初始化程序。 注意
當您停止 Docker 容器時,需要
--init
引數來關閉 AWS IoT Greengrass 核心軟體。 -
-it
。 (選用) 在前景中以互動式程序執行 Docker 容器。您可以使用 -d
引數取代此參數,以分離模式執行 Docker 容器。如需詳細資訊,請參閱 Docker 文件中的分離與前景。 -
--name
。 執行名為 的容器 aws-iot-greengrass
-
-v
。 將磁碟區掛載到 Docker 容器中,讓組態檔案和憑證檔案可供容器內 AWS IoT Greengrass 執行。 -
--env-file
。 (選用) 指定環境檔案,以設定將傳遞至 Docker 容器內 AWS IoT Greengrass 核心軟體安裝程式的環境變數。只有在您建立環境檔案以設定環境變數時,才需要此引數。如果您未建立環境檔案,您可以使用 --env
引數直接在 Docker 執行命令中設定環境變數。 -
-p
。 (選用) 將 8883 容器連接埠發佈至主機機器。如果您想要透過 MQTT 連接和通訊,則此引數為必要,因為 AWS IoT Greengrass 使用連接埠 8883 處理 MQTT 流量。若要開啟其他連接埠,請使用其他引 -p
數。
注意
若要以更高的安全性執行 Docker 容器,您可以使用
--cap-drop
和--cap-add
引數來選擇性地為您的容器啟用 Linux 功能。如需詳細資訊,請參閱 Docker 文件中的執行期權限和 Linux 功能。 -
後續步驟
AWS IoT Greengrass 核心軟體現在正在 Docker 容器中執行。執行下列命令,以擷取目前執行中容器的容器 ID。
docker ps
然後,您可以執行下列命令來存取容器,並探索在容器內執行 AWS IoT Greengrass 的核心軟體。
docker exec -it
container-id
/bin/bash
如需建立簡單元件的詳細資訊,請參閱 步驟 4:在您的裝置上開發和測試元件中的 教學課程:入門 AWS IoT Greengrass V2
注意
當您使用 在 Docker 容器內docker exec
執行命令時,這些命令不會記錄在 Docker 日誌中。若要在 Docker 日誌中記錄您的命令,請將互動式 shell 連接到 Docker 容器。如需詳細資訊,請參閱將互動式 shell 連接至 Docker 容器。
AWS IoT Greengrass 核心日誌檔案稱為 greengrass.log
,位於 中
。元件日誌檔案也位於相同的目錄中。若要將 Greengrass 日誌複製到主機上的暫存目錄,請執行下列命令:
/logs/greengrass/v2
docker cp
container-id
:/greengrass/v2/logs/tmp/logs
如果您想要在容器結束或移除後保留日誌,建議您僅將
目錄繫結至主機上的暫存日誌目錄,而不是掛載整個 Greengrass 目錄。如需詳細資訊,請參閱Docker 容器外的持久性 Greengrass 日誌。
/logs/greengrass/v2
若要停止執行中的 AWS IoT Greengrass Docker 容器,請執行 docker stop
或 docker-compose -f docker-compose.yml stop
。此動作會SIGTERM
傳送至 Greengrass 程序,並關閉在容器中啟動的所有相關程序。Docker 容器會使用docker-init
可執行檔初始化為程序 PID 1,這有助於移除任何剩餘的殭屍程序。如需詳細資訊,請參閱 Docker 文件中的指定初始化程序
如需有關 AWS IoT Greengrass 在 Docker 容器中執行 之 的故障診斷問題的資訊,請參閱 Docker 容器中 AWS IoT Greengrass 的故障診斷。