

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자산 및 모델 업데이트
<a name="update-assets-and-models"></a>

에서 자산, 자산 모델, 구성 요소 모델 및 인터페이스를 업데이트 AWS IoT SiteWise 하여 이름과 정의를 수정할 수 있습니다. 이러한 업데이트 작업은 비동기식이며 전파하는 데 시간이 걸립니다 AWS IoT SiteWise. 추가로 변경하기 전에 자산 또는 모델의 상태를 확인합니다. 업데이트된 자산이나 모델을 계속 사용하려면 변경 사항이 전파될 때까지 기다려야 합니다.

**Topics**
+ [에서 자산 업데이트 AWS IoT SiteWise](update-assets.md)
+ [자산 모델, 구성 요소 모델 및 인터페이스 업데이트](update-asset-models.md)
+ [사용자 지정 복합 모델 업데이트(구성 요소)](update-custom-composite-models.md)
+ [자산 모델 쓰기를 위한 낙관적 잠금](opt-locking-for-model.md)

# 에서 자산 업데이트 AWS IoT SiteWise
<a name="update-assets"></a>

 AWS IoT SiteWise 콘솔 또는 API를 사용하여 자산의 이름을 업데이트할 수 있습니다.

자산을 업데이트할 때 자산의 상태는 변경 사항이 전파될 때까지 `UPDATING`입니다. 자세한 내용은 [자산 및 모델 상태](asset-and-model-states.md) 단원을 참조하십시오.

**Topics**
+ [자산 업데이트(콘솔)](#update-asset-console)
+ [자산 업데이트(AWS CLI)](#update-asset-cli)

## 자산 업데이트(콘솔)
<a name="update-asset-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-assets"></a>탐색 창에서 **자산**을 선택합니다.

1. 업데이트할 자산을 선택합니다.
**작은 정보**  <a name="sitewise-expand-asset-hierarchy"></a>
화살표 아이콘을 선택하여 자산 계층 구조를 확장하고 자산을 찾을 수 있습니다.

1. **편집**을 선택합니다.

1. 자산의 **이름**을 업데이트합니다.

1. (선택 사항) 이 페이지에서 자산에 대한 기타 정보를 업데이트합니다. 자세한 내용은 다음 자료를 참조하세요.
   + [에 대한 데이터 스트림 관리 AWS IoT SiteWise](manage-data-streams.md)
   + [속성 값 업데이트](update-attribute-values.md)
   + [다른 AWS 서비스와 상호 작용](interact-with-other-services.md)

1. **저장**을 선택합니다.

## 자산 업데이트(AWS CLI)
<a name="update-asset-cli"></a>

 AWS Command Line Interface (AWS CLI)를 사용하여 자산 이름을 업데이트할 수 있습니다.

[UpdateAsset](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAsset.html) 작업을 사용하여 자산을 업데이트합니다. 다음 파라미터를 지정합니다.
+ `assetId` – 자산의 ID입니다. 이는 UUID 형식의 실제 ID이거나 `externalId:myExternalId`(있는 경우)입니다. 자세한 내용은AWS IoT SiteWise 사용 설명서**의 [외부 ID가 있는 참조 객체](object-ids.md#external-id-references)를 참조하세요.
+ `assetName` - 자산의 새 이름입니다.

**자산의 이름을 업데이트하려면(AWS CLI) 다음을 수행하세요.**
+ 다음 명령을 실행하여 자산의 이름을 업데이트합니다. *asset-id*를 자산의 ID 또는 외부 ID로 바꿉니다. *asset-name*을 자산의 새 이름으로 업데이트합니다.

  ```
  aws iotsitewise update-asset \
    --asset-id asset-id \
    --asset-name asset-name
  ```

# 자산 모델, 구성 요소 모델 및 인터페이스 업데이트
<a name="update-asset-models"></a>

 AWS IoT SiteWise 콘솔 또는 API를 사용하여 자산 모델, 구성 요소 모델 또는 인터페이스를 업데이트합니다.

기존 속성의 유형 또는 데이터 유형과 기존 지표의 기간은 변경할 수 없습니다. 또한 모델 유형을 자산 모델에서 구성 요소 모델 또는 인터페이스로 또는 반대로 변경할 수 없습니다.

**중요**  
자산 모델 또는 구성 요소 모델에서 속성을 제거하면가 해당 속성에 대한 모든 이전 데이터를 AWS IoT SiteWise 삭제합니다. 구성 요소 모델의 경우, 이는 해당 구성 요소 모델을 사용하는 모든 자산 모델에 영향을 미치므로 변경 사항이 얼마나 광범위하게 적용될 수 있는지 특히 신중하게 고려해야 합니다.
자산 모델에서 계층 구조 정의를 제거하면는 해당 계층 구조의 모든 자산을 연결 AWS IoT SiteWise 해제합니다.

자산 모델을 업데이트하면 해당 모델을 기반으로 하는 모든 자산에 기본 모델의 변경 사항이 반영됩니다. 변경 사항이 전파될 때까지 각 자산에는 `UPDATING` 상태가 있습니다. 이러한 자산과 상호 작용하기 전에 자산의 상태가 `ACTIVE` 상태로 돌아올 때까지 기다려야 합니다. 이 기간 동안 업데이트된 자산 모델의 상태는 `PROPAGATING`가 됩니다.

구성 요소 모델을 업데이트하면 해당 구성 요소 모델을 통합하는 모든 자산 모델이 변경 사항을 반영합니다. 구성 요소 모델의 변경 사항이 전파될 때까지 영향을 받는 각 자산 모델에는 이전 단락에 설명된 것처럼 `UPDATING` 상태가 표시된 후, 연결된 자산이 업데이트되면서 `PROPAGATING` 상태가 표시됩니다. 이러한 자산 모델과 상호 작용하기 전에 자산 모델이 `ACTIVE` 상태로 돌아올 때까지 기다려야 합니다. 이 기간 동안 업데이트된 구성 요소 모델의 상태는 `PROPAGATING`이 됩니다.

자세한 내용은 [자산 및 모델 상태](asset-and-model-states.md) 단원을 참조하십시오.

**Topics**
+ [자산 모델, 구성 요소 모델 또는 인터페이스 업데이트(콘솔)](#update-asset-model-console)
+ [자산 모델, 구성 요소 모델 또는 인터페이스 업데이트(AWS CLI)](#update-asset-model-cli)

## 자산 모델, 구성 요소 모델 또는 인터페이스 업데이트(콘솔)
<a name="update-asset-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. **모델 편집** 페이지에서 다음 중 하나를 수행합니다.
   + **모델 세부 정보**에서 모델의 **이름을** 변경합니다.
   + **속성 정의**를 변경합니다. 기존 속성의 **데이터 형식**은 변경할 수 없습니다. 자세한 내용은 [정적 데이터(속성) 정의](attributes.md) 단원을 참조하십시오.
   + **측정 정의**를 변경합니다. 기존 측정의 **데이터 형식**은 변경할 수 없습니다. 자세한 내용은 [장비의 데이터 스트림 정의(측정값)](measurements.md) 단원을 참조하십시오.
   + **변환 정의**를 변경합니다. 자세한 내용은 [데이터 변환(변환)](transforms.md) 단원을 참조하십시오.
   + **지표 정의**를 변경합니다. 기존 지표의 **시간 간격**은 변경할 수 없습니다. 자세한 내용은 [속성과 기타 자산에서 데이터 집계(지표)](metrics.md) 단원을 참조하십시오.
   + (자산 모델만 해당) **계층 구조 정의**를 변경합니다. 기존 계층 구조의 **계층 구조 모델**은 변경할 수 없습니다. 자세한 내용은 [자산 모델 계층 정의](define-asset-hierarchies.md) 단원을 참조하십시오.

1. **저장**을 선택합니다.

**참고**  
 마지막으로 **모델 편집** 페이지를 연 이후 다른 사용자가 자산 모델을 성공적으로 업데이트하면 콘솔에서 수행된 업데이트 요청이 거부됩니다. 콘솔은 사용자에게 **모델 편집** 페이지를 **새로 고쳐** 업데이트된 모델을 가져오라는 메시지를 표시합니다. 다시 업데이트하고 저장을 다시 시도해야 합니다. 자세한 내용은 [자산 모델 쓰기를 위한 낙관적 잠금](opt-locking-for-model.md) 섹션을 참조하세요.

## 자산 모델, 구성 요소 모델 또는 인터페이스 업데이트(AWS CLI)
<a name="update-asset-model-cli"></a>

 AWS Command Line Interface (AWS CLI)를 사용하여 자산 모델, 구성 요소 모델 또는 인터페이스를 업데이트합니다.

[UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) API를 사용하여 자산 모델, 구성 요소 모델 또는 인터페이스의 이름, 설명 및 속성을 업데이트합니다. 자산 모델의 경우에만 계층을 업데이트할 수 있습니다. 인터페이스의 경우 속성 및 계층 구조를 업데이트할 수 있습니다. 다음 파라미터를 지정합니다.
+ `assetModelId` – 자산의 ID입니다. 이는 UUID 형식의 실제 ID이거나 `externalId:myExternalId`(있는 경우)입니다. 자세한 내용은AWS IoT SiteWise 사용 설명서**의 [외부 ID가 있는 참조 객체](object-ids.md#external-id-references)를 참조하세요.

페이로드에 업데이트된 모델을 지정합니다. 자산 모델 또는 구성 요소 모델에 필요한 형식에 대해 자세히 알아보려면 [에서 자산 모델 생성 AWS IoT SiteWise](create-asset-models.md) 섹션을 참조하세요.

**주의**  
[UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) API는 페이로드에서 제공하는 모델로 기존 모델을 덮어씁니다. 모델의 속성이나 계층 구조가 삭제되지 않도록 하려면 업데이트된 모델 페이로드에 해당 ID와 정의를 포함해야 합니다. 모델의 기존 구조를 쿼리하는 방법을 알아보려면 [DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) 작업을 참조하세요.

**참고**  
다음 절차는 `AWS/ALARM` 유형의 복합 모델만 업데이트할 수 있습니다. `CUSTOM` 복합 모델을 업데이트하려면 대신 [UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html)을 사용합니다. 자세한 내용은 [사용자 지정 복합 모델 업데이트(구성 요소)](update-custom-composite-models.md) 단원을 참조하십시오.

**자산 모델 또는 구성 요소 모델을 업데이트하려면(AWS CLI) 다음을 수행하세요.**

1. 다음 명령을 실행하여 기존 자산 모델 정의를 검색합니다. *asset-model-id*를 업데이트할 자산 모델 또는 구성 요소 모델의 ID 또는 외부 ID로 바꿉니다.

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

   위 명령은 모델의 최신 버전에 해당하는 모델 정의를 반환합니다.

    자산 모델이 `FAILED` 상태에 있는 사용 사례의 경우 활성 버전에 해당하는 유효한 모델 정의를 검색하여 업데이트 요청을 빌드합니다. 세부 정보는 [자산 모델 버전](model-active-version.md) 섹션을 참조하세요. 다음 명령을 실행하여 활성 모델 정의를 검색합니다.

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

   이 작업은 자산 모델의 세부 사항이 포함된 응답을 반환합니다. 응답의 구조는 다음과 같습니다.

   ```
   {
       "assetModelId": "String",
       "assetModelArn": "String",
       "assetModelName": "String",
       "assetModelDescription": "String",
       "assetModelProperties": Array of AssetModelProperty,
       "assetModelHierarchies": Array of AssetModelHierarchyDefinition,
       "assetModelCompositeModels": Array of AssetModelCompositeModel,
       "assetModelCompositeModelSummaries": Array of AssetModelCompositeModelSummary,
       "assetModelCreationDate": "String",
       "assetModelLastUpdateDate": "String",
       "assetModelStatus": {
         "state": "String",
         "error": {
           "code": "String",
           "message": "String"
         },
       "assetModelType": "String"
       },
       "assetModelVersion": "String",
       "eTag": "String"
   }
   ```

   자세한 내용은 [DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) 작업을 참조하세요.

1. `update-asset-model.json`이라는 파일을 만들고 이전 명령의 응답을 파일에 복사합니다.

1. `update-asset-model.json`의 JSON 객체에서 다음 키-값 페어를 제거합니다.
   + `assetModelId`
   + `assetModelArn`
   + `assetModelCompositeModelSummaries`
   + `assetModelCreationDate`
   + `assetModelLastUpdateDate`
   + `assetModelStatus`
   + `assetModelType`
   + `assetModelVersion`
   + `eTag`

   [UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) 작업에는 다음과 같은 구조의 페이로드가 필요합니다.

   ```
   {
     "assetModelName": "String",
     "assetModelDescription": "String",
     "assetModelProperties": Array of AssetModelProperty,
     "assetModelHierarchies": Array of AssetModelHierarchyDefinition,
     "assetModelCompositeModels": Array of AssetModelCompositeModel
   }
   ```

1. `update-asset-model.json`에서 다음을 수행합니다.
   + 자산 모델의 이름(`assetModelName`)을 변경합니다.
   + 자산 모델의 설명(`assetModelDescription`)을 변경, 추가 또는 제거합니다.
   + 자산 모델의 속성(`assetModelProperties`)을 변경, 추가 또는 제거합니다. 기본 속성의 `dataType` 또는 기존 지표의 `window`는 변경할 수 없습니다. 자세한 내용은 [데이터 속성 정의](asset-properties.md) 단원을 참조하십시오.
   + 자산 모델의 계층 구조(`assetModelHierarchies`)를 변경, 추가 또는 제거합니다. 기존 계층 구조의 `childAssetModelId`는 변경할 수 없습니다. 자세한 내용은 [자산 모델 계층 정의](define-asset-hierarchies.md) 단원을 참조하십시오.
   + `AWS/ALARM`(`assetModelCompositeModels`) 유형 자산 모델의 복합 모델을 변경, 추가 또는 제거합니다. 경보는 다른 속성을 모니터링하므로 장비나 프로세스에 주의가 필요한 시점을 식별할 수 있습니다. 각 경보 정의는 경보가 사용하는 속성 집합을 표준화하는 복합 모델입니다. 자세한 내용은 [에서 경보를 사용하여 데이터 모니터링 AWS IoT SiteWise](industrial-alarms.md) 및 [에서 자산 모델에 대한 경보 정의 AWS IoT SiteWise](define-alarms.md) 섹션을 참조하세요.

1. 다음 명령을 실행하여 `update-asset-model.json`에 저장된 정의로 자산 모델을 업데이트합니다. *asset-model-id*를 자산 모델의 ID로 바꿉니다.

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

**중요**  
 여러 사용자가 자산 모델을 동시에 업데이트하면 한 사용자가 다른 사용자의 변경 사항을 실수로 덮어쓸 수 있습니다. 이를 방지하려면 조건부 업데이트 요청을 정의해야 합니다. [자산 모델 쓰기를 위한 낙관적 잠금](opt-locking-for-model.md)을(를) 참조하세요.

# 사용자 지정 복합 모델 업데이트(구성 요소)
<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. **저장**을 선택합니다.

## 사용자 지정 복합 모델 업데이트(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) 작업을 사용합니다. 인라인 사용자 지정 복합 모델의 경우에만 속성도 업데이트할 수 있습니다. 참조된 구성 요소 모델은 관련 속성을 제공하므로 구성 요소 모델 기반 사용자 지정 복합 모델의 속성을 업데이트할 수 없습니다.

**중요**  
사용자 지정 복합 모델에서 속성을 제거하면가 해당 속성에 대한 모든 이전 데이터를 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)을(를) 참조하세요.

# 자산 모델 쓰기를 위한 낙관적 잠금
<a name="opt-locking-for-model"></a>

 자산 모델을 업데이트할 때 사용자는 다음을 수행합니다.

1. 현재 자산 모델 정의를 읽습니다.

1. 필요한 변경 사항으로 자산 모델 정의를 편집합니다.

1. 자산 모델을 새 정의로 업데이트합니다.

 두 사용자가 모델을 업데이트하는 시나리오에서는 다음이 가능합니다.
+ 사용자 A는 자산 모델 X 정의를 읽습니다.
+ 사용자 B는 자산 모델 X 정의를 읽고 변경 사항을 커밋하여 X의 정의를 수정합니다.
+ 사용자 A는 사용자 B의 변경 사항을 확인하거나 통합하지 않고 자산 모델 X에 대한 사용자 B의 변경 사항을 커밋하고 덮어씁니다.

 낙관적 잠금은 위의 시나리오와 같이 우발적인 덮어쓰기를 방지하기 AWS IoT SiteWise 위해에서 사용하는 메커니즘입니다. 낙관적 잠금은 업데이트 또는 삭제되는 자산 모델의 현재 버전이 AWS IoT SiteWise의 현재 버전과 동일하도록 하기 위한 전략입니다. 이렇게 하면 자산 모델 쓰기가 실수로 업데이트되어 덮어쓰여지지 않습니다.

낙관적 잠금을 사용하여 자산 모델 쓰기를 수행하려면 다음 단계를 따르세요.

**Topics**
+ [낙관적 잠금을 사용하여 자산 모델 쓰기 수행(콘솔)](#opt-locking-for-model-console)
+ [낙관적 잠금을 사용하여 자산 모델 쓰기 수행(AWS CLI)](#opt-locking-for-model-cli)

## 낙관적 잠금을 사용하여 자산 모델 쓰기 수행(콘솔)
<a name="opt-locking-for-model-console"></a>

아래 절차에서는 콘솔에서 자산 모델의 활성 버전에 대해 낙관적 잠금을 사용하여 자산 모델 쓰기를 수행하는 방법을 설명합니다.

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. [**Refresh**]를 선택합니다.

1. 5단계와 6단계를 다시 따릅니다.

## 낙관적 잠금을 사용하여 자산 모델 쓰기 수행(AWS CLI)
<a name="opt-locking-for-model-cli"></a>

아래 절차는 AWS CLI에서 낙관적 잠금을 사용하여 자산 모델 쓰기를 수행하는 방법을 설명합니다.

1. **현재 모델 정의와 연결된 ETag 가져오기**

    `ETag`는 자산 모델의 각 새 표현에 대해 생성된 고유한 토큰입니다. [DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) API를 직접적으로 호출하여 응답에서 현재 자산 모델 정의 및 연결된 `ETag`를 가져옵니다.

    동시 업데이트 중에 사용자는 성공적인 업데이트(`ACTIVE` 상태의 모델) 또는 실패한 업데이트(`FAILED` 상태의 모델)를 수행합니다. 사용자가 성공적인 업데이트를 실수로 덮어쓰지 않도록 하려면 [자산 모델 버전](model-active-version.md)에서 자산 모델의 활성 버전을 검색하고 `ETag` 값을 가져와야 합니다.

   다음 명령을 실행합니다.

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

    응답은 다음 구조를 반환합니다.

   ```
   {
     "assetModelId": "String",
     "assetModelArn": "String",
     "assetModelName": "String",
     ...
     "eTag": "String"
   }
   ```
**참고**  
 업데이트를 덮어쓰지 않으려면 자산 모델 및 해당 `ETag`의 최신 버전을 검색해야 합니다.

1. **쓰기 조건으로 UPDATE 및 DELETE 작업 수행**

   다음 자산 모델 API는 낙관적 잠금을 지원합니다.
   + [UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html)
   + [DeleteAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DeleteAssetModel.html)
   + [CreateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_CreateAssetModelCompositeModel.html)
   + [UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html)
   + [DeleteAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DeleteAssetModelCompositeModel.html)
**참고**  
 아래 시나리오에서는 `UpdateAssetModel` API를 참조로 사용합니다. 조건은 위에 나열된 모든 작업에 적용됩니다.

   다음 시나리오에서는 동시성 제어 요구 사항에 따라 다양한 쓰기 조건을 설명합니다.
   +  성공적인 업데이트를 덮어쓰지 않도록 다음 명령을 실행합니다. 마지막으로 읽은 활성 버전 이후 새 활성 버전이 없어야 합니다. 활성 버전의 읽기에 사용된 API 작업에서 반환된 `ETag`로 `e-tag`를 바꿉니다.

     ```
     aws iotsitewise update-asset-model \
       --asset-model-id asset-model-id \
       --if-match e-tag \
       --match-for-version-type ACTIVE \
       --cli-input-json file://model-payload.json
     ```
   +  모델 생성에 실패하면 이에 대한 활성 버전이 `FAILED` 상태이므로 아직 존재하지 않습니다. 변경 사항이 커밋되기 전에 현재 있는 새 활성 버전을 덮어쓸 수 있습니다. 마지막 읽기 중에 활성 버전이 없는 경우 새 활성 버전을 덮어쓰지 않기 위해 다음 명령을 실행합니다.

     ```
     aws iotsitewise update-asset-model \
       --asset-model-id asset-model-id \
       --if-none-match "*" \
       --match-for-version-type ACTIVE \
       --cli-input-json file://model-payload.json
     ```
   +  성공하거나 실패한 업데이트를 덮어쓰지 않기 위해 다음 명령을 실행합니다. 이 명령은 마지막으로 최신 버전을 읽은 이후 최신 버전이 생성되지 않도록 하는 쓰기 조건을 정의합니다. 활성 버전의 읽기에 사용된 API 작업에서 반환된 `ETag`로 `e-tag`를 바꿉니다.

     ```
     aws iotsitewise update-asset-model \
       --asset-model-id asset-model-id \
       --if-match eTag \
       --match-for-version-type LATEST \
       --cli-input-json file://model-payload.json
     ```

     쓰기 조건이 `FALSE`로 평가되면 `PreconditionFailedException`과 함께 쓰기 요청이 실패합니다.