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

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

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

本教學課程說明如何使用自動佈建的 AWS 資源和本機開發工具,在 Docker 容器中安裝和執行 AWS IoT Greengrass Core 軟體。您可以使用此開發環境來探索 Docker 容器中的 AWS IoT Greengrass 功能。軟體需要 AWS 憑證才能佈建這些資源並部署本機開發工具。

如果您無法提供 AWS 認證給容器,則可以佈建核心裝置運作所需的 AWS 資源。您也可以將開發工具部署到核心裝置,做為開發裝置使用。這可讓您在執行容器時提供較少的裝置權限。如需詳細資訊,請參閱AWS IoT Greengrass在具有手動資源佈建的 Docker 容器中執行

必要條件

若要完成此自學課程,您需要下列內容。

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

  • 具有為 Greengrass 核心裝置佈建 AWS IoT 和IAM資源之權限的 AWS IAM使用者。 AWS IoT Greengrass Core 軟體安裝程式會使用您的 AWS 認證來自動佈建這些資源。如需自動佈建資源之最小IAM原則的相關資訊,請參閱安裝程式佈建資源的最低 IAM 政策

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

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

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

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

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

設定 AWS 憑證

在此步驟中,您會在包含 AWS 安全性認證的主機電腦上建立認證檔案。當您執行 AWS IoT Greengrass Docker 映像時,您必須將包含此認證檔案的資料夾掛載到 Docker 容器/root/.aws/中。安 AWS IoT Greengrass 裝程式會使用這些認證在您的 AWS 帳戶. 如需有關安裝程式自動佈建資源所需的最小IAM原則的資訊,請參閱安裝程式佈建資源的最低 IAM 政策

  1. 擷取下列其中一項。

  2. 建立放置認證檔案的資料夾。

    mkdir ./greengrass-v2-credentials
  3. 使用文字編輯器建立在./greengrass-v2-credentials資料夾credentials中命名的規劃檔。

    例如,您可以運行以下命令來使用 GNU nano 創建文credentials件。

    nano ./greengrass-v2-credentials/credentials
  4. 以下列格式將您的 AWS 認證新增至credentials檔案。

    [default] aws_access_key_id = AKIAIOSFODNN7EXAMPLE aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk

    僅包含aws_session_token臨時登入資料。

重要

啟動 AWS IoT Greengrass 容器之後,從主機電腦移除認證檔案。如果您不刪除憑據文件,則您的 AWS 憑據將保持掛載在容器中。如需詳細資訊,請參閱在容器中執行 AWS IoT Greengrass 核心軟體

建立環境檔

本教程使用環境文件來設置將傳遞給 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=true THING_NAME=MyGreengrassCore THING_GROUP_NAME=MyGreengrassCoreGroup TES_ROLE_NAME=GreengrassV2TokenExchangeRole TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias COMPONENT_DEFAULT_USER=ggc_user:ggc_group

    然後,取代下列值。

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

    • region。 您建立資源的 AWS 區域 位置。

    • MyGreengrassCore。 AWS IoT 物件的名稱。如果該物件不存在,安裝程序將創建它。安裝程式會下載要驗證為 AWS IoT 物件的憑證。

    • MyGreengrassCoreGroup。 AWS IoT 物件群組的名稱。如果物件群組不存在,安裝程式會建立該物件並將該物件新增至其中。如果物群組存在且具有使用中部署,則核心裝置會下載並執行部署指定的軟體。

    • GreengrassV2TokenExchangeRole。 取代為允許 Greengrass 核心裝置取得臨時認證的IAM權杖交換角色名稱。 AWS 如果角色不存在,安裝程式會建立該角色,並建立並附加名為的策略 GreengrassV2TokenExchangeRole存取。如需詳細資訊,請參閱授權核心裝置與 AWS 服務互動

    • GreengrassCoreTokenExchangeRoleAlias。 權杖交換角色別名。如果角色別名不存在,安裝程式會建立它,並將其指向您指定的 IAM Token 交換角色。如需詳細資訊,請參閱

    注意

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

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

本教學課程說明如何啟動您在 Docker 容器中建置的 Docker 映像檔。您可以使用碼頭工人CLI或碼頭構成CLI在 Docker 容器中運行 AWS IoT Greengrass 核心軟件映像。

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

    docker run --rm --init -it --name docker-image \ -v path/to/greengrass-v2-credentials:/root/.aws/: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因為 AWS IoT Greengrass 使用連接埠 8883 作為MQTT流量。若要開啟其他連接埠,請使用其他-p引數。

    注意

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

  2. 從主機裝置./greengrass-v2-credentials上移除認證。

    rm -rf ./greengrass-v2-credentials
    重要

    您正在移除這些認證,因為它們提供了核心裝置僅在安裝期間所需的廣泛權限。如果您不移除這些認證,Greengrass 元件和容器中執行的其他處理序可以存取它們。如果您需要為 Greengrass 元件提供 AWS 認證,請使用權杖交換服務。如需詳細資訊,請參閱與AWS服務互動

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

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

    nano docker-compose.yml
    注意

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

  2. 將下列內容新增至撰寫檔案。您的檔案看起來應該如下列範例:Replace (取代) docker-image 使用您的碼頭圖像的名稱。

    version: '3.7' services: greengrass: init: true container_name: aws-iot-greengrass image: docker-image volumes: - ./greengrass-v2-credentials:/root/.aws/:ro env_file: .env ports: - "8883:8883"

    此範例中的下列參數是選用的:

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

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

    注意

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

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

    docker-compose -f docker-compose.yml up
  4. 從主機裝置./greengrass-v2-credentials上移除認證。

    rm -rf ./greengrass-v2-credentials
    重要

    您正在移除這些認證,因為它們提供了核心裝置僅在安裝期間所需的廣泛權限。如果您不移除這些認證,Greengrass 元件和容器中執行的其他處理序可以存取它們。如果您需要為 Greengrass 元件提供 AWS 認證,請使用權杖交換服務。如需詳細資訊,請參閱與AWS服務互動

後續步驟

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

docker ps

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

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 的疑難排解