本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以建立以物件或物件群組為目標的部署。
當您建立部署時,您可以設定要部署的軟體元件,以及部署任務如何推展到目標裝置。您可以在您提供給 的 JSON 檔案中定義部署 AWS CLI。
部署目標會決定您要在其中執行元件的裝置。若要部署到一個核心裝置,請指定物件。若要部署到多個核心裝置,請指定包含這些裝置的物件群組。如需如何設定物件群組的詳細資訊,請參閱《 AWS IoT 開發人員指南》中的靜態物件群組和動態物件群組。
請依照本節中的步驟來建立目標的部署。如需如何更新具有部署之目標上的軟體元件的詳細資訊,請參閱修訂部署。
警告
CreateDeployment 操作可以從核心裝置解除安裝元件。如果元件存在於先前的部署中,而非新的部署中,核心裝置會解除安裝該元件。為了避免解除安裝元件,請先使用 ListDeployments 操作來檢查部署的目標是否已有現有的部署。然後,當您建立新的部署時,請使用 GetDeployment 操作從該現有部署開始。
建立部署 (AWS CLI)
-
建立名為 的檔案
deployment.json
,然後將下列 JSON 物件複製到 檔案。將targetArn
取代為要用於部署之 AWS IoT 物件或物件群組的 ARN。物件和物件群組 ARNs的格式如下:-
物件:
arn:aws:iot:
region
:account-id
:thing/thingName
-
物件群組:
arn:aws:iot:
region
:account-id
:thinggroup/thingGroupName
{ "targetArn": "
targetArn
" } -
-
檢查部署目標是否有您要修改的現有部署。請執行下列操作:
-
執行下列命令來列出部署目標的部署。將
targetArn
取代為目標 AWS IoT 物件或物件群組的 ARN。aws greengrassv2 list-deployments --target-arn
targetArn
回應包含具有目標最新部署的清單。如果回應是空的,則目標沒有現有的部署,您可以跳到 步驟 3。否則,
deploymentId
請從回應中複製 以用於下一個步驟。注意
您也可以修訂目標最新修訂版以外的部署。指定
--history-filter ALL
引數以列出目標的所有部署。然後,複製您要修改的部署 ID。 -
執行下列命令以取得部署的詳細資訊。這些詳細資訊包括中繼資料、元件和任務組態。將
deploymentId
取代為上一個步驟的 ID。aws greengrassv2 get-deployment --deployment-id
deploymentId
回應包含部署的詳細資訊。
-
將下列任一鍵/值對從上一個命令的回應複製到
deployment.json
。您可以變更新部署的這些值。-
deploymentName
– 部署的名稱。 -
components
– 部署的元件。若要解除安裝元件,請從此物件中移除它。 -
deploymentPolicies
– 部署的政策。 -
iotJobConfiguration
– 部署的任務組態。 -
tags
– 部署的標籤。
-
-
-
(選用) 定義部署的名稱。將
deploymentName
取代為部署的名稱。{ "targetArn": "
targetArn
", "deploymentName": "deploymentName
" } -
新增每個元件以部署目標裝置。若要這樣做,請將索引鍵/值對新增至
components
物件,其中索引鍵是元件名稱,而值是包含該元件詳細資訊的物件。為您新增的每個元件指定下列詳細資訊:-
version
– 要部署的元件版本。 -
configurationUpdate
– 要部署的組態更新。更新是一種修補程式操作,可修改元件在每個目標裝置上的現有組態,如果元件不存在於目標裝置上,則會修改元件的預設組態。您可以指定下列組態更新: -
runWith
– (選用) AWS IoT Greengrass 核心軟體用來在核心裝置上執行此元件程序的系統程序選項。如果您省略runWith
物件中的參數, AWS IoT Greengrass Core 軟體會使用您在 Greengrass 核元件上設定的預設值。您可以指定下列任一選項:
-
posixUser
– POSIX 系統使用者和選用的群組,用於在 Linux 核心裝置上執行此元件。如果指定,使用者和群組必須存在於每個 Linux 核心裝置上。以下列格式指定使用者和群組,並以冒號 (:
) 分隔:user:group
。群組為選用項目。如果您未指定群組,則 AWS IoT Greengrass Core 軟體會使用使用者的主要群組。如需詳細資訊,請參閱設定執行元件的使用者。 -
windowsUser
– 用來在 Windows 核心裝置上執行此元件的 Windows 使用者。使用者必須存在於每個 Windows 核心裝置上,且其名稱和密碼必須存放在 LocalSystem 帳戶的 Credentials Manager 執行個體中。如需詳細資訊,請參閱設定執行元件的使用者。此功能適用於 Greengrass 核元件的 v2.5.0 和更新版本。
-
systemResourceLimits
– 要套用至此元件程序的系統資源限制。您可以將系統資源限制套用至一般和非容器 Lambda 元件。如需詳細資訊,請參閱設定元件的系統資源限制。您可以指定下列任一選項:
-
cpus
– 此元件程序可在核心裝置上使用的 CPU 時間上限。核心裝置的 CPU 總時間等於裝置的 CPU 核心數。例如,在具有 4 個 CPU 核心的核心裝置上,您可以將此值設定為2
,將此元件的程序限制為每個 CPU 核心的 50% 用量。在具有 1 個 CPU 核心的裝置上,您可以將此值設定為0.25
,以將此元件的程序限制為 CPU 的 25% 用量。如果您將此值設定為大於 CPU 核心數量的數字,則 AWS IoT Greengrass Core 軟體不會限制元件的 CPU 使用量。 -
memory
– 此元件的程序可在核心裝置上使用的 RAM 數量上限 (以 KB 為單位)。
此功能適用於 2.4.0 版及更新版本的 Greengrass 核元件。目前 AWS IoT Greengrass 不支援 Windows 核心裝置上的此功能。
-
-
範例基本組態更新
下列範例
components
物件指定 來部署元件com.example.PythonRuntime
,該元件預期組態參數名為pythonVersion
。{ "targetArn": "
targetArn
", "deploymentName": "deploymentName
", "components": { "com.example.PythonRuntime": { "componentVersion": "1.0.0", "configurationUpdate": { "merge": "{\"pythonVersion\":\"3.7\"}" } } } }範例 具有重設和合併更新的範例組態更新
請考慮
com.example.IndustrialDashboard
具有下列預設組態的範例工業儀表板元件 。{ "name": null, "mode": "REQUEST", "network": { "useHttps": true, "port": { "http": 80, "https": 443 }, }, "tags": [] }
下列組態更新會指定下列指示:
-
將 HTTPS 設定重設為其預設值 (
true
)。 -
將工業標籤清單重設為空白清單。
-
合併工業標籤清單,以識別兩個鍋爐的溫度和壓力資料串流。
{ "reset": [ "/network/useHttps", "/tags" ], "merge": { "tags": [ "/boiler/1/temperature", "/boiler/1/pressure", "/boiler/2/temperature", "/boiler/2/pressure" ] } }
下列範例
components
物件會指定 部署此工業儀表板元件和組態更新。{ "targetArn": "
targetArn
", "deploymentName": "deploymentName
", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "reset": [ "/network/useHttps", "/tags" ], "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}" } } } } -
-
(選用) 定義部署的部署政策。您可以設定核心裝置何時可以安全地套用部署,或如果核心裝置無法套用部署時該怎麼辦。若要這麼做,請將
deploymentPolicies
物件新增至deployment.json
,然後執行下列任何動作:-
(選用) 指定元件更新政策 (
componentUpdatePolicy
)。此政策會定義部署是否允許元件延遲更新,直到準備好更新為止。例如,元件可能需要清除資源或完成關鍵動作,才能重新啟動以套用更新。此政策也會定義元件必須回應更新通知的時間量。此政策是具有下列參數的物件:
-
action
– (選用) 是否要通知元件,並等待元件準備好更新時回報。您可以從以下選項中選擇:-
NOTIFY_COMPONENTS
– 部署會在停止前向每個元件發出通知並更新該元件。元件可以使用 SubscribeToComponentUpdates IPC 操作來接收這些通知。 -
SKIP_NOTIFY_COMPONENTS
– 部署不會向元件發出通知,也不會等到可安全更新元件時才更新。
預設為
NOTIFY_COMPONENTS
。 -
-
timeoutInSeconds
每個元件必須使用 DeferComponentUpdate IPC 操作回應更新通知的時間,以秒為單位。如果元件未在此時間內回應,則部署會在核心裝置上繼續。預設為 60 秒。
-
-
(選用) 指定組態驗證政策 (
configurationValidationPolicy
)。此政策定義每個元件必須驗證部署中組態更新的時間長度。元件可以使用 SubscribeToValidateConfigurationUpdates IPC 操作來訂閱通知,以取得自己的組態更新。然後,元件可以使用 SendConfigurationValidityReport IPC 操作來告知 AWS IoT Greengrass Core 軟體組態更新是否有效。如果組態更新無效,部署會失敗。此政策是具有下列參數的物件:
-
timeoutInSeconds
(選用) 每個元件驗證組態更新所需的秒數。如果元件未在此時間內回應,則部署會在核心裝置上繼續。預設為 30 秒。
-
-
(選用) 指定失敗處理政策 (
failureHandlingPolicy
)。此政策是字串,可定義部署失敗時是否要復原裝置。您可以從以下選項中選擇:-
ROLLBACK
– 如果核心裝置上的部署失敗,則 AWS IoT Greengrass 核心軟體會將該核心裝置復原為先前的組態。 -
DO_NOTHING
– 如果在核心裝置上部署失敗,則 AWS IoT Greengrass 核心軟體會保留新的組態。如果新組態無效,這可能會導致元件損壞。
預設為
ROLLBACK
。 -
您在 中的部署
deployment.json
可能看起來類似下列範例:{ "targetArn": "
targetArn
", "deploymentName": "deploymentName
", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "reset": [ "/network/useHttps", "/tags" ], "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}" } } }, "deploymentPolicies": { "componentUpdatePolicy": { "action": "NOTIFY_COMPONENTS", "timeoutInSeconds": 30 }, "configurationValidationPolicy": { "timeoutInSeconds": 60 }, "failureHandlingPolicy": "ROLLBACK" } } -
-
(選用) 定義部署如何停止、推展或逾時。 AWS IoT Greengrass AWS IoT Core 使用任務將部署傳送至核心裝置,因此這些選項與 AWS IoT Core 任務的組態選項相同。如需詳細資訊,請參閱《 AWS IoT 開發人員指南》中的任務推出和中止組態。
若要定義任務選項,請將
iotJobConfiguration
物件新增至deployment.json
。然後,定義要設定的選項。您在 中的部署
deployment.json
可能看起來類似下列範例:{ "targetArn": "
targetArn
", "deploymentName": "deploymentName
", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "reset": [ "/network/useHttps", "/tags" ], "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}" } } }, "deploymentPolicies": { "componentUpdatePolicy": { "action": "NOTIFY_COMPONENTS", "timeoutInSeconds": 30 }, "configurationValidationPolicy": { "timeoutInSeconds": 60 }, "failureHandlingPolicy": "ROLLBACK" }, "iotJobConfiguration": { "abortConfig": { "criteriaList": [ { "action": "CANCEL", "failureType": "ALL", "minNumberOfExecutedThings": 100, "thresholdPercentage": 5 } ] }, "jobExecutionsRolloutConfig": { "exponentialRate": { "baseRatePerMinute": 5, "incrementFactor": 2, "rateIncreaseCriteria": { "numberOfNotifiedThings": 10, "numberOfSucceededThings": 5 } }, "maximumPerMinute": 50 }, "timeoutConfig": { "inProgressTimeoutInMinutes": 5 } } } -
(選用) 為部署新增標籤 (
tags
)。如需詳細資訊,請參閱標記您的 AWS IoT Greengrass Version 2 資源。 -
執行下列命令,從 建立部署
deployment.json
。aws greengrassv2 create-deployment --cli-input-json file://deployment.json
回應包含可識別此部署
deploymentId
的 。您可以使用部署 ID 來檢查部署的狀態。如需詳細資訊,請參閱檢查部署狀態。