

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

# 구성 요소 유형 사용 및 생성
<a name="twinmaker-component-types"></a>

이 항목에서는 AWS IoT TwinMaker 구성 요소 유형을 만드는 데 사용하는 값과 구조를 안내합니다. [CreateComponentType](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_CreateComponentType.html)API에 전달하거나 AWS IoT TwinMaker 콘솔의 구성 요소 유형 편집기를 사용하여 전달할 수 있는 요청 객체를 생성하는 방법을 보여 줍니다.

구성 요소는 관련 개체의 속성 및 데이터에 대한 컨텍스트를 제공합니다.

## 기본 설정 구성 요소 유형
<a name="twinmaker-component-types-built-in"></a>

 AWS IoT TwinMaker 콘솔에서 작업 영역을 선택한 다음 왼쪽 창에서 **구성 요소 유형을** 선택하면 다음과 같은 구성 요소 유형이 표시됩니다.
+ **com.amazon.iotsitewise.resourcesync**: 자산과 자산 모델을 자동으로 동기화하고 이를 엔티티 구성 요소 및 구성 요소 유형으로 변환하는 구성 요소 유형입니다. AWS IoT SiteWise AWS IoT TwinMaker 자산 동기화 사용에 대한 자세한 내용은 AWS IoT SiteWise [자산 AWS IoT SiteWise](https://docs.aws.amazon.com/iot-twinmaker/latest/guide/tm-sw-asset-sync.html) 동기화를 참조하십시오.
+ **com.amazon.iottwinmaker.alarm.basic**: 외부 소스에서 개체로 경보 데이터를 가져오는 기본 경보 구성 요소입니다. 이 구성 요소에는 특정 데이터 소스에 연결하는 함수가 포함되어 있지 않습니다. 즉, 경보 구성 요소는 추상적이며 데이터 소스를 지정하는 다른 구성 요소 유형과 해당 소스에서 읽는 함수에 상속될 수 있습니다.
+ **com.amazon.iottwinmaker.documents**: 개체에 대한 정보가 포함된 문서의 제목을 URL에 간단히 매핑하는 것입니다.
+ **com.amazon.iotsitewise.connector.edgevideo**: Kinesis Video Streams용 에지 커넥터 구성 요소를 사용하여 IoT 디바이스에서 비디오를 엔티티로 가져오는 구성 요소입니다. AWS IoT Greengrass [Kinesis Video AWS IoT Greengrass Streams용 에지 AWS IoT TwinMaker 커넥터](https://docs.aws.amazon.com/greengrass/v2/developerguide/kvs-edge-connector-component.html) 구성 요소는 구성 요소가 아니라 IoT 장치에 로컬로 배포되는 AWS IoT Greengrass 사전 빌드된 구성 요소입니다.
+ **com.amazon.iotsitewise.connector**: AWS IoT SiteWise 데이터를 개체로 가져오는 구성 요소입니다.
+ **com.amazon.iottwinmaker.parameters**: 개체에 정적 키-값 쌍을 추가하는 구성 요소입니다.
+ **com.amazon.kvs.video**: Kinesis Video Streams에서 비디오를 엔티티로 가져오는 구성 요소입니다. AWS IoT TwinMaker 

![\[미리 정의된 여러 구성 요소 유형 목록이 있는 구성 요소 유형 콘솔 페이지.\]](http://docs.aws.amazon.com/ko_kr/iot-twinmaker/latest/guide/images/ComponentTypesPredefined.png)


## AWS IoT TwinMaker 구성 요소 유형의 핵심 기능
<a name="twinmaker-component-types-core"></a>

다음 목록에서는 구성 요소 유형의 핵심 기능에 대해 설명합니다.
+ **속성 정의**: [PropertyDefinitionRequest](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_PropertyDefinitionRequest.html)객체는 씬 컴포저에서 채울 수 있는 속성을 정의하거나 외부 데이터 소스에서 가져온 데이터로 채울 수 있는 속성을 정의합니다. 설정한 정적 속성은 저장되어 있습니다. AWS IoT TwinMaker시계열 속성 및 데이터 소스에서 가져온 기타 속성은 외부에 저장됩니다.

  문자열 내에서 `PropertyDefinitionRequest` 맵에 속성 정의를 지정합니다. 각 문자열은 맵에 대해 고유해야 합니다.
+ **함수**: [FunctionRequest](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_FunctionRequest.html)객체는 외부 데이터 소스에서 읽고 잠재적으로 외부 데이터 소스에 쓰는 Lambda 함수를 지정합니다.

  값이 외부에 저장되어 있는 속성을 포함하지만 값을 검색하는 해당 함수가 없는 구성 요소 유형은 추상 구성 요소 유형입니다. 추상 구성 요소 유형에서 구체적인 구성 요소 유형을 확장할 수 있습니다. 개체에는 추상 구성 요소 유형을 추가할 수 없습니다. 장면 컴포저에는 나타나지 않습니다.

  문자열 내에 `FunctionRequest` 매핑할 함수를 지정합니다. 문자열은 다음과 같은 사전 정의된 함수 유형 중 하나만 지정해야 합니다.
  + `dataReader`: 외부 소스에서 데이터를 가져오는 함수입니다.
  + `dataReaderByEntity`: 외부 소스에서 데이터를 가져오는 함수입니다.

    이 유형의 데이터 리더를 사용하는 경우 [GetPropertyValueHistory](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_GetPropertyValueHistory.html)API 작업은 이 구성 요소 유형의 속성에 대한 엔티티별 쿼리만 지원합니다. (`componentName` \$1 `entityId`에 대한 속성 값 기록만 요청할 수 있습니다.)
  + `dataReaderByComponentType`: 외부 소스에서 데이터를 가져오는 함수입니다.

    이 유형의 데이터 리더를 사용하는 경우 [GetPropertyValueHistory](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_GetPropertyValueHistory.html)API 작업은 이 구성 요소 유형의 속성에 대한 개체 간 쿼리만 지원합니다. (`componentTypeId`에 대한 속성 값 기록만 요청할 수 있습니다.)
  + `dataWriter`: 외부 소스에 데이터를 쓰는 함수입니다.
  + `schemaInitializer`: 구성 요소 유형이 포함된 개체를 만들 때마다 속성값을 자동으로 초기화하는 함수입니다.

  비추상 구성 요소 유형에는 세 가지 유형의 데이터 판독기 함수 중 하나가 필요합니다.

  경보를 포함하여 타임스트림 텔레메트리 구성 요소를 구현하는 Lambda 함수의 예는 [AWS IoT TwinMaker 샘플](https://github.com/aws-samples/aws-iot-twinmaker-samples/blob/main/src/modules/timestream_telemetry/lambda_function/udq_data_reader.py)의 데이터 리더를 참조하십시오.
**참고**  
경보 커넥터는 추상 경보 구성 요소 유형을 상속하므로 Lambda 함수는 `alarm_key`값을 반환해야 합니다. 이 값을 반환하지 않으면 Grafana는 이 값을 경보로 인식하지 않습니다. 이는 경보를 반환하는 모든 구성 요소에 필요합니다.
+ **상속**: 구성 요소 유형은 상속을 통해 코드 재사용성을 높입니다. 구성 요소 유형은 최대 10개의 상위 구성 요소 유형을 상속할 수 있습니다.

  `extendsFrom`매개 변수를 사용하여 구성 요소 유형이 속성과 함수를 상속하는 구성 요소 유형을 지정할 수 있습니다.
+  **isSingleton**: 일부 구성 요소에는 개체에 두 번 이상 포함할 수 없는 위치 좌표와 같은 속성이 포함되어 있습니다. 구성 요소 유형을 개체에 한 번만 포함할 수 있다는 것을 알리도록 `isSingleton` 파라미터 값을 `true`로 설정합니다.

## 속성 정의 생성
<a name="twinmaker-component-types-property-def"></a>

다음 표는 `PropertyDefinitionRequest`의 파라미터를 설명합니다.


| 파라미터 | 설명 | 
| --- | --- | 
| `isExternalId` | 속성이 외부에 저장된 속성 값의 고유 식별자 (예: AWS IoT SiteWise 자산 ID) 인지 여부를 지정하는 불리언입니다. 이 속성의 기본값은 `false`입니다. | 
| `isStoredExternally` | 속성이 외부에 저장되는지 여부를 지정하는 부울 값입니다. 이 속성의 기본값은 `false`입니다. | 
| `isTimeSeries` | 속성이 시계열 데이터로 구성되는지 여부를 지정하는 부울 값입니다. 이 속성의 기본값은 `false`입니다. | 
| `isRequiredInEntity` | 구성 요소 유형을 사용하는 개체에서 속성에 값이 있어야 하는지 여부를 지정하는 불리언입니다. | 
| `dataType` | 속성의 데이터 유형 (예: 문자열, 맵, 목록, 측정 단위) 을 지정하는 [DataType](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_DataType.html)객체입니다.  | 
| `defaultValue` | 속성의 기본값을 지정하는 [DataValue](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_DataValue.html)객체입니다.  | 
| `configuration` | 외부 데이터 소스에 연결하는 데 필요한 추가 정보를 지정하는 string-to-string 맵입니다.  | 

## 함수 생성
<a name="twinmaker-component-types-function"></a>

다음 표는 `FunctionRequest`의 파라미터를 설명합니다.


| 파라미터 | 설명 | 
| --- | --- | 
| ` implementedBy` | 외부 데이터 소스에 연결하는 Lambda 함수를 지정하는 [DataConnector](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_DataConnector.html)객체입니다.  | 
| `requiredProperties` | 함수가 외부 데이터 소스에서 읽고 외부 데이터 소스에 쓰기 위해 필요한 속성 목록입니다. | 
| `scope` | 함수의 범위입니다. 범위가 전체 작업 영역에 적용되는 함수에 대해 `Workspace`을(를) 사용합니다. 구성 요소가 포함된 개체로 범위가 제한된 함수에 대해 `Entity`을(를) 사용합니다. | 

구성 요소 유형을 만들고 확장하는 방법을 보여주는 예제는 [구성 요소 유형 예](twinmaker-component-types-examples.md)을(를) 참조하십시오.

# 구성 요소 유형 예
<a name="twinmaker-component-types-examples"></a>

이 주제에는 구성 요소 유형의 주요 개념을 구현하는 방법을 보여주는 예제가 포함되어 있습니다.

## 경보(요약)
<a name="twinmaker-component-types-examples-alarm"></a>

다음 예는 콘솔에 나타나는 추상 경보 구성 요소 유형입니다. AWS IoT TwinMaker 여기에는 `functions` 목록이 포함되며 이 목록은 `dataReader`(으)로 구성되며 여기에는 `implementedBy`값이 없습니다.

```
{
  "componentTypeId": "com.example.alarm.basic:1",
  "workspaceId": "MyWorkspace",
  "description": "Abstract alarm component type",
  "functions": {
    "dataReader": {
         "isInherited": false
    }
  },
  "isSingleton": false,
  "propertyDefinitions": {
    "alarm_key": {
      "dataType": { "type": "STRING" },
      "isExternalId": true,
      "isRequiredInEntity": true,
      "isStoredExternally": false,
      "isTimeSeries": false
    },
    "alarm_status": {
      "dataType": {
        "allowedValues": [
          {
            "stringValue": "ACTIVE"
          },
          {
            "stringValue": "SNOOZE_DISABLED"
          },
          {
            "stringValue": "ACKNOWLEDGED"
          },
          {
            "stringValue": "NORMAL"
          }
        ],
        "type": "STRING"
      },
      "isRequiredInEntity": false,
      "isStoredExternally": true,
      "isTimeSeries": true
    }
  }
}
```

참고:

`componentTypeId` 및 `workspaceID`에 대한 값은 필수입니다. `componentTypeId`의 값은 작업 영역별로 고유해야 합니다. `alarm_key`의 값은 함수가 외부 소스에서 경보 데이터를 검색하는 데 사용할 수 있는 고유 식별자입니다. 키 값은 필수이며 저장되어 AWS IoT TwinMaker있습니다. `alarm_status` 시계열 값은 외부 소스에 저장됩니다.

[AWS IoT TwinMaker 샘플](https://github.com/aws-samples/aws-iot-twinmaker-samples)에서 더 많은 예를 사용할 수 있습니다.

## Timestream 원격측정
<a name="twinmaker-component-types-examples-telemetry"></a>

다음 예는 외부 소스에서 특정 유형의 구성 요소 (예: 경보 또는 쿠키 믹서) 에 대한 원격 분석 데이터를 검색하는 간단한 구성 요소 유형입니다. 구성 요소 유형이 상속하는 Lambda 함수를 지정합니다.

```
{
    "componentTypeId": "com.example.timestream-telemetry",
    "workspaceId": "MyWorkspace",
    "functions": {
        "dataReader": {
            "implementedBy": {
                "lambda": {
                    "arn": "lambdaArn"
                }
            }
        }
    },
    "propertyDefinitions": {
        "telemetryType": {
            "dataType": { "type": "STRING" },
            "isExternalId": false,
            "isStoredExternally": false,
            "isTimeSeries": false,
            "isRequiredInEntity": true
        },
        "telemetryId": {
            "dataType": { "type": "STRING" },
            "isExternalId": false,
            "isStoredExternally": false,
            "isTimeSeries": false,
            "isRequiredInEntity": true
        }
    }
}
```

## 경보(추상 경보에서 상속)
<a name="twinmaker-component-types-examples-alarm-implementation"></a>

다음 예제는 추상 경보와 타임스트림 텔레메트리 구성 요소 유형을 모두 상속합니다. 경보 데이터를 검색하는 자체 Lambda 함수를 지정합니다.

```
{
    "componentTypeId": "com.example.cookiefactory.alarm",
    "workspaceId": "MyWorkspace",
    "extendsFrom": [
        "com.example.timestream-telemetry",
        "com.amazon.iottwinmaker.alarm.basic"
    ],
    "propertyDefinitions": {
        "telemetryType": {
            "defaultValue": {
                "stringValue": "Alarm"
            }
        }
    },
    "functions": {
        "dataReader": {
            "implementedBy": {
                "lambda": {
                    "arn": "lambdaArn"
                }
            }
        }
    }
}
```

**참고**  
경보 커넥터는 추상 경보 구성 요소 유형을 상속하므로 Lambda 함수는 `alarm_key`값을 반환해야 합니다. 이 값을 반환하지 않으면 Grafana는 이 값을 경보로 인식하지 않습니다. 이는 경보를 반환하는 모든 구성 요소에 필요합니다.

## 장비 예
<a name="twinmaker-component-types-examples-equipment"></a>

이 단원의 예제에서는 잠재적 장비를 모델링하는 방법을 보여줍니다. 이 예제를 사용하여 자체 프로세스에서 장비를 모델링하는 방법에 대한 아이디어를 얻을 수 있습니다.

### 쿠키 믹서
<a name="twinmaker-component-types-examples-mixer"></a>

다음 예제는 타임스트림 텔레메트리 구성 요소 유형으로 부터 상속합니다. 쿠키 믹서의 회전 속도 및 온도에 대한 추가 시계열 속성을 지정합니다.

```
{
    "componentTypeId": "com.example.cookiefactory.mixer",
    "workspaceId": "MyWorkspace",
    "extendsFrom": [
        "com.example.timestream-telemetry"
    ],
    "propertyDefinitions": {
        "telemetryType": {
            "defaultValue" : { "stringValue": "Mixer" }
        },
        "RPM": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "Temperature": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        }
    }
}
```

### 물 탱크
<a name="twinmaker-component-types-examples-watertank"></a>

다음 예제는 타임스트림 텔레메트리 구성 요소 유형으로 부터 상속합니다. 물 탱크의 부피 및 유량에 대한 추가 시계열 속성을 지정합니다.

```
{
    "componentTypeId": "com.example.cookiefactory.watertank",
    "workspaceId": "MyWorkspace",
    "extendsFrom": [
        "com.example.timestream-telemetry"
    ],
    "propertyDefinitions": {
        "telemetryType": {
            "defaultValue" : { "stringValue": "WaterTank" }
        },
        "tankVolume1": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "tankVolume2": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "flowRate1": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "flowrate2": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        }
    }
}
```

### 스페이스 위치
<a name="twinmaker-component-types-examples-space"></a>

다음 예제에는 값이 저장되어 있는 속성이 포함되어 있습니다. AWS IoT TwinMaker값은 사용자가 지정하고 내부적으로 저장하기 때문에 해당 값을 검색하는 데 함수가 필요하지 않습니다. 또한 이 예제에서는 `RELATIONSHIP` 데이터 유형을 사용하여 다른 구성 요소 유형과의 관계를 지정합니다.

이 구성 요소는 디지털 트윈에 컨텍스트를 추가할 수 있는 간단한 메커니즘을 제공합니다. 이를 사용하여 사물의 위치를 나타내는 메타데이터를 추가할 수 있습니다. 또한 이 정보를 어떤 카메라가 장비나 스페이스를 볼 수 있는지 결정하는 데 사용되는 로직이나 특정 위치로 사람을 파견하는 방법을 파악하는 데 사용할 수 있습니다.

```
{
    "componentTypeId": "com.example.cookiefactory.space",
    "workspaceId": "MyWorkspace",
    "propertyDefinitions": {
        "position":  {"dataType": {"nestedType": {"type": "DOUBLE"},"type": "LIST"}},
        "rotation":  {"dataType": {"nestedType": {"type": "DOUBLE"},"type": "LIST"}},
        "bounds":  {"dataType": {"nestedType": {"type": "DOUBLE"},"type": "LIST"}},
        "parent_space" : { "dataType": {"type": "RELATIONSHIP"}}
    }
}
```