

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

# 建立部署
<a name="create-deployments"></a>

您可以建立以物件或物件群組為目標的部署。

當您建立部署時，您可以設定要部署的軟體元件，以及部署任務如何推展到目標裝置。您可以在您提供給 的 JSON 檔案中定義部署 AWS CLI。

部署目標會決定您要在其中執行元件的裝置。若要部署到一個核心裝置，請指定物件。若要部署到多個核心裝置，請指定包含這些裝置的物件群組。如需如何設定物件群組的詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[靜態物件群組](https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html)和[動態物件群組](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html)。

請依照本節中的步驟來建立目標的部署。如需如何更新具有部署之目標上的軟體元件的詳細資訊，請參閱[修訂部署](revise-deployments.md)。

**警告**  
[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) 操作可以從核心裝置解除安裝元件。如果元件存在於先前的部署中，而非新的部署中，核心裝置會解除安裝該元件。為了避免解除安裝元件，請先使用 [ListDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListDeployments.html) 操作來檢查部署的目標是否已有現有的部署。然後，當您建立新的部署時，請使用 [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html) 操作從該現有部署開始。

**建立部署 (AWS CLI)**

1. 建立名為 的檔案`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}}"
   }
   ```

1. 檢查部署目標是否有您要修改的現有部署。請執行下列操作：

   1. <a name="revise-deployment-list-deployments-intro"></a>執行下列命令來列出部署目標的部署。將 {{targetArn}} 取代為目標 AWS IoT 物件或物件群組的 ARN。

      ```
      aws greengrassv2 list-deployments --target-arn {{targetArn}}
      ```

      回應包含具有目標最新部署的清單。如果回應是空的，則目標沒有現有的部署，您可以跳到 [Step 3](#create-deployment-define-name-step)。否則，`deploymentId`請從回應中複製 以用於下一個步驟。
**注意**  <a name="revise-deployment-list-deployments-revision-note"></a>
您也可以修訂目標最新修訂版以外的部署。指定`--history-filter ALL`引數以列出目標的所有部署。然後，複製您要修改的部署 ID。

   1. <a name="revise-deployment-get-deployment"></a>執行下列命令以取得部署的詳細資訊。這些詳細資訊包括中繼資料、元件和任務組態。將 {{deploymentId}} 取代為上一個步驟的 ID。

      ```
      aws greengrassv2 get-deployment --deployment-id {{deploymentId}}
      ```

      回應包含部署的詳細資訊。

   1. 將下列任一鍵/值對從上一個命令的回應複製到 `deployment.json`。您可以變更新部署的這些值。
      + `deploymentName` – 部署的名稱。
      + `components` – 部署的元件。若要解除安裝元件，請從此物件中移除它。
      + `deploymentPolicies` – 部署的政策。
      + `iotJobConfiguration` – 部署的任務組態。
      + `tags` – 部署的標籤。

1. <a name="create-deployment-define-name-step"></a>（選用） 定義部署的名稱。將 {{deploymentName}} 取代為部署的名稱。

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}"
   }
   ```

1. 新增每個元件以部署目標裝置。若要這樣做，請將索引鍵/值對新增至`components`物件，其中索引鍵是元件名稱，而值是包含該元件詳細資訊的物件。為您新增的每個元件指定下列詳細資訊：
   + `version` – 要部署的元件版本。
   + `configurationUpdate` – 要部署的[組態更新](update-component-configurations.md)。更新是一種修補程式操作，可修改元件在每個目標裝置上的現有組態，如果元件不存在於目標裝置上，則會修改元件的預設組態。您可以指定下列組態更新：
     + 重設更新 (`reset`) – （選用） JSON 指標清單，定義要重設為目標裝置上的預設值的組態值。 AWS IoT Greengrass 核心軟體會在套用合併更新之前套用重設更新。如需詳細資訊，請參閱[重設更新](update-component-configurations.md#reset-configuration-update)。
     + 合併更新 (`merge`) – （選用） 定義要合併到目標裝置的組態值的 JSON 文件。您必須將 JSON 文件序列化為字串。如需詳細資訊，請參閱[合併更新](update-component-configurations.md#merge-configuration-update)。
   + <a name="component-run-with-config"></a>`runWith` – （選用） AWS IoT Greengrass 核心軟體用來在核心裝置上執行此元件程序的系統程序選項。如果您省略`runWith`物件中的參數， AWS IoT Greengrass Core 軟體會使用您在 [Greengrass 核元件](greengrass-nucleus-component.md)上設定的預設值。

     您可以指定下列任一選項：
     + `posixUser` – POSIX 系統使用者和選用的群組，用於在 Linux 核心裝置上執行此元件。如果指定，使用者和群組必須存在於每個 Linux 核心裝置上。以下列格式指定使用者和群組，並以冒號 (`:`) 分隔：`user:group`。群組為選用項目。如果您未指定群組，則 AWS IoT Greengrass Core 軟體會使用使用者的主要群組。如需詳細資訊，請參閱[設定執行元件的使用者](configure-greengrass-core-v2.md#configure-component-user)。
     + `windowsUser` – 用來在 Windows 核心裝置上執行此元件的 Windows 使用者。使用者必須存在於每個 Windows 核心裝置上，且其名稱和密碼必須存放在 LocalSystem 帳戶的 Credentials Manager 執行個體中。如需詳細資訊，請參閱[設定執行元件的使用者](configure-greengrass-core-v2.md#configure-component-user)。

       此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.0 和更新版本。
     + `systemResourceLimits` – 要套用至此元件程序的系統資源限制。您可以將系統資源限制套用至一般和非容器 Lambda 元件。如需詳細資訊，請參閱[設定元件的系統資源限制](configure-greengrass-core-v2.md#configure-component-system-resource-limits)。

       您可以指定下列任一選項：
       + `cpus` – <a name="system-resource-limits-cpu-definition-this"></a>此元件程序可在核心裝置上使用的 CPU 時間上限。核心裝置的 CPU 總時間等於裝置的 CPU 核心數。例如，在具有 4 個 CPU 核心的核心裝置上，您可以將此值設定為 `2`，將此元件的程序限制為每個 CPU 核心的 50% 用量。在具有 1 個 CPU 核心的裝置上，您可以將此值設定為 `0.25`，以將此元件的程序限制為 CPU 的 25% 用量。如果您將此值設定為大於 CPU 核心數量的數字，則 AWS IoT Greengrass Core 軟體不會限制元件的 CPU 使用量。
       + `memory` – <a name="system-resource-limits-memory-definition-this"></a>此元件的程序可在核心裝置上使用的 RAM 數量上限 （以 KB 為單位）。

       此功能適用於 2.4.0 版及更新版本的 [Greengrass 核元件](greengrass-nucleus-component.md)。目前 AWS IoT Greengrass 不支援 Windows 核心裝置上的此功能。

      
**Example 範例基本組態更新**  

   下列範例`components`物件指定 來部署元件 `com.example.PythonRuntime`，該元件預期組態參數名為 `pythonVersion`。

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.PythonRuntime": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"pythonVersion\":\"3.7\"}"
         }
       }
     }
   }
   ```  
**Example 具有重設和合併更新的範例組態更新**  

   請考慮`com.example.IndustrialDashboard`具有下列預設組態的範例工業儀表板元件 。

   ```
   {
     "name": null,
     "mode": "REQUEST",
     "network": {
       "useHttps": true,
       "port": {
         "http": 80,
         "https": 443
       },
     },
     "tags": []
   }
   ```

   下列組態更新會指定下列指示：

   1. 將 HTTPS 設定重設為其預設值 (`true`)。

   1. 將工業標籤清單重設為空白清單。

   1. 合併工業標籤清單，以識別兩個鍋爐的溫度和壓力資料串流。

   ```
   {
     "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\"]}"
         }
       }
     }
   }
   ```

1. （選用） 定義部署的部署政策。您可以設定核心裝置何時可以安全地套用部署，或如果核心裝置無法套用部署時該怎麼辦。若要這麼做，請將`deploymentPolicies`物件新增至 `deployment.json`，然後執行下列任何動作：

   1. （選用） 指定元件更新政策 (`componentUpdatePolicy`)。此政策會定義部署是否允許元件延遲更新，直到準備好更新為止。例如，元件可能需要清除資源或完成關鍵動作，才能重新啟動以套用更新。此政策也會定義元件必須回應更新通知的時間量。

      此政策是具有下列參數的物件：
      + `action` – （選用） 是否要通知元件，並等待元件準備好更新時回報。您可以從以下選項中選擇：
        + `NOTIFY_COMPONENTS` – 部署會在停止前向每個元件發出通知並更新該元件。元件可以使用 [SubscribeToComponentUpdates](ipc-component-lifecycle.md#ipc-operation-subscribetocomponentupdates) IPC 操作來接收這些通知。
        + `SKIP_NOTIFY_COMPONENTS` – 部署不會向元件發出通知，也不會等到可安全更新元件時才更新。

        預設為 `NOTIFY_COMPONENTS`。
      + `timeoutInSeconds` 每個元件必須使用 [DeferComponentUpdate](ipc-component-lifecycle.md#ipc-operation-defercomponentupdate) IPC 操作回應更新通知的時間，以秒為單位。如果元件未在此時間內回應，則部署會在核心裝置上繼續。

        預設為 60 秒。

   1. （選用） 指定組態驗證政策 (`configurationValidationPolicy`)。此政策定義每個元件必須驗證部署中組態更新的時間長度。元件可以使用 [SubscribeToValidateConfigurationUpdates](ipc-component-configuration.md#ipc-operation-subscribetovalidateconfigurationupdates) IPC 操作來訂閱通知，以取得自己的組態更新。然後，元件可以使用 [SendConfigurationValidityReport](ipc-component-configuration.md#ipc-operation-sendconfigurationvalidityreport) IPC 操作來告知 AWS IoT Greengrass Core 軟體組態更新是否有效。如果組態更新無效，部署會失敗。

      此政策是具有下列參數的物件：
      + `timeoutInSeconds` （選用） 每個元件驗證組態更新所需的秒數。如果元件未在此時間內回應，則部署會在核心裝置上繼續。

        預設為 30 秒。

   1. （選用） 指定失敗處理政策 (`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"
     }
   }
   ```

1. （選用） 定義部署如何停止、推展或逾時。 AWS IoT Greengrass AWS IoT Core 使用任務將部署傳送至核心裝置，因此這些選項與 AWS IoT Core 任務的組態選項相同。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[任務推出和中止組態](https://docs.aws.amazon.com/iot/latest/developerguide/job-rollout-abort.html)。

   若要定義任務選項，請將`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
       }
     }
   }
   ```

1. （選用） 為部署新增標籤 (`tags`)。如需詳細資訊，請參閱[標記您的 AWS IoT Greengrass Version 2 資源](tag-resources.md)。

1. 執行下列命令，從 建立部署`deployment.json`。

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>回應包含可識別此部署`deploymentId`的 。您可以使用部署 ID 來檢查部署的狀態。如需詳細資訊，請參閱[檢查部署狀態](check-deployment-status.md#check-cloud-deployment-status)。