如何使用 AWS Management Console 設定本機資源存取 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長使用壽命階段。如需詳細資訊,請參閱AWS IoT Greengrass V1 維護政策。在此日期之後, AWS IoT Greengrass V1 將不會發行提供功能、增強功能、錯誤修正或安全性修補程式的更新。在上運行的設備 AWS IoT Greengrass V1 不會中斷,並將繼續運行並連接到雲。我們強烈建議您移轉至 AWS IoT Greengrass Version 2,這會增加重要的新功能,並支援其他平台

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

如何使用 AWS Management Console 設定本機資源存取

此功能於AWS IoT Greengrass核心 v1.3 及更新版本。

您可以在主機 Greengrass 核心裝置設定 Lambda 函數為安全地存取本機資源。本機資源指實際存在於主機上的匯流排及週邊設備,或主機作業系統上的檔案系統磁碟區。如需包括要求和限制的詳細資訊,請參閱使用 Lambda 函數和連接器存取本機資源

本教學課程說明如何使用AWS Management Console設定存取存取本機資源,AWS IoT Greengrass核心裝置。包含以下高階執行步驟:

有關如何使用 AWS Command Line Interface 的教學課程,請參閱如何使用AWS命令列介面設定本機資源存取

先決條件

為完成此教學課程您需要:

  • Greengrass 群組和 Greengrass 核心 (1.3 版或更新版本)。若要建立 Greengrass 群組或核心,請參閱 開始使用 AWS IoT Greengrass

  • 以下目錄位於 Greengrass 核心裝置:

    • /src/LRAtest

    • /dest/LRAtest

    這些目錄的擁有者群組必須擁有讀取和寫入存取目錄的權限。您可以使用以下命令來授與存取權限:

    sudo chmod 0775 /src/LRAtest

步驟 1:建立 Lambda 函數部署套件

在此步驟中,您會建立 Lambda 函數部署套件,此為 ZIP 檔案含有函數的程式碼和相依性。您也可以下載 AWS IoT Greengrass 核心開發套件做為依賴性包含在套件之中。

  1. 在您的電腦中複製以下 Python 指令碼到本機檔案 lraTest.py。這是 Lambda 函數的應用程式邏輯。

    # Demonstrates a simple use case of local resource access. # This Lambda function writes a file test to a volume mounted inside # the Lambda environment under destLRAtest. Then it reads the file and # publishes the content to the AWS IoT LRAtest topic. import sys import greengrasssdk import platform import os import logging # Setup logging to stdout logger = logging.getLogger(__name__) logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) # Create a Greengrass Core SDK client. client = greengrasssdk.client('iot-data') volumePath = '/dest/LRAtest' def function_handler(event, context): try: client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.') volumeInfo = os.stat(volumePath) client.publish(topic='LRA/test', payload=str(volumeInfo)) with open(volumePath + '/test', 'a') as output: output.write('Successfully write to a file.') with open(volumePath + '/test', 'r') as myfile: data = myfile.read() client.publish(topic='LRA/test', payload=data) except Exception as e: logger.error('Failed to publish message: ' + repr(e)) return
  2. AWS IoT Greengrass核心開發套件下載頁面,下載AWS IoT GreengrassPython 的核心 SDK 到您的計算機。

  3. 解壓縮下載的封裝,以取得軟體開發套件。SDK 為 greengrasssdk 資料夾。

  4. 請將下列項目壓縮成一個檔案,並命名為 lraTestLambda.zip

    • lraTest.py。 應用程式邏輯。

    • greengrasssdk。 所有 Python Lambda 函數所需的程式庫。

    所以此lraTestLambda.zip檔案是您的 Lambda 函數部署套件。現在,您可以建立 Lambda 函數並上傳部署套件了。

步驟 2:建立並發佈 Lambda 函數

在此步驟中,您會使用AWS Lambda建立 Lambda 函數並設定其使用您的部署套件。然後,您會發佈函數版本和建立別名。

首先,建立 Lambda 函數。

  1. 於 AWS Management Console,請選擇服務,開啟 AWS Lambda 主控台。

  2. 選擇函數

  3. 選擇建立函數然後選擇Author from scratch (從頭開始撰寫)

  4. Basic information (基本資訊) 區段中,使用下列值。

    1. 針對 Function name (函數名稱),請輸入 TestLRA

    2. 針對 Runtime (執行時間),選擇 Python 3.7

    3. 適用於許可,請保留預設設定。這會建立授與基本 Lambda 權限的執行角色。此角色不為所用AWS IoT Greengrass。

  5. 選擇 Create function (建立函數)。

    [建立函數] 頁面反白顯示 [建立函數]。

     

  6. 上傳您的 Lambda 函數部署套件並註冊處理常式。

    1. 在「」程式碼標籤的下來源碼,選擇從上傳來源。從下拉式選單中選擇.zip 檔案

      突出顯示 .zip 文件的從下拉列表中上傳。
    2. 選擇上傳(下一步),然後選擇lraTestLambda.zip部署套件。然後選擇 Save (儲存)

    3. 在「」程式碼功能的標籤,在執行時間設定,選擇Edit (編輯),然後輸入下列值。

      • 針對 Runtime (執行時間),選擇 Python 3.7

      • 針對 Handler (處理常式),輸入 lraTest.function_handler

    4. 選擇 Save (儲存)。

      注意

      所以此測試按鈕上的AWS Lambda主控台不使用此函數。所以此AWS IoT Greengrass核心 SDK 不包含在中獨立執行您的 Greengrass Lambda 函數所需的模組AWS Lambda主控台。這些模塊(例如,greengrass_common) 會在函式部署到 Greengrass 核心後提供給函式。

    接著,發佈您的 Lambda 函數的第一個版本。然後,建立版本的別名

    Greengrass 組可以通過別名(推薦)或版本引用 Lambda 函數。使用別名可讓您更輕鬆地管理程式碼更新,因為當函數程式碼更新時,您不需要變更訂閱資料表或群組定義。相反,您只需將別名指向新函數版本即可。

  7. Actions (動作),選擇 Publish new version (發佈新版本)

  8. 針對 Version description (版本描述),輸入 First version,然後選擇 Publish (發佈)

  9. TestLRA: 1 組態頁面,從Actions (動作) 中選擇 Create alias (建立別名)

  10. 在「」建立別名頁面,用於名稱,然後輸入test。針對 Version (版本) 輸入 1

    注意

    AWS IoT Greengrass不支援 Lambda 別名$LATE版本。

  11. 選擇 Create (建立)。

    [建立新的函數] 頁面反白顯示 [建立]。

    現在,您可以將 Lambda 函數新增至您的 Greengrass 群組。

步驟 3:新增 Lambda 函數至 Greengrass 群組

在此步驟中,您將會將此函數新增到您的群組,以及設定函數的生命週期。

首先,將 Lambda 函數新增至您的 Greengrass 群組。

  1. 在 中AWS IoT主控台導覽窗格, 下Manage (管理),然後展開Greengrass 裝置(下一步),然後選擇群組 (V1) 群組

  2. 請選擇您想要新增 Lambda 函數的 Greengrass 群組。

  3. 在群組組組態頁面上,選擇Lambda 函數索引標籤。

  4. UNTO我的 Lambda 函數區段中,選擇Add

  5. 在「」新增 Lambda 函數頁面上,然後選擇Lambda 函數。選取 TestLRA

  6. 選擇Lambda 函數版本

  7. 在 中Lambda 函數組態區段中,選取系統使用者和群組Lambda 函數容器化

     

    接著,設定 Lambda 函數的生命週期。

  8. 針對 Timeout (逾時),選擇 30 seconds (30 秒)

    重要

    使用本機資源 (此程序中所述) 的 Lambda 函數必須在 Greengrass 容器中執行。否則,部署會在您嘗試部署函數時失敗。如需詳細資訊,請參閱容器化

  9. 請在頁面底部選擇新增 Lambda 函數

步驟 4:新增本機資源至 Greengrass 群組

在此步驟中,您將新增本機磁碟區資源至 Greengrass 群組,並授予函數對該項資源的讀取及寫入存取權。本機資源擁有群組等級範圍。您可為群組中的任何 Lambda 函數授予許可,以供其存取資源。

  1. 在群組組組態頁面上,選擇資源索引標籤。

  2. 在 下方本機資源區段中,選擇Add

  3. 在「」新增本機資源頁面上,使用以下值。

    1. 針對 Resource name (資源名稱),輸入 testDirectory

    2. 針對 Resource type (資源類型),選擇 Volume (磁碟區)

    3. 適用於本機裝置路徑,然後輸入/src/LRAtest。此路徑必須存在於主機作業系統。

      本機裝置路徑是在核心裝置檔案系統中,資源的絕對路徑。此位置位於函數執行所在的容器外。此路徑不能以 /sys 做為開頭。

    4. 針對 Destination path (目的地路徑),輸入 /dest/LRAtest。此路徑必須存在於主機作業系統。

      目標路徑是 Lambda 命名空間中資源的絕對路徑。此位置位於函數執行所在的容器內。

    5. UNTO系統群組擁有者和檔案存取權限,然後選取為擁有資源的系統群組自動新增檔案系統許可

      所以此系統群組擁有者和檔案存取權限此選項讓您授與其他檔案可存取 Lambda 的許可。如需詳細資訊,請參閱 群組擁有者檔案存取許可

  4. 選擇 Add resource (新增資源)資源頁面會顯示新的 testDirectory 資源。

步驟 5:新增訂閱到 Greengrass 群組

在此步驟中,您將新增兩個訂閱到 Greengrass 群組。這些訂閱可啟動 Lambda 函數與間的雙向通訊。AWS IoT。

首先,為 Lambda 函數建立訂閱以傳送訊息給AWS IoT。

  1. 在群組組組態頁面上,選擇訂閱索引標籤。

  2. 選擇 Add (新增)。

  3. 在「」建立訂閱頁面上,設定以下的來源和目標:

    1. 適用於來源類型,選擇Lambda 函數(下一步),然後選擇TestLRA

    2. 適用於Target type (目標類型),選擇服務(下一步),然後選擇IoT Cloud (IoT 雲端)

    3. 適用於主題篩選條件,然後輸入LRA/test(下一步),然後選擇建立訂閱

  4. 訂閱頁面會顯示新的訂閱。

     

    接著,設定訂閱,此訂閱會呼叫 AWS IoT 的函數。

  5. 在「」訂閱頁面上,選擇新增訂閱

  6. Select your source and target (選擇您的來源和目標) 頁面設定來源和目標,如下所示:

    1. 適用於來源類型,選擇Lambda 函數(下一步),然後選擇IoT Cloud (IoT 雲端)

    2. 適用於Target type (目標類型),選擇服務(下一步),然後選擇TestLRA

    3. 選擇 Next (下一步)。

  7. Filter your data with a topic (使用主題篩選您的資料) 頁面上,對於 Topic filter (主題篩選條件),輸入 invoke/LRAFunction,然後選擇 Next (下一步)

  8. 選擇 Finish (完成)。訂閱頁面會顯示這兩個的訂閱。

步驟 6:部署AWS IoT Greengrass群組

在此步驟中,您將部署目前群組定義的版本。

  1. 請確定AWS IoT Greengrass核心正在執行。如果需要,請在您的 Raspberry Pi 終端機執行以下命令。

    1. 檢查精靈是否有在運作:

      ps aux | grep -E 'greengrass.*daemon'

      若輸出的 root 含有 /greengrass/ggc/packages/1.11.6/bin/daemon 項目,則精靈有在運作。

      注意

      路徑的版本取決於安裝在您的核心裝置中的 AWS IoT Greengrass 核心軟體版本。

    2. 啟動協助程式:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在群組組組態頁面上,選擇部署

    注意

    如果您在沒有容器化的情況下,並嘗試存取連接的本機資源,則部署失敗。

  3. 如果出現提示,請在Lambda 函數標籤的下系統 Lambda 函數,然後選取IP 偵測器,然後Edit (編輯),然後自動偵測

    這可讓裝置自動取得核心的連接資訊,例如 IP 位址、DNS、連接埠編號。建議使用自動偵測,但是 AWS IoT Greengrass 也支援手動指定端點。只會在第一次部署群組時收到復原方法的提示。

    注意

    如果出現提示,授予建立Greengrass 服務角色並將其與您的關聯AWS 帳戶在最新的AWS 區域。此角色允許AWS IoT Greengrass存取您的資源AWS服務。

    部署頁面會顯示部署時間戳記、版本 ID 和狀態。完成時,部署狀態為已完成

    如需故障診斷協助,請參閱AWS IoT Greengrass 疑難排解

測試本機資源存取

現在您可以驗證本機資源存取是否已正確設定。若要測試,請訂閱 LRA/test 主題並發佈到 invoke/LRAFunction 主題。如果 Lambda 函數測試成功,會傳送預期的承載給AWS IoT。

  1. 從AWS IoT主控台導覽功能表, 下測試,選擇MQTT 測試用戶端

  2. UNTO訂閱主題,為主題篩選條件,然後輸入LRA/test

  3. UNTO其他資訊,為MQTT 承載顯示,然後選取將承載顯示為字串

  4. 選擇 Subscribe (訂閱)。發佈給 Lambda 函數發佈給 LRA/test 主題。

    [訂閱] 頁面反白顯示 [訂閱主題]。
  5. UNTO發布到主題」中的主題名稱輸入invoke/LRAFunction(下一步),然後選擇發布叫用您的 Lambda 函數。如果頁面會顯示該函數的三個承載訊息,則表示測試成功。

    [訂閱] 頁面反白顯示 [invoke/LRA 主題] 和 [Publish to topic (發佈到主題)],也提供訊息資料的結果。

由 Lambda 函數建立的測試檔案位於/src/LRAtestGreengrass 核心裝置上的目錄。雖然 Lambda 函數寫入了一個文件/dest/LRAtest目錄中,該檔案只會顯示在 Lambda 命名空間中。您無法在一般 Linux 命名空間中看到它。目的地路徑的所有變更都會反映在檔案系統的來源路徑上。

如需故障診斷協助,請參閱AWS IoT Greengrass 疑難排解