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

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

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

本教學課程說明如何使用手動佈建的AWS資源在 Docker 容器中安裝和執行 AWS IoT Greengrass Core 軟體。

必要條件

為了完成本教學,您需要以下項目:

  • AWS 帳戶。如果您沒有帳戶,請參閱 設置一個 AWS 帳戶

  • AWS IoT Greengrass碼頭圖像。您可以從AWS IoT Greengrass碼頭文件構建圖像。

  • 您執行 Docker 容器的主機電腦必須符合下列需求:

    • 具有網際網路連線的 Linux 作業系統。

    • 碼頭引擎版本 18.09 或更高版本。

    • (可選)碼頭編寫版本 1.22 或更高版本。只有當您想要使用 Docker 撰寫 CLI 來執行 Docker 映像時,才需要碼頭構成。

擷取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 資源名稱 (ARN),以便稍後用來設定憑證。

配置物憑證

將物憑證附加至您先前建立的AWS IoT物件,並將AWS IoT原則新增至憑證以定義核心裝置的AWS IoT權限。

若要設定物件的憑證
  1. 將憑證附加至物AWS IoT件。

    • 替換MyGreengrassCore為您的AWS IoT事物的名稱。

    • 將憑證 Amazon 資源名稱 (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 作業的自訂應用程式和 future 變更。您可以根據您的使用案例限制此政策。如需詳細資訊,請參閱 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策略文件建立策略。

      • 以要建立的策略名稱取代綠ThingPolicy色物聯網

      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件的憑證。

      • 以要附加的原則名稱取代綠ThingPolicy色物聯網

      • 將目標 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 核心裝置的權杖交換角色。角色別名可讓您變更裝置的 Token 交換角色,但保持裝置設定不變。如需詳細資訊,請參閱AWS IoT Core開發人員指南的授權直接呼叫AWS服務

在本節中,您會建立權杖交換 IAM 角色和指向該AWS IoT角色的角色別名。如果您已經設置了 Greengrass 核心設備,則可以使用其令牌交換角色和角色別名,而不是創建新的。然後,您將設備的AWS IoT東西配置為使用該角色和別名。

若要建立權杖交換 IAM 角色
  1. 建立 IAM 角色,您的裝置可用作權杖交換角色。請執行下列操作:

    1. 建立包含 Token 交換角色所需之信任原則文件的檔案。

      例如,在 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. 使用信任原則文件建立權杖交換角色。

      • TokenExchangeRole以要建立的身分與存取權管理員角色的名稱取代 GreenGrassv2

      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 政策。

      • TokenExchangeRoleAccess以要建立的身分與存取權管理政策的名稱取代 GreenGrassv2

      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 政策附加到權杖交換角色。

      • 以 IAM 角色的名稱取代綠TokenExchangeRole色 V2

      • 將政策 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策略文件建立策略。

      • 以要建立的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件的憑證。

      • 以角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) 憑證。 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指令來傳輸憑證。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/ 證書。Docker 容器中的目錄,當您啟動容器時,您可以掛載下載的憑證。

    • /greengrass/v2。 您要用於安裝的 Greengrass 根資料夾。您可以使用GGC_ROOT環境變數來設定此值。

    • MyGreengrassCore。AWS IoT 物件的名稱。

    • 核版本。要安裝的AWS IoT Greengrass核心軟體版本。此值必須與您下載的 Docker 映像檔或 Docker 檔案的版本相符。如果您下載了帶有latest標籤的 Greengrass 碼頭圖像,請使用docker inspect image-id查看映像版本。

    • 區域。您建立AWS IoT資源的AWS 區域位置。您也必須為環境檔案中的AWS_REGION環境變數指定相同的值。

    • GreengrassCoreTokenExchangeRoleAlias。權杖交換角色別名。

    • device-data-prefix。AWS IoT資料端點的前置詞。

    • device-credentials-prefix。AWS IoT憑證端點的前置詞。

建立環境檔案

本教程使用環境文件來設置將傳遞給 Docker 容器內AWS IoT Greengrass核心軟件安裝程序的環境變量。您也可以在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 /配置/。啟動 Docker 容器時掛載配置檔案的資料夾。

    注意

    您可以將DEPLOY_DEV_TOOLS環境變數設定true為部署 Greengrass CLI 元件,這可讓您在 Docker 容器內部開發自訂元件。我們建議您僅在開發環境中使用此元件,而不是在生產環境中使用。此元件可讓您存取通常在生產環境中不需要的資訊和作業。只將此元件部署到您需要的核心裝置,以遵循最低權限原則。

在容器中執行AWS IoT Greengrass核心軟體

本教學課程說明如何啟動您在 Docker 容器中建置的 Docker 映像檔。您可以使用碼頭 CLI 或碼頭構成 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 run 命令中設置環境變量。

    • -p。 (選擇性) 將 8883 容器連接埠發佈至主機。如果您要透過 MQTT 進行連線和通訊,則需要此引數,因為 MQTT 流量AWS IoT Greengrass使用連接埠 8883。若要開啟其他連接埠,請使用其他-p引數。

    注意

    若要以更高的安全性執行 Docker 容器,您可以使用--cap-drop--cap-add引數來選擇性地啟用容器的 Linux 功能。如需詳細資訊,請參閱 Docker 文件中的執行階段權限和 Linux 功能

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

    例如,在基於 Linux 的系統上,您可以運行以下命令來使用 GNU nano 在當前目錄docker-compose.yml中創建。

    nano docker-compose.yml
    注意

    您也可以從GitHub中下載並使用最新版本的AWS提供的撰寫檔案。

  2. 將下列內容新增至撰寫檔案。您的檔案看起來應該如下列範例:替換:版本your-container-name與您的 Doc ker 映像的名稱。

    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 進行連線和通訊,則需要此參數,因為 MQTT 流量AWS IoT Greengrass使用連接埠 8883。

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

    注意

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

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

    docker-compose -f docker-compose.yml up

後續步驟

AWS IoT Greengrass核心軟件現在正在 Docker 容器中運行。執行下列命令以擷取目前執行中容器的容器 ID。

docker ps

然後,您可以執行下列命令來存取容器,並探索在容器內執行的AWS IoT Greengrass核心軟體。

docker exec -it container-id /bin/bash

如需有關建立簡單元件的資訊,請參閱步驟 4:在設備上開發和測試組件中的 教學課程:AWS IoT Greengrass V2 入門

注意

當您使用 docker exec Docker 容器內執行命令時,這些命令不會記錄在 Docker 記錄中。要在 Docker 日誌中記錄命令,請將交互式外殼附加到 Docker 容器。如需詳細資訊,請參閱 將交互式外殼附加到 Docker 容器

AWS IoT Greengrass核心記錄檔會呼叫greengrass.log並位於中/greengrass/v2/logs。元件記錄檔也位於相同的目錄中。若要將 Greengrass 記錄檔複製到主機上的暫存目錄,請執行下列命令:

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

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

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

如需疑難排解 Docker 容器AWS IoT Greengrass中執行問題的相關資訊,請參閱Docker 容器中 AWS IoT Greengrass 的疑難排解