步驟 4:在設備上開發和測試組件 - AWS IoT Greengrass

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

步驟 4:在設備上開發和測試組件

組件是在 AWS IoT Greengrass 核心設備上運行的軟件模塊。元件可讓您建立和管理複雜的應用程式,做為獨立建置區塊,您可以從一個 Greengrass 核心裝置重複使用到另一個核心裝置。每個組件都由方和文物組成。

  • 食譜

    每個組件都包含一個 recipe 文件,該文件定義了其元數據。方案也會指定元件的組態參數、元件相依性、生命週期和平台相容性。元件生命週期會定義安裝、執行和關閉元件的命令。如需詳細資訊,請參閱 AWS IoT Greengrass 元件配方參考

    您可以定義 JSONYAML 格式的配方。

  • 文物

    組件可以有任意數量的加工品,這是組件二進製文件。成品可以包括指令碼、已編譯的程式碼、靜態資源,以及元件使用的任何其他檔案。元件也可以從元件相依性取用人工因素。

使用時 AWS IoT Greengrass,您可以使用 Greengrass CLI 在 Greengrass 核心裝置上本機開發和測試元件,而無需與雲端互動。 AWS 當您完成本機元件時,您可以使用元件方案和成品在 AWS 雲端的 AWS IoT Greengrass 服務中建立該元件,然後將其部署到所有 Greengrass 核心裝置。如需元件的詳細資訊,請參閱開發AWS IoT Greengrass元件

在本節中,您將學習如何在核心裝置本機建立和執行基本 Hello World 元件。

若要在您的裝置上開發 Hello World 元件
  1. 使用配方和成品的子資料夾,為您的元件建立資料夾。在 Greengrass 核心裝置上執行下列命令,以建立這些資料夾並變更為元件資料夾。將 ~/greengrassv2 或% 使用者設定檔%\ Greengrassv2 取代為要用於本機開發的資料夾路徑。

    Linux or Unix
    mkdir -p ~/greengrassv2/{recipes,artifacts} cd ~/greengrassv2
    Windows Command Prompt (CMD)
    mkdir %USERPROFILE%\greengrassv2\\recipes, %USERPROFILE%\greengrassv2\\artifacts cd %USERPROFILE%\greengrassv2
    PowerShell
    mkdir ~/greengrassv2/recipes, ~/greengrassv2/artifacts cd ~/greengrassv2
  2. 使用文字編輯器建立 recipe 檔案,以定義元件的中繼資料、參數、相依性、生命週期和平台功能。在 recipe 檔案名稱中包含元件版本,以便識別哪個方案反映哪個元件版本。您可以為您的方案選擇 YAML 或 JSON 格式。

    例如,在 Linux 系統上,您可以執行下列命令來使用 GNU nano 來建立檔案。

    JSON
    nano recipes/com.example.HelloWorld-1.0.0.json
    YAML
    nano recipes/com.example.HelloWorld-1.0.0.yaml
    注意

    AWS IoT Greengrass 使用語義版本的組件。語義版本遵循一個主要的。 未成年人修補程式編號系統。例如,版本1.0.0代表元件的第一個主要發行版本。如需詳細資訊,請參閱語意版本規格

  3. 將下列配方貼到檔案中。

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first AWS IoT Greengrass component.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "world" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "run": "python3 -u {artifacts:path}/hello_world.py {configuration:/Message}" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "run": "py -3 -u {artifacts:path}/hello_world.py {configuration:/Message}" } } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.HelloWorld ComponentVersion: '1.0.0' ComponentDescription: My first AWS IoT Greengrass component. ComponentPublisher: Amazon ComponentConfiguration: DefaultConfiguration: Message: world Manifests: - Platform: os: linux Lifecycle: run: | python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}" - Platform: os: windows Lifecycle: run: | py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"

    這個配方的ComponentConfiguration部分定義了一個參數Message,默認為world。本Manifests節定義資訊清單,這是一組平台的生命週期指示和成品。例如,您可以定義多個資訊清單,為各種平台指定不同的安裝指示。在資訊清單中,Lifecycle區段會指示 Greengrass 核心裝置以Message參數值作為引數執行 Hello World 指令碼。

  4. 執行下列命令,為元件加工品建立資料夾。

    Linux or Unix
    mkdir -p artifacts/com.example.HelloWorld/1.0.0
    Windows Command Prompt (CMD)
    mkdir artifacts\com.example.HelloWorld\1.0.0
    PowerShell
    mkdir artifacts\com.example.HelloWorld\1.0.0
    重要

    您必須針對人工因素資料夾路徑使用下列格式。包括您在方案中指定的元件名稱和版本。

    artifacts/componentName/componentVersion/
  5. 使用文字編輯器為您的 Hello World 元件建立 Python 指令碼人工因素檔案。

    例如,在 Linux 系統上,您可以執行下列命令來使用 GNU nano 來建立檔案。

    nano artifacts/com.example.HelloWorld/1.0.0/hello_world.py

    將以下 Python 腳本複製並粘貼到文件中。

    import sys message = "Hello, %s!" % sys.argv[1] # Print the message to stdout, which Greengrass saves in a log file. print(message)
  6. 使用本機 AWS IoT Greengrass CLI 管理您的核心裝置上的元件。

    執行下列命令,將元件部署至 AWS IoT Greengrass 核心。使用您的 AWS IoT Greengrass V2 根資料夾取代/greengrass/v2C:\greengrass\v2,並將 ~/greengrassv2 或% 使用者設定檔%\ Greengrassv2 取代為您的元件開發資料夾。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli deployment create \ --recipeDir ~/greengrassv2/recipes \ --artifactDir ~/greengrassv2/artifacts \ --merge "com.example.HelloWorld=1.0.0"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli deployment create ^ --recipeDir %USERPROFILE%\greengrassv2\recipes ^ --artifactDir %USERPROFILE%\greengrassv2\artifacts ^ --merge "com.example.HelloWorld=1.0.0"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli deployment create ` --recipeDir ~/greengrassv2/recipes ` --artifactDir ~/greengrassv2/artifacts ` --merge "com.example.HelloWorld=1.0.0"

    此命令會新增使用中配方的元件,以recipes及中的 Python 指令碼artifacts。此選--merge項會新增或更新您指定的元件和版本。

  7. AWS IoT Greengrass 核心軟件將標準輸出從組件進程保存到文件夾中的日誌文件logs。執行下列命令以驗證 Hello World 元件是否執行並列印訊息。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.HelloWorld.log

    type命令將文件的內容寫入終端。多次執行此命令以觀察檔案中的變更。

    PowerShell
    gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

    您應該會看到類似下列範例的訊息。

    Hello, world!
    注意

    如果檔案不存在,表示本機部署可能尚未完成。如果檔案在 15 秒內不存在,則部署可能會失敗。例如,如果您的配方無效,則可能會發生這種情況。執行下列命令以檢視 AWS IoT Greengrass 核心記錄檔。此檔案包含來自 Greengrass 核心裝置部署服務的記錄檔。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/greengrass.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\greengrass.log

    type命令將文件的內容寫入終端。多次執行此命令以觀察檔案中的變更。

    PowerShell
    gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
  8. 修改本地組件以迭代和測試您的代碼。hello_world.py在文字編輯器中開啟,並在第 4 行新增下列程式碼,以編輯 AWS IoT Greengrass 核心記錄的訊息。

    message += " Greetings from your first Greengrass component."

    hello_world.py腳本現在應該具有以下內容。

    import sys message = "Hello, %s!" % sys.argv[1] message += " Greetings from your first Greengrass component." # Print the message to stdout, which Greengrass saves in a log file. print(message)
  9. 執行下列命令,以您所做的變更更新元件。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli deployment create \ --recipeDir ~/greengrassv2/recipes \ --artifactDir ~/greengrassv2/artifacts \ --merge "com.example.HelloWorld=1.0.0"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli deployment create ^ --recipeDir %USERPROFILE%\greengrassv2\recipes ^ --artifactDir %USERPROFILE%\greengrassv2\artifacts ^ --merge "com.example.HelloWorld=1.0.0"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli deployment create ` --recipeDir ~/greengrassv2/recipes ` --artifactDir ~/greengrassv2/artifacts ` --merge "com.example.HelloWorld=1.0.0"

    此指令會使用最新的 Hello World 人工因素更新com.example.HelloWorld元件。

  10. 執行下列命令以重新啟動元件。當您重新啟動元件時,核心裝置會使用最新的變更。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli component restart \ --names "com.example.HelloWorld"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli component restart ^ --names "com.example.HelloWorld"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli component restart ` --names "com.example.HelloWorld"
  11. 再次檢查記錄檔,以確認 Hello World 元件是否會列印新訊息。

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\com.example.HelloWorld.log

    type命令將文件的內容寫入終端。多次執行此命令以觀察檔案中的變更。

    PowerShell
    gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

    您應該會看到類似下列範例的訊息。

    Hello, world! Greetings from your first Greengrass component.
  12. 您可以更新元件的組態參數,以測試不同的組態。部署元件時,您可以指定組態更新,以定義如何在核心裝置上修改元件的組態。您可以指定要重設為預設值的組態值,以及要合併至核心裝置的新組態值。如需詳細資訊,請參閱 更新零組件組態

    請執行下列操作:

    1. 使用文字編輯器建立名為hello-world-config-update.json包含組態更新的檔案

      例如,在 Linux 系統上,您可以執行下列命令來使用 GNU nano 來建立檔案。

      nano hello-world-config-update.json
    2. 將下列 JSON 物件複製並貼到檔案中。此 JSON 對象定義了一個配置更新,該更新friend將值合併到Message參數以更新其值。此組態更新不會指定任何要重設的值。您不需要重設Message參數,因為合併更新會取代現有的值。

      { "com.example.HelloWorld": { "MERGE": { "Message": "friend" } } }
    3. 執行下列命令,將組態更新部署至 Hello World 元件。

      Linux or Unix
      sudo /greengrass/v2/bin/greengrass-cli deployment create \ --merge "com.example.HelloWorld=1.0.0" \ --update-config hello-world-config-update.json
      Windows Command Prompt (CMD)
      C:\greengrass\v2\bin\greengrass-cli deployment create ^ --merge "com.example.HelloWorld=1.0.0" ^ --update-config hello-world-config-update.json
      PowerShell
      C:\greengrass\v2\bin\greengrass-cli deployment create ` --merge "com.example.HelloWorld=1.0.0" ` --update-config hello-world-config-update.json
    4. 再次檢查記錄檔以確認 Hello World 元件是否輸出新訊息。

      Linux or Unix
      sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
      Windows Command Prompt (CMD)
      type C:\greengrass\v2\logs\com.example.HelloWorld.log

      type命令將文件的內容寫入終端。多次執行此命令以觀察檔案中的變更。

      PowerShell
      gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait

      您應該會看到類似下列範例的訊息。

      Hello, friend! Greetings from your first Greengrass component.
  13. 完成測試元件後,請將其從核心裝置中移除。執行下列命令。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli deployment create --remove="com.example.HelloWorld"
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
    重要

    您必須執行此步驟,才能在將元件上傳至核心裝置之後將元件部署回核心裝置 AWS IoT Greengrass。否則,部署會失敗並顯示版本相容性錯誤,因為本機部署會指定不同版本的元件。

    執行下列命令,並確認com.example.HelloWorld元件未出現在裝置上的元件清單中。

    Linux or Unix
    sudo /greengrass/v2/bin/greengrass-cli component list
    Windows Command Prompt (CMD)
    C:\greengrass\v2\bin\greengrass-cli component list
    PowerShell
    C:\greengrass\v2\bin\greengrass-cli component list

您的 Hello World 元件已完成,您現在可以將其上傳到 AWS IoT Greengrass 雲端服務。然後,您可以將該組件部署到 Greengrass 核心設備。