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

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

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

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

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

必要條件

若要完成本教學課程,您需要下列項目。

  • AWS 帳戶:如果您沒有帳戶,請參閱 設定 AWS 帳戶

  • 具有為 IAM Greengrass AWS IAM核心裝置佈建 AWS IoT 和資源許可的使用者。Core AWS IoT Greengrass 軟體安裝程式使用您的 AWS 登入資料來自動佈建這些資源。如需自動佈建資源的最低IAM政策資訊,請參閱 安裝程式佈建資源的最低 IAM 政策

  • Docker AWS IoT Greengrass 映像。您可以從 Dockerfile AWS IoT Greengrass 建置映像

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

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

    • Docker 引擎 18.09 版或更新版本。

    • (選用) Docker Compose 1.22 版或更新版本。只有在您想要使用 Docker Compose CLI執行 Docker 映像時,才需要 Docker Compose。

設定 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 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=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。 將 取代為權IAM杖交換角色的名稱,允許 Greengrass 核心裝置取得臨時 AWS 憑證。如果角色不存在,安裝程式會建立該角色,並建立和連接名為 GreengrassV2TokenExchangeRoleAccess 的政策。如需詳細資訊,請參閱授權核心裝置與 AWS 服務互動

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

    注意

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

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

本教學課程說明如何啟動您在 Docker 容器中建置的 Docker 映像。您可以使用 Docker CLI或 Docker Compose 在 Docker 容器中CLI執行 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 執行命令中設定環境變數。

    • -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 元件和在容器中執行的其他程序可以存取這些登入資料。如果您需要提供 AWS 憑證給 Greengrass 元件,請使用字符交換服務。如需詳細資訊,請參閱與 AWS 服務互動

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

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

    nano docker-compose.yml
    注意

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

  2. 將下列內容新增至 Compose 檔案。您的檔案看起來應該如下列範例:docker-image 將 取代為 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因為 AWS IoT Greengrass 使用連接埠 8883 進行MQTT流量。

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

    注意

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

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

    docker-compose -f docker-compose.yml up
  4. 在主機裝置./greengrass-v2-credentials上從 移除登入資料。

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

    您正在移除這些登入資料,因為它們提供核心裝置只有在設定期間需要的廣泛許可。如果您未移除這些登入資料,Greengrass 元件和容器內執行的其他程序可以存取這些登入資料。如果您需要提供 AWS 憑證給 Greengrass 元件,請使用字符交換服務。如需詳細資訊,請參閱與 AWS 服務互動

後續步驟

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 PID1,這有助於移除任何剩餘的殭屍程序。如需詳細資訊,請參閱 Docker 文件中的指定初始化程序

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