

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 修改部署
<a name="revise-deployments"></a>

每个目标事物或事物组一次只能部署一个活动部署。为已有一个部署的目标创建部署时，新部署中的软件组件会替换先前部署中的软件组件。如果新部署未定义先前部署所定义的组件，则 AWS IoT Greengrass Core 软件会从目标核心设备中删除该组件。您可以修改现有部署，这样就不会将核心设备上运行的组件从先前部署移至目标了。

要修改部署，需要先创建一个部署，该部署从先前部署中存在的相同组件和配置开始。您可以使用 [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) 操作，该操作也是用于[创建部署](create-deployments.md)的操作。

**修改部署（AWS CLI）**

1. <a name="revise-deployment-list-deployments-intro"></a>运行以下命令，列出部署目标的部署。将 *targetArn* 替换为目标 AWS IoT 事物或事物组的 ARN。

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

   响应中包含目标最新部署的列表。复制响应中的 `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` 的文件，并将上一命令的响应复制到该文件中。

1. 从 `deployment.json` 中的 JSON 对象中删除以下键/值对：
   + `deploymentId`
   + `revisionId`
   + `iotJobId`
   + `iotJobArn`
   + `creationTimestamp`
   + `isLatestForTarget`
   + `deploymentStatus`

   [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) 操作需要具有以下结构的有效载荷。

   ```
   {
     "targetArn": "String",
     "components": Map of components,
     "deploymentPolicies": DeploymentPolicies,
     "iotJobConfiguration": DeploymentIoTJobConfiguration,
     "tags": Map of tags
   }
   ```

1. 在 `deployment.json` 中，执行以下任何操作：
   + 更改部署的名称 (`deploymentName`)。
   + 更改部署的组件 (`components`)。
   + 更改部署的策略 (`deploymentPolicies`)。
   + 更改部署的作业配置 (`iotJobConfiguration`)。
   + 更改部署的标签 (`tags`)。

   有关如何定义这些部署详细信息的更多信息，请参阅[创建部署](create-deployments.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)。