

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

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

**注意**  
子部署功能可在 Greengrass nucleus 2.9.0 版及更新版本上使用。無法將組態部署到具有舊版 Greengrass 核元件的子部署。

子部署是針對父部署中較小裝置子集的部署。您可以使用子部署將組態部署到較小的裝置子集。您也可以建立子部署，在該父部署中的一或多個裝置失敗時重試失敗的父部署。使用此功能，您可以選取在該父部署中失敗的裝置，並建立子部署以測試組態，直到子部署成功為止。子部署成功後，您可以將該組態重新部署到父部署。

遵循本節中的步驟來建立子部署並檢查其狀態。如需如何建立部署的詳細資訊，請參閱[建立部署](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html)。

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

1. <a name="create-subdeployments-step1"></a>執行下列命令來擷取物件群組的最新部署。將命令中的 ARN 取代為要查詢之物件群組的 ARN。`--history-filter` 設定為 **LATEST\$1ONLY**以查看該物件群組的最新部署。

   ```
   aws greengrassv2 list-deployments --target-arn arn:aws:iot:region:account-id:thinggroup/thingGroupName --history-filter LATEST_ONLY
   ```

1. 將 `deploymentId` 從回應複製到 **list-deployments**命令，以在下一個步驟中使用。

1. 執行下列命令來擷取部署的狀態。`deploymentId` 將 取代為要查詢之部署的 ID。

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

1. 將 `iotJobId` 從回應複製到 **get-deployment**命令，以在下列步驟中使用。

1. 執行下列命令，以擷取指定任務的任務執行清單。將 *jobID* 取代為上一個步驟`iotJobId`的 。將*狀態*取代為您要篩選的狀態。您可以篩選具有下列狀態的結果：
   + `QUEUED`
   + `IN_PROGRESS`
   + `SUCCEEDED`
   + `FAILED`
   + `TIMED_OUT`
   + `REJECTED`
   + `REMOVED`
   + `CANCELED`

   ```
   aws iot list-job-executions-for-job --job-id jobID --status status
   ```

1. 為您的子部署建立新的 AWS IoT 物件群組，或使用現有的物件群組。然後，將 AWS IoT 物件新增至此物件群組。您可以使用物件群組來管理 Greengrass 核心裝置的機群。當您將軟體元件部署到裝置時，您可以鎖定個別裝置或裝置群組。您可以將裝置新增至具有作用中 Greengrass 部署的物件群組。新增後，您就可以將該物件群組的軟體元件部署到該裝置。

   若要建立新的物件群組並將您的裝置新增至其中，請執行下列動作：

   1. 建立 AWS IoT 物件群組。將 *MyGreengrassCoreGroup* 取代為新物件群組的名稱。您無法在物件群組名稱中使用冒號 (：)。
**注意**  
如果子部署的物件群組與一個 搭配使用`parentTargetArn`，則無法與不同的父機群重複使用。如果物件群組已用於為另一個機群建立子部署，則 API 會傳回錯誤。

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      如果請求成功，回應看起來與下列範例類似：

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. 將佈建的 Greengrass 核心新增至您的物件群組。使用這些參數執行下列命令：
      + 將 *MyGreengrassCore* 取代為您佈建的 Greengrass 核心的名稱。
      + 將 *MyGreengrassCoreGroup* 取代為您的物件群組名稱。

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      如果請求成功，命令不會有任何輸出。

1. 建立名為 的檔案`deployment.json`，然後將下列 JSON 物件複製到 檔案。將 *targetArn* 取代為 AWS IoT 物件群組的 ARN，以鎖定子部署的目標。子部署目標只能是物件群組。物件群組 ARNs的格式如下：
   + **物件群組** – `arn:aws:iot:region:account-id:thinggroup/thingGroupName`

   ```
   {
     "targetArn": "targetArn"
   }
   ```

1. 再次執行下列命令，以取得原始部署的詳細資訊。這些詳細資訊包括中繼資料、元件和任務組態。將 *deploymentId* 取代為來自 的 ID[Step 1](#create-subdeployments-step1)。您可以使用此部署組態來設定子部署，並視需要進行變更。

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

   回應包含部署的詳細資訊。將下列任一鍵值對從**get-deployment**命令的回應複製到 `deployment.json`。您可以變更子部署的這些值。如需此命令詳細資訊的詳細資訊，請參閱 [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html)。
   + `components` – 部署的元件。若要解除安裝元件，請從此物件中移除它。
   + `deploymentName` – 部署的名稱。
   + `deploymentPolicies` – 部署的政策。
   + `iotJobConfiguration` – 部署的任務組態。
   + `parentTargetArn` – 父系部署的目標。
   + `tags` – 部署的標籤。

1. 執行下列命令，從 建立子部署`deployment.json`。將 *subdeploymentName* 取代為子部署的名稱。

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

   回應包含可識別此子部署`deploymentId`的 。您可以使用部署 ID 來檢查部署的狀態。如需詳細資訊，請參閱[檢查部署狀態](https://docs.aws.amazon.com/greengrass/v2/developerguide/check-deployment-status.html#check-cloud-deployment-status)。

1. 如果子部署成功，您可以使用其組態來修改父部署。複製`deployment.json`您在上一個步驟中使用的 。`targetArn` 將 JSON 檔案中的 取代為父系部署的 ARN，並執行下列命令來使用此新組態建立父系部署。
**注意**  
如果您建立新的父機群部署修訂版，它會取代該父部署的所有部署修訂版和子部署。如需詳細資訊，請參閱[修訂部署](https://docs.aws.amazon.com/greengrass/v2/developerguide/revise-deployments.html)。

   ```
   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)。