選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

AWS IoT Greengrass 在具有手動資源佈建的 Docker 容器中執行

焦點模式
AWS IoT Greengrass 在具有手動資源佈建的 Docker 容器中執行 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本教學課程說明如何使用手動佈建 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。請執行下列操作:

  1. 取得 AWS IoT 的資料端點 AWS 帳戶。

    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 物件新增至物件群組。

      • MyGreengrassCore 取代為您 AWS IoT 物件的名稱。

      • 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 Resource Name (ARN),以便稍後用於設定憑證。

設定物件憑證

將物件憑證連接至您先前建立的 AWS IoT 物件,並將政策 AWS IoT 新增至憑證,以定義核心裝置的 AWS IoT 許可。

設定物件的憑證
  1. 將憑證連接到 AWS IoT 物件。

    • MyGreengrassCore 取代為您物件的名稱 AWS IoT 。

    • 將憑證 Amazon Resource Name (ARN) 取代為您在上一個步驟中建立之憑證的 ARN。

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

    如果請求成功,命令不會有任何輸出。

  2. 建立並連接 AWS IoT 政策,以定義 Greengrass 核心裝置的 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. 建立並連接 AWS IoT 政策,讓您的 Greengrass 核心裝置使用角色別名來擔任字符交換角色。如果您之前已設定 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 政策文件建立政策。

      • 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" }
    3. 將 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

      如果請求成功,命令不會有任何輸出。

下載憑證至裝置

稍早,您已將裝置的憑證下載到開發電腦。在本節中,您可以下載 Amazon 根憑證授權機構 (CA) 憑證。然後,如果您計劃在開發電腦以外的電腦上在 Docker 中執行 AWS IoT Greengrass 核心軟體,請將憑證複製到該主機電腦。Core AWS IoT Greengrass 軟體使用這些憑證來連線至 AWS IoT 雲端服務。

將憑證下載至裝置
  1. 在您的開發電腦上,下載 Amazon 根憑證授權機構 (CA) certificate. AWS IoT certificates 依預設會與 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
    sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
  2. 如果您計劃在開發電腦以外的其他裝置上在 Docker 中執行 AWS IoT Greengrass 核心軟體,請將憑證複製到主機電腦。如果在開發電腦和主機電腦上啟用 SSH 和 SCP,您可以使用開發電腦上的 scp命令來傳輸憑證。將 device-ip-address 取代為主機電腦的 IP 地址。

    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 核參數。

    --- 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-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 容器中設定環境變數,也可以在 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 區域 的 。您必須為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 映像。

    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 執行

    • --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 功能

Docker Compose
  1. 使用文字編輯器來建立名為 的 Docker Compose 檔案docker-compose.yml

    例如,在以 Linux 為基礎的系統上,您可以執行下列命令,使用 GNU nano docker-compose.yml 在目前的目錄中建立 。

    nano docker-compose.yml
    注意

    您也可以從 GitHub 下載並使用 AWS最新版本的 Compose 檔案。

  2. 將下列內容新增至 Compose 檔案。您的檔案看起來應該如下列範例:以 your-container-name:版本

    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"

    此範例中的下列參數 撰寫檔案是選用的:

    • ports- 發佈主機機器的 8883 容器連接埠。如果您想要透過 MQTT 連接和通訊,則此參數為必要,因為 AWS IoT Greengrass 使用連接埠 8883 處理 MQTT 流量。

    • env_file- 指定環境檔案,以設定將傳遞至 Docker 容器內 AWS IoT Greengrass Core 軟體安裝程式的環境變數。只有在您建立環境檔案以設定環境變數時,才需要此參數。如果您未建立環境檔案,您可以使用環境參數直接在 Compose 檔案中設定變數。

    注意

    若要以更高的安全性執行 Docker 容器,您可以在 cap_add Compose 檔案中使用 cap_drop和 ,選擇性地為您的容器啟用 Linux 功能。如需詳細資訊,請參閱 Docker 文件中的執行期權限和 Linux 功能

  3. 執行下列命令來啟動容器。

    docker-compose -f docker-compose.yml up
  • 本教學課程說明如何啟動您在 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 執行

    • --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/v2/logs。元件日誌檔案也位於相同的目錄中。若要將 Greengrass 日誌複製到主機上的暫存目錄,請執行下列命令:

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

如果您想要在容器結束或移除後保留日誌,建議您僅將/greengrass/v2/logs目錄繫結至主機上的暫存日誌目錄,而不是掛載整個 Greengrass 目錄。如需詳細資訊,請參閱Docker 容器外的持久性 Greengrass 日誌

若要停止執行中的 AWS IoT Greengrass Docker 容器,請執行 docker stopdocker-compose -f docker-compose.yml stop。此動作會SIGTERM傳送至 Greengrass 程序,並關閉在容器中啟動的所有相關程序。Docker 容器會使用docker-init可執行檔初始化為程序 PID 1,這有助於移除任何剩餘的殭屍程序。如需詳細資訊,請參閱 Docker 文件中的指定初始化程序

如需有關 AWS IoT Greengrass 在 Docker 容器中執行 之 的故障診斷問題的資訊,請參閱 Docker 容器中 AWS IoT Greengrass 的故障診斷

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。