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 資源許可的 IAM 使用者。AWSAWS IoT GreengrassCore 軟體安裝程式會使用您的AWS認證來自動佈建這些資源。如需自動佈建資源的最低 IAM 政策的相關資訊,請參閱安裝程式佈建資源的最低 IAM 政策

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

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

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

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

    • (可選)碼頭編寫版本 1.22 或更高版本。只有當您想要使用 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環境變數來設定此值。

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

    • MyGreengrassCore。AWS IoT 物件的名稱。如果東西不存在,安裝程序將創建它。安裝程式會下載憑證以進行驗證。AWS IoT

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

    • 格林格拉斯 V2 TokenExchangeRole。取代為允許 Greengrass 核心裝置取得臨時登入資料的 IAM 權杖交換角色名稱。AWS如果角色不存在,安裝程式會建立該角色,並建立並附加名為 Greengr TokenExchangeRole assv2 存取的原則。如需詳細資訊,請參閱 授權核心裝置與 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 進行連線和通訊,則需要此引數,因為 MQTT 流量AWS IoT Greengrass使用連接埠 8883。若要開啟其他連接埠,請使用其他-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. 將下列內容新增至撰寫檔案。您的檔案看起來應該如下列範例:將碼頭圖像替換為 docker 映像的名稱。

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

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