

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

# 更新自定义复合模型（组件）
<a name="update-custom-composite-models"></a>

您可以使用 AWS IoT SiteWise API 更新自定义复合模型，也可以使用 AWS IoT SiteWise 控制台更新组件。

**Topics**
+ [更新组件（控制台）](#update-custom-composite-model-console)
+ [更新自定义复合模型（AWS CLI）](#update-custom-composite-model-cli)

## 更新组件（控制台）
<a name="update-custom-composite-model-console"></a>

您可以使用 AWS IoT SiteWise 控制台更新组件。

**要创建组件（控制台），请执行以下步骤：**

1. <a name="sitewise-open-console"></a>导航至 [AWS IoT SiteWise 控制台](https://console.aws.amazon.com/iotsitewise/)。

1. <a name="sitewise-choose-models"></a>在导航窗格中，选择**模型**。

1. 选择组件所属的资产模型。

1. 在**属性**选项卡上，选择**组件**。

1. 选择要更新的组件。

1. 选择**编辑**。

1. 在**编辑组件**页面上，执行以下任何操作：
   + 在 **模型详细信息** 中，更改模型的 **名称**。
   + 更改任何 **属性定义**。您无法更改现有属性的 **数据类型**。有关更多信息，请参阅 [定义静态数据（属性）](attributes.md)。
   + 更改任何 **测量值定义**。您无法更改现有测量值的 **数据类型**。有关更多信息，请参阅 [定义来自设备的数据流（测量值）](measurements.md)。
   + 更改任何 **转换定义**。有关更多信息，请参阅 [转换数据（转换）](transforms.md)。
   + 更改任何 **指标定义**。您无法更改现有指标的 **时间间隔**。有关更多信息，请参阅 [聚合来自属性和其他资产（指标）的数据](metrics.md)。

1. 选择 **Save**。

## 更新自定义复合模型（AWS CLI）
<a name="update-custom-composite-model-cli"></a>

使用 AWS Command Line Interface (AWS CLI) 更新自定义复合模型。

要更新名称或描述，请使用[UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html)操作。您也可以更新属性（仅限于内联自定义复合模型）。您无法更新 component-model-based自定义复合模型的属性，因为其引用的组件模型提供了其关联的属性。

**重要**  
如果您从自定义复合模型中移除某个属性，则 AWS IoT SiteWise 会删除该属性的所有先前数据。您无法更改现有属性的类型或数据类型。  
要将现有的复合模型属性替换为具有相同 `name` 的新属性，请执行以下操作：  
提交移除所有现有属性的 `UpdateAssetModelCompositeModel` 请求。
提交第二个包含新属性的 `UpdateAssetModelCompositeModel` 请求。新的资产属性将与前一个资产属性`name`相同， AWS IoT SiteWise 并将生成一个新的唯一资产`id`。

**要更新自定义复合模型（AWS CLI），请执行以下步骤：**

1. 要检索现有复合模型定义，请运行以下命令。*composite-model-id*替换为要更新的自定义复合模型的 ID 或外部 ID，以及*asset-model-id*与自定义复合模型关联的资产模型。有关更多信息，请参阅 *AWS IoT SiteWise 《用户指南》*。

   1. 运行以下命令：

      ```
      aws iotsitewise describe-asset-model-composite-model \
      --asset-model-composite-model-id composite-model-id \
      --asset-model-id asset-model-id
      ```

   1.  上面的命令会返回与关联模型的最新版本相对应的复合模型定义。对于资产模型处于 `FAILED` 状态的用例，请检索与其活动版本相对应的有效模型定义，以构建您的更新请求。有关详细信息，请参阅 [资产模型版本](model-active-version.md)。

   1. 运行以下命令以检索活动模型定义：

      ```
      aws iotsitewise describe-asset-model-composite-model \
      --asset-model-composite-model-id composite-model-id \
      --asset-model-id asset-model-id \
      --asset-model-version ACTIVE
      ```

   1. 有关更多信息，请参阅 [DescribeAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModelCompositeModel.html) 操作。

1. 创建一个名为 `update-custom-composite-model.json` 的文件，然后将上一命令的响应复制到该文件中。

1. 从 `update-custom-composite-model.json` 的 JSON 对象中删除每个键/值对，但保留以下字段：
   + `assetModelCompositeModelName`
   + `assetModelCompositeModelDescription`（如果存在）
   + `assetModelCompositeModelProperties`（如果存在）

1. 在 `update-custom-composite-model.json` 中，执行以下任何操作：
   + 更改 `assetModelCompositeModelName` 的值。
   + 添加或移除 `assetModelCompositeModelDescription`，或更改其值。
   + 仅适用于内联自定义复合模型：更改、添加或移除 `assetModelCompositeModelProperties` 中的资产模型的任何属性。

   有关此文件所需格式的更多信息，请参阅的请求语法[UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html)。

1. 运行以下命令，使用存储在 `update-custom-composite-model.json` 中的定义更新自定义复合模型。*composite-model-id*替换为复合模型的 ID 和它所在*asset-model-id*的资产模型的 ID。

   ```
   aws iotsitewise update-asset-model-composite-model \
   --asset-model-composite-model-id composite-model-id \
   --asset-model-id asset-model-id \
   --cli-input-json file://update-custom-composite-model.json
   ```

**重要**  
 当多个用户同时更新一个资产模型时，一个用户所作的更改可能会无意中被另一个用户覆盖。为防止出现这种情况，您必须定义一个有条件的更新请求。请参阅[对资产模型写入进行乐观锁定](opt-locking-for-model.md)。