本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 4:在設備上開發和測試組件
組件是在AWS IoT Greengrass核心設備上運行的軟件模塊。元件可讓您建立和管理複雜的應用程式,做為獨立建置區塊,您可以從一個 Greengrass 核心裝置重複使用到另一個核心裝置。每個組件都由配方和文物組成。
使用時AWS IoT Greengrass,您可以使用 Greengrass CLI 在 Greengrass 核心裝置上本機開發和測試元件,而無需與雲端互動。AWS當您完成本機元件時,您可以使用元件方案和成品在AWS雲端的AWS IoT Greengrass服務中建立該元件,然後將其部署到所有 Greengrass 核心裝置。如需元件的詳細資訊,請參閱開發AWS IoT Greengrass元件。
在本節中,您將學習如何在核心裝置本機建立和執行基本 Hello World 元件。
若要在您的裝置上開發 Hello World 元件
-
使用配方和成品的子資料夾,為您的元件建立資料夾。在 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
-
使用文字編輯器建立 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
代表元件的第一個主要發行版本。如需詳細資訊,請參閱語意版本規格。
-
將下列配方貼到檔案中。
- 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 指令碼。
-
執行下列命令,為元件加工品建立資料夾。
- 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
/
-
使用文字編輯器為您的 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)
-
使用本機 AWS IoT Greengrass CLI 管理您的核心裝置上的元件。
執行下列命令,將元件部署至AWS IoT Greengrass核心。將/greengrass/v2
或 C:\greengrass\v2
取代為您的AWS IoT 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
項會新增或更新您指定的元件和版本。
-
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
-
修改本地組件以迭代和測試您的代碼。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)
-
執行下列命令,以您所做的變更更新元件。
- 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
元件。
-
執行下列命令以重新啟動元件。當您重新啟動元件時,核心裝置會使用最新的變更。
- 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"
-
再次檢查記錄檔以確認 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.
-
您可以更新元件的組態參數,以測試不同的組態。部署元件時,您可以指定組態更新,以定義如何在核心裝置上修改元件的組態。您可以指定要重設為預設值的組態值,以及要合併至核心裝置的新組態值。如需詳細資訊,請參閱更新零組件組態。
請執行下列動作:
-
使用文字編輯器建立名為hello-world-config-update.json
包含組態更新的檔案
例如,在 Linux 系統上,您可以執行下列命令來使用 GNU nano 建立檔案。
nano hello-world-config-update.json
-
將下列 JSON 物件複製並貼到檔案中。此 JSON 對象定義了一個配置更新,該更新friend
將值合併到Message
參數以更新其值。此組態更新不會指定任何要重設的值。您不需要重設Message
參數,因為合併更新會取代現有值。
{
"com.example.HelloWorld": {
"MERGE": {
"Message": "friend"
}
}
}
-
執行下列命令,將組態更新部署至 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
-
再次檢查日誌以確認 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.
-
完成測試元件後,請將其從核心裝置中移除。執行下列命令。
- 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 核心設備。