

지원 종료 공지: 2026년 10월 7일에는에 대한 지원을 중단할 AWS 예정입니다 AWS IoT Greengrass Version 1. 2026년 10월 7일 이후에는 더 이상 AWS IoT Greengrass V1 리소스에 액세스할 수 없습니다. 자세한 내용은 [에서 마이그레이션 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)을 참조하세요.

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

# ML 피드백 커넥터
<a name="ml-feedback-connector"></a>

**주의**  <a name="connectors-extended-life-phase-warning"></a>
이 커넥터는 수명 연장 단계로 전환되었으며 AWS IoT Greengrass 는 기능, 기존 기능의 개선 사항, 보안 패치 또는 버그 수정을 제공하는 업데이트를 릴리스하지 않을 예정입니다.** 자세한 내용은 [AWS IoT Greengrass Version 1 유지 관리 정책](maintenance-policy.md) 단원을 참조하십시오.

ML 피드백 커넥터는 모델 재교육 및 분석을 위해 보다 쉽게 기계 학습(ML) 모델 데이터에 액세스할 수 있게 해줍니다. 이 커넥터는
+ ML 모델이 사용하는 입력 데이터(샘플)를 Amazon S3로 업로드합니다. 모델 입력은 이미지, JSON, 오디오 등 임의의 형식일 수 있습니다. 샘플을 클라우드로 업로드한 후 이를 사용하여 모델을 재교육함으로써 예측의 정확성 및 정밀도를 개선할 수 있습니다. 예를 들어 [SageMaker AI Ground Truth](https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html)를 사용하여 샘플에 레이블을 지정하고 [SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)를 사용하여 모델을 재훈련할 수 있습니다.
+ 모델의 예측 결과를 MQTT 메시지로 게시합니다. 이를 통해 실시간으로 모델의 추론 품질을 모니터링 및 분석할 수 있습니다. 또한 예측 결과를 저장하고 이를 사용하여 경시적 추세를 분석할 수 있습니다.
+ 샘플 업로드 및 샘플 데이터에 대한 지표를 Amazon CloudWatch에 게시합니다.

이 커넥터를 구성하려면 지원되는 *피드백 구성*을 JSON 형식으로 설명해야 합니다. 피드백 구성은 Amazon S3 버킷, 콘텐츠 유형, [샘플링 전략](#ml-feedback-connector-sampling-strategies).과 같은 속성을 정의합니다. (샘플링 전략은 어느 샘플을 업로드할지 결정하는 데 사용됩니다.)

다음과 같은 상황에서 ML 피드백 커넥터를 사용할 수 있습니다.
+ 사용자 정의 Lambda 함수와 함께 사용합니다. 로컬 추론 Lambda 함수는 AWS IoT Greengrass Machine Learning SDK를 사용하여이 커넥터를 호출하고 대상 피드백 구성, 모델 입력 및 모델 출력(예측 결과)을 전달합니다. 예제는 [사용 예](#ml-feedback-connector-usage) 섹션을 참조하세요.
+ [ML Image Classification 커넥터](image-classification-connector.md)(v2) 사용. 이 커넥터를 ML Image Classification 커넥터와 함께 사용하려면 ML Image Classification 커넥터에 대해 `MLFeedbackConnectorConfigId` 파라미터를 구성합니다.
+ [ML Object Detection 커넥터](obj-detection-connector.md) 사용. 이 커넥터를 ML Object Detection 커넥터와 함께 사용하려면 ML Object Detection 커넥터에 대해 `MLFeedbackConnectorConfigId` 파라미터를 구성합니다.

**ARN**: `arn:aws:greengrass:{{region}}::/connectors/MLFeedback/versions/1`

## 요구 사항
<a name="ml-feedback-connector-req"></a>

이 커넥터에는 다음과 같은 요구 사항이 있습니다.
+ AWS IoT Greengrass 코어 소프트웨어 v1.9.3 이상.
+ <a name="conn-req-py-3.7-and-3.8"></a>코어 장치에 설치되고 PATH 환경 변수에 추가된 [Python](https://www.python.org/) 버전 3.7 또는 3.8입니다.
**참고**  <a name="use-runtime-py3.8"></a>
Python 3.8을 사용하려면 다음 명령을 실행하여 기본 Python 3.7 설치 폴더에서 설치된 Python 3.8 바이너리로 연결되는 심볼릭 링크를 만드십시오.  

  ```
  sudo ln -s {{path-to-python-3.8}}/python3.8 /usr/bin/python3.7
  ```
이렇게 하면 AWS IoT Greengrass에 대한 Python 요구 사항을 충족하도록 장치가 구성됩니다.
+ 하나 이상의 Amazon S3 버킷. 사용하는 버킷 수는 샘플링 전략에 따라 달라집니다.
+ 다음 예제와 같이, 대상 Amazon S3 버킷의 객체에 대한 `s3:PutObject` 작업을 허용하는 [Greengrass 그룹 역할](group-role.md)에 IAM 정책을 추가해야 합니다.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "s3:PutObject",
              "Resource": [
                  "arn:aws:s3:::{{bucket-name}}/*"
              ]
          }
      ]
  }
  ```

------

  이 정책은 모든 대상 버킷을 리소스로 포함해야 합니다. 리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다(예: 와일드카드 \* 이름 지정 스키마를 통해).

  <a name="set-up-group-role"></a>그룹 역할 요구 사항의 경우, 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 [Greengrass 그룹 역할 관리(콘솔)](group-role.md#manage-group-role-console) 또는 [Greengrass 그룹 역할 관리(CLI)](group-role.md#manage-group-role-cli)을 참조하세요.
+ [loudWatch Metrics 커넥터](cloudwatch-metrics-connector.md)를 Greengrass 그룹에 추가 및 구성해야 합니다. 지표 보고 기능을 사용하려는 경우에만 필요합니다.
+ 이 커넥터와 상호 작용하려면 [AWS IoT Greengrass Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) v1.1.0이 필요합니다.

## 파라미터
<a name="ml-feedback-connector-param"></a>

`FeedbackConfigurationMap`  
커넥터가 샘플을 Amazon S3에 업로드하는 데 사용할 수 있는 하나 이상의 피드백 구성의 집합입니다. 피드백 구성은 대상 버킷, 콘텐츠 유형, [샘플링 전략](#ml-feedback-connector-sampling-strategies)과 같은 파라미터를 정의합니다. 이 커넥터가 간접 호출될 경우 직접 호출하는 Lambda 함수 또는 커넥터가 대상 피드백 구성을 지정합니다.  
 AWS IoT 콘솔의 표시 이름: **피드백 구성 맵**  
필수: `true`  
유형: 지원되는 피드백 구성 세트를 정의하는 올바른 형식의 JSON 문자열입니다. 예제는 [FeedbackConfigurationMap 예제](#ml-feedback-connector-feedbackconfigmap) 섹션을 참조하세요.    
  
피드백 구성 객체의 ID는 다음 요구 사항을 충족해야 합니다.    
  
ID:  
+ 구성 객체 간에 고유해야 합니다.
+ 문자 또는 숫자로 시작해야 합니다. 소문자 및 대문자, 숫자, 하이픈(-)을 포함할 수 있습니다.
+ 2\~63자 길이여야 합니다.
필수: `true`  
유형: `string`  
유효한 패턴: `^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`  
예: `MyConfig0`, `config-a`, `12id` 
피드백 구성 객체의 본문은 다음 속성을 포함해야 합니다.    
`s3-bucket-name`  
대상 Amazon S3 버킷의 이름입니다.  
그룹 역할은 모든 대상 버킷에 대한 `s3:PutObject` 작업을 허용해야 합니다. 자세한 내용은 [요구 사항](#ml-feedback-connector-req) 단원을 참조하십시오.
필수: `true`  
유형: `string`  
유효한 패턴: `^[a-z0-9\.\-]{3,63}$`  
`content-type`  
업로드할 샘플의 콘텐츠 유형입니다. 개별 피드백 구성에 대한 모든 콘텐츠는 동일한 유형이어야 합니다.  
필수: `true`  
유형: `string`  
예: `image/jpeg`, `application/json`, `audio/ogg`   
`s3-prefix`  
업로드된 샘플에 사용할 키 접두사입니다. 접두사는 디렉터리 이름과 유사합니다. 이를 사용해 한 버킷의 동일한 디렉터리 아래에 유사한 데이터를 저장할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [객체 키 및 메타데이터](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)를 참조하십시오.  
필수: `false`  
유형: `string`  
`file-ext`  
업로드된 샘플에 사용할 파일 확장명입니다. 해당 콘텐츠 유형에 유효한 파일 확장명이어야 합니다.  
필수: `false`  
유형: `string`  
예: `jpg`, `json`, `ogg`   
`sampling-strategy`  
업로드할 샘플을 필터링하는 데 사용할 [샘플링 전략](#ml-feedback-connector-sampling-strategies)입니다. 생략할 경우 커넥터가 수신하는 모든 샘플을 업로드하려고 시도합니다.  
필수: `false`  
유형: 다음 속성을 포함하는 올바른 형식의 JSON 문자열입니다.    
`strategy-name`  
샘플링 전략의 이름입니다.  
필수: `true`  
유형: `string`  
유효한 값: `RANDOM_SAMPLING`, `LEAST_CONFIDENCE`, `MARGIN` 또는 `ENTROPY`  
`rate`  
[무작위](#ml-feedback-connector-sampling-strategies-random) 샘플링 전략의 비율입니다.  
필수: `strategy-name`가 `RANDOM_SAMPLING`인 경우 `true`.  
유형: `number`  
유효한 값: `0.0 - 1.0`  
`threshold`  
[최소 신뢰도](#ml-feedback-connector-sampling-strategies-least-confidence), [마진](#ml-feedback-connector-sampling-strategies-margin) 또는 [엔트로피](#ml-feedback-connector-sampling-strategies-entropy) 샘플링 전략의 임계값입니다.  
필수: `strategy-name`가 `LEAST_CONFIDENCE`, `MARGIN`, 또는 `ENTROPY`인 경우, `true`.  
유형: `number`  
유효한 값:  
+ `LEAST_CONFIDENCE` 또는 `MARGIN` 전략의 경우 `0.0 - 1.0`.
+ `ENTROPY` 전략의 경우 `0.0 - no limit`.

`RequestLimit`  
커넥터가 한 번에 처리할 수 있는 요청의 최대 수입니다.  
이 파라미터를 사용하여 커넥터가 동시에 처리할 수 있는 요청 수를 제한하면 메모리 사용을 제한할 수 있습니다. 이 제한을 초과하는 요청은 무시됩니다.  
 AWS IoT 콘솔의 표시 이름: **요청 제한**  
필수: `false`  
유형: `string`  
유효한 값: `0 - 999`  
유효한 패턴: `^$|^[0-9]{1,3}$`

### 커넥터 만들기 예(AWS CLI)
<a name="ml-feedback-connector-create"></a>

다음 CLI 명령은 ML 피드백 커넥터가 포함된 초기 버전을 사용하여 `ConnectorDefinition`을 생성합니다.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyMLFeedbackConnector",
            "ConnectorArn": "arn:aws:greengrass:{{region}}::/connectors/MLFeedback/versions/1",
            "Parameters": {
                "FeedbackConfigurationMap": "{  \"RandomSamplingConfiguration\": {  \"s3-bucket-name\": \"my-aws-bucket-random-sampling\",  \"content-type\": \"image/png\",  \"file-ext\": \"png\",  \"sampling-strategy\": {  \"strategy-name\": \"RANDOM_SAMPLING\",  \"rate\": 0.5  } },  \"LeastConfidenceConfiguration\": {  \"s3-bucket-name\": \"my-aws-bucket-least-confidence-sampling\",  \"content-type\": \"image/png\",  \"file-ext\": \"png\",  \"sampling-strategy\": {  \"strategy-name\": \"LEAST_CONFIDENCE\",  \"threshold\": 0.4  } } }", 
                "RequestLimit": "10"
            }
        }
    ]
}'
```

### FeedbackConfigurationMap 예제
<a name="ml-feedback-connector-feedbackconfigmap"></a>

다음은 `FeedbackConfigurationMap` 파라미터의 확장된 예제 값입니다. 이 예제에는 서로 다른 샘플링 전략을 사용하는 여러 피드백 구성이 포함되어 있습니다.

```
{
    "ConfigID1": {
        "s3-bucket-name": "my-aws-bucket-random-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "RANDOM_SAMPLING",
            "rate": 0.5
        }
    },
    "ConfigID2": {
        "s3-bucket-name": "my-aws-bucket-margin-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "MARGIN",
            "threshold": 0.4
        }
    },
    "ConfigID3": {
        "s3-bucket-name": "my-aws-bucket-least-confidence-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "LEAST_CONFIDENCE",
            "threshold": 0.4
        }
    },
    "ConfigID4": {
        "s3-bucket-name": "my-aws-bucket-entropy-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "ENTROPY",
            "threshold": 2
        }
    },
    "ConfigID5": {
        "s3-bucket-name": "my-aws-bucket-no-sampling",
        "s3-prefix": "DeviceA",
        "content-type": "application/json"
    }
}
```

### 샘플링 전략
<a name="ml-feedback-connector-sampling-strategies"></a>

이 커넥터는 커넥터로 전달되는 샘플을 업로드할지 여부를 결정하는 4개의 샘플링 전략을 지원합니다. 샘플은 모델이 예측을 위해 사용하는 개별 데이터 인스턴스입니다. 샘플링 전략을 사용하여 모델 정확성을 가장 개선할 수 있는 샘플을 선택할 수 있습니다.

`RANDOM_SAMPLING`  <a name="ml-feedback-connector-sampling-strategies-random"></a>
지정된 비율에 따라 무작위로 샘플을 업로드합니다. 무작위로 생성된 값이 비율보다 작은 경우 샘플을 업로드합니다. 비율이 높을수록 많은 샘플이 업로드됩니다.  
이 전략은 제공된 모델 예측을 모두 무시합니다.

`LEAST_CONFIDENCE`  <a name="ml-feedback-connector-sampling-strategies-least-confidence"></a>
최대 신뢰도 확률이 지정된 임계값보다 낮은 샘플을 업로드합니다.    
예제 시나리오:  
임계값: `.6`  
모델 예측: `[.2, .2, .4, .2]`  
최대 신뢰도 확률: `.4`  
결과:  
최대 신뢰도 확률(`.4`) <= 임계값(`.6`)이므로 샘플을 사용합니다.

`MARGIN`  <a name="ml-feedback-connector-sampling-strategies-margin"></a>
두 신뢰도 확률 간 마진이 지정된 임계값 이내일 경우 샘플을 업로드합니다. 마진은 2개의 최대 확률 간 차이입니다.    
예제 시나리오:  
임계값: `.02`  
모델 예측: `[.3, .35, .34, .01]`  
2개의 최대 신뢰도 확률: `[.35, .34]`  
마진: `.01`(`.35 - .34`)  
결과:  
마진(`.01`) <= 임계값(`.02`)이므로 샘플을 사용합니다.

`ENTROPY`  <a name="ml-feedback-connector-sampling-strategies-entropy"></a>
엔트로피가 지정된 임계값보다 높은 샘플을 사용합니다. 모델 예측의 정규화된 엔트로피를 사용합니다.    
예제 시나리오:  
임계값: `0.75`  
모델 예측: `[.5, .25, .25]`  
예측 엔트로피: `1.03972`  
결과:  
엔트로피(`1.03972`) > 임계값(`0.75`)이므로 샘플을 사용합니다.

## 입력 데이터
<a name="ml-feedback-connector-data-input"></a>

사용자 정의 Lambda 함수는 AWS IoT Greengrass Machine Learning SDK에서 `feedback` 클라이언트의 `publish` 함수를 사용하여 커넥터를 호출합니다. 예제는 [사용 예](#ml-feedback-connector-usage) 섹션을 참조하세요.

**참고**  
이 커넥터는 MQTT 메시지를 출력 데이터로 게시하지 않습니다.

`publish` 함수는 다음 인수를 사용합니다.

ConfigId  
대상 피드백 구성의 ID입니다. ML 피드백 커넥터에 대한 [FeedbackConfigurationMap](#ml-feedback-connector-param) 파라미터에 정의된 피드백 구성의 ID와 일치해야 합니다.  
필수: True  
유형: 문자열

ModelInput  
추론을 위해 모델에 전달된 입력 데이터입니다. 이 입력 데이터는 샘플링 전략에 의해 제외되지 않는 한 대상 구성을 사용하여 업로드됩니다.  
필수: True  
유형: 바이트

ModelPrediction  
모델의 예측 결과입니다. 결과 형식은 사전 또는 목록입니다. 예를 들어 ML Image Classification 커넥터의 예측 결과는 확률 목록입니다(예: `[0.25, 0.60, 0.15]`). 이 데이터는 `/feedback/message/prediction` 주제에 게시됩니다.  
필수: True  
유형:`float` 값의 목록 또는 사전

Metadata  
업로드된 샘플에 연결되고 `/feedback/message/prediction` 주제에 게시되는 고객이 정의한 애플리케이션 특정 메타데이터입니다. 또한 커넥터는 타임스탬프 값을 포함하여 `publish-ts` 키를 메타데이터에 삽입합니다.  
필수: 거짓  
유형: 사전  
예시: `{"some-key": "some value"}`

## 출력 데이터
<a name="ml-feedback-connector-data-output"></a>

이 커넥터는 다음 3개의 MQTT 주제에 데이터를 게시합니다.
+ `feedback/message/status` 주제에 대한 커넥터의 상태 정보.
+ `feedback/message/prediction` 주제에 대한 예측 결과.
+ CloudWatch로 전송할 `cloudwatch/metric/put` 주제에 대한 지표.

<a name="connectors-input-output-subscriptions"></a>커넥터가 MQTT 주제에서 통신할 수 있게 허용하도록 구독을 구성해야 합니다. 자세한 내용은 [입력 및 출력](connectors.md#connectors-inputs-outputs) 단원을 참조하십시오.

**주제 필터:** `feedback/message/status`  
이 주제를 사용하여 샘플 업로드 상태 및 삭제된 샘플을 모니터링합니다. 커넥터는 요청을 수신할 때마다 이 주제에 게시합니다.    
**출력 예: 샘플 업로드가 성공함**  

```
{
  "response": {
    "status": "success",
    "s3_response": {
      "ResponseMetadata": {
        "HostId": "IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km",
        "RetryAttempts": 1,
        "HTTPStatusCode": 200,
        "RequestId": "79104EXAMPLEB723",
        "HTTPHeaders": {
          "content-length": "0",
          "x-amz-id-2": "lbbqaDVFOhMlyU3gRvAX1ZIdg8P0WkGkCSSFsYFvSwLZk3j7QZhG5EXAMPLEdd4/pEXAMPLEUqU=",
          "server": "AmazonS3",
          "x-amz-expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"",
          "x-amz-request-id": "79104EXAMPLEB723",
          "etag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"",
          "date": "Thu, 11 Jul 2019 00:12:50 GMT",
          "x-amz-server-side-encryption": "AES256"
        }
      },
      "bucket": "greengrass-feedback-connector-data-us-west-2",
      "ETag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"",
      "Expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"",
      "key": "s3-key-prefix/UUID.file_ext",
      "ServerSideEncryption": "AES256"
    }
  },
  "id": "5aaa913f-97a3-48ac-5907-18cd96b89eeb"
}
```
커넥터가 Amazon S3로부터의 응답에 `bucket` 및 `key` 필드를 추가합니다. Amazon S3 응답에 대한 자세한 내용은 *Amazon Simple Storage Service API 참조*의 [PUT 객체](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html#RESTObjectPUT-responses)를 참조하십시오.  
**출력 예: 샘플링 전략 때문에 샘플이 삭제됨**  

```
{
  "response": {
    "status": "sample_dropped_by_strategy"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```  
**출력 예: 샘플 업로드가 실패함**  
실패 상태는 오류 메시지(`error_message` 값)와 예외 클래스(`error` 값)을 포함합니다.  

```
{
  "response": {
    "status": "fail",
    "error_message": "[RequestId: 4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3] Failed to upload model input data due to exception. Model prediction will not be published. Exception type: NoSuchBucket, error: An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist",
    "error": "NoSuchBucket"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```  
**출력 예: 요청 제한 때문에 요청이 조절됨**  

```
{
  "response": {
    "status": "fail",
    "error_message": "Request limit has been reached (max request: 10 ). Dropping request.",
    "error": "Queue.Full"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```

**주제 필터:** `feedback/message/prediction`  
이 주제를 사용하여 업로드된 샘플 데이터를 기반으로 예측을 수신 대기합니다. 그러면 모델 성능을 실시간으로 분석할 수 있습니다. 데이터가 성공적으로 Amazon S3에 업로드된 경우에만 모델 예측이 게시됩니다. 이 주제에 게시되는 메시지는 JSON 형식입니다. 여기에 업로드된 데이터 객체에 대한 링크, 모델 예측 및 요청에 포함된 메타데이터가 포함됩니다.  
또한 예측 결과를 저장하고 이를 사용하여 경시적 추세를 보고 및 분석할 수 있습니다. 추세는 가치 있는 통찰을 제공할 수 있습니다. 예를 들어 *경시적으로 정확성이 감소하는* 추세는 모델을 재교육해야 할지 여부를 결정하는 데 도움이 될 수 있습니다.    
**출력 예**  

```
{
  "source-ref": "s3://greengrass-feedback-connector-data-us-west-2/s3-key-prefix/UUID.file_ext",
  "model-prediction": [
    0.5,
    0.2,
    0.2,
    0.1
  ],
  "config-id": "ConfigID2",
  "metadata": {
    "publish-ts": "2019-07-11 00:12:48.816752"
  }
}
```
이 주제를 구독하고 추가 또는 기록 분석을 AWS IoT 분석 위해에 정보를 보내도록 [IoT Analytics 커넥터를](iot-analytics-connector.md) 구성할 수 있습니다.

**주제 필터:** `cloudwatch/metric/put`  
CloudWatch에 지표를 게시하는 데 사용되는 출력 주제입니다. 이 기능을 사용하려면 [CloudWatch Metrics 커넥터](cloudwatch-metrics-connector.md)를 설치 및 구성해야 합니다.  
지표는 다음을 포함합니다.  
+ 업로드된 샘플 수.
+ 업로드된 샘플의 크기.
+ Amazon S3로 업로드 시 오류 수.
+ 샘플링 전략에 따라 삭제된 샘플 수.
+ 제한된 요청 수.  
**출력 예: 데이터 샘플 크기(실제 업로드 전 게시됨)**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 47592,
      "unit": "Bytes",
      "metricName": "SampleSize"
    }
  }
}
```  
**출력 예: 샘플 업로드가 성공함**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleUploadSuccess"
    }
  }
}
```  
**출력 예: 성공한 샘플 업로드 및 게시된 예측 결과**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleAndPredictionPublished"
    }
  }
}
```  
**출력 예: 샘플 업로드가 실패함**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleUploadFailure"
    }
  }
}
```  
**출력 예: 샘플링 전략 때문에 샘플이 삭제됨**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleNotUsed"
    }
  }
}
```  
**출력 예: 요청 제한 때문에 요청이 조절됨**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "ErrorRequestThrottled"
    }
  }
}
```

## 사용 예
<a name="ml-feedback-connector-usage"></a>

다음 예제는 [AWS IoT Greengrass 기계 학습 SDK](lambda-functions.md#lambda-sdks-ml)를 사용하여 ML 피드백 커넥터로 데이터를 전송하는 사용자 정의 Lambda 함수입니다.

**참고**  
다운로드 페이지에서 AWS IoT Greengrass Machine Learning SDK를 다운로드할 수 있습니다. AWS IoT Greengrass [AWS IoT Greengrass ML SDK 소프트웨어](what-is-gg.md#gg-ml-sdk-download)

```
import json
import logging
import os
import sys
import greengrass_machine_learning_sdk as ml

client = ml.client('feedback')

try:
    feedback_config_id = os.environ["FEEDBACK_CONFIG_ID"]
    model_input_data_dir = os.environ["MODEL_INPUT_DIR"]
    model_prediction_str = os.environ["MODEL_PREDICTIONS"]
    model_prediction = json.loads(model_prediction_str)
except Exception as e:
    logging.info("Failed to open environment variables. Failed with exception:{}".format(e))
    sys.exit(1)

try:
    with open(os.path.join(model_input_data_dir, os.listdir(model_input_data_dir)[0]), 'rb') as f:
        content = f.read()
except Exception as e:
    logging.info("Failed to open model input directory. Failed with exception:{}".format(e))
    sys.exit(1)    

def invoke_feedback_connector():
    logging.info("Invoking feedback connector.")
    try:
        client.publish(
            ConfigId=feedback_config_id,
            ModelInput=content,
            ModelPrediction=model_prediction
        )
    except Exception as e:
        logging.info("Exception raised when invoking feedback connector:{}".format(e))
        sys.exit(1)    

invoke_feedback_connector()

def function_handler(event, context):
    return
```

## 라이선스
<a name="ml-feedback-connector-license"></a>



ML 피드백 커넥터에는 다음 타사 소프트웨어/라이선스가 포함되어 있습니다.<a name="boto-3-licenses"></a>
+ [AWS SDK for Python (Boto3)](https://pypi.org/project/boto3/)/Apache 라이선스 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache 라이선스 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF 라이선스
+ [docutils](https://pypi.org/project/docutils/)/BSD 라이선스, GNU 일반 공개 라이선스(GPL), Python Software Foundation 라이선스, 퍼블릭 도메인
+ [jmespath](https://pypi.org/project/jmespath/)/MIT 라이선스
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache 라이선스 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT 라이선스
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

이 커넥터는 [Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 따라 릴리스됩니다.

## 다음 사항도 참조하세요.
<a name="ml-feedback-connector-see-also"></a>
+ [Greengrass 커넥터를 사용하여 서비스 및 프로토콜과 통합](connectors.md)
+ [Greengrass 커넥터 시작하기(콘솔)](connectors-console.md)
+ [Greengrass 커넥터 시작하기(CLI)](connectors-cli.md)