

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

# 를 사용하여 AWS IoT SiteWise Edge 게이트웨이 자체 호스팅 AWS IoT Greengrass V2
<a name="gw-self-host-gg2"></a>

클라우드로 전송하기 전에 산업 장비에서 데이터를 로컬로 수집, 처리 및 시각화하도록 AWS IoT SiteWise Edge를 설정합니다. 를 사용하여 자체 호스팅합니다 AWS IoT Greengrass Version 2.

 AWS IoT SiteWise Edge 게이트웨이는 산업 장비와 간의 중개자 역할을 합니다 AWS IoT SiteWise. 에서 실행되는 SiteWise Edge 게이트웨이 AWS IoT Greengrass Version 2는 온프레미스에서 데이터 수집 및 처리를 지원합니다.

자체 호스팅 게이트웨이에는 두 가지 유형이 있습니다.

**MQTT 활성화 V3 게이트웨이**  
MQTT 지원 V3 게이트웨이 아키텍처는 향상된 데이터 수집 기능을 제공합니다. 효율적인 데이터 통신을 위해 MQTT 프로토콜을 활용하고 구성 가능한 데이터 대상을 제공합니다. 여기에는 Amazon S3를 사용하여 버퍼링된 데이터를 수집하는 옵션과 실시간 데이터 수집이 포함됩니다. 경로 필터를 구현하여 특정 MQTT 주제를 구독하여 대상 데이터 수집을 활성화할 수 있습니다. MQTT 지원 V3 게이트웨이는 데이터 처리 팩 기능을 지원하지 않습니다. 자세한 내용은 [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 단원을 참조하십시오.

**클래식 스트림 V2 게이트웨이**  
클래식 스트림인 V2 게이트웨이는 기존 AWS IoT SiteWise 엣지 게이트웨이 아키텍처를 나타냅니다. 기존 SiteWise Edge 배포 및 설정된 워크플로에 익숙한 사용자에게 적합합니다. 클래식 스트림에서 V2 게이트웨이는 데이터 처리 팩을 지원하지만 데이터 처리 팩에서 생성된 데이터는 Amazon S3를 통해 수집할 수 없습니다. 기존 배포와의 호환성을 유지해야 하거나 데이터 처리 팩 기능이 필요한 경우 클래식 스트림, V2 게이트웨이를 사용합니다. 자세한 내용은 [클래식 스트림, AWS IoT SiteWise Edge용 V2 게이트웨이](classic-streams-v2-gateway.md) 단원을 참조하십시오.

**Topics**
+ [AWS IoT SiteWise 엣지 자체 호스팅 게이트웨이 요구 사항](configure-gateway-ggv2.md)
+ [자체 호스팅 SiteWise Edge 게이트웨이 생성](create-gateway-ggv2.md)
+ [로컬 디바이스에 AWS IoT SiteWise Edge 게이트웨이 소프트웨어 설치](install-gateway-software-on-local-device.md)
+ [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md)
+ [클래식 스트림, AWS IoT SiteWise Edge용 V2 게이트웨이](classic-streams-v2-gateway.md)
+ [AWS IoT SiteWise Edge 게이트웨이에 데이터 소스 추가](add-data-sources.md)
+ [AWS IoT Greengrass AWS IoT SiteWise Edge용 구성 요소](sw-edge-components.md)
+ [SiteWise Edge 게이트웨이에서 자산 필터링](filter-assets-ggv2.md)
+ [프록시 지원 구성 및 AWS IoT SiteWise Edge용 트러스트 스토어 관리](edge-apis-manage-trust-stores-proxy.md)
+ [엣지에서 AWS IoT SiteWise APIs 사용](edge-apis.md)

# AWS IoT SiteWise 엣지 자체 호스팅 게이트웨이 요구 사항
<a name="configure-gateway-ggv2"></a>

AWS IoT SiteWise 엣지 게이트웨이는 온프레미스에서 데이터 수집, 처리 및 게시를 지원하는 구성 AWS IoT Greengrass 요소 세트 AWS IoT Greengrass V2 로에서 실행됩니다. 에서 실행되는 SiteWise Edge 게이트웨이를 구성하려면에서 게이트웨이를 AWS IoT Greengrass V2생성하고 SiteWise Edge 게이트웨이 소프트웨어를 AWS 클라우드 실행하여 로컬 디바이스를 설정합니다. AWS Management Console 를 사용하여 SiteWise Edge 게이트웨이를 생성하면 설치 스크립트가 제공됩니다. 대상 게이트웨이 디바이스에서이 스크립트를 실행하여 필요한 소프트웨어 및 종속성을 설정합니다.

## 로컬 디바이스 요구 사항
<a name="gateway-requirements-local-device"></a>

SiteWise Edge 게이트웨이 소프트웨어를 설치하고 실행하려면 로컬 디바이스가 다음 요구 사항을 충족해야 합니다.
+  AWS IoT Greengrass V2 코어 소프트웨어 버전 [v2.3.0](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-release-2021-06-29.html) 이상을 지원합니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [권한](https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html#greengrass-v2-requirements)을 참조하세요.
+ 다음 지원 플랫폼 중 하나입니다.
  + 운영 체제: Ubuntu 20.04 이상

    아키텍처: x86\$164 (AMD64) 또는 ARMv8 (Aarch64)
  + 운영체제: Red Hat Enterprise Linux (RHEL) 8

    아키텍처: x86\$164 (AMD64) 또는 ARMv8 (Aarch64)
  + 운영체제: Amazon Linux 2

    아키텍처: x86\$164 (AMD64) 또는 ARMv8 (Aarch64)
  + 운영체제: Debian 11

    아키텍처: x86\$164 (AMD64) 또는 ARMv8 (Aarch64)
  + 운영체제: Windows Server 2019 이상

    아키텍처: x86\$164 (AMD64)
**참고**  
ARM 플랫폼은 데이터 수집 팩이 있는 SiteWise Edge 게이트웨이만 지원합니다. 데이터 처리 팩은 지원되지 않습니다.
+ 최소 4GB RAM
+ SiteWise Edge 게이트웨이 소프트웨어에 최소 10GB의 디스크 공간을 사용할 수 있습니다.
+ 적절한 포트에 액세스할 수 있도록 로컬 디바이스를 구성합니다. 필요한 아웃바운드 서비스 엔드포인트의 전체 목록은 [AWS IoT SiteWise Edge 게이트웨이에 필요한 서비스 엔드포인트를 참조하세요](https://docs.aws.amazon.com/prescriptive-guidance/latest/endpoints-for-iot-sitewise-edge-gateways/required-endpoints.html).
+ Java 런타임 환경(JRE) 버전 11 이상. 디바이스의 `PATH` 환경 변수에서 Java를 사용할 수 있어야 합니다. Java를 사용하여 사용자 정의 구성 요소를 개발하려면 JDP(Java Devopment Kit)를 설치해야 합니다. [Amazon Corretto](https://docs.aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.org/projects/jdk/)를 사용하는 것이 좋습니다.

### 로컬 디바이스에 대한 허용 목록에 대한 Amazon S3 버킷
<a name="w2aac17c19c13b5b7"></a>

다음 Amazon S3 버킷에 대한 방화벽 액세스를 제공하도록 로컬 디바이스를 구성합니다. 디바이스의 각 리전을 기반으로 액세스를 구성합니다.


| 리전 | 엔드포인트 | 
| --- | --- | 
|  아시아 태평양(도쿄)  |  https://iot-sitewise-gateway-ap-northeast-1-785558802005.s3.ap-northeast-1.amazonaws.com  | 
|  아시아 태평양(서울)  |  https://iot-sitewise-gateway-ap-northeast-2-310055672453.s3.ap-northeast-2.amazonaws.com  | 
|  아시아 태평양(뭄바이)  |  https://iot-sitewise-gateway-ap-south-1-677656657204.s3.ap-south-1.amazonaws.com  | 
|  아시아 태평양(싱가포르)  |  https://iot-sitewise-gateway-ap-southeast-1-475191558554.s3.ap-southeast-1.amazonaws.com  | 
|  아시아 태평양(시드니)  |  https://iot-sitewise-gateway-ap-southeast-2-396319432685.s3.ap-southeast-2.amazonaws.com  | 
|  캐나다(중부)  |  https://iot-sitewise-gateway-ca-central-1-842060018567.s3.ca-central-1.amazonaws.com  | 
|  중국(베이징)  |  https://iot-sitewise-gateway-cn-north-1-237124890262---s3---cn-north-1.amazonaws.com.rproxy.govskope.us.cn  | 
|  유럽(프랑크푸르트)  |  https://iot-sitewise-gateway-eu-central-1-748875242063.s3.eu-central-1.amazonaws.com  | 
|  유럽(아일랜드)  |  https://iot-sitewise-gateway-eu-west-1-383414315062.s3.eu-west-1.amazonaws.com  | 
|  미국 동부(버지니아 북부)  |  https://iot-sitewise-gateway-us-east-1-223558168232.s3.us-east-1.amazonaws.com 및 https://iot-sitewise-gateway-us-east-1-223558168232.s3.amazonaws.com/  | 
|  미국 동부(오하이오)  |  https://iot-sitewise-gateway-us-east-2-005072661813.s3.us-east-2.amazonaws.com  | 
|  AWS GovCloud(미국 서부)  |  https://iot-sitewise-gateway-us-gov-west-1-599984565679.s3.us-gov-west-1.amazonaws.com/  | 
|  미국 서부(오리건)  |  https://iot-sitewise-gateway-us-west-2-502577205460.s3.us-west-2.amazonaws.com  | 

## 데이터 처리 팩 요구 사항
<a name="w2aac17c19c13b7"></a>

**참고**  
데이터 처리 팩(DPP) 기능은 더 이상 신규 고객에게 제공되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [데이터 처리 팩 가용성 변경](https://docs.aws.amazon.com/iot-sitewise/latest/appguide/iotsitewise-dpp-availability-change.html)을 참조하세요.
+ 엣지에서 데이터 처리 팩을 사용하려는 경우 AWS IoT SiteWise로컬 디바이스도 다음 요구 사항을 충족해야 합니다.
  + x86 64비트 쿼드코어 프로세서가 장착되어 있습니다.
  + 최소 16GB의 RAM이 있습니다.
  + 를 사용하는 경우 RAM의 경우 최소 32GB입니다Microsoft Windows.
  + 최소 256GB의 디스크 여유 공간이 있습니다.
  + 로컬 디바이스가 포트 443에서 인바운드 트래픽을 허용해야 합니다.
  + 다음 포트는 AWS IoT SiteWise 80, 443, 3001, 4569, 4572, 8000, 8081, 8082, 8084, 8085, 8445, 8086, 9000, 9500, 11080 및 50010에서 사용하도록 예약되어 있습니다. 예약된 포트를 트래픽용으로 사용하면 연결이 종료될 수 있습니다.
**참고**  
 AWS IoT Greengrass V2 스트림 관리자 구성 요소에는 자체 요구 사항이 있습니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [구성](https://docs.aws.amazon.com/greengrass/v2/developerguide/stream-manager-component.html#stream-manager-component-configuration)을 참조하세요.
+ 최소 디스크 공간 및 컴퓨팅 용량 요구 사항은 구현 및 사용 사례에 고유한 다양한 요인에 따라 달라집니다.
  + 간헐적인 인터넷 연결을 위해 데이터 캐싱에 필요한 디스크 공간은 다음 요인에 따라 다릅니다.
    + 업로드되는 데이터 스트림의 개수
    + 초당 데이터 스트림당 데이터 포인트
    + 각 데이터 포인트의 크기
    + 통신 속도
    + 예기치 않은 네트워크 다운타임
  + 데이터를 폴링하고 업로드하는 데 필요한 컴퓨팅 파워는 다음 요인에 따라 달라집니다.
    + 업로드되는 데이터 스트림의 개수
    + 초당 데이터 스트림당 데이터 포인트

## SiteWise Edge 게이트웨이를 사용하도록 권한 구성
<a name="gateway-iam-permisions"></a>

SiteWise Edge 게이트웨이를 사용하려면 다음 권한이 있어야 합니다.

**참고**  
 AWS IoT SiteWise 콘솔을 사용하여 SiteWise Edge 게이트웨이를 생성하는 경우 이러한 권한이 추가됩니다.
+ SiteWise Edge 게이트웨이의 IAM 역할은 AWS IoT Greengrass V2 디바이스에서 SiteWise Edge 게이트웨이를 사용하여 자산 모델 데이터와 자산 데이터를 처리할 수 있도록 허용해야 합니다.

  이 역할은 역할을 수임하기 위해 `credentials.iot.amazonaws.com` 서비스를 신뢰합니다.

  ** 권한 세부 정보**

  또한 이 역할에는 다음과 같은 권한도 있어야 합니다.
  + `iotsitewise` – 보안 주체가 엣지에서 자산 모델 데이터 및 자산 데이터를 검색할 수 있도록 합니다.
  + `iot` - AWS IoT Greengrass V2 디바이스가 상호 작용할 수 있도록 허용합니다 AWS IoT.
  + `logs` - AWS IoT Greengrass V2 디바이스가 Amazon CloudWatch Logs로 로그를 전송할 수 있도록 허용합니다.
  + `s3` - AWS IoT Greengrass V2 디바이스가 Amazon S3에서 사용자 지정 구성 요소 아티팩트를 다운로드할 수 있도록 허용합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iotsitewise:BatchPutAssetPropertyValue",
                  "iotsitewise:List*",
                  "iotsitewise:Describe*",
                  "iotsitewise:Get*"
              ],
              "Resource": "*"
          },
          {
              "Effect": "Allow",
              "Action": [
                  "iot:DescribeCertificate",
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents",
                  "logs:DescribeLogStreams",
                  "s3:GetBucketLocation",
                  "s3:GetObject",
                  "iot:Connect",
                  "iot:Publish",
                  "iot:Subscribe",
                  "iot:Receive",
                  "iot:DescribeEndpoint"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

# 자체 호스팅 SiteWise Edge 게이트웨이 생성
<a name="create-gateway-ggv2"></a>

 AWS IoT SiteWise 콘솔 또는를 사용하여 자체 호스팅 SiteWise Edge 게이트웨이를 AWS CLI 생성합니다. 이 절차에서는 자체 하드웨어에 설치할 자체 호스팅 SiteWise Edge 게이트웨이를 생성하는 방법을 자세히 설명합니다. Siemens Industrial Edge에서 실행되는 SiteWise Edge 게이트웨이 생성에 대한 자세한 내용은 [Siemens Industrial Edge에서 SiteWise Edge 게이트웨이 호스팅](sitewise-edge-on-siemens.md) 섹션을 참조하세요.

## SiteWise Edge 게이트웨이 생성
<a name="configure-gateway-console"></a>

------
#### [ Console ]

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 탐색 창에서 **엣지 게이트웨이**를 선택합니다.

1. **게이트웨이 생성**을 선택합니다.

1. **배포 대상 선택**에서 **자체 호스팅 게이트웨이**를 선택합니다.

1. **MQTT 지원 V3 게이트웨이** 또는 **클래식 스트림 V2 게이트웨이를** 선택합니다. 각 옵션에 대한 자세한 내용은 섹션을 참조하세요[를 사용하여 AWS IoT SiteWise Edge 게이트웨이 자체 호스팅 AWS IoT Greengrass V2](gw-self-host-gg2.md). MQTT 지원 V3 게이트웨이는 미래 대비 기능에 권장됩니다.

1. **게이트웨이 구성** 섹션에서 SiteWise Edge 게이트웨이의 이름을 입력하거나에서 생성된 이름을 사용합니다 AWS IoT SiteWise.

1. **Greengrass 디바이스 OS**에서 이 SiteWise Edge 게이트웨이를 설치할 디바이스의 운영 체제를 선택합니다.
**참고**  
데이터 처리 팩은 x86 플랫폼에서만 사용할 수 있습니다. Classic 스트림, V2 게이트웨이에서만 사용할 수 있습니다.

1. (선택 사항) 엣지에서 데이터를 처리하고 구성하려면 **엣지 기능**에서 **데이터 처리 팩**을 선택합니다.
**참고**  
회사 디렉터리의 사용자 그룹에 이 SiteWise Edge 게이트웨이에 대한 액세스 권한을 부여하려면 [SiteWise Edge에서 엣지 기능 설정](edge-data-collection-and-processing.md#using-sitewise-edge) 섹션을 참조하세요.

1. (선택 사항) **고급 구성**에서 다음을 수행합니다.

   1. **Greengrass 코어 디바이스의** 경우 다음 옵션 중 하나를 선택합니다.
     + **기본 설정** -는 AWS 자동으로 기본 설정을 사용하여 Greengrass 코어 디바이스를 생성합니다 AWS IoT Greengrass V2.

       1. Greengrass 코어 디바이스의 이름을 입력하거나에서 생성된 이름을 사용합니다 AWS IoT SiteWise.
     + **고급 설정** – 기존 Greengrass Core 디바이스를 사용하거나 수동으로 생성하려는 경우 이 옵션을 선택합니다.

       1. Greengrass 코어 디바이스를 선택하거나 **Greengrass 코어 디바이스 생성을** 선택하여 AWS IoT Greengrass V2 콘솔에서 생성합니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [AWS IoT Greengrass V2 코어 디바이스 설정](https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html) 섹션을 참조하세요.

1. **게이트웨이 생성**을 선택합니다.

1. **SiteWise Edge 게이트웨이 설치 관리자 생성** 대화 상자에서 **생성 및 다운로드**를 선택합니다. AWS IoT SiteWise 는 로컬 디바이스를 구성하는 데 사용할 수 있는 설치 관리자를 자동으로 생성합니다.
**중요**  
이 파일은 재생성할 수 없습니다. 설치 관리자 파일은 나중에 다시 사용하므로 안전한 위치에 저장해야 합니다.

------
#### [ AWS CLI ]

를 사용하여 자체 호스팅 게이트웨이를 생성하려면 게이트웨이의 이름을 AWS CLI제공하고 플랫폼과 게이트웨이 버전을 지정합니다. 게이트웨이를 생성할 때 지정할 수 있는 다른 여러 옵션이 있습니다. 자세한 내용은에 대한 명령 참조의 [create-gateway](https://docs.aws.amazon.com/cli/latest/reference/iotsitewise/create-gateway.html)를 참조하세요. *AWS CLI * AWS IoT SiteWise

이 예제를 사용하려면 사용자 입력 자리 표시자를 사용자의 정보로 대체합니다.

```
aws iotsitewise create-gateway \
    --gateway-name your-gateway-name \
    --gateway-platform greengrassV2={coreDeviceThingName=your-core-device-thing-name, coreDeviceOperatingSystem=LINUX_AMD64} \                        
    --gateway-version 3 \
    [--cli-input-json your-configuration]
```
+ `gateway-name` - 게이트웨이의 고유한 이름입니다.
+ `gateway-platform` - 게이트웨이 플랫폼 구성을 지정합니다. 자체 호스팅 게이트웨이에를 입력합니다`greengrassV2`. 자세한 내용은 명령 참조의 create-gateway 섹션에서 [옵션을](https://docs.aws.amazon.com/cli/latest/reference/iotsitewise/create-gateway.html#options) 참조하세요 AWS IoT SiteWise. *AWS CLI * 
  + `coreDeviceThingName` - AWS IoT Greengrass V2 코어 디바이스에 대한 AWS IoT 사물의 이름입니다.
  + `coreDeviceOperatingSystem` - 코어 디바이스의 운영 체제입니다 AWS IoT Greengrass V2. 운영 체제 지정은에 필수`gateway-version 3`이며 에는 적용되지 않습니다`gateway-version 2`. 옵션에는 `LINUX_AARCH64`, 및 `LINUX_AMD64`가 포함됩니다. `WINDOWS_AMD64` 
+ `gateway-version` - 게이트웨이의 버전입니다.
  + MQTT 지원 V3 게이트웨이를 생성하려면 게이트웨이 버전`3`에를 사용합니다.
  + Classic 스트림인 V2 게이트웨이를 생성하려면 게이트웨이 버전`2`에를 사용합니다.
+ `cli-input-json` - 요청 파라미터가 포함된 JSON 파일입니다.

------

이제 SiteWise Edge 게이트웨이를 생성했습니다[로컬 디바이스에 AWS IoT SiteWise Edge 게이트웨이 소프트웨어 설치](install-gateway-software-on-local-device.md).

# 로컬 디바이스에 AWS IoT SiteWise Edge 게이트웨이 소프트웨어 설치
<a name="install-gateway-software-on-local-device"></a>

 AWS IoT SiteWise Edge 게이트웨이를 생성한 후 로컬 디바이스에 SiteWise Edge 게이트웨이 소프트웨어를 설치합니다. SiteWise Edge 게이트웨이 소프트웨어는 Linux 또는 Microsoft Windows 서버 운영 체제가 설치된 로컬 디바이스에 설치할 수 있습니다.

**중요**  
로컬 디바이스가 인터넷에 연결되어 있는지 확인합니다.

------
#### [ Linux ]

다음 절차에서는 SSH를 사용하여 로컬 디바이스에 연결합니다. 또는 USB 플래시 드라이브 또는 기타 도구를 사용하여 설치 프로그램 파일을 로컬 디바이스로 전송할 수 있습니다. SSH를 사용하지 않으려면 아래의 **2단계: SiteWise Edge 게이트웨이 소프트웨어 설치**로 건너뜁니다.

**SSH 사전 조건**

SSH를 사용하여 디바이스에 연결하려면 먼저 다음 사전 조건을 완료하세요.
+ Linux 및 macOS - OpenSSH를 다운로드하여 설치합니다. 자세한 내용은 [https://www.openssh.com](https://www.openssh.com/)을 참조하세요

**1단계: 설치 프로그램을 SiteWise Edge 게이트웨이 디바이스에 복사**

다음 지침에서는 SSH 클라이언트를 사용하여 로컬 디바이스에 연결하는 방법을 설명합니다.

1. 디바이스에 연결하려면 컴퓨터의 터미널 창에서 다음 명령을 실행하여 *사용자 이름과* *IP*를 승격된 권한과 IP 주소가 있는 사용자 이름으로 바꿉니다.

   ```
   ssh username@IP
   ```

1. 에서 AWS IoT SiteWise 생성한 설치 관리자 파일을 SiteWise Edge 게이트웨이 디바이스로 전송하려면 다음 명령을 실행합니다.
**참고**  
*path-to-saved-installer*를 설치 프로그램 파일과 설치 프로그램 파일 이름을 저장하는 데 사용한 컴퓨터의 경로로 바꾸세요.
*IP-address*를 로컬 디바이스의 IP 주소로 바꿉니다.
*directory-to-receive-installer*를 설치 프로그램 파일을 받는 데 사용하는 로컬 장치의 경로로 바꿉니다.

   ```
   scp path-to-saved-installer.sh user-name@IP-address:directory-to-receive-installer
   ```

**2단계: SiteWise Edge 게이트웨이 소프트웨어 설치**

다음 절차에서는 SiteWise Edge 게이트웨이 디바이스의 터미널 창에서 명령을 실행합니다.

1. 설치 파일에 실행 권한을 부여합니다.

   ```
   chmod +x path-to-installer.sh
   ```

1. 설치 관리자를 실행합니다.

   ```
   sudo ./path-to-installer.sh
   ```

------
#### [ Windows Server ]

**사전 조건**

SiteWise Edge 게이트웨이 소프트웨어를 설치하려면 다음과 같은 사전 조건이 필요합니다.
+ Microsoft Windows Server 2019 이상 설치됨
+ 관리자 권한
+ PowerShell 버전 5.1 이상 설치
+ 프로비저닝될 Windows Server에 SiteWise Edge 게이트웨이 설치 프로그램 다운로드

**1단계: 관리자 권한으로 PowerShell 실행**

1. SiteWise Edge 게이트웨이를 설치하려는 Windows 서버에 관리자로 로그인합니다.

1. Windows 검색창에 **PowerShell을** 입력합니다.

1. 검색 결과에서 Windows PowerShell 앱의 컨텍스트 메뉴를 엽니다(오른쪽 클릭). **관리자 권한으로 실행**을 선택합니다.

**2단계: SiteWise Edge 게이트웨이 소프트웨어 설치**

SiteWise Edge 게이트웨이 디바이스의 터미널 창에서 다음 명령을 실행합니다.

1. SiteWise Edge 게이트웨이 설치 프로그램의 차단을 해제합니다.

   ```
   unblock-file path-to-installer.ps1
   ```

1. 설치 관리자를 실행합니다.

   ```
   ./path-to-installer.ps1
   ```
**참고**  
시스템에서 스크립트 실행이 비활성화된 경우 스크립트 실행 정책을 `RemoteSigned`으로 변경합니다.  

   ```
   Set-ExecutionPolicy RemoteSigned
   ```

------

다음 단계는 필요한 자체 호스팅 게이트웨이 *유형에* 따라 다릅니다. [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 또는 로 계속 진행합니다[클래식 스트림, AWS IoT SiteWise Edge용 V2 게이트웨이](classic-streams-v2-gateway.md).

# AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이
<a name="mqtt-enabled-v3-gateway"></a>

AWS IoT SiteWise 는 SiteWise Edge 게이트웨이 아키텍처의 상당한 발전을 나타내는 MQTT 지원 V3 게이트웨이를 사용할 수 있습니다. 이 게이트웨이 유형은 데이터 통신을 위해 MQTT(Message Queuing Telemetry Transport) 프로토콜을 활용하여 산업용 IoT 배포에서 향상된 유연성과 효율성을 제공합니다.

MQTT 지원 V3 게이트웨이는 데이터 전송에 MQTT를 사용하여 디바이스와 클라우드 간에 메시지를 효율적으로 전송하는 경량의 게시-구독 네트워크 프로토콜을 지원합니다. Amazon S3를 사용하여에 직접 실시간 데이터 수집 AWS IoT SiteWise 및 버퍼링된 데이터 수집을 비롯한 다양한 데이터 대상을 설정할 수 있습니다. 정확한 데이터 수집을 활성화하기 위해 경로 필터를 구현하여 특정 MQTT 주제를 구독할 수 있습니다.

MQTT를 사용하는 V3 게이트웨이에는 필터가 "\$1"(모든 주제)로 설정된 사전 구성된 실시간 대상이 제공되며, 필요에 따라 사용자 지정하거나 제거할 수 있습니다. 데이터 관리를 간소화하기 위해 각 게이트웨이에는 하나의 실시간 대상만 존재할 수 있습니다.

MQTT 지원 아키텍처는 Classic 스트림인 V2 게이트웨이와 크게 다릅니다. V2는 스트림 기반 접근 방식을 사용하지만 V3는 MQTT를 사용하여 더 구성 가능한 데이터 대상과 필터링 옵션을 제공합니다. 그러나 V3는 V2에서 사용할 수 있는 데이터 처리 팩을 지원하지 않습니다.

MQTT 지원 V3 게이트웨이는 다음과 같은 몇 가지 이점을 제공합니다.
+ MQTT의 경량 특성으로 인해 확장성이 개선되어 수많은 디바이스를 더 잘 처리하고 데이터를 자주 전송할 수 있습니다.
+ 경로 필터를 통해 데이터 제어를 개선하여 데이터 수집을 세밀하게 관리하고 불필요한 데이터 전송 및 처리를 줄일 수 있습니다.
+ 유연한 데이터 처리를 통해 특정 요구 사항에 따라 실시간 처리와 버퍼링된 스토리지 간에 구성할 수 있습니다.
+ 최신 IoT 통신 표준에 맞게 조정하여 향후 개선 및 통합을 위한 단계를 설정합니다.

특히 유연한 데이터 수집 옵션과 데이터 수집에 대한 정확한 제어가 필요한 경우 새 배포를 위해 MQTT 지원 V3 게이트웨이를 채택하는 것이 좋습니다.

**참고**  
데이터 처리 팩이 필요한 기존 배포 또는 시나리오의 경우 Classic 스트림, V2 게이트웨이는 여전히 실행 가능한 옵션입니다.

두 게이트웨이 유형을 모두 제공하여 고급 MQTT 기능을 우선시하든 기존 시스템과의 호환성을 우선시하든 관계없이 특정 산업 IoT 요구 사항에 가장 적합한 솔루션을 선택할 수 있는지 AWS IoT SiteWise 확인합니다.

## 대상 및 경로 필터
<a name="create-destination-summary"></a>

MQTT 지원 게이트웨이의 대상 및 경로 필터에 대해 자세히 알아보려면 다음 주제를 참조하세요.
+ [AWS IoT SiteWise 엣지 대상 이해](gw-destinations.md#source-destination)
+ [AWS IoT SiteWise Edge 실시간 대상 추가](destinations-real-time.md)
+ [Amazon S3를 사용하여 AWS IoT SiteWise 버퍼링된 대상 추가](destinations-buffered.md)
+ [AWS IoT SiteWise Edge 대상의 경로 필터 이해경로 필터 이해](gw-destinations.md#destinations-path-filters)
+ [AWS IoT SiteWise Edge 대상에 경로 필터 추가](destinations-add-path-filters.md)
+ [AWS IoT SiteWise 엣지 대상 관리](destinations-manage.md)

# 외부 애플리케이션을 EMQX 브로커에 연결
<a name="connect-external-applications-emqx"></a>

이 가이드에서는 배포된 MQTT 지원 V3 게이트웨이의 EMQX AWS IoT SiteWise 브로커를 통해 외부 애플리케이션을 Edge 게이트웨이에 연결하는 방법을 설명합니다. 외부 애플리케이션에는 사용자 지정 모니터링 도구, 타사 시각화 소프트웨어 또는 엣지에서 산업 데이터와 상호 작용해야 하는 레거시 시스템이 포함될 수 있습니다.

EMQX 배포 구성, 보안 연결을 위한 TLS 설정, 특정 주제에 대한 액세스를 제어하는 권한 부여 규칙을 포함하여 Linux 및 Microsoft Windows 환경 모두에 대한 구성 단계를 다룹니다.

**참고**  
EMQX는 AWS IoT SiteWise Edge의 공급업체 또는 공급업체가 아닙니다.

**중요**  
게이트웨이에 대한 연결을 보호하려면 AWS IoT Greengrass 클라이언트 디바이스 인증 기능을 통해 인증서 기반 인증을 사용하는 것이 좋습니다. 이 방법은 상호 TLS(mTLS) 인증을 통해 강력한 보안을 제공합니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [코어 디바이스에 클라이언트 디바이스 연결을](https://docs.aws.amazon.com/greengrass/v2/developerguide/connect-client-devices.html) 참조하세요.

인증서 기반 인증을 사용할 수 없는 경우이 가이드에 따라 사용자 이름과 암호를 사용하여 인증을 설정합니다.

## 사전 조건
<a name="emqx-broker-prerequisites"></a>
+ 배포되어 온라인 상태인 SiteWise Edge MQTT 지원 V3 게이트웨이
+ 게이트웨이 호스트에 대한 액세스
+  AWS IoT SiteWise 및 AWS IoT Greengrass 콘솔에 대한 액세스

**Topics**
+ [사전 조건](#emqx-broker-prerequisites)
+ [Edge의 EMQX 브로커에 대한 메시지 AWS IoT SiteWise 페이로드 형식](connect-broker-payload-format.md)
+ [EMQX 브로커 구성](configure-emqx-broker.md)
+ [애플리케이션을 Edge의 EMQX AWS IoT SiteWise 브로커에 연결](connect-app-to-broker.md)
+ [EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정](authorization-rules-emqx-broker.md)

# Edge의 EMQX 브로커에 대한 메시지 AWS IoT SiteWise 페이로드 형식
<a name="connect-broker-payload-format"></a>

IoT SiteWise 게시자 구성 요소가 외부 애플리케이션의 데이터를 사용하고 AWS IoT SiteWise 클라우드에 게시하려면 브로커로 전송된 페이로드가 특정 요구 사항을 충족해야 합니다.

페이로드 형식을 이해하는 것이 AWS IoT SiteWise Edge와의 성공적인 MQTT 통신의 핵심입니다. 연결 설정 프로세스는 이후 섹션에서 다루지만 구현을 계획하는 데 도움이 되도록 먼저 페이로드 요구 사항을 제공합니다.

## MQTT 주제 요구 사항
<a name="connect-broker-mqtt-requirements"></a>

사용된 레벨 또는 문자 수를 포함하여 MQTT 주제 구조에는 제한이 없습니다. 그러나 주제가 페이로드의 `propertyAlias` 필드와 일치하는 것이 좋습니다.

**Example 속성 별칭 예제**  
MQTT 주제가 인 경우 `propertyAlias` 일치하는지 `site1/line1/compressor1/temperature`확인합니다.  

```
{
  "assetId": "compressor_asset_01",
  "propertyAlias": "site1/line1/compressor1/temperature",
  "propertyId": "temperature_sensor_01",
  "propertyValues": [
    {
      "quality": "GOOD",
      "timestamp": {
        "offsetInNanos": 0,
        "timeInSeconds": 1683000000
      },
      "value": {
        "doubleValue": 23.5
      }
    }
  ]
}
```

## JSON 페이로드 구조
<a name="connect-broker-json-payload"></a>

MQTT 메시지 페이로드는 JSON으로 작성되며 [AWS IoT SiteWise API 참조](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_PutAssetPropertyValueEntry.html)에 정의된 `PutAssetPropertyValueEntry` 메시지 형식을 따릅니다.

```
{
   "assetId": "string",
   "propertyAlias": "string",
   "propertyId": "string",
   "propertyValues": [
      {
         "quality": "string",
         "timestamp": {
            "offsetInNanos": number,
            "timeInSeconds": number
         },
         "value": {
            "booleanValue": boolean,
            "doubleValue": number,
            "integerValue": number,
            "stringValue": "string"
         }
      }
   ]
}
```

**참고**  
메시지가 유효한 것으로 간주되려면 다음 조건 중 하나만 true일 수 있습니다.  
`propertyAlias`가 설정되어 있거나
`assetId` 및 모두 설정`propertyId`됨
`PutAssetPropertyValueEntry` 에는이 컨텍스트에서 필요하지 않은 `entryId` 필드가 있습니다.

# EMQX 브로커 구성
<a name="configure-emqx-broker"></a>

이 섹션에서는 사용자 이름과 암호를 추가하는 방법을 다룹니다. 또한 추가된 사용자 이름과 암호를 사용하여 외부 소스에서 TLS 연결을 설정하는 방법도 다룹니다. Linux 또는를 사용하여 EMQX 브로커를 구성할 수 있습니다Microsoft Windows.

**참고**  
브로커를 구성하려면 MQTT 지원 V3 게이트웨이에서 기본 EMQX 구성으로 설정된 코어 디바이스가 필요합니다.

**중요**  
이 절차를 완료한 후에는 권한 부여 규칙을 구성하는 것이 좋습니다. 자세한 내용은 [EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정](authorization-rules-emqx-broker.md) 단원을 참조하십시오. 추가된 사용자에 대한 권한 부여 규칙은 보안을 강화합니다.

## 인증을 위한 EMQX 배포 구성 업데이트
<a name="update-emqx-broker-authentication"></a>

**인증을 위한 EMQX 배포 구성을 업데이트하려면**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. 구성할 게이트웨이를 선택합니다.

1. **엣지 게이트웨이 구성** 섹션에서 **Greengrass 코어 디바이스** 값을 복사합니다. 나중에 사용할 수 있도록 저장합니다.

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/)을 엽니다.

1. 왼쪽 탐색 창의 **관리** 섹션에서 **Greengrass 디바이스**를 선택한 다음 **배포를** 선택합니다.

1. 이전에 저장한 코어 디바이스 값을 찾아 해당 링크를 선택하여 배포를 엽니다.

1. **작업** 드롭다운 버튼을 선택한 다음 **수정을** 선택합니다.

1. 표시되는 메시지를 읽은 다음 **배포 수정을** 선택합니다. **대상 지정** 페이지가 나타납니다.

1. **구성 요소 구성** 단계에 도달할 때까지 **다음을** 선택합니다.

1. `aws.greengrass.clientdevices.mqtt.EMQX` 라디오 버튼을 선택합니다.

1. 구성 **요소 구성** 버튼을 선택합니다. 구성 요소에 대한 구성 페이지가 나타납니다.

1. **구성 업데이트**에서 구성 **요소 버전 2.\$1.\$1의 기본 구성으로 재설정**을 선택합니다.

1. OS를 기반으로 **병합할 구성** 섹션에 다음 구성을 입력합니다.

------
#### [ Linux ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 8883:8883 -p 127.0.0.1:1883:1883 -p 127.0.0.1:18083:18083 -v emqx-data:/opt/emqx/data -e EMQX_NODE__NAME=emqx@local",
       "requiresPrivilege": "true"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "requiresPrivilege": "true"
   }
   ```

   `dockerOptions` 필드는 Linux 게이트웨이에만 해당됩니다.

------

1. **확인**을 선택합니다.

1. **검토** 단계에 도달할 때까지 **다음을** 선택합니다.

1. **배포(Deploy)**를 선택합니다.

1. 배포가 성공하면 다음 단계로 진행합니다.

## 사용자 이름 및 암호 인증 활성화
<a name="emqx-broker-username-password-auth"></a>

이 섹션에서는 EMQX 대시보드 GUI를 통해 사용자 이름과 암호를 추가하는 방법을 보여줍니다.

**참고**  
제공된 EMQX 관련 지침은 참조용일 뿐입니다. EMQX 설명서 및 기능은 시간이 지남에 따라 변경될 수 있으며 설명서를 유지 관리하지 않으므로 최신 정보는 [EMQX의 공식 설명서를 참조하는](https://docs.emqx.com/en/emqx/latest/) 것이 좋습니다.

------
#### [ EMQX Dashboard ]

**EMQX 대시보드를 통해 사용자 이름 및 암호 인증을 활성화하려면**

1. 게이트웨이 호스트 내에 있는지 확인합니다.

1. 브라우저 창을 열고를 방문합니다[http://localhost:18083/](http://localhost:18083/).

1. 의 기본 사용자 이름과의 **admin** 기본 암호를 입력합니다**public**. 자세한 내용은 [EMQX 문서의 EMQX 대시보드](https://docs.emqx.com/en/emqx/latest/dashboard/introduction.html#first-login)*를 참조하세요*.

1. 로그인한 후 암호를 변경하라는 메시지가 표시됩니다. 암호를 업데이트하여 EMQX 대시보드로 계속 진행합니다.

1. 왼쪽 탐색 창에서 보호 아이콘과 **인증을** 차례로 선택합니다.

1. **기본 제공 데이터베이스** 행에서 **사용자** 버튼을 선택합니다.

1. 더하기 기호 아이콘 버튼을 선택하여 사용자를 추가합니다. **추가** 화면이 나타납니다.

1. 외부 애플리케이션 사용자의 사용자 이름과 암호를 입력합니다.

1. **저장**을 선택합니다. 선택한 사용자 이름이 **인증** 페이지의 테이블에 나타납니다.

**참고**  
기존 또는 기본 권한 부여 규칙이 새 사용자에게 적용됩니다. 외부 애플리케이션 요구 사항에 맞게 검토하고 조정하는 것이 좋습니다.

------
#### [ EMQX Management with Linux ]

에서 AWS IoT SiteWise EMQX CLI 도구를 사용합니다`/greengrass/v2/bin/swe-emqx-cli`.

**Linux를 사용하여 EMQX Management를 통해 사용자 이름 및 암호 인증을 활성화하려면**

1. 다음 명령을 실행하여 관리자 암호를 변경합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli admin change-pwd
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 현재 관리자 사용자(기본값은 `admin`)와 암호(기본값은 )를 입력합니다`public`.

   1. 새 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   admin password changed successfully
   ```

1. 다음 명령을 실행하여 외부 애플리케이션의 사용자를 추가합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli users add
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 새 사용자의 사용자 이름을 입력합니다.

   1. 새 사용자의 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   User '[username]' created successfully
   ```

1. 다음 명령을 실행하여 사용자 구성을 확인합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli users list
   ```

   출력에는 구성된 모든 사용자가 표시됩니다.

   ```
   Users:
   - [your-added-username]
   
   Total users: 1
   ```

------
#### [ EMQX Management with Windows ]

다음 위치 중 하나에서 AWS IoT SiteWise EMQX CLI 도구를 사용합니다.
+ PowerShell: `C:\greengrass\v2\bin\swe-emqx-cli.ps1`
+ 명령 프롬프트: `C:\greengrass\v2\bin\swe-emqx-cli.bat`

**Windows를 사용하여 EMQX Management를 통해 사용자 이름 및 암호 인증을 활성화하려면**

1. 다음 명령을 실행하여 관리자 암호를 변경합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 admin change-pwd
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 현재 관리자 사용자(기본값은 `admin`)와 암호(기본값은 )를 입력합니다`public`.

   1. 새 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   admin password changed successfully
   ```

1. 다음 명령을 실행하여 외부 애플리케이션의 사용자를 추가합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 users add
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 새 사용자의 사용자 이름을 입력합니다.

   1. 새 사용자의 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   User '[username]' created successfully
   ```

1. 다음 명령을 실행하여 사용자 구성을 확인합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 users list
   ```

   출력에는 구성된 모든 사용자가 표시됩니다.

   ```
   Users:
   - [your-added-username]
   
   Total users: 1
   ```

------

# 애플리케이션을 Edge의 EMQX AWS IoT SiteWise 브로커에 연결
<a name="connect-app-to-broker"></a>

EMQX 브로커는 포트 8883에서 전송 계층 보안(TLS)을 사용하여 모든 통신을 암호화하므로 전송 중에 데이터를 보호할 수 있습니다. 이 섹션에서는 애플리케이션과 EMQX 브로커 간의 연결을 설정하는 단계를 안내합니다. 이러한 단계를 따르면 산업 데이터의 무결성과 기밀성을 유지하는 데 도움이 됩니다. 연결 프로세스에는 구성 요소를 통한 자동 IP 검색을 사용하거나 TLS 인증서에서 DNS 이름과 IP 주소를 주체 대체 이름(SANs)으로 수동으로 구성하는 두 가지 주요 접근 방식이 포함됩니다. 각 메서드에는 네트워크 설정 및 보안 요구 사항에 따라 고유한 이점이 있습니다. 이 설명서는 두 옵션을 모두 안내합니다.

**Topics**
+ [AWS IoT SiteWise Edge에서 EMQX 브로커에 대한 보안 연결을 위해 TLS 구성](#configure-tls-emqx-broker)
+ [Edge에서 EMQX AWS IoT SiteWise 브로커 연결 테스트](#test-emqx-connection)
+ [자체 CA 사용](#configure-tls-custom-ca)
+ [외부 방화벽 연결을 위해 포트 8883 열기](#emqx-firewall)

## AWS IoT SiteWise Edge에서 EMQX 브로커에 대한 보안 연결을 위해 TLS 구성
<a name="configure-tls-emqx-broker"></a>

기본적으로는 코어 디바이스 인증 기관(CA)에서 서명한 EMQX 브로커에 대한 TLS 서버 인증서를 AWS IoT Greengrass 생성합니다. 자세한 내용은 [MQTT 브로커를 사용하여 AWS IoT Greengrass 코어 디바이스에 클라이언트 디바이스 연결을 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html).

### TLS 인증서 검색
<a name="configure-tls-retrieve-certificate"></a>

CA 인증서를 가져오려면 게이트웨이 호스트에서 다음 명령을 실행합니다.

------
#### [ Linux ]

게이트웨이 호스트의 셸 세션에서 다음 명령을 실행합니다.

```
/greengrass/v2/bin/swe-emqx-cli cert
```

이 명령은 인증서 위치를 표시하고 인증서의 콘텐츠를 인쇄합니다.

또는 다음 명령을 사용하여 인증서를 파일에 저장할 수 있습니다.

```
/greengrass/v2/bin/swe-emqx-cli cert --output /path/to/certificate.pem
```

------
#### [ Windows ]

게이트웨이 호스트의 PowerShell 세션에서 다음 명령을 실행합니다.

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert
```

이 명령은 인증서 위치를 표시하고 인증서의 콘텐츠를 인쇄합니다.

또는 다음 명령을 사용하여 인증서를 파일에 저장할 수 있습니다.

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert --output C:\path\to\certificate.pem
```

CLI는 시스템의 정확한 경로에 관계없이 인증서를 자동으로 찾습니다.

------

ca.pem 파일의 내용을 브로커에 연결하는 외부 애플리케이션에 복사합니다. `BrokerCoreDeviceCA.pem`로 파일을 저장합니다.

### TLS 서버 인증서에 사용자 지정 DNS 이름/IP 주소 추가
<a name="configure-tls-custom-dns-ip"></a>

에서 생성된 인증서의 주체 대체 이름(SAN)은 AWS IoT Greengrass 입니다`localhost`. 게이트웨이 호스트 외부에서 TLS 연결을 설정할 때 브로커의 호스트 이름이 서버 인증서의 호스트 이름과 일치하지 않기 때문에 TLS 확인 단계가 실패`localhost`합니다.

일치하지 않는 호스트 이름 문제를 해결하기 위해는 코어 디바이스 엔드포인트를 관리하는 두 가지 방법을 AWS IoT Greengrass 제공합니다. 이 섹션에서는 두 옵션을 모두 다룹니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [코어 디바이스 엔드포인트 관리를](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-core-device-endpoints.html) 참조하세요.
+ 코어 디바이스의 IP 주소를 사용하여 EMQX 브로커에 연결하려면 자동 IP 검색 섹션을 사용합니다.
+ IP 주소 대신 DNS 이름을 사용하여 EMQX 브로커에 연결하려면 수동 관리 섹션을 사용합니다.

------
#### [ Automated IP discovery ]

이 옵션을 사용하면 코어 디바이스가 IP 주소를 자동으로 검색하여 브로커 인증서에 주체 대체 이름(SAN)으로 추가할 수 있습니다.

1. 코어 디바이스의 배포에 `aws.greengrass.clientdevices.IPDetector` 구성 요소를 추가합니다.

1. 디바이스에 변경 사항 배포

1. 배포가 완료될 때까지 기다립니다.

   배포가 완료되면 브로커의 IP 주소를 사용하여 보안 TLS 연결을 설정할 수 있습니다.

   IP 주소는 브로커 인증서에 자동으로 SAN으로 추가됩니다.

------
#### [ Manual DNS and IP Configuration ]

DNS 이름과 IP 주소를 TLS 인증서에 주체 대체 이름(SANs)으로 수동으로 추가할 수 있습니다. 이 방법은 게이트웨이 호스트의 DNS 이름을 구성한 경우에 유용합니다.

**중요**  
IPDetector 구성 요소를 사용하는 경우 계속하기 전에 배포에서 제거합니다. IPDetector 구성 요소는 수동 엔드포인트 구성을 재정의합니다.

**엔드포인트를 수동으로 구성하려면**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. 구성할 게이트웨이를 선택합니다.

1. **엣지 게이트웨이 구성** 섹션에서 **Greengrass 코어 디바이스** URL을 선택합니다. 코어 디바이스의 페이지가 나타납니다.

1. **클라이언트 디바이스** 탭을 선택합니다.

1. **엔드포인트 관리**를 선택합니다.

1. 엔드포인트 관리 대화 상자에서 DNS 이름(들)과 SANs으로 추가할 IP 주소를 입력합니다. 포트 8883을 사용합니다.

1. **업데이트**를 선택합니다.

브로커의 TLS 서버 인증서는 새 엔드포인트를 포함하도록 자동으로 업데이트됩니다.

**Linux를 사용하여 TLS 서버 인증서 업데이트를 확인하려면**

1. 게이트웨이 호스트에서 셸 세션을 시작합니다.

   ```
   docker exec emqx openssl x509 -in ./data/cert.pem -text -noout | grep -A1 "Subject Alternative Name"
   ```

1. 명령은 다음과 유사한 출력을 반환합니다.

   ```
   X509v3 Subject Alternative Name: 
   DNS:endpoint_you_added, DNS:localhost
   ```

1. 엔드포인트가 SANs 확인합니다.

**Windows를 사용하여 TLS 서버 인증서 업데이트를 확인하려면**

1. 게이트웨이 호스트에서 셸 세션을 시작합니다.

   ```
   (Get-PfxCertificate -FilePath "C:\greengrass\v2\work\aws.greengrass.clientdevices.mqtt.EMQX\v2\data\cert.pem").Extensions | Where-Object { $_.Oid.FriendlyName -eq "Subject Alternative Name" } | ForEach-Object { "Subject Alternative Name:", ($_.Format($true) -split "`n")[0..1] }
   ```

1. 명령은 다음과 유사한 출력을 반환합니다.

   ```
   Subject Alternative Name:
   DNS Name=your-endpoint
   DNS Name=localhost
   ```

1. 추가한 엔드포인트가 SANs 목록에 있는지 확인합니다.

------

## Edge에서 EMQX AWS IoT SiteWise 브로커 연결 테스트
<a name="test-emqx-connection"></a>

TLS 인증서 및 인증 자격 증명으로 EMQX 브로커를 구성한 후에는 설정이 올바르게 작동하는지 확인하는 것이 중요합니다. 연결을 테스트하면 보안 구성이 제대로 구현되고 클라이언트가 브로커에 암호화된 연결을 성공적으로 설정할 수 있습니다. 이 섹션에서는 TLS 암호화 및 인증을 지원하는 널리 사용되는 MQTT 클라이언트 도구인 Mosquitto 명령줄 인터페이스(CLI) 클라이언트를 사용하여 브로커 연결을 테스트하는 방법을 보여줍니다.

### Mosquitto CLI 클라이언트를 사용하여 EMQX 브로커 연결 테스트
<a name="test-emqx-connection-mosquitto"></a>

이 단계에서는 mosquitto CLI 클라이언트를 사용하여 설정을 테스트하고 앞서 생성한 사용자 이름과 암호를 사용하여 브로커에 성공적으로 연결할 수 있는지 확인합니다. 3단계: TLS 설정에서 `BrokerCoreDeviceCA.pem` 다음 단계를 가져옵니다.

```
mosquitto_sub -h hostname|ip address \
    -p 8883 \
    -t "#" \
    -q 1 \
    -u username -P password \
    --cafile BrokerCoreDeviceCA.pem
```

**참고**  
연결하려는 호스트 이름/IP 주소가 클라이언트에 전달하는 CA 인증서에 있는 주체 대체 이름(SAN)과 일치하지 않는 경우 SSL:verify 오류가 발생할 수 있습니다. 올바른 SAN으로 인증서를 가져오는 방법은 3단계: TLS 설정에서 "TLS 서버 인증서에 사용자 지정 DNS 이름/IP 주소 추가"를 참조하세요.

이때 모든 사용자는 브로커의 모든 주제를 게시하고 구독할 수 있습니다. [EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정](authorization-rules-emqx-broker.md)로 이동합니다.

## 자체 CA 사용
<a name="configure-tls-custom-ca"></a>

AWS IoT Greengrass 에서는 자체 인증 기관(CA)을 사용하도록 자체 클라이언트 디바이스 인증 구성 요소를 구성하는 방법을 간략하게 설명합니다. 클라이언트 디바이스 인증 구성 요소(`aws.greengrass.clientdevices.Auth`)에서는 클라이언트 디바이스가 인증되고 클라이언트 디바이스 작업이 승인됩니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [자체 인증 기관 사용을 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html#use-your-own-CA).

자체 CA를 사용하려면 사용자 지정 구성을 지정할 수 있도록 배포에 `aws.greengrass.clientdevices.Auth` 구성 요소를 추가합니다.

## 외부 방화벽 연결을 위해 포트 8883 열기
<a name="emqx-firewall"></a>

------
#### [ Linux ]

Linux 호스트 방화벽 규칙에서 포트 8883에 대한 인바운드 규칙을 추가하여 게이트웨이 호스트 외부에서 들어오는 연결을 허용합니다. 방화벽이 있는 경우 포트 8883에서 들어오는 TLS 연결이 허용되는지 확인합니다.

------
#### [ Windows ]

Microsoft Windows 호스트 방화벽 규칙에서 포트 8883에 대한 인바운드 규칙을 추가하여 게이트웨이 호스트 외부에서 들어오는 연결을 허용합니다. 규칙이 포트 8883을 지정하는 포트 유형의 허용 규칙인지 확인합니다. 외부 애플리케이션에서 브로커로의 연결을 허용하도록 네트워크 구성에 따라 이를 구성할 수 있습니다.

------

# EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정
<a name="authorization-rules-emqx-broker"></a>

EMQX는 사용자 이름, IP 주소 또는 클라이언트 ID와 같은 식별자를 기반으로 권한 부여 규칙 추가를 지원합니다. 이는 다양한 작업 또는 주제에 연결하는 외부 애플리케이션의 수를 제한하려는 경우에 유용합니다.

**Topics**
+ [Linux에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성](add-auth-rules-database-emqx-broker-linux.md)
+ [Windows에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성](add-auth-rules-database-emqx-broker-windows.md)
+ [권한 부여를 위한 EMQX 배포 구성 업데이트](update-emqx-broker-authorization.md)
+ [사용자를 위한 EMQX 대시보드를 통해 권한 부여 규칙 추가](add-rules-emqx-broker.md)

# Linux에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성
<a name="add-auth-rules-database-emqx-broker-linux"></a>

권한 부여 규칙을 구성할 때 배포 설정에 따라 두 가지 구성 옵션이 있습니다.
+ **Docker** - 없이 표준 Docker 설치를 실행하는 경우 **Docker 브리지 게이트웨이** 구성을 Litmus Edge사용합니다. 이는 일반적으로 AWS IoT SiteWise 구성 요소만 배포한 경우입니다.
+ **Litmus Edge** - 게이트웨이에를 Litmus Edge 설치한 경우 **Litmus Edge 네트워크 서브넷** 구성을 사용합니다.

**참고**  
Docker 브리지 게이트웨이를 처음 구성한 후 나중에를 설치하는 경우 Litmus Edge 네트워크 서브넷 옵션을 사용하여 권한 부여 규칙을 Litmus Edge재구성하여 모든 구성 요소 간에 적절한 통신을 보장합니다.

**기본 권한 부여 규칙을 추가하려면**

1. EMQX 브로커가 배포되고 실행 중인지 확인합니다.

1. 게이트웨이 호스트에서 셸 세션을 시작합니다.

------
#### [ Docker without Litmus Edge ]

   없는 표준 Docker 설치의 경우 다음을 Litmus Edge실행합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli acl init
   ```

------
#### [ Litmus Edge network subnet ]

   를 사용하는 경우 Litmus Edge 네트워크 서브넷 IP를 Litmus Edge확인합니다.

   ```
   docker network inspect LitmusNetwork | grep IPAM -A9
   ```

   출력의 서브넷 값을 기록하고 다음 명령을 실행합니다. `litmus_subnet_ip`를 이전 단계의 서브넷 값으로 바꿉니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli acl init litmus_subnet_ip
   ```

------

   도구는 제공된 IP 주소에서 브로커로의 연결을 허용하는 권한 부여 규칙을 자동으로 생성하고 적용합니다. 모든 주제에 대한 액세스를 허용합니다. 여기에는 IoT SiteWise OPC UA 수집기 및 IoT SiteWise 게시자가 포함됩니다.

1. [권한 부여를 위한 EMQX 배포 구성 업데이트](update-emqx-broker-authorization.md)로 이동합니다.

# Windows에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성
<a name="add-auth-rules-database-emqx-broker-windows"></a>

이 섹션에서는 Windows 배포용 기본 제공 데이터베이스를 사용하여 권한 부여 규칙을 구성하는 방법을 다룹니다.

**기본 권한 부여 규칙을 추가하려면**

1. EMQX 브로커가 배포되고 실행 중인지 확인합니다.

1.  AWS IoT SiteWise EMQX CLI 도구를 실행합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 acl init
   ```

   도구는 localhost(127.0.0.1)에서 브로커로의 연결을 허용하는 ACL 규칙을 자동으로 생성하고 적용합니다. 모든 주제에 대한 액세스를 허용합니다. 여기에는 IoT SiteWise OPC UA 수집기 및 IoT SiteWise 게시자가 포함됩니다.

1. [권한 부여를 위한 EMQX 배포 구성 업데이트](update-emqx-broker-authorization.md)로 이동합니다.

# 권한 부여를 위한 EMQX 배포 구성 업데이트
<a name="update-emqx-broker-authorization"></a>

**권한 부여를 위해 EMQX 배포 구성을 업데이트하려면**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. 구성할 게이트웨이를 선택합니다.

1. **엣지 게이트웨이 구성** 섹션에서 **Greengrass 코어 디바이스** 값을 복사합니다. 나중에 사용할 수 있도록 저장합니다.

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/)을 엽니다.

1. 왼쪽 탐색 창의 **관리** 섹션에서 **Greengrass 디바이스**를 선택한 다음 **배포를** 선택합니다.

1. 이전에 저장한 코어 디바이스 값을 찾아 해당 링크를 선택하여 배포를 엽니다.

1. **작업** 드롭다운 버튼을 선택한 다음 **수정을** 선택합니다.

1. 표시되는 메시지를 읽은 다음 **배포 수정을** 선택합니다. **대상 지정** 페이지가 나타납니다.

1. **구성 요소 구성** 단계에 도달할 때까지 **다음을** 선택합니다.

1. `aws.greengrass.clientdevices.mqtt.EMQX` 라디오 버튼을 선택합니다.

1. 구성 **요소 구성** 버튼을 선택합니다. 구성 요소에 대한 구성 페이지가 나타납니다.

1. **구성 업데이트**에서 구성 **요소 버전 2.\$1.\$1의 기본 구성으로 재설정**을 선택합니다.

1. OS를 기반으로 **병합할 구성** 섹션에 다음 콘텐츠를 붙여 넣습니다.

------
#### [ Linux ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "deny",
               "sources": [
                   {
                       "type": "built_in_database"
                   },
                   {
                       "type": "file",
                       "path": "data/authz/acl.conf"
                   }
               ]
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 8883:8883 -p 127.0.0.1:1883:1883 -p 127.0.0.1:18083:18083 -v emqx-data:/opt/emqx/data -e EMQX_NODE__NAME=emqx@local",
       "requiresPrivilege": "true"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "deny",
               "sources": [
                   {
                       "type": "built_in_database"
                   },
                   {
                       "type": "file",
                       "path": "C:\\greengrass\\v2\\work\\aws.greengrass.clientdevices.mqtt.EMQX\\v2\\data\\authz\\acl.conf"
                   }
               ]
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "requiresPrivilege": "true"
   }
   ```

------

1. **확인**을 선택합니다.

1. **검토** 단계에 도달할 때까지 **다음을** 선택합니다.

1. **배포(Deploy)**를 선택합니다.

**참고**  
이 시점부터는 ACL 파일을 편집하여 권한 부여 규칙을 업데이트할 수 없습니다. 또는 배포에 성공한 [사용자를 위한 EMQX 대시보드를 통해 권한 부여 규칙 추가](add-rules-emqx-broker.md) 후 로 진행할 수 있습니다.

# 사용자를 위한 EMQX 대시보드를 통해 권한 부여 규칙 추가
<a name="add-rules-emqx-broker"></a>

EMQX 대시보드 또는 AWS IoT SiteWise EMQX CLI 도구를 사용하여 권한 부여 규칙을 추가하거나 업데이트할 수 있습니다. EMQX CLI 도구는 AWS IoT SiteWise EMQX의 내장 데이터베이스를 사용하여 권한 부여를 관리합니다.

**참고**  
권한 부여 규칙 추가는 MQTT 주제 패턴 및 액세스 제어를 이해해야 하는 고급 구성 단계입니다. EMQX의 기본 제공 데이터베이스를 사용하여 권한 부여 규칙을 생성하는 방법에 대한 자세한 내용은 EMQX 문서의 [기본 제공 데이터베이스 사용을](https://docs.emqx.com/en/emqx/latest/access-control/authz/mnesia.html) 참조하세요. ** 

**참고**  
제공된 EMQX 관련 지침은 참조용일 뿐입니다. EMQX 설명서 및 기능은 시간이 지남에 따라 변경될 수 있으며 설명서를 유지 관리하지 않으므로 최신 정보는 [EMQX의 공식 설명서를 참조하는](https://docs.emqx.com/en/emqx/latest/) 것이 좋습니다.

------
#### [ EMQX dashboard ]

이 절차에서는 EMQX 대시보드에서 권한 부여 규칙을 추가하는 방법을 보여줍니다.

EMQX 대시보드는 게이트웨이 호스트 내에서만 액세스할 수 있습니다. 게이트웨이 호스트 외부에서 연결하려고 하면 대시보드에 액세스할 수 없습니다.

**EMQX 대시보드를 사용하여 권한 부여 규칙을 추가하려면**

1. 게이트웨이 호스트 내에 있는지 확인합니다.

1. 브라우저 창을 열고를 방문합니다[http://localhost:18083/](http://localhost:18083/).

1. EMQX 대시보드에 로그인합니다. 이 절차에서는 기본 로그인 자격 증명을 선택한 것으로 변경했다고 가정합니다. 초기 설정에 대한 자세한 내용은 섹션을 참조하세요[사용자 이름 및 암호 인증 활성화](configure-emqx-broker.md#emqx-broker-username-password-auth).

1. 방패 아이콘을 선택한 다음 드롭다운 메뉴에서 **권한 부여**를 선택합니다.

1. **기본 제공 데이터베이스** 행에서 **권한** 버튼을 선택합니다.

1. 기본 제공 데이터베이스 권한 부여 섹션에서 비즈니스 요구 사항에 맞는 사용자 권한 부여 규칙을 추가하거나 업데이트합니다. 규칙 생성에 대한 자세한 지침은 EMQX 문서의 [기본 제공 데이터베이스 사용](https://docs.emqx.com/en/emqx/latest/access-control/authz/mnesia.html) 섹션을 참조하세요. ** 

------
#### [ AWS IoT SiteWise CLI tool using Linux ]

**Linux에서 AWS IoT SiteWise EMQX CLI 도구를 사용하여 권한 부여 규칙을 관리하려면:**
+ 다음 형식을 사용하여 사용자에 대한 권한 부여 규칙을 추가합니다.

  ```
  /greengrass/v2/bin/swe-emqx-cli auth add your-username your-action your-permission your-topic [your-action-permission-topic]
  ```

**Example 사용자에 대한 권한 부여 규칙 추가**  
이 예제에서는 라는 사용자에 대한 규칙을 추가하는 방법을 보여줍니다`system1`.  

```
/greengrass/v2/bin/swe-emqx-cli auth add system1 \
    publish allow "sensors/#" \
    subscribe allow "control/#" \
    all deny "#"
```

**Example : 사용자에 대한 권한 부여 규칙 보기**  
`system1` 사용자의 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
/greengrass/v2/bin/swe-emqx-cli auth list system1
```

**Example : 모든 기존 권한 부여 규칙 보기**  
현재 보유한 모든 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
/greengrass/v2/bin/swe-emqx-cli auth list
```

**Example : 사용자에 대한 모든 권한 부여 규칙 삭제**  
특정 사용자에게 적용되는 모든 권한 부여 규칙을 삭제하려면 다음 명령을 실행합니다.  

```
/greengrass/v2/bin/swe-emqx-cli auth delete system1
```
삭제를 확인하는 메시지가 표시됩니다.

------
#### [ AWS IoT SiteWise CLI tool using Windows ]

**의 AWS IoT SiteWise EMQX CLI 도구를 사용하여 권한 부여 규칙을 관리하려면Windows PowerShell:**
+ 다음 형식을 사용하여 사용자에 대한 권한 부여 규칙을 추가합니다.

  ```
  C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth add your-username your-action your-permission your-topic [your-action-permission-topic]
  ```

**Example : 사용자에 대한 권한 부여 규칙 추가**  
이 예제에서는 라는 사용자에 대한 규칙을 추가하는 방법을 보여줍니다`system1`.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth add system1 `
    publish allow "sensors/#" `
    subscribe allow "control/#" `
    all deny "#"
```

**Example : 사용자에 대한 권한 부여 규칙 보기**  
`system1` 사용자의 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth list system1
```

**Example : 모든 기존 권한 부여 규칙 보기**  
현재 보유한 모든 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth list
```

**Example : 사용자에 대한 모든 권한 부여 규칙 삭제**  
특정 사용자에게 적용되는 모든 권한 부여 규칙을 삭제하려면 다음 명령을 실행합니다.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth delete system1
```
삭제를 확인하는 메시지가 표시됩니다.

------

# SiteWise Edge 및 오픈 소스 도구를 사용하여 데이터 처리 및 시각화
<a name="open-source-edge-integrations"></a>

로컬 처리 및 시각화를 위한 오픈 소스 도구를 사용하여 AWS IoT SiteWise Edge MQTT 지원 게이트웨이를 구성하여 산업 데이터 관리 기능을 개선합니다.

SiteWise Edge를 사용하면 외부 오픈 소스 도구를 사용하여 로컬 데이터 처리 파이프라인을 생성할 수 있습니다. [Node-RED®](https://nodered.org/)를 사용하여 [InfluxDB](https://www.influxdata.com/lp/influxdb-database/)®로 시계열 데이터를 저장하고 [Grafana](https://grafana.com/)® 대시보드를 통해 작업을 모니터링할 수 있습니다.

Node-RED는 데이터 흐름을 처리하고 변환하는 반면, InfluxDB는 시계열 데이터 스토리지를 제공합니다. Grafana는 실시간 운영 데이터를 표시합니다. SiteWise Edge와 함께 이러한 도구를 사용하여 로컬 환경과 간에 데이터를 동기화하여 즉각적인 로컬 인사이트와 장기 클라우드 기반 분석 기능을 AWS 클라우드제공합니다.

**참고**  
Node-RED®, InfluxDB® 및 Grafana®는 SiteWise Edge의 공급업체 또는 공급업체가 아닙니다.

![\[게시할 EMQX 브로커에 연결하는 몇 가지 데이터 소스와 터빈 시뮬레이터를 보여주는 다이어그램입니다. 그런 다음 EMQX 브로커는 AWS IoT SiteWise 게이트웨이 및 노드-RED를 구독합니다. Node-RED는 InfluxDB로 공급된 다음 DB를 Grafana 대시보드로 유입합니다.\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/images/gateway-open-source-overview.png)


**참고**  
이 가이드에서는 Amazon Managed [Grafana](https://grafana.com/) 서비스와 달리 SiteWise Edge용 Grafana의 오픈 소스 버전을 사용합니다. [https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) 

## 배포 옵션
<a name="deployment-options"></a>

두 가지 방법 중 하나를 사용하여이 솔루션을 배포할 수 있습니다. Microsoft Windows 수동 설정을 통해 구성 요소 구성 및 인프라와의 통합을 제어할 수 있습니다. 를 사용하면 Docker를 사용하여 컨테이너에 사전 구성된 구성 요소를 배포할 Linux수 있습니다.

운영 요구 사항을 충족하는 방법을 선택합니다.
+ [수동으로 오픈 소스 통합 설정(Windows)](windows-manual-setup.md) - 사용자 지정 구성 또는 기존 인프라의 경우
+ [Docker(Linux)와 오픈 소스 통합 설정](linux-docker-setup.md) - 사전 구성된 구성 요소를 사용하여 빠르게 배포

## 풍력 발전소 예제 개요
<a name="open-source-example-overview"></a>

이 가이드에서는 풍력 발전소 예제를 사용하여 풍력 발전소의 터빈에 대한 풍력을 모니터링하는 방법을 보여줍니다. 이 실제 시나리오는 로컬 및 클라우드 기반 가시성이 운영 효율성에 중요한 일반적인 산업 모니터링 요구 사항을 보여줍니다.

이 통합을 통해 다음을 수행할 수 있습니다.
+  AWS IoT SiteWise Edge 게이트웨이를 사용하여 산업 장비에서 데이터 수집
+ Node-RED, InfluxDB 및 Grafana를 사용하여 로컬에서 데이터 처리
+ InfluxDB를 사용하여 로컬에 데이터 저장
+ Grafana 대시보드를 사용하여 실시간으로 데이터 모니터링

이 가이드에서는 풍력 발전소의 예를 사용합니다. Node-RED를 사용하여 풍속 데이터를 생성하는 터빈을 시뮬레이션합니다. Node-RED는 데이터 페이로드를 번역하고, SiteWise Edge MQTT 브로커에 데이터를 게시하고, 브로커로부터 데이터를 수신하도록 구독하고, InfluxDB에 로컬로 데이터를 저장합니다. 이 접근 방식을 사용하면 모든 운영 데이터를 로컬에서 즉시 액세스할 수 있고 클라우드에서 추가 분석을 수행할 수 있습니다. 이 패턴을 구현하면에서 고급 분석을 수행하는 기능을 유지하면서 네트워크 중단에 대한 복원력을 얻을 수 있습니다 AWS 클라우드. Grafana는 로컬 모니터링을 위해 InfluxDB에 연결하여 운영자에게 클라우드 종속성 없이 지표에 대한 실시간 가시성을 제공합니다. SiteWise Edge MQTT 지원 게이트웨이는 동일한 MQTT 브로커에 연결하여 로 데이터를 전송하여 엣지 작업과 클라우드 기반 서비스 간에 브리지를 AWS IoT SiteWise생성합니다.

자체 데이터 및 구성을 사용하여 제조 장비, 유틸리티 인프라 또는 기타 산업 자산을 모니터링하는지 여부에 관계없이 특정 산업 요구 사항에 맞는 유사한 워크플로를 생성할 수 있습니다.

## 오픈 소스 통합 요구 사항
<a name="open-source-requirements"></a>

SiteWise Edge와 오픈 소스 통합을 구현하기 전에 환경이 필요한 요구 사항을 충족하는지 확인합니다.
+ **하드웨어 요구 사항** - 게이트웨이 하드웨어는 SiteWise Edge 게이트웨이에 대한 요구 사항을 충족해야 합니다. 자세한 내용은 [AWS IoT SiteWise 엣지 자체 호스팅 게이트웨이 요구 사항](configure-gateway-ggv2.md) MQTT 지원, V3 게이트웨이 및 섹션을 참조하세요[AWS IoT SiteWise Edge 애플리케이션에 대한 요구 사항](siemens-app-gateway-requirements.md).
**중요**  
추가 오픈 소스 구성 요소를 배포할 때 하드웨어가 [InfluxDB](https://docs.influxdata.com/influxdb/v2/install/), [Node-RED](https://nodered.org/docs/getting-started/) 및 [Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/installation/)에 대한 요구 사항을 충족하는지 확인합니다.
+ 네트워크 구성은 구성 요소 간의 로컬 통신과 SiteWise Edge의 클라우드 연결을 모두 지원해야 합니다.
+ 모든 서비스는 동일한 호스트에서 실행되어야 합니다.

## 보안 고려 사항
<a name="open-source-security-considerations"></a>

특히 로컬이 아닌 네트워크에서 인터페이스에 액세스할 때는 구성 요소 간의 모든 통신을 암호화하는 것이 좋습니다. 각 구성 요소에 대해 적절한 액세스 제어를 구현하고 AWS IoT SiteWise Edge 게이트웨이 구성 및 AWS 계정 보안에 대한 AWS 모범 사례를 따릅니다.

**개발 환경**  
이 가이드는 게이트웨이 호스트에서 로컬로 실행되고 액세스되는 Node-RED, InfluxDB 및 Grafana를 보여줍니다. 외부 액세스가 필요한 프로덕션 배포의 경우 TLS 암호화, 인증 및 권한 부여를 포함한 보안 조치를 구현합니다. 각 애플리케이션의 보안 모범 사례를 따릅니다.

**타사 소프트웨어**  
이 솔루션은 InfluxDB AWS, Node-RED, Grafana 및 `node-red-contrib-influxdb` 플러그인을 포함하여에서 유지 관리하지 않는 타사 소프트웨어를 사용합니다. 배포하기 전에 이러한 구성 요소가 조직의 보안 요구 사항, 규정 준수 표준 및 거버넌스 정책을 준수하는지 확인합니다.

**중요**  
이 가이드는에서 소유하거나 유지 관리하지 않는 타사 소프트웨어를 참조하고 사용합니다 AWS. 구현하기 전에 모든 구성 요소가 보안, 규정 준수 및 거버넌스 요구 사항을 충족하는지 확인합니다. 모든 소프트웨어를 최신 보안 패치로 업데이트하고 엣지 배포 보안을 위한 모범 사례를 따르세요.  
 InfluxDB, Node-RED, Grafana는 SiteWise Edge의 공급업체 또는 공급업체가 아닙니다.

## 기타 고려 사항
<a name="open-source-other-considerations"></a>

SiteWise Edge와의 오픈 소스 통합을 구현할 때 이러한 추가 요소를 고려하세요.
+ 모든 서비스, 도구 및 구성 요소의 최신 버전을 사용합니다.
+ 클라우드 전송 전에 로컬에서 데이터를 필터링하고 집계하여 AWS IoT SiteWise 데이터 수집 비용을 줄입니다. InfluxDB에서 적절한 데이터 보존 기간을 구성하고 게이트웨이 하드웨어의 크기를 적절하게 조정합니다. 자세한 내용은 [AWS IoT SiteWise 요금](https://aws.amazon.com/iot-sitewise/pricing/)을 참조하십시오.
+ 모든 데이터에 대해 정기적인 백업 절차를 구현합니다.
+ 게이트웨이의 리소스 사용량을 모니터링하고 각 구성 요소에 대해 적절한 리소스 제한을 구성합니다. InfluxDB에서 데이터 보존 정책을 구현하여 디스크 사용량을 관리합니다.

# 수동으로 오픈 소스 통합 설정(Windows)
<a name="windows-manual-setup"></a>

이 가이드를 사용하여 Grafana® 및 Node-RED®와 연결되는 풍속 데이터에 대한 시계열 버킷을 수동으로 생성합니다.

 에서 Node-RED, InfluxDB® 및 Grafana를 수동으로 설치하고 구성Microsoft Windows하여 배포 구성을 제어합니다. InfluxDB를 사용하여 디바이스의 시계열 데이터를 저장하고 관리할 수 있습니다.

## 수동 설정 사전 조건
<a name="windows-open-source-prerequisites"></a>

시작하기 전에 다음 요구 사항을 완료합니다.

**참고**  
동일한 호스트에서 모든 서비스(SiteWise Edge, InfluxDB, Node-RED 및 Grafana)를 실행합니다.
+ MQTT 지원 V3 게이트웨이를 설치합니다. 자세한 내용은 [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 단원을 참조하십시오.
+ 로컬에서 이러한 서비스를 설치하고 실행합니다.
  + InfluxDB OSS v2. 설치 단계는 [ InfluxDB 설치를](https://docs.influxdata.com/influxdb/v2/install/) 참조하세요.
  + 노드-빨간색. 설치 단계는 [로컬에 노드-RED 설치를](https://nodered.org/docs/getting-started/local) 참조하세요.
  + Grafana. 설치 단계는 [Grafana 설치를](https://grafana.com/docs/grafana/latest/setup-grafana/installation/) 참조하세요.

# InfluxDB를 사용하여 로컬 스토리지 설정
<a name="windows-influxdb-setup"></a>

InfluxDB®를 사용하면 디바이스의 시계열 데이터를 로컬에 저장할 수 있습니다. 로컬 스토리지 기능의 목적은 네트워크 중단 시 운영 가시성을 유지하고 시간이 중요한 애플리케이션의 지연 시간을 줄이는 것입니다. 데이터를 클라우드로 선택적으로 전달할 수 있는 옵션을 유지하면서 엣지에서 분석 및 시각화를 수행할 수 있습니다.

이 단원에서는 터빈 바람 속도 데이터를 위한 시계열 버킷을 생성하고 Grafana® 및 Node-RED® 연결을 위한 API 토큰을 생성합니다. InfluxDB 버킷은 기존 시스템의 데이터베이스와 유사한 시계열 데이터의 전용 스토리지 컨테이너 역할을 합니다. API 토큰을 사용하면 데이터에 프로그래밍 방식으로 안전하게 액세스할 수 있습니다.

**InfluxDB를 설정하려면**

1. 사전 조건 단계를 완료하고 모든 도구가 동일한 호스트에서 실행되고 있는지 확인한 후 웹 브라우저를 열고 [http://127.0.0.1:8086](http://127.0.0.1:8086) 이동합니다.

1. (선택 사항) 보안 강화를 위해 TLS 암호화를 활성화합니다. 자세한 내용은의 [TLS 암호화 활성화](https://docs.influxdata.com/influxdb/v2/admin/security/enable-tls/)를 참조하세요*InfluxData Documentation*.

1. Node-RED의 데이터를 저장할 시계열 InfluxDB 버킷을 생성합니다. 버킷은 풍력 발전소 데이터의 전용 컨테이너 역할을 하므로이 데이터 세트와 관련된 보존 정책을 구성하고 관리할 수 있습니다. 자세한 내용은의 [버킷 관리를 참조하세요](https://docs.influxdata.com/influxdb/v2/admin/buckets/)*InfluxData Documentation*.

1. (선택 사항) 엣지 로케이션의 데이터 보존 기간을 구성합니다. 적절한 보존 기간을 설정하면 로컬 작업에 더 이상 필요하지 않은 이전 데이터를 자동으로 제거하여 스토리지 리소스를 효율적으로 관리하는 데 도움이 됩니다.

   데이터 보존에 대한 자세한 내용은 [의 InfluxDB의 데이터 보존](https://docs.influxdata.com/influxdb/v2/reference/internals/data-retention/)을 참조하세요*InfluxData Documentation*.

1. 버킷에 대한 API 토큰을 생성합니다. 이 토큰을 사용하면 InfluxDB와 Node-RED 및 Grafana와 같은 다른 구성 요소 간의 보안 통신이 가능합니다. 이렇게 하면 승인된 서비스만 데이터 스토어에서 읽거나 쓸 수 있습니다. 자세한 내용은의 [토큰 생성을](https://docs.influxdata.com/influxdb/cloud/admin/tokens/create-token/) 참조하세요*InfluxData Documentation*.

이 단계를 완료한 후 InfluxDB 인스턴스에 시계열 데이터를 저장하여 엣지 환경에서 로컬 데이터 지속성 및 분석을 위한 기반을 제공할 수 있습니다.

# AWS IoT SiteWise 데이터 통합을 위한 노드-RED 흐름 구성
<a name="windows-nodered-config"></a>

Node-RED®를 사용하면 두 흐름을 구현하여 디바이스와 간에 데이터를 관리할 수 있습니다 AWS IoT SiteWise. 이러한 흐름은 함께 작동하여 로컬 및 클라우드 데이터 흐름을 모두 처리하는 포괄적인 데이터 관리 솔루션을 생성합니다.
+ **데이터 게시 흐름 **- 클라우드에 게시합니다. 데이터 게시 흐름은 데이터를 로 전송합니다 AWS IoT SiteWise. 이 흐름은 센서 데이터를 생성하고, AWS IoT SiteWise 형식으로 변환하고, SiteWise Edge MQTT 브로커에 게시하여 터빈 디바이스를 시뮬레이션합니다. 이를 통해 AWS IoT SiteWise의 클라우드 기능을 활용하여 스토리지, 분석 및 다른 AWS 서비스와 통합할 수 있습니다.

  자세한 내용은 [데이터 게시 흐름 구성](windows-nodered-data-publish-flow.md) 단원을 참조하십시오.
+ **데이터 보존 흐름** - 엣지에 데이터를 저장합니다. 데이터 보존 흐름은 SiteWise Edge MQTT 브로커를 구독하여 데이터를 수신하고 InfluxDB® 형식으로 변환한 다음 모니터링을 위해 로컬에 저장합니다. 이 로컬 스토리지는 운영 데이터에 대한 즉각적인 액세스를 제공하고, 시간이 중요한 애플리케이션의 지연 시간을 줄이고, 네트워크 중단 시 연속성을 보장합니다.

  자세한 내용은 [데이터 보존 흐름 구성](windows-nodered-data-retention-flow.md) 단원을 참조하십시오.

이 두 흐름은 함께 작동하여 즉각적인 액세스를 위해 데이터가 로컬로 전송 AWS IoT SiteWise 되고 저장되도록 합니다.

Node-RED 콘솔에 액세스하려면 [http://127.0.0.1:1880](http://127.0.0.1:1880) 이동합니다. TLS 활성화에 대한 자세한 내용은 [TLS 암호화 활성화](https://docs.influxdata.com/influxdb/v2/admin/security/enable-tls/)를 참조하세요.

# 데이터 게시 흐름 구성
<a name="windows-nodered-data-publish-flow"></a>

데이터 게시 흐름은 세 개의 노드를 사용하여 산업 데이터를 클라우드로 전송하는 파이프라인을 생성합니다. 이 흐름은 클라우드 기반 분석, 장기 스토리지 및 다른 AWS 서비스와의 통합을 활성화하는 데 필수적입니다. 먼저 시뮬레이션된 디바이스 데이터가 SiteWise Edge MQTT 브로커로 전송됩니다. 게이트웨이는 강력한 분석 및 시각화 기능을 활용할 수 있는 AWS IoT SiteWise 클라우드로의 전송을 허용하는 브로커에서 데이터를 선택합니다.
+ **데이터 입력** - 산업 장비 또는 시뮬레이터에서 디바이스 데이터를 수신합니다.
+ **용 데이터 변환기 AWS IoT SiteWise** - SiteWise Edge 게이트웨이와의 호환성을 보장하기 위해 데이터를 AWS IoT SiteWise 형식으로 변환합니다.
+ **MQTT 게시자** - SiteWise Edge MQTT 브로커에 데이터를 게시하여 로컬 소비자와 클라우드 소비자가 모두 사용할 수 있도록 합니다.

![\[Node-RED 데이터 게시 흐름을 보여주는 다이어그램입니다. SiteWise Edge Gateway에서 픽업할 수 있도록 시뮬레이션된 디바이스 데이터를 SiteWise Edge MQTT 브로커로 전송한 다음 클라우드로 AWS IoT SiteWise 전송합니다.\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)


## 데이터 입력 노드 구성
<a name="windows-nodered-data-input-config"></a>

이 예제에서 데이터 입력 노드는 풍속 데이터를 생성하는 시뮬레이션된 풍력 터빈 디바이스를 사용합니다. 이 노드는 시뮬레이션된 소스(예제 참조)에서 왔든 프로덕션 환경의 실제 산업 장비에서 왔든 관계없이 산업 데이터의 진입점 역할을 합니다.

데이터 페이로드에 사용자 지정 JSON 형식을 사용하여 로컬 처리 도구와 AWS IoT SiteWise 클라우드 서비스 모두에서 효율적으로 작동하는 표준화된 구조를 제공합니다. 이 형식에는 실제 측정 값과 함께 타임스탬프 및 품질 지표와 같은 필수 메타데이터가 포함되어 있으므로 파이프라인 전체에서 포괄적인 데이터 관리 및 품질 추적이 가능합니다. 주입 노드를 가져와 타임스탬프, 품질 지표 및 값이 포함된이 표준화된 JSON 형식으로 시뮬레이션된 데이터를 수신합니다.

Node-RED 주입 노드에 대한 자세한 내용은 *Node-RED 설명서*의 [주입](https://nodered.org/docs/user-guide/nodes#inject) 섹션을 참조하세요.

터빈 시뮬레이터는이 표준화된 JSON 형식으로 초당 풍속 데이터를 생성합니다.

**Example : 터빈 데이터 페이로드**  

```
{
    name: string,         // Property name/identifier
    timestamp: number,    // Epoch time in nanoseconds
    quality: "GOOD" | "UNCERTAIN" | "BAD",
    value: number | string | boolean
}
```

이 형식은 다음과 같은 몇 가지 이점을 제공합니다.
+ `name` 필드는 특정 속성 또는 측정값을 식별하므로 동일한 디바이스에서 여러 데이터 포인트를 추적할 수 있습니다.
+ 나노초 `timestamp` 단위의는 정확한 기록 분석을 위한 정확한 시간 추적을 보장합니다.
+ `quality` 표시기는 신뢰성을 기반으로 데이터를 필터링하고 관리하는 데 도움이 됩니다.
+ 유연한 `value` 필드는 다양한 센서 출력을 수용하기 위해 다양한 데이터 유형을 지원합니다.

**Example : 터빈 시뮬레이터의 주입 노드**  

```
[
    {
        "id": "string",
        "type": "inject",
        "z": "string",
        "name": "Turbine Simulator",
        "props": [
            {
                "p": "payload.timestamp",
                "v": "",
                "vt": "date"
            },
            {
                "p": "payload.quality",
                "v": "GOOD",
                "vt": "str"
            },
            {
                "p": "payload.value",
                "v": "$random()",
                "vt": "jsonata"
            },
            {
                "p": "payload.name",
                "v": "/Renton/WindFarm/Turbine/WindSpeed",
                "vt": "str"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "x": 270,
        "y": 200,
        "wires": [
            [
                "string"
            ]
        ]
    }
]
```

## 데이터 번역을 위한 노드 구성
<a name="windows-nodered-sitewiseise-translator-config"></a>

SiteWise Edge 게이트웨이는 AWS IoT SiteWise 클라우드와의 호환성을 보장하기 위해 특정 형식의 데이터가 필요합니다. 변환기 노드는 입력 데이터를 필요한 AWS IoT SiteWise 페이로드 형식으로 변환하는 중요한 구성 요소입니다. 이 번역 단계를 통해 클라우드 환경에서 산업 데이터를 올바르게 처리, 저장 및 나중에 분석할 수 있습니다 AWS IoT SiteWise .

이 단계에서 데이터 형식을 표준화하면 엣지 디바이스와 자산 모델링, 분석 및 시각화 기능을 사용할 수 있는 클라우드 서비스 간의 통합이 가능합니다. 다음 구조를 사용합니다.

**Example : SiteWise Edge 데이터 구문 분석을 위한 페이로드 구조**  

```
{
  "propertyAlias": "string",  
  "propertyValues": [
    {
      "value": { 
          "booleanValue": boolean, 
          "doubleValue": number, 
          "integerValue": number,
          "stringValue": "string" 
     },
      "timestamp": {
          "timeInSeconds": number,
          "offsetInNanos": number
      },
      "quality": "GOOD" | "UNCERTAIN" | "BAD",
  }]
}
```

**참고**  
를 MQTT 주제 계층 구조(예: `/Renton/WindFarm/Turbine/WindSpeed`)`propertyAlias`와 일치시킵니다. 이렇게 하면 데이터가의 올바른 자산 속성과 올바르게 연결됩니다 AWS IoT SiteWise. 자세한 내용은의 "데이터 스트림 별칭" 개념을 참조하세요[AWS IoT SiteWise 개념](concept-overview.md).

1.  AWS IoT SiteWise 페이로드 변환을 위해 예제 함수 노드를 가져옵니다. 이 함수는 표준화된 입력 형식에서 AWS IoT SiteWise호환 형식으로의 변환을 처리하여 적절한 타임스탬프 형식 지정, 품질 지표 및 값 입력을 보장합니다.

   ```
   [
       {
           "id": "string",
           "type": "function",
           "z": "string",
           "name": "Translate to SiteWise payload",
           "func": "let input = msg.payload;\nlet output = {};\n\noutput[\"propertyAlias\"] = input.name;\n\nlet propertyVal = {}\n\nlet timeInSeconds = Math.floor(input.timestamp / 1000);\nlet offsetInNanos = (input.timestamp % 1000) * 1000000;\n\npropertyVal[\"timestamp\"] = {\n    \"timeInSeconds\": timeInSeconds,\n    \"offsetInNanos\": offsetInNanos,\n};\n\npropertyVal[\"quality\"] = input.quality\n\nlet typeNameConverter = {\n    \"number\": (x) => Number.isInteger(x) ? \"integerValue\" : \"doubleValue\",\n    \"boolean\": (x) => \"booleanValue\",\n    \"string\": (x) => \"stringValue\", \n}\nlet typeName = typeNameConverter[typeof input.value](input.value)\npropertyVal[\"value\"] = {}\npropertyVal[\"value\"][typeName] = input.value;\n\noutput[\"propertyValues\"] = [propertyVal]\n\nreturn {\n    payload: JSON.stringify(output)\n};",
           "outputs": 1,
           "timeout": "",
           "noerr": 0,
           "initialize": "",
           "finalize": "",
           "libs": [],
           "x": 530,
           "y": 200,
           "wires": [
               [
                   "string"
               ]
           ]
       }
   ]
   ```

1. JavaScript 코드가 바람 속도 데이터를 올바르게 변환하는지 확인합니다. 함수는 몇 가지 중요한 작업을 수행합니다.
   + 입력에서 속성 이름을 추출하여 propertyAlias로 설정합니다.
   + 타임스탬프를 밀리초에서 필요한 초 및 나노초 형식으로 변환합니다.
   + 데이터 신뢰성 추적을 위한 품질 지표를 보존합니다.
   + 값 유형을 자동으로 감지하고 요구 사항에 따라 형식을 지정합니다. AWS IoT SiteWise 

1. 노드를 흐름에 연결하여 데이터 입력 노드와 MQTT 게시자 간에 연결합니다.

비즈니스 요구 사항에 맞는 함수 작성에 대한 지침은 *Node-RED 설명서*의 [함수 작성](https://nodered.org/docs/user-guide/writing-functions)을 참조하세요.

## MQTT 게시자 구성
<a name="windows-nodered-mqtt-publisher-config"></a>

번역 후 SiteWise Edge MQTT 브로커에 데이터를 게시할 준비가 되었습니다.

SiteWise Edge MQTT 브로커로 데이터를 전송하도록 다음 설정으로 MQTT 게시자를 구성합니다.

**MQTT 출력 노드를 가져오려면**

1. 를 사용하여 MQTT 출력 구성 노드를 가져옵니다`"type": "mqtt out"`. MQTT 출력 노드를 사용하면 브로커의 구성을 공유할 수 있습니다.

1. MQTT 브로커 연결 및 메시지 라우팅과 관련된 정보를 보려면 키-값 페어를 입력합니다.

예제 `mqtt out` 노드를 가져옵니다.

**Example**  

```
[
    {
        "id": "string",
        "type": "mqtt out",
        "z": "string",
        "name": "Publish to MQTT broker",
        "topic": "/Renton/WindFarm/Turbine/WindSpeed",
        "qos": "1",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "string",
        "x": 830,
        "y": 200,
        "wires": []
    },
    {
        "id": "string",
        "type": "mqtt-broker",
        "name": "emqx",
        "broker": "127.0.0.1",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "5",
        "keepalive": 15,
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]
```

예제 MQTT 출력 노드는 다음 정보를 사용하여 MQTT 연결을 생성합니다.
+ 서버: `127.0.0.1`
+ 포트: `1883`
+ 프로토콜: `MQTT V5`

그런 다음 MQTT 출력 노드는 다음 정보로 메시지 라우팅을 구성합니다.
+ 주제: `/Renton/WindFarm/Turbine/WindSpeed`
+ QoS: `1`

## 노드 배포 및 확인
<a name="windows-verify-deployment"></a>

세 개의 데이터 게시 흐름 노드를 구성한 후 다음 단계에 따라 흐름을 배포하고 데이터가 로 올바르게 전송되고 있는지 확인합니다. AWS IoT SiteWise

**연결을 배포하고 확인하려면**

1. 데이터 게시 흐름에 표시된 대로 노드 3개를 연결합니다.  
![\[Data publish flow diagram showing input from turbine simulator to AWS IoT SiteWise to MQTT broker.\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)

1. **배포**를 선택하여 모든 노드 연결 변경 사항을 적용합니다.

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동하여 **데이터 스트림을** 선택합니다.

1. 드롭다운 메뉴에서 **별칭 접두사가** 선택되어 있는지 확인합니다. 그런 다음 `/Renton/WindFarm/Turbine/WindSpeed`별칭을 검색합니다.

검색에 올바른 별칭이 표시되면 흐름을 배포하고 데이터 전송을 확인한 것입니다.

# 데이터 보존 흐름 구성
<a name="windows-nodered-data-retention-flow"></a>

데이터 보존 흐름은 엣지에서 운영 가시성을 유지하는 데 사용할 수 있습니다. 이는 네트워크 중단 시 또는 데이터에 즉시 액세스해야 하는 경우에 유용합니다. 이 흐름은 MQTT 브로커를 구독하여 디바이스 데이터를 수신하고 InfluxDB® 형식으로 변환한 다음 로컬에 저장합니다. 이 흐름을 구현하면 운영자가 클라우드 종속성 없이 액세스할 수 있는 복원력이 뛰어난 로컬 데이터 스토어를 생성하여 엣지에서 실시간 모니터링 및 의사 결정을 수행할 수 있습니다.

흐름은 데이터를 올바르게 캡처하고 저장하기 위해 함께 작동하는 세 가지 주요 구성 요소로 구성됩니다.
+ **MQTT 구독 클라이언트** - 브로커로부터 데이터를 수신하여 모든 관련 산업 데이터를 캡처합니다.
+ **InfluxDB 변환기** - AWS IoT SiteWise 페이로드를 InfluxDB 형식으로 변환하여 효율적인 시계열 스토리지를 위한 데이터 준비
+ **InfluxDB 라이터** - 로컬 스토리지를 처리하여 로컬 애플리케이션의 데이터 지속성 및 가용성 보장

![\[Node-RED 데이터 보존 흐름\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)


## MQTT 구독 클라이언트 설정
<a name="windows-nodered-mqtt-subscriber"></a>
+ 아래 예제를 가져 AWS IoT SiteWise 와서에서 MQTT EMQX 브로커로부터 데이터를 수신하도록 Node-RED로 MQTT 구독 클라이언트를 구성합니다.  
**Example : 노드의 MQTT**  

  ```
  [
      {
          "id": "string",
          "type": "mqtt in",
          "z": "string",
          "name": "Subscribe to MQTT broker",
          "topic": "/Renton/WindFarm/Turbine/WindSpeed",
          "qos": "1",
          "datatype": "auto-detect",
          "broker": "string",
          "nl": false,
          "rap": true,
          "rh": 0,
          "inputs": 0,
          "x": 290,
          "y": 340,
          "wires": [
              [
                  "string"
              ]
          ]
      },
      {
          "id": "string",
          "type": "mqtt-broker",
          "name": "emqx",
          "broker": "127.0.0.1",
          "port": "1883",
          "clientid": "",
          "autoConnect": true,
          "usetls": false,
          "protocolVersion": "5",
          "keepalive": 15,
          "cleansession": true,
          "autoUnsubscribe": true,
          "birthTopic": "",
          "birthQos": "0",
          "birthPayload": "",
          "birthMsg": {},
          "closeTopic": "",
          "closePayload": "",
          "closeMsg": {},
          "willTopic": "",
          "willQos": "0",
          "willPayload": "",
          "willMsg": {},
          "userProps": "",
          "sessionExpiry": ""
      }
  ]
  ```

이 구독을 통해 브로커에 게시된 모든 관련 데이터를 로컬 스토리지에 캡처하여 산업 운영에 대한 전체 레코드를 제공할 수 있습니다. 노드는 다음 구독 설정과 함께 [MQTT 게시자 구성](windows-nodered-data-publish-flow.md#windows-nodered-mqtt-publisher-config) 섹션과 동일한 MQTT 연결 파라미터를 사용합니다.
+ 주제 - `/Renton/WindFarm/Turbine/WindSpeed`
+ QoS - `1`

자세한 내용은 *Node-RED 설명서*의 [MQTT 브로커에 연결을](https://cookbook.nodered.org/mqtt/connect-to-broker) 참조하세요.

## InfluxDB 변환기 구성
<a name="windows-nodered-influxdb-translator"></a>

InfluxDB는 인덱싱에 [태그를](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#tag) 사용하고 값에 [필드를](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#field) 사용하여 데이터를 구성합니다. 이 조직은 시계열 데이터의 쿼리 성능과 스토리지 효율성을 최적화합니다. JavaScript 코드가 포함된 예제 함수 노드를 가져와 AWS IoT SiteWise 페이로드를 InfluxDB 형식으로 변환합니다. 변환기는 속성을 두 그룹으로 분할합니다.
+ 태그 - 효율적인 인덱싱을 위한 품질 및 이름 속성
+ 필드 - 타임스탬프(에포크 이후 밀리초) 및 값

**Example : InfluxDB 페이로드로 변환하는 함수 노드**  

```
[
    {
        "id": "string",
        "type": "function",
        "z": "string",
        "name": "Translate to InfluxDB payload",
        "func": "let data = msg.payload;\n\nlet timeInSeconds = data.propertyValues[0].timestamp.timeInSeconds;\nlet offsetInNanos = data.propertyValues[0].timestamp.offsetInNanos;\nlet timestampInMilliseconds = (timeInSeconds * 1000) + (offsetInNanos / 1000000);\n\nmsg.payload = [\n    {\n        \"timestamp(milliseconds_since_epoch)\": timestampInMilliseconds,\n        \"value\": data.propertyValues[0].value.doubleValue\n    },\n    {\n        \"name\": data.propertyAlias,\n        \"quality\": data.propertyValues[0].quality\n    }\n]\n\nreturn msg",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 560,
        "y": 340,
        "wires": [
            [
                "string"
            ]
        ]
    }
]
```

추가 구성 옵션은 Node-RED GitHub 리포지토리의 [node-red-contrib-influxdb](https://github.com/mblackstock/node-red-contrib-influxdb)를 참조하세요. GitHub 

## InfluxDB 라이터 설정
<a name="windows-nodered-influxdb-writer"></a>

InfluxDB 라이터 노드는 데이터 보존 흐름의 최종 구성 요소로, 산업 데이터를 로컬 InfluxDB 데이터베이스에 저장하는 역할을 합니다. 이 로컬 스토리지는 네트워크 중단 시 운영 가시성을 유지하고 시간이 중요한 애플리케이션의 데이터에 즉시 액세스할 수 있도록 하는 데 중요합니다.

1. 팔레트 관리 옵션을 통해 node-red-contrib-influxdb 패키지를 설치합니다. 이 패키지는 Node-RED를 InfluxDB와 연결하는 데 필요한 노드를 제공합니다.

1. 흐름에 InfluxDB 출력 노드를 추가합니다. 이 노드는 InfluxDB 데이터베이스에 대한 실제 데이터 쓰기를 처리합니다.

1. InfluxDB 인스턴스에 대한 보안 연결을 설정하도록 서버 속성을 구성합니다.

   1. 버전을 2.0으로 설정 - 이전 버전과 다른 API를 사용하는 InfluxDB v2.x에 연결하도록 지정합니다.

   1. URL을 로 설정 `http://127.0.0.1:8086` - 로컬 InfluxDB 인스턴스를 가리킵니다.

   1. InfluxDB 인증 토큰을 입력합니다. 이 보안 토큰은 데이터베이스에 대한 연결을 승인합니다. [InfluxDB를 사용하여 로컬 스토리지 설정](windows-influxdb-setup.md) 절차 중에 토큰을 생성했습니다.

1. 스토리지 위치 파라미터를 지정하여 데이터가 저장되는 위치와 방법을 정의합니다.

   1. InfluxDB 조직 이름 입력 - 조직은 버킷과 대시보드가 속한 사용자 그룹을 위한 워크스페이스입니다. 자세한 내용은의 [조직 관리를](https://docs.influxdata.com/influxdb/v2/admin/organizations/) 참조하세요*InfluxData Documentation*.

   1. InfluxDB 버킷 지정(예: `WindFarmData`) - 버킷은 시계열 데이터의 컨테이너 역할을 하는 기존 시스템의 데이터베이스와 동일합니다.

   1. InfluxDB 측정 설정(예: `TurbineData`) - 측정은 관계형 데이터베이스의 테이블과 유사하여 관련 데이터 포인트를 구성합니다.

**참고**  
InfluxDB 인스턴스의 왼쪽 사이드바에서 조직 이름을 찾습니다. 조직, 버킷 및 측정 개념은 InfluxDB의 데이터 조직 모델의 기본입니다. 자세한 내용은 [InfluxDB 설명서를](https://docs.influxdata.com/influxdb/v2/admin/organizations/) 참조하세요.

## 보존 흐름 배포 및 확인
<a name="windows-nodered-retention-deploy"></a>

데이터 보존 흐름의 모든 구성 요소를 구성한 후에는 시스템이 올바르게 작동하는지 배포하고 확인해야 합니다. 이 확인을 통해 산업 데이터가 즉각적인 액세스 및 분석을 위해 로컬에 올바르게 저장되고 있는지 확인할 수 있습니다.

1. 데이터 보존 흐름도에 표시된 대로 노드 3개를 연결합니다. 이렇게 하면 로컬 스토리지에 대한 데이터 구독에서 전체 파이프라인이 생성됩니다.  
![\[Node-RED 데이터 보존 흐름\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)

1. **배포**를 선택하여 변경 사항을 적용하고 흐름을 활성화합니다. 그러면 데이터 수집 및 스토리지 프로세스가 시작됩니다.

1. InfluxDB Data Explorer를 사용하여 데이터를 쿼리하고 시각화합니다. 이 도구를 사용하면 데이터가 올바르게 저장되고 있는지 확인하고 시계열 데이터의 초기 시각화를 생성할 수 있습니다.

   Data Explorer에서는 시간 경과에 따라 풍속 측정값이 기록되는 것을 확인하여 데이터 생성부터 로컬 스토리지까지 전체 파이프라인이 올바르게 작동하는지 확인할 수 있습니다.

   자세한 내용은 [의 Data Explorer에서 쿼리](https://docs.influxdata.com/influxdb/v2/query-data/execute-queries/data-explorer/)를 참조하세요*InfluxData Documentation*.

이제 데이터 게시 흐름과 데이터 보존 흐름이 모두 배포되면 즉각적인 액세스와 복원력을 위해 로컬 복사본을 유지하면서 AWS IoT SiteWise 클라우드로 데이터를 전송하는 완전한 시스템을 갖게 됩니다. 이 이중 경로 접근 방식을 사용하면 클라우드 기반 분석 및 스토리지의 이점을 얻는 동시에 엣지에서 운영 가시성을 유지할 수 있습니다.

# SiteWise Edge용 Grafana 설정
<a name="windows-grafana"></a>

 Grafana®를 사용하면 산업 데이터에 대한 로컬 실시간 모니터링 대시보드를 생성할 수 있습니다. InfluxDB®에 저장된 데이터를 시각화하면 운영자에게 장비 성능, 프로세스 효율성 및 잠재적 문제에 대한 즉각적인 인사이트를 제공할 수 있습니다. 엣지에서의 이러한 가시성은 시간에 민감한 운영과 네트워크 중단 시 연속성 유지에 중요합니다.

## 데이터 소스 구성
<a name="windows-grafana-data-source-config"></a>

Grafana를 InfluxDB 데이터베이스에 연결하면 산업 데이터를 위한 강력한 시각화 계층이 생성됩니다. 이 연결을 통해 운영자가 클라우드 종속성 없이 정보에 입각한 결정을 내리는 데 사용할 수 있는 실시간 모니터링 대시보드를 사용할 수 있습니다.

1. 브라우저에서 [http://127.0.0.1:3000](http://127.0.0.1:3000) 이동하여 Grafana 인스턴스에 로컬로 액세스합니다. TLS 활성화가 필요한 경우 *Grafana Labs 설명서*의 [안전한 웹 트래픽을 위한 Grafana HTTPS 설정을](https://grafana.com/docs/grafana/latest/setup-grafana/set-up-https/) 참조할 수 있습니다.

1. Node-RED가 데이터를 쓰는 InfluxDB 시계열 버킷을 가리키는 InfluxDB 데이터 소스를 추가합니다. 예를 들어 `WindFarmData`입니다. 이 연결은 저장된 데이터와 시각화 플랫폼 간의 링크를 설정합니다.

1. 자세한 지침은 *Grafana Labs 설명서*[의 InfluxDB 데이터 소스 구성을](https://grafana.com/docs/grafana/latest/datasources/influxdb/configure-influxdb-data-source/) 참조하세요.

### SiteWise Edge 데이터에 대한 Grafana 대시보드 생성
<a name="windows-grafana-create-dashboard"></a>

대시보드 생성은 로컬 모니터링 솔루션을 구축하는 마지막 단계입니다. 대시보드는 산업 데이터를 시각적으로 표시하므로 추세, 이상 및 잠재적 문제를 한눈에 쉽게 식별할 수 있습니다.
+ 가이드에 따라 대시보드를 생성합니다. 자세한 내용은 *Grafana Labs 설명서*의 [첫 번째 대시보드 빌드](https://grafana.com/docs/grafana/latest/getting-started/build-first-dashboard/)를 참조하세요. 이 템플릿은 버킷의 이름이 `WindFarmData` 이고 측정값이 라고 가정합니다`TurbineData`.

  제공된 예제 대시보드 템플릿을 가져와서 빠른 시작 안내서를 사용하여 이전 섹션에서 Node-RED가 생성하는 데이터에 대한 시계열 플롯이 있는 대시보드를 빠르게 생성할 수도 있습니다. 이 템플릿은 특정 모니터링 요구 사항에 맞게 사용자 지정할 수 있는 시작점을 제공합니다.

  ```
  {
    "__inputs": [
      {
        "name": "DS_WINDFARM-DEMO",
        "label": "windfarm-demo",
        "description": "",
        "type": "datasource",
        "pluginId": "influxdb",
        "pluginName": "InfluxDB"
      }
    ],
    "__elements": {},
    "__requires": [
      {
        "type": "grafana",
        "id": "grafana",
        "name": "Grafana",
        "version": "11.6.0-pre"
      },
      {
        "type": "datasource",
        "id": "influxdb",
        "name": "InfluxDB",
        "version": "1.0.0"
      },
      {
        "type": "panel",
        "id": "timeseries",
        "name": "Time series",
        "version": ""
      }
    ],
    "annotations": {
      "list": [
        {
          "builtIn": 1,
          "datasource": {
            "type": "grafana",
            "uid": "-- Grafana --"
          },
          "enable": true,
          "hide": true,
          "iconColor": "rgba(0, 211, 255, 1)",
          "name": "Annotations & Alerts",
          "type": "dashboard"
        }
      ]
    },
    "editable": true,
    "fiscalYearStartMonth": 0,
    "graphTooltip": 0,
    "id": null,
    "links": [],
    "panels": [
      {
        "datasource": {
          "type": "influxdb",
          "uid": "${DS_WINDFARM-DEMO}"
        },
        "fieldConfig": {
          "defaults": {
            "color": {
              "mode": "palette-classic"
            },
            "custom": {
              "axisBorderShow": false,
              "axisCenteredZero": false,
              "axisColorMode": "text",
              "axisLabel": "",
              "axisPlacement": "auto",
              "barAlignment": 0,
              "barWidthFactor": 0.6,
              "drawStyle": "line",
              "fillOpacity": 0,
              "gradientMode": "none",
              "hideFrom": {
                "legend": false,
                "tooltip": false,
                "viz": false
              },
              "insertNulls": false,
              "lineInterpolation": "linear",
              "lineWidth": 1,
              "pointSize": 5,
              "scaleDistribution": {
                "type": "linear"
              },
              "showPoints": "auto",
              "spanNulls": false,
              "stacking": {
                "group": "A",
                "mode": "none"
              },
              "thresholdsStyle": {
                "mode": "off"
              }
            },
            "mappings": [],
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "green"
                },
                {
                  "color": "red",
                  "value": 80
                }
              ]
            }
          },
          "overrides": []
        },
        "gridPos": {
          "h": 8,
          "w": 12,
          "x": 0,
          "y": 0
        },
        "id": 1,
        "options": {
          "legend": {
            "calcs": [],
            "displayMode": "list",
            "placement": "bottom",
            "showLegend": true
          },
          "tooltip": {
            "hideZeros": false,
            "mode": "single",
            "sort": "none"
          }
        },
        "pluginVersion": "11.6.0-pre",
        "targets": [
          {
            "datasource": {
              "type": "influxdb",
              "uid": "${DS_WINDFARM-DEMO}"
            },
            "query": "from(bucket: \"WindFarmData\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"TurbineData\")\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\n  |> filter(fn: (r) => r[\"name\"] == \"/Renton/WindFarm/Turbine/WindSpeed\")\n  |> filter(fn: (r) => r[\"quality\"] == \"GOOD\")\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n  |> yield(name: \"mean\")",
            "refId": "A"
          }
        ],
        "title": "Panel Title",
        "type": "timeseries"
      }
    ],
    "schemaVersion": 41,
    "tags": [],
    "templating": {
      "list": []
    },
    "time": {
      "from": "now-6h",
      "to": "now"
    },
    "timepicker": {},
    "timezone": "browser",
    "title": "demo dashboard",
    "uid": "fejc0t08o6d4wb",
    "version": 1,
    "weekStart": ""
  }
  ```

# Docker(Linux)와 오픈 소스 통합 설정
<a name="linux-docker-setup"></a>

간소화된 배포 프로세스를 위해 Docker를 사용하여 Linux 환경에서 Node-RED®, InfluxDB® 및 Grafana®를 설정할 수 있습니다. 이 방법은 사전 구성된 컨테이너를 사용하므로 구성 요소를 신속하게 배포하고 더 쉽게 관리할 수 있습니다.

## Docker 설정 사전 조건
<a name="linux-docker-prerequisites"></a>

시작하기 전에에 다음이 있는지 확인합니다.
+ MQTT 지원 V3 게이트웨이입니다. 자세한 내용은 [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 단원을 참조하십시오.
+ Docker Compose 플러그인입니다. 설치 단계는 *Docker* 설명서[의 Docker Compose 플러그인 설치를](https://docs.docker.com/compose/install/linux/) 참조하세요.

## 서비스 배포
<a name="linux-docker-deployment"></a>

이 배포는 동일한 호스트에서 SiteWise Edge, InfluxDB, Node-RED 및 Grafana를 실행합니다.

### 환경 설정
<a name="linux-docker-env-setup"></a>

1. 루트 액세스 권한 획득:

   ```
   sudo -i
   ```

1. .env 파일을 생성하거나 다음 환경 변수를 내보냅니다.

   ```
   export INFLUXDB_PASSWORD=your-secure-influxdb-password
   export INFLUXDB_TOKEN=your-secure-influxdb-token
   export GRAFANA_PASSWORD=your-secure-grafana-password
   ```

### Docker 네트워크 구성
<a name="linux-docker-network-config"></a>
+ 이름을 사용하여 브리지 네트워크를 생성합니다`SiteWiseEdgeNodeRedDemoNetwork`.

  ```
  docker network create --driver=bridge SiteWiseEdgeNodeRedDemoNetwork
  ```

### Docker Compose 파일 준비
<a name="linux-docker-compose-file"></a>

다음 YAML 파일의 내용을 SiteWise Edge 게이트웨이 디바이스에 복사합니다.

#### Docker Compose YAML 파일 예제를 보려면 확장
<a name="collapsible-section-docker-compose-file"></a>

```
services:
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    ports:
      - "127.0.0.1:8086:8086"
    volumes:
      - influxdb-storage:/.influxdbv2
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_PASSWORD}
      - DOCKER_INFLUXDB_INIT_ORG=iot-sitewise-edge
      - DOCKER_INFLUXDB_INIT_BUCKET=WindFarmData
      - DOCKER_INFLUXDB_INIT_RETENTION=0
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_TOKEN}
    networks:
      - SiteWiseEdgeNodeRedDemoNetwork
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - grafana-storage:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
      - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
      - GF_PATHS_CONFIG=/etc/grafana/grafana.ini
      - GF_LOG_LEVEL=info
    configs:
      - source: grafana_datasource
        target: /etc/grafana/provisioning/datasources/influxdb.yaml
      - source: grafana_preload_dashboard_config
        target: /etc/grafana/provisioning/dashboards/dashboard.yml
      - source: grafana_preload_dashboard
        target: /etc/grafana/provisioning/dashboards/demo_dashboard.json
    depends_on:
      - influxdb
    networks:
      - SiteWiseEdgeNodeRedDemoNetwork
    restart: unless-stopped

  nodered:
    build:
      context: .
      dockerfile_inline: |
        FROM nodered/node-red:latest
        RUN npm install node-red-contrib-influxdb
    container_name: nodered
    ports:
      - "127.0.0.1:1880:1880"
    volumes:
      - node_red_data:/data
    environment:
      - NODE_RED_ENABLE_SAFE_MODE=false
      - NODE_RED_ENABLE_PALETTE_EDIT=true
      - NODE_RED_AUTO_INSTALL_MODULES=true
    configs:
      - source: nodered_flows
        target: /data/flows.json
      - source: nodered_settings
        target: /data/settings.js
      - source: nodered_flows_cred
        target: /data/flows_cred.json
    depends_on:
      - influxdb
    networks:
      - SiteWiseEdgeNodeRedDemoNetwork
    restart: unless-stopped

volumes:
  influxdb-storage:
  grafana-storage:
  node_red_data:

networks:
  SiteWiseEdgeNodeRedDemoNetwork:
    external: true

configs:
  grafana_datasource:
    content: |
      apiVersion: 1
      datasources:
        - name: windfarm-demo
          type: influxdb
          access: proxy
          url: http://influxdb:8086
          jsonData:
            version: Flux
            organization: iot-sitewise-edge
            defaultBucket: WindFarmData
            tlsSkipVerify: true
          secureJsonData:
            token: ${INFLUXDB_TOKEN}
          editable: false

  grafana_preload_dashboard_config:
    content: |
      apiVersion: 1
      providers:
        - name: "Dashboard provider"
          orgId: 1
          type: file
          options: 
            path: /etc/grafana/provisioning/dashboards

  grafana_preload_dashboard:
    content: |
      {
        "annotations": {
          "list": [
            {
              "builtIn": 1,
              "datasource": {
                "type": "grafana",
                "uid": "-- Grafana --"
              },
              "enable": true,
              "hide": true,
              "iconColor": "rgba(0, 211, 255, 1)",
              "name": "Annotations & Alerts",
              "type": "dashboard"
            }
          ]
        },
        "editable": true,
        "fiscalYearStartMonth": 0,
        "graphTooltip": 0,
        "id": 1,
        "links": [],
        "panels": [
          {
            "datasource": {
              "type": "influxdb",
              "uid": "PEB0DCBF338B3CEB2"
            },
            "fieldConfig": {
              "defaults": {
                "color": {
                  "mode": "palette-classic"
                },
                "custom": {
                  "axisBorderShow": false,
                  "axisCenteredZero": false,
                  "axisColorMode": "text",
                  "axisLabel": "",
                  "axisPlacement": "auto",
                  "barAlignment": 0,
                  "barWidthFactor": 0.6,
                  "drawStyle": "line",
                  "fillOpacity": 0,
                  "gradientMode": "none",
                  "hideFrom": {
                    "legend": false,
                    "tooltip": false,
                    "viz": false
                  },
                  "insertNulls": false,
                  "lineInterpolation": "linear",
                  "lineWidth": 1,
                  "pointSize": 5,
                  "scaleDistribution": {
                    "type": "linear"
                  },
                  "showPoints": "auto",
                  "spanNulls": false,
                  "stacking": {
                    "group": "A",
                    "mode": "none"
                  },
                  "thresholdsStyle": {
                    "mode": "off"
                  }
                },
                "mappings": [],
                "thresholds": {
                  "mode": "absolute",
                  "steps": [
                    {
                      "color": "green"
                    },
                    {
                      "color": "red",
                      "value": 80
                    }
                  ]
                }
              },
              "overrides": []
            },
            "gridPos": {
              "h": 8,
              "w": 12,
              "x": 0,
              "y": 0
            },
            "id": 1,
            "options": {
              "legend": {
                "calcs": [],
                "displayMode": "list",
                "placement": "bottom",
                "showLegend": true
              },
              "tooltip": {
                "hideZeros": false,
                "mode": "single",
                "sort": "none"
              }
            },
            "pluginVersion": "11.6.0",
            "targets": [
              {
                "datasource": {
                  "type": "influxdb",
                  "uid": "PEB0DCBF338B3CEB2"
                },
                "query": "from(bucket: \"WindFarmData\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"TurbineData\")\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\n  |> filter(fn: (r) => r[\"name\"] == \"/Renton/WindFarm/Turbine/WindSpeed\")\n  |> filter(fn: (r) => r[\"quality\"] == \"GOOD\")\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n  |> yield(name: \"mean\")",
                "refId": "A"
              }
            ],
            "title": "Wind Speed",
            "type": "timeseries"
          }
        ],
        "preload": false,
        "schemaVersion": 41,
        "tags": [],
        "templating": {
          "list": []
        },
        "time": {
          "from": "now-6h",
          "to": "now"
        },
        "timepicker": {},
        "timezone": "browser",
        "title": "Demo Dashboard",
        "uid": "eejtureqjo9a8c",
        "version": 2
      }

  nodered_flows:
    content: |
      [
        {
          "id": "95fce448fdd43b47",
          "type": "tab",
          "label": "Demo Flow",
          "disabled": false,
          "info": ""
        },
        {
          "id": "5f63740b66af3386",
          "type": "mqtt out",
          "z": "95fce448fdd43b47",
          "name": "Publish to MQTT broker",
          "topic": "/Renton/WindFarm/Turbine/WindSpeed",
          "qos": "1",
          "retain": "",
          "respTopic": "",
          "contentType": "",
          "userProps": "",
          "correl": "",
          "expiry": "",
          "broker": "5744207557fa19be",
          "x": 830,
          "y": 200,
          "wires": []
        },
        {
          "id": "8f2eb590d596679b",
          "type": "function",
          "z": "95fce448fdd43b47",
          "name": "Translate to SiteWise payload",
          "func": "let input = msg.payload;\nlet output = {};\n\noutput[\"propertyAlias\"] = input.name;\n\nlet propertyVal = {}\n\nlet timeInSeconds = Math.floor(input.timestamp / 1000);\nlet offsetInNanos = (input.timestamp % 1000) * 1000000;\n\npropertyVal[\"timestamp\"] = {\n    \"timeInSeconds\": timeInSeconds,\n    \"offsetInNanos\": offsetInNanos,\n};\n\npropertyVal[\"quality\"] = input.quality\n\nlet typeNameConverter = {\n    \"number\": (x) => Number.isInteger(x) ? \"integerValue\" : \"doubleValue\",\n    \"boolean\": (x) => \"booleanValue\",\n    \"string\": (x) => \"stringValue\", \n}\nlet typeName = typeNameConverter[typeof input.value](input.value)\npropertyVal[\"value\"] = {}\npropertyVal[\"value\"][typeName] = input.value;\n\noutput[\"propertyValues\"] = [propertyVal]\n\nreturn {\n    payload: JSON.stringify(output)\n};",
          "outputs": 1,
          "timeout": "",
          "noerr": 0,
          "initialize": "",
          "finalize": "",
          "libs": [],
          "x": 530,
          "y": 200,
          "wires": [
            [
              "5f63740b66af3386"
            ]
          ]
        },
        {
          "id": "4b78cbdea5e3258c",
          "type": "inject",
          "z": "95fce448fdd43b47",
          "name": "Turbine Simulator",
          "props": [
            {
              "p": "payload.timestamp",
              "v": "",
              "vt": "date"
            },
            {
              "p": "payload.quality",
              "v": "GOOD",
              "vt": "str"
            },
            {
              "p": "payload.value",
              "v": "$$random()",
              "vt": "jsonata"
            },
            {
              "p": "payload.name",
              "v": "/Renton/WindFarm/Turbine/WindSpeed",
              "vt": "str"
            }
          ],
          "repeat": "1",
          "crontab": "",
          "once": false,
          "onceDelay": "",
          "topic": "",
          "x": 270,
          "y": 200,
          "wires": [
            [
              "8f2eb590d596679b"
            ]
          ]
        },
        {
          "id": "b658bf337ea2e316",
          "type": "influxdb out",
          "z": "95fce448fdd43b47",
          "influxdb": "2f1c38495035d2e4",
          "name": "Store data in InfluxDB",
          "measurement": "TurbineData",
          "precision": "",
          "retentionPolicy": "",
          "database": "",
          "retentionPolicyV18Flux": "",
          "org": "iot-sitewise-edge",
          "bucket": "WindFarmData",
          "x": 840,
          "y": 340,
          "wires": []
        },
        {
          "id": "9432d39af35b202f",
          "type": "function",
          "z": "95fce448fdd43b47",
          "name": "Translate to InfluxDB payload",
          "func": "let data = msg.payload;\n\nlet timeInSeconds = data.propertyValues[0].timestamp.timeInSeconds;\nlet offsetInNanos = data.propertyValues[0].timestamp.offsetInNanos;\nlet timestampInMilliseconds = (timeInSeconds * 1000) + (offsetInNanos / 1000000);\n\nmsg.payload = [\n    {\n        \"timestamp(milliseconds_since_epoch)\": timestampInMilliseconds,\n        \"value\": data.propertyValues[0].value.doubleValue\n    },\n    {\n        \"name\": data.propertyAlias,\n        \"quality\": data.propertyValues[0].quality\n    }\n]\n\nreturn msg",
          "outputs": 1,
          "timeout": "",
          "noerr": 0,
          "initialize": "",
          "finalize": "",
          "libs": [],
          "x": 560,
          "y": 340,
          "wires": [
            [
              "b658bf337ea2e316"
            ]
          ]
        },
        {
          "id": "b689403d2c80816b",
          "type": "mqtt in",
          "z": "95fce448fdd43b47",
          "name": "Subscribe to MQTT broker",
          "topic": "/Renton/WindFarm/Turbine/WindSpeed",
          "qos": "1",
          "datatype": "auto-detect",
          "broker": "5744207557fa19be",
          "nl": false,
          "rap": true,
          "rh": 0,
          "inputs": 0,
          "x": 290,
          "y": 340,
          "wires": [
            [
              "9432d39af35b202f"
            ]
          ]
        },
        {
          "id": "4f59bed8e829fc35",
          "type": "comment",
          "z": "95fce448fdd43b47",
          "name": "Data Publish Flow",
          "info": "dfgh",
          "x": 270,
          "y": 160,
          "wires": []
        },
        {
          "id": "b218c7fc58c8b6e7",
          "type": "comment",
          "z": "95fce448fdd43b47",
          "name": "Data Retention flow",
          "info": "",
          "x": 270,
          "y": 300,
          "wires": []
        },
        {
          "id": "5744207557fa19be",
          "type": "mqtt-broker",
          "name": "emqx",
          "broker": "emqx",
          "port": "1883",
          "clientid": "",
          "autoConnect": true,
          "usetls": false,
          "protocolVersion": "5",
          "keepalive": 15,
          "cleansession": true,
          "autoUnsubscribe": true,
          "birthTopic": "",
          "birthQos": "0",
          "birthPayload": "",
          "birthMsg": {},
          "closeTopic": "",
          "closePayload": "",
          "closeMsg": {},
          "willTopic": "",
          "willQos": "0",
          "willPayload": "",
          "willMsg": {},
          "userProps": "",
          "sessionExpiry": ""
        },
        {
          "id": "2f1c38495035d2e4",
          "type": "influxdb",
          "hostname": "influxdb",
          "port": 8086,
          "protocol": "http",
          "database": "",
          "name": "InfluxDB",
          "usetls": false,
          "tls": "",
          "influxdbVersion": "2.0",
          "url": "http://influxdb:8086",
          "timeout": "",
          "rejectUnauthorized": false
        }
      ]

  nodered_flows_cred:
    content: |
      {
        "2f1c38495035d2e4": {
          "token": "${INFLUXDB_TOKEN}"
        }
      }

  nodered_settings:
    content: |
      module.exports = {
        flowFile: 'flows.json',
        credentialSecret: false,
        adminAuth: null,
        editorTheme: {
          projects: {
            enabled: false
          }
        }
      }
```

### SiteWise Edge 배포 업데이트
<a name="w2aac17c19c19c26c27b7c11"></a>

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/)로 이동합니다.

1. 왼쪽 탐색 메뉴의 **관리** 섹션에서 **Greengrass 디바이스**를 선택한 다음 **코어 디바이스**를 선택합니다.

1. SiteWise Edge Gateway에 연결된 코어 디바이스를 선택합니다.

1. **배포** 탭을 선택한 다음 **배포 ID** 값을 선택합니다.

1. **작업을** 선택한 다음 **수정을** 선택합니다.

1. 팝업 메시지를 읽은 다음 **배포 수정을** 선택합니다.

1. **2단계 - 구성 요소 선택**에서 다음 구성 요소를 선택한 **후 다음을** 선택합니다.
   + `aws.greengrass.clientdevices.mqtt.EMQX`
   + `aws.iot.SiteWiseEdgePublisher`

1. **3단계 - 구성 요소 구성**에서 `aws.greengrass.clientdevices.mqtt.EMQX` 구성 요소 값을 선택하고 다음 네트워크 구성을 추가합니다.

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 127.0.0.1:1883:1883 --network=SiteWiseEdgeNodeRedDemoNetwork",
       "requiresPrivilege": "true"
   }
   ```

1. **다음**을 선택합니다.

1. **4단계 - 고급 설정 구성**에서 **다음을** 선택합니다.

1. **배포** 선택

### 서비스 시작
<a name="linux-docker-launch"></a>

1. Docker Compose 파일을 사용하여 서비스를 시작합니다. `compose.yaml` 파일이 포함된 디렉터리에서 다음 명령을 실행합니다.

   ```
   docker compose up -d
   ```

1. SSH 터널을 생성하여 서비스에 액세스합니다.

   ```
   ssh -i path_to_your_ssh_key -L 1880:127.0.0.1:1880 -L 3000:127.0.0.1:3000 -L 8086:127.0.0.1:8086 username@gateway_ip_address
   ```

이 배포는에서 `SiteWiseEdgeNodeRedDemoNetwork network`다음 서비스를 생성합니다.

**InfluxDB v2(포트 8086)**  
사전 구성된 조직(iot-sitewise-edge), WindFarmData InfluxDB 버킷 및 관리자 자격 증명 포함

**Node-RED(포트 1880)**  
 AWS IoT SiteWise 통합을 위해 InfluxDB 노드 및 사전 구성된 흐름 포함

**Grafana(포트 3000)**  
관리자 사용자, InfluxDB 데이터 소스 및 모니터링 대시보드 포함

### 서비스에 액세스
<a name="linux-docker-access-services"></a>

배포 후 다음 URLs.

**참고**  
호스트 또는 게이트웨이 시스템에서 각 서비스에 액세스할 수 있습니다.


**서비스 액세스 세부 정보**  

| 서비스 | URL | 자격 증명 | 
| --- | --- | --- | 
| Node-RED | [http://127.0.0.1:1880](http://127.0.0.1:1880) | 자격 증명 필요 없음 | 
| InfluxDB | [http://127.0.0.1:8086](http://127.0.0.1:8086) |  사용자 이름: admin 암호: \$1INFLUXDB\$1PASSWORD  | 
| Grafana | [http://127.0.0.1:3000](http://127.0.0.1:3000) |  사용자 이름: admin 암호: \$1GRAFANA\$1PASSWORD  | 

## 배포 확인
<a name="linux-docker-verify-deployment"></a>

배포에 성공하려면 다음 검사를 수행합니다.

1. Node-RED의 경우 미리 로드된 흐름이 두 개 있는지 확인합니다.
   + 데이터 게시 흐름
   + 데이터 보존 흐름

1. 의 경우 AWS IoT SiteWise 콘솔 AWS IoT SiteWise에서 별칭이 인 데이터 스트림이 있는지 확인합니다`/Renton/WindFarm/Turbine/WindSpeed`.

1. InfluxDB의 경우 Data Explorer를 사용하여 `WindFarmData` 버킷 내 `TurbineData` 측정에서 데이터 스토리지를 확인합니다.

1. Grafana의 경우 대시보드를 보고 Node-RED에서 생성된 시계열 데이터의 표시를 확인합니다.

# 오픈 소스 통합을 위한 데이터 처리
<a name="open-source-data-processing-open-source"></a>

각기 다른 모니터링 요구 사항을 충족하는 다양한 도구를 사용하여 다양한 단계에서 데이터를 처리할 수 있습니다(예: 변환 또는 집계).

## Node-RED 노드로 데이터 처리
<a name="open-source-nodered-nodes"></a>

Node-RED® 내장 처리 노드를 사용하여 데이터를 실시간으로 변환합니다. Node-RED 콘솔을 통해 이러한 노드를 구성하여 데이터 파이프라인을 생성합니다.

### 데이터 변환 노드
<a name="open-source-data-transformation-nodes"></a>

다음 노드를 AWS IoT SiteWise사용하여의 변환과 유사한 개별 데이터 포인트를 변환합니다.
+ **변경 노드** - 데이터에 대한 간단한 값 수정을 수행합니다.
+ **함수 노드** - 복잡한 데이터 처리를 위한 사용자 지정 JavaScript 변환을 활성화합니다.

### 지표 계산 노드
<a name="open-source-metrics-calculation-nodes"></a>

다음 노드를 AWS IoT SiteWise사용하여의 지표와 유사한 단일 출력으로 여러 데이터 포인트를 결합합니다.
+ **배치 노드** - 배치 처리를 위해 여러 메시지를 그룹화합니다.
+ **조인 노드** - 여러 데이터 스트림을 단일 출력으로 결합합니다.
+ **애그리게이터 노드** - 여러 데이터 포인트의 집계 지표를 계산합니다.

추가 노드 옵션은 [Node-RED 라이브러리](https://flows.nodered.org/)를 참조하세요.

## InfluxDB 작업 생성
<a name="open-source-influxdb-tasks"></a>

Node-RED는 빠른 설정으로 기본 데이터 처리에 뛰어나지만 흐름 기반 프로그래밍에서는 복잡한 지표 계산이 어려울 수 있습니다. InfluxDB® 작업은 고급 처리 요구 사항을 위해 예약된 Flux 스크립트를 통해 대안을 제공합니다.

InfluxDB 작업 사용 대상:
+ 대규모 데이터 세트 전반의 통계 집계
+ 여러 속성에 대한 수학 작업
+ 여러 소스에서 파생된 측정

### 작업 기능
<a name="open-source-task-features"></a>
+ **예약된 실행** - cron 표현식을 기반으로 작업 실행
+ **배치 처리** - 시계열 데이터에 대한 작업 최적화
+ **오류 복구** - 실패한 작업을 자동으로 재시도합니다.
+ **모니터링** - 세부 로그를 통해 실행 추적

InfluxDB UI, API 또는 CLI를 통해 작업을 관리합니다. 자세한 내용은 [ InfluxDB 태스크로 데이터 처리를](https://docs.influxdata.com/influxdb/cloud/process-data/) 참조하세요.

## Grafana 변환 사용
<a name="open-source-grafana-transformations"></a>

InfluxDB에서 소스 데이터를 수정하지 않고 Grafana®에서 데이터 시각화를 변환합니다. Grafana 변환은 시각화 계층에만 적용됩니다.
+ **Visual Builder** - 코드를 작성하지 않고 변환 생성
+ **라이브 미리 보기** - 변환 결과를 실시간으로 보기
+ **다중 소스 -** 여러 데이터베이스 소스의 데이터 처리
+ **스토리지 효율성** - 중간 결과를 저장하지 않고 시각화 시 데이터 변환

자세한 내용은 [데이터 변환](https://grafana.com/docs/grafana/latest/panels/transform-data/)을 참조하세요.

## 오픈 소스 통합 문제 해결
<a name="open-source-troubleshoot"></a>

SiteWise Edge 게이트웨이의 오픈 소스 통합과 관련된 문제 해결 주제에 대한 자세한 내용은 섹션을 참조하세요[Edge에서 오픈 소스 통합 문제 해결](troubleshooting-gateway.md#open-source-troubleshooting).

# 클래식 스트림, AWS IoT SiteWise Edge용 V2 게이트웨이
<a name="classic-streams-v2-gateway"></a>

Classic 스트림, AWS IoT SiteWise Edge용 V2 게이트웨이의 기능과 제한 사항을 이해합니다.

클래식 스트림인 V2 게이트웨이는 MQTT 지원 V3 게이트웨이를 도입하기 전에 이전 AWS IoT SiteWise 배포에서 익숙한 기존 기능을 유지합니다. 이러한 SiteWise Edge 게이트웨이는 클래식 스트림, V2 게이트웨이로 간주됩니다. 이전 버전과의 호환성을 유지하고 데이터 처리 팩과 함께 작동합니다. 클래식 스트림인 V2 게이트웨이는 기존 설정에 안정적인 성능을 제공하지만 최신 게이트웨이 옵션에 비해 제한이 있습니다. 특히이 게이트웨이 유형은 MQTT 지원 V3 게이트웨이 대상에서 사용할 수 있는 고급 기능과 완전히 호환되지 않습니다. MQTT 메시징 프로토콜을 사용하려면 새 MQTT 지원 V3 게이트웨이를 생성할 수 있습니다. 자세한 내용은 [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 단원을 참조하십시오.

**Topics**
+ [팩을 사용하여 SiteWise Edge에서 데이터 수집 및 처리](data-packs.md)
+ [AWS IoT SiteWise 게시자 구성 요소 구성](configure-publisher-component.md)
+ [대상 및 AWS IoT Greengrass 스트림 관리자](destinations-gg-stream-manager.md)
+ [Edge에서 AWS IoT SiteWise 엣지 기능 구성](edge-data-collection-and-processing.md)
+ [AWS IoT SiteWise 모델 및 자산에 대한 엣지 데이터 처리 구성](edge-processing.md)

# 팩을 사용하여 SiteWise Edge에서 데이터 수집 및 처리
<a name="data-packs"></a>

**참고**  
데이터 처리 팩(DPP) 기능은 더 이상 신규 고객에게 제공되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [데이터 처리 팩 가용성 변경](https://docs.aws.amazon.com/iot-sitewise/latest/appguide/iotsitewise-dpp-availability-change.html)을 참조하세요.

AWS IoT SiteWise 엣지 게이트웨이는 다양한 팩을 사용하여 데이터를 수집하고 처리하는 방법을 결정합니다.

현재 사용 가능한 팩은 다음과 같습니다.
+ **데이터 수집 팩** -이 팩을 사용하여 산업 데이터를 수집하고 AWS 클라우드 대상으로 라우팅합니다. 기본적으로 이 팩은 SiteWise Edge 게이트웨이에서 자동으로 활성화됩니다.
+ **데이터 처리 팩** - 이 팩을 사용하면 엣지로 구성된 자산 모델 및 자산과 SiteWise Edge 게이트웨이 통신을 수행할 수 있습니다. 엣지 구성을 사용하여 현장에서 계산하고 처리할 자산 데이터를 제어할 수 있습니다. 그런 다음 AWS IoT SiteWise 또는 다른 AWS 서비스로 데이터를 전송할 수 있습니다. 데이터 처리 팩에 대한 자세한 내용은 [AWS IoT SiteWise 모델 및 자산에 대한 엣지 데이터 처리 구성](edge-processing.md)을 참조하세요.

## 팩 업그레이드하기
<a name="update-gateway-packs"></a>

**중요**  
데이터 처리 팩 버전을 2.0.x 이전(및 포함)에서 버전 2.1.x로 업그레이드하면 로컬에 저장된 측정값의 데이터가 손실됩니다.

SiteWise Edge 게이트웨이는 다양한 팩을 사용하여 데이터 수집 및 처리 방법을 결정합니다. AWS IoT SiteWise 콘솔을 사용하여 팩을 업그레이드할 수 있습니다.

**팩을 업그레이드하려면(콘솔) 다음을 수행하세요.**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. **게이트웨이** 목록에서 업그레이드하려는 팩이 있는 SiteWise Edge 게이트웨이를 선택합니다.

1. **게이트웨이 구성** 섹션에서 **사용 가능한 소프트웨어 업데이트**를 선택합니다.

1. 소프트웨어 버전 편집 페이지에서 **업데이트를** 선택합니다.
**참고**  
활성화된 팩만 업그레이드할 수 있습니다. 이 SiteWise Edge 게이트웨이에 대해 활성화된 팩 목록을 찾으려면 **개요를** 선택한 다음 **엣지 기능** 섹션을 참조하세요.

1. 소프트웨어 버전 편집 페이지의 **게이트웨이 구성 요소 업데이트** 섹션에서 다음을 수행합니다.
   + **OPC UA 수집기**를 업데이트하려면 버전을 선택한 다음 **배포**를 선택합니다.
   + **게시자**를 업데이트하려면 버전을 선택한 다음 **배포**를 선택합니다.
   + **데이터 처리 팩**을 업데이트하려면 버전을 선택한 다음 **배포**를 선택합니다.

1. 새 버전 배포가 완료되면 **완료**를 선택합니다.

팩을 업그레이드하는 데 문제가 있는 경우 [SiteWise Edge 게이트웨이에 팩을 배포할 수 없음](troubleshooting-gateway.md#gateway-issue-ggv2-packs)을 참조하세요.

# 데이터 처리 팩 가용성 변경
<a name="iotsitewise-dpp-availability-change"></a>

**참고**  
데이터 처리 팩(DPP) 기능은 더 이상 신규 고객에게 제공되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [데이터 처리 팩 가용성 변경](https://docs.aws.amazon.com/iot-sitewise/latest/appguide/iotsitewise-dpp-availability-change.html)을 참조하세요.

 AWS IoT 데이터 처리 팩 기능과 유사한 기능의 경우 [오픈 소스 대안](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/open-source-edge-integrations.html) 또는 [파트너 통합을](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/cpa-add-source.html) 살펴봅니다. AWS IoT SiteWise 데이터 처리 팩은 엣지에서 데이터 변환, 지표, 필터링, 로컬 스토리지 및 시각화를 제공하는의 기능 AWS IoT SiteWise 입니다.

**참고**  
AWS IoT SiteWise 및 AWS IoT SiteWise Edge 데이터 수집 팩 기능은 계속 사용할 수 있지만 데이터 처리 팩 기능은 유지 관리 모드로 전환됩니다.

## 마이그레이션 옵션  
<a name="iotsitewise-dpp-migration-options"></a>

데이터 처리 팩 기능을 대체하기 위한 마이그레이션 옵션을 살펴봅니다.

**오픈 소스 대안**  
데이터 변환을 위해 Node-RED, 시계열 스토리지를 위해 InfluxDB, 시각화를 위해 Grafana를 사용하여 로컬 데이터 처리 파이프라인을 생성합니다. 이러한 도구는 MQTT를 통해 MQTT 지원 V3 게이트웨이와 함께 작동하여 데이터를 AWS 클라우드와 동기화하면서 엣지 처리 및 로컬 인사이트를 제공합니다.  
자세한 내용은 [ SiteWise Edge 및 오픈 소스 도구를 사용하여 데이터 처리 및 시각화를 참조하세요](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/open-source-edge-integrations.html).

**파트너 통합**  
CloudRail, EasyEdge, Litmus Edge와 같은 타사 파트너 데이터 소스를 통해 산업 장비와 센서를 연결합니다. 이러한 Greengrass 구성 요소는와 협력하여 개발되었으며 포괄적인 데이터 수집 AWS 및 처리를 위해 200개 이상의 산업 프로토콜을 지원합니다.  
자세한 내용은 [데이터 소스 추가를](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/cpa-add-source.html) 참조하세요.

**MQTT 지원, V3 게이트웨이**  
MQTT 지원 V3 게이트웨이는 효율적인 데이터 통신을 위해 경량 MQTT 프로토콜을 사용하며 실시간 수집 및 버퍼링된 Amazon S3 수집을 포함한 유연한 데이터 대상을 제공합니다. 정확한 데이터 수집을 위한 경로 필터를 구현하고 향상된 확장성과 IoT 표준 정렬의 이점을 누릴 수 있습니다. MQTT 지원 V3 게이트웨이는 자산 모델, 계산된 속성, 경보 및 과거 데이터 쿼리를 포함한 핵심 서비스를 통해 AWS IoT SiteWise 클라우드 기반 데이터 처리를 제공합니다.  
자세한 내용은 [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 단원을 참조하십시오.

## 자주 묻는 질문(FAQ)
<a name="iotsitewise-dpp-faq"></a>

### 점진적으로 마이그레이션할 수 있나요?
<a name="iotsitewise-dpp-faq-gradual"></a>

예, 마이그레이션 옵션의 조합을 사용하여 점진적으로 마이그레이션할 수 있습니다. 기존 Classic 스트림, 데이터 처리 팩이 있는 V2 게이트웨이와 함께 MQTT 지원 V3 게이트웨이, 오픈 소스 대안 또는 파트너 통합을 배포할 수 있습니다. 모든 옵션은 동일한 AWS IoT SiteWise 환경으로 데이터를 전송할 수 있습니다.

### 데이터 처리 팩을 얼마나 오래 계속 사용할 수 있나요?
<a name="iotsitewise-dpp-faq-timeline"></a>

데이터 처리 팩은 유지 관리 모드에서 기존 고객이 계속 사용할 수 있습니다. 가용성 변경이 계획된 경우 사전 알림을 받게 됩니다. AWS 서비스 공지 및 계정 알림의 업데이트를 모니터링합니다.

# AWS IoT SiteWise 게시자 구성 요소 구성
<a name="configure-publisher-component"></a>

Edge 게이트웨이를 생성하고 소프트웨어를 설치한 후 SiteWise AWS IoT SiteWise Edge 게이트웨이가 AWS 클라우드로 데이터를 내보낼 수 있도록 게시자 구성 요소를 설정할 수 있습니다. 게시자 구성 요소를 사용하여 추가 기능을 활성화하거나 기본 설정을 구성합니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [AWS IoT SiteWise 게시자](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-publisher-component.html)를 참조하세요.

**참고**  
게시자 구성은 사용 중인 게이트웨이 유형에 따라 다릅니다. 클래식 스트림, V2 게이트웨이의 경우 `iotsitewise:publisher:2` 네임스페이스를 사용합니다. MQTT 지원 V3 게이트웨이의 경우 `iotsitewise:publisher:3` 네임스페이스를 사용합니다.

------
#### [ Console ]

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 탐색 창에서 **엣지 게이트웨이**를 선택합니다.

1. 게시자를 구성할 SiteWise Edge 게이트웨이를 선택합니다.

1. **게시자 구성** 섹션에서 **편집**을 선택합니다.

1. **게시 순서**에서 다음 중 하나를 선택합니다.
   + **가장 오래된 데이터를 먼저 게시** - SiteWise Edge 게이트웨이가 기본적으로 가장 오래된 데이터를 클라우드에 먼저 게시합니다.
   + **최신 데이터를 먼저 게시** – SiteWise Edge 게이트웨이가 최신 데이터를 클라우드에 먼저 게시합니다.

1. (선택 사항) SiteWise Edge 게이트웨이가 데이터를 압축하지 않도록 하려면 **데이터를 업로드할 때 압축 활성화**를 선택 취소합니다.

1. (선택 사항) 오래된 데이터를 게시하지 않으려면 **만료된 데이터 제외**를 선택하고 다음을 수행합니다.

   1. **마감 기간**의 경우 값을 입력하고 단위를 선택합니다. 마감 기간은 5분에서 7일 사이여야 합니다. 예를 들어 마감 기간이 3일인 경우 3일 이전의 데이터는 클라우드에 게시되지 않습니다.

1. (선택 사항) 로컬 디바이스에서 데이터가 처리되는 방식에 대한 사용자 지정 설정을 지정하려면 **로컬 스토리지 설정**을 선택하고 다음을 수행합니다.

   1. **보존 기간**에 숫자를 입력하고 단위를 선택합니다. 보존 기간은 1분에서 30일 사이여야 하며, 교체 기간보다 길거나 같아야 합니다. 예를 들어 보존 기간이 14일인 경우 SiteWise Edge 게이트웨이는 14일 동안 저장된 후 지정된 마감 기간보다 오래된 모든 엣지 데이터를 삭제합니다.

   1. **교체 기간**의 경우 숫자를 입력하고 단위를 선택합니다. 교체 기간은 1분보다 크며 보존 기간과 같거나 작아야 합니다. 예를 들어 교체 기간이 2일인 경우 SiteWise Edge 게이트웨이는 마감 기간보다 오래된 데이터를 일괄 처리하여 단일 파일에 저장합니다. 를 통한 자체 호스팅 게이트웨이의 경우 AWS IoT Greengrass V2 SiteWise Edge 게이트웨이는 2일에 한 번씩 다음 로컬 디렉터리로 데이터 배치를 전송합니다`/greengrass/v2/work/aws.iot.SiteWiseEdgePublisher/exports`.

   1. **스토리지 용량**에 대해 1 이상의 숫자를 입력합니다. 스토리지 용량이 2GB인 경우 로컬에 2GB를 초과하는 데이터가 저장되면 SiteWise Edge 게이트웨이에서 데이터 삭제를 시작합니다.

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

------
#### [ AWS CLI ]

[UpdateGatewayCapabilityConfiguration](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateGatewayCapabilityConfiguration.html) API를 사용하여 게시자를 구성합니다.

`capabilityNamespace` 파라미터를 `iotsitewise:publisher:2`로 설정합니다.

**Example : Classic Stream, V2 게이트웨이에 대한 게시자 구성**  
게시자 네임스페이스: `iotsitewise:publisher:2`  

```
{
    "SiteWisePublisherConfiguration": {                               
        "publishingOrder": "TIME_ORDER",
        "enableCompression": true,
        "dropPolicy": {
            "cutoffAge": "7d",
            "exportPolicy": {
                "retentionPeriod": "7d",
                "rotationPeriod": "6h",
                "exportSizeLimitGB": 10
            }
        }
    },
    "SiteWiseS3PublisherConfiguration": {
        "accessRoleArn": "arn:aws:iam:123456789012:role/roleName",
        "streamToS3ConfigMapping": [
            {
                "streamName": "S3_OPC-UA_Data_Collector",
                "targetBucketArn": "arn:aws:s3:::amzn-s3-demo-bucket/dataCollector",
                "publishPolicy": {
                    "publishFrequency": "10m",
                    "localSizeLimitGB": 10
                },
                "siteWiseImportPolicy": {
                    "enableSiteWiseStorageImport": true,
                    "enableDeleteAfterImport": true
                }
            }
        ]
    }
}
```

게시자는 사용자 지정할 수 있는 다음과 같은 구성 파라미터를 제공합니다.

`SiteWisePublisherConfiguration`    
`publishingOrder`  
데이터가 클라우드에 게시되는 순서. 이 파라미터는 다음 값 중 하나일 수 있습니다.  
+ `TIME_ORDER`(**가장 오래된 데이터부터 게시**) - 기본적으로 가장 오래된 데이터가 클라우드에 먼저 게시됩니다.
+ `RECENT_DATA`(**최신 데이터를 먼저 게시**) — 최신 데이터가 클라우드에 먼저 게시됩니다.  
`enableCompression`  
게시하기 전에 데이터를 압축`true`하려면이 값을 로 설정합니다. 데이터 압축은 대역폭 사용량을 줄일 수 있습니다.  
`dropPolicy`  
(선택 사항) 클라우드에 게시되는 데이터를 제어하는 정책입니다.    
`cutoffAge`  
일, 시간 및 분으로 지정된 게시할 데이터의 최대 수명입니다. 예: `7d` 또는 `1d7h16m`. 지정한 것보다 오래된 데이터는 로 전송되지 않습니다 AWS IoT SiteWise.  
마감 기간 이전의 데이터는 클라우드에 게시되지 않습니다. 마감 기간은 5분에서 7일 사이여야 합니다.  
마감 연령을 지정할 때 `m`, `h`, `d`를 사용할 수 있습니다. `m`은 분, `h`는 시간, `d`는 일을 나타냅니다.  
`exportPolicy`  
(선택 사항) 엣지의 데이터 스토리지를 관리하는 정책입니다. 이 정책은 마감 기간 이전의 데이터에 적용됩니다.    
`retentionPeriod`  
SiteWise Edge 게이트웨이는 지정된 보존 기간 동안 저장된 후 로컬 스토리지에서 마감 기간보다 이른 엣지의 모든 데이터를 삭제합니다. 보존 기간은 1분에서 30일 사이여야 하며, 교체 기간보다 길거나 같아야 합니다.  
보존 기간을 지정할 때 `m`, `h`, `d`를 사용할 수 있습니다. `m`은 분, `h`는 시간, `d`는 일을 나타냅니다.  
`rotationPeriod`  
마감 기간보다 이른 데이터를 일괄 처리하여 단일 파일에 저장하는 시간 간격입니다. SiteWise Edge 게이트웨이는 각 교체 기간이 끝날 때 데이터 배치 하나를 로컬 디렉터리 `/greengrass/v2/work/aws.iot.SiteWiseEdgePublisher/exports`로 전송합니다. 교체 기간은 1분보다 크며 보존 기간과 같거나 작아야 합니다.  
교체 기간을 지정할 때 `m`, `h`, `d`를 사용할 수 있습니다. `m`은 분, `h`는 시간, `d`는 일을 나타냅니다.  
`exportSizeLimitGB`  
로컬에 저장된 최대 허용 데이터 크기(GB)입니다. 이 할당량이 위반되면 SiteWise Edge 게이트웨이는 로컬에 저장된 데이터 크기가 할당량 이하가 될 때까지 가장 이른 데이터를 삭제하기 시작합니다. 이 파라미터의 값은 1보다 크거나 같아야 합니다.

`SiteWiseS3PublisherConfiguration`    
`accessRoleArn`  
게시하려는 Amazon S3 버킷을 관리할 수 있는 AWS IoT SiteWise 권한을 부여하는 액세스 역할입니다.  
`streamToS3ConfigMapping`  
스트림을 Amazon S3 구성에 매핑하는 구성 배열입니다.    
`streamName`  
Amazon S3 구성에서 읽고 게시할 스트림입니다.  
`targetBucketArn`  
게시할 버킷 ARN입니다.  
`publishPolicy`  
    
`publishFrequency`  
SiteWise Edge 게이트웨이가 Amazon S3 버킷에 게시하는 빈도입니다.  
`localSizeLimitGB`  
로컬 디스크에 기록된 파일의 최대 크기입니다. 이 임계값을 위반하면 게시자는 버퍼링된 모든 데이터를 대상에 게시합니다.  
`siteWiseImportPolicy`  
    
`enableSiteWiseStorageImport`  
Amazon S3 버킷에서 AWS IoT SiteWise 스토리지로 데이터를 가져오`true`려면이 값을 로 설정합니다.  
`enableDeleteAfterImport`  
 AWS IoT SiteWise 스토리지에 수집한 후 Amazon S3 버킷의 파일을 삭제하려면 `true`로 설정합니다.

------

# 대상 및 AWS IoT Greengrass 스트림 관리자
<a name="destinations-gg-stream-manager"></a>

AWS IoT Greengrass 스트림 관리자를 사용하면의 채널 AWS IoT 분석, Amazon Kinesis Data Streams의 스트림,의 자산 속성 AWS IoT SiteWise또는 Amazon Simple Storage Service(Amazon S3)의 객체와 같은 AWS 클라우드 대상으로 데이터를 전송할 수 있습니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [AWS IoT Greengrass Core에서의 데이터 스트림 관리](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-data-streams.html)를 참조하세요.

**Example : 데이터 스트림 메시지 구조**  
다음 예제에서는 스트림 관리자가 전송하는 필수 데이터 AWS IoT Greengrass 스트림 메시지 구조를 보여줍니다.  

```
{
   "assetId": "string",
   "propertyAlias": "string",
   "propertyId": "string",
   "propertyValues": [
      {
         "quality": "string",
         "timestamp": {
            "offsetInNanos": number,
            "timeInSeconds": number
         },
         "value": {
            "booleanValue": boolean,
            "doubleValue": number,
            "integerValue": number,
            "stringValue": "string"
         }
      }
   ]
}
```

**참고**  
데이터 스트림 메시지의 구조에는 (`assetId` 및 `propertyId`) 또는 `propertyAlias`가 포함되어야 합니다.

`assetId`  
(선택 사항) 업데이트할 자산의 ID입니다.

`propertyAlias`  
(선택 사항) OPC UA 서버 데이터 스트림 경로와 같이 속성을 식별하는 별칭입니다. 예제:  

```
/company/windfarm/3/turbine/7/temperature
```
자세한 내용은 *AWS IoT SiteWise 사용 설명서*의 [ 데이터 스트림 관리를 참조하세요](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-data-streams.html).

`propertyId`  
(선택 사항) 이 항목의 자산 속성 ID입니다.

`propertyValues`  
(필수) 업로드할 속성 값 목록입니다. 최대 10개의 `propertyValues` 배열 요소를 지정할 수 있습니다.    
`quality`  
(선택 사항) 자산 속성 값의 품질입니다.  
 `timestamp`   
(필수) 자산 속성 값의 타임스탬프입니다.    
 `offsetInNanos`   
(선택 사항) `timeInSeconds`의 나노초 오프셋입니다.  
 `timeInSeconds`   
Unix Epoch 형식의 타임스탬프 날짜(초)입니다. `offsetInNanos`에서 나노초 단위의 데이터를 제공합니다.  
 `value`   
(필수) 자산 속성의 값입니다.  
`value` 필드에는 다음 값 중 하나만 포함될 수 있습니다.  
 `booleanValue`   
(선택 사항) 부울(`true` 또는 `false`) 유형의 자산 속성 데이터.  
 `doubleValue`   
(선택 사항) 배정밀도(부동 소수점 숫자) 유형의 자산 속성 데이터입니다.  
 `integerValue`   
(선택 사항) 정수(범자연수) 유형의 자산 속성 데이터입니다.  
 `stringValue`   
(선택 사항) 문자열(문자 시퀀스) 유형의 자산 속성 데이터입니다.

# Edge에서 AWS IoT SiteWise 엣지 기능 구성
<a name="edge-data-collection-and-processing"></a>

**참고**  
데이터 처리 팩(DPP) 기능은 더 이상 신규 고객에게 제공되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [데이터 처리 팩 가용성 변경](https://docs.aws.amazon.com/iot-sitewise/latest/appguide/iotsitewise-dpp-availability-change.html)을 참조하세요.

 AWS IoT SiteWise Edge를 사용하여 데이터를 수집하고 임시로 저장하여 디바이스 데이터를 로컬에서 구성하고 처리할 수 있습니다. 엣지 처리를 활성화하면 집계된 데이터만 AWS 클라우드 로 전송하여 대역폭 사용량과 클라우드 스토리지 비용을 최적화할 수 있습니다. 와 함께 AWS IoT SiteWise 구성 요소를 사용하면 로 전송하기 전에 엣지에서 데이터를 수집 및 처리 AWS 클라우드하거나 SiteWise Edge API를 사용하여 온프레미스에서 관리할 AWS IoT Greengrass수 있습니다. APIs 

데이터 수집은에서 실행되는 데이터 팩 및 AWS IoT SiteWise 구성 요소를 통해 이루어집니다 AWS IoT Greengrass.

**참고**  
AWS IoT SiteWise 는 SiteWise Edge 게이트웨이에 최대 30일까지 엣지 데이터를 유지합니다. 데이터 보존 기간은 디바이스의 사용 가능한 디스크 공간에 따라 다릅니다.
SiteWise Edge 게이트웨이가에서 30일 AWS 클라우드 동안 연결 해제된 경우 [데이터 처리 팩](configure-opcua-source.md)이 자동으로 비활성화됩니다.

**Topics**
+ [SiteWise Edge에서 엣지 기능 설정](#using-sitewise-edge)

## SiteWise Edge에서 엣지 기능 설정
<a name="using-sitewise-edge"></a>

AWS IoT SiteWise 는 SiteWise Edge 게이트웨이가 데이터를 수집하고 처리하는 방법을 결정하는 데 사용할 수 있는 다음 팩을 제공합니다. 팩을 선택하여 SiteWise Edge 게이트웨이의 엣지 기능을 활성화하세요.
+ **데이터 수집 팩**을 사용하면 SiteWise Edge 게이트웨이가 여러 OPC UA 서버에서 데이터를 수집한 다음 엣지에서 AWS 클라우드로 데이터를 내보낼 수 있습니다. SiteWise Edge 게이트웨이에 데이터 소스를 추가하면 활성화됩니다.
+ **데이터 처리 팩**을 사용하면 SiteWise Edge 게이트웨이가 엣지에서 장비 데이터를 처리할 수 있습니다. 예를 들어 자산 모델을 사용하여 지표와 변환을 계산할 수 있습니다. 자산 모델 및 자산에 대한 자세한 내용은 [산업 자산 모델링](industrial-asset-models.md)을 참조하세요.
**참고**  
데이터 처리 팩은 x86 플랫폼에서만 사용할 수 있습니다.

**엣지 기능 구성**

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 탐색 창에서 **엣지 게이트웨이**를 선택합니다.

1. 엣지 기능을 활성화하려는 SiteWise Edge 게이트웨이를 선택합니다.

1. **엣지 기능** 섹션에서 **편집**을 선택합니다.

1. **엣지 기능** 섹션에서 **데이터 처리 팩 활성화(추가 요금 발생)**를 선택합니다.

1. (선택 사항) **엣지 LDAP 연결** 섹션에서 회사 디렉터리의 사용자 그룹에 이 SiteWise Edge 게이트웨이에 대한 액세스 권한을 부여할 수 있습니다. 사용자 그룹은 Lightweight Directory Access Protocol(LDAP) 자격 증명을 사용하여 SiteWise Edge 게이트웨이에 액세스할 수 있습니다. 그런 다음 AWS IoT SiteWise 애플리케이션, AWS IoT SiteWise API 작업 또는 기타 도구 AWS OpsHub 에를 사용하여 SiteWise Edge 게이트웨이를 관리할 수 있습니다. 자세한 내용은 [SiteWise Edge 게이트웨이 관리](manage-gateways-ggv2.md) 단원을 참조하십시오.
**참고**  
Linux 또는 Microsoft Windows 자격 증명을 사용하여 SiteWise Edge 게이트웨이에 액세스할 수도 있습니다. 자세한 내용은 [Linux 운영 체제 자격 증명을 사용하여 SiteWise Edge 게이트웨이에 액세스](manage-gateways-ggv2.md#linux-user-pool) 단원을 참조하십시오.

   1. **활성화됨**을 선택합니다.

   1. **공급자 이름**에 LDAP 공급자의 이름을 입력합니다.

   1. **호스트 이름 또는 IP 주소**에 LDAP 서버의 호스트 이름 또는 IP 주소를 입력합니다.

   1. **포트**에 포트 번호를 입력합니다.

   1. **기본 고유 이름(DN)**에 기본의 고유 이름(DN)을 입력합니다.

      지원되는 속성 유형은 commonName(CN), localityName(L), stateOrProvinceName(ST), organizationName(O), organizationalUnitName(OU), countryName(C), streetAddress(STREET), domainComponent(DC), userid(UID)입니다.

   1. **관리 그룹 DN**의 경우 DN을 입력합니다.

   1. **사용자 그룹 DN**의 경우 DN을 입력합니다.

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

이제 SiteWise Edge 게이트웨이에서 엣지 기능을 활성화했으므로 엣지에 대한 자산 모델을 구성해야 합니다. 자산 모델 엣지 구성은 자산 속성이 계산되는 위치를 지정합니다. 엣지에서 모든 속성을 계산하거나 자산 모델 속성을 개별적으로 구성할 수 있습니다. 자산 모델 속성에는 [지표](concept-overview.md#concept-metric), [변환](concept-overview.md#concept-transform) 및 [측정](concept-overview.md#concept-measurement)이 포함됩니다.

자산 속성에 대한 자세한 내용은 [데이터 속성 정의](asset-properties.md) 단원을 참조하세요.

 자산 모델을 만든 후 엣지에 맞게 구성할 수 있습니다. 엣지용 자산 모델 구성에 대한 자세한 내용은 [자산 모델 생성(콘솔)](create-asset-models.md#create-asset-model-console) 단원을 참조하세요.

**참고**  
자산 모델 및 대시보드는 10분마다 AWS 클라우드와 SiteWise Edge 게이트웨이 간에 자동으로 동기화됩니다. 로컬 SiteWise Edge 게이트웨이 애플리케이션에서 수동으로 동기화할 수도 있습니다.

# AWS IoT SiteWise 모델 및 자산에 대한 엣지 데이터 처리 구성
<a name="edge-processing"></a>

**참고**  
데이터 처리 팩(DPP) 기능은 더 이상 신규 고객에게 제공되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [데이터 처리 팩 가용성 변경](https://docs.aws.amazon.com/iot-sitewise/latest/appguide/iotsitewise-dpp-availability-change.html)을 참조하세요.

 AWS IoT SiteWise Edge를 사용하여 장비 데이터를 로컬에서 수집, 저장, 구성 및 모니터링할 수 있습니다. SiteWise Edge를 사용하면 산업 데이터를 모델링하고 로컬에서 시각화할 수 있습니다. 데이터를 로컬에서 처리하여 클라우드로 보내거나 AWS IoT SiteWise API를 AWS 사용하여 온프레미스에서 처리할 수 있습니다.

 AWS IoT SiteWise Edge를 사용하면 원시 데이터를 로컬에서 처리하고 집계된 데이터만 AWS 클라우드로 전송하여 대역폭 사용량과 클라우드 스토리지 비용을 최적화할 수 있습니다.

**참고**  
AWS IoT SiteWise 는 SiteWise Edge 게이트웨이의 엣지 데이터를 최대 30일까지 유지합니다. 데이터 보존 기간은 디바이스의 사용 가능한 디스크 공간에 따라 다릅니다.
SiteWise Edge 게이트웨이가 30일 동안 AWS 클라우드에서 연결 해제된 경우 [SiteWise Edge에서 OPC UA 소스 설정](configure-opcua-source.md)가 자동으로 비활성화됩니다.

## SiteWise Edge에서 데이터 처리를 위한 자산 모델 구성
<a name="process-gateway-data-edge"></a>

엣지에서 SiteWise Edge 게이트웨이 데이터를 처리하려면 먼저 엣지에 대한 자산 모델을 구성해야 합니다. 자산 모델 엣지 구성은 자산 속성이 계산되는 위치를 지정합니다. 엣지의 모든 속성을 계산하여 결과를 AWS 클라우드로 보내거나 각 자산 속성을 별도로 계산할 위치를 사용자 지정할 수 있습니다. 자세한 내용은 [AWS IoT SiteWise 모델 및 자산에 대한 엣지 데이터 처리 구성](#edge-processing) 단원을 참조하십시오.

자산 속성에는 지표, 변환 및 측정이 포함됩니다.
+ 지표는 지정한 기간에 걸친 자산의 데이터 집계입니다. 기존 지표 데이터를 사용하여 새 지표를 계산할 수 있습니다. AWS IoT SiteWise 는 항상 장기 스토리지를 위해 지표를 AWS 클라우드로 전송합니다.는 기본적으로 AWS 클라우드에서 지표를 AWS IoT SiteWise 계산합니다. 엣지에서 지표를 계산하도록 자산 모델을 구성할 수 있습니다.는 처리된 결과를 AWS 클라우드로 AWS IoT SiteWise 보냅니다.
+ 변형은 자산 속성의 데이터 포인트를 한 양식에서 다른 양식으로 매핑하는 수학 표현식입니다. 변환은 지표를 입력 데이터로 사용할 수 있으며 입력과 동일한 위치에서 계산 및 저장되어야 합니다. 엣지에서 계산하도록 지표 입력을 구성한 경우 AWS IoT SiteWise 는 엣지에서 관련 변환도 계산합니다.
+ 측정은 기본적으로 디바이스가 수집하여 AWS 클라우드로 전송하는 원시 데이터로 형식이 지정됩니다. 이 데이터를 로컬 디바이스에 저장하도록 자산 모델을 구성할 수 있습니다.

자산 속성에 대한 자세한 내용은 [데이터 속성 정의](asset-properties.md) 단원을 참조하세요.

 자산 모델을 만든 후 엣지에 맞게 구성할 수 있습니다. 엣지용 자산 모델 구성에 대한 자세한 내용은 [자산 모델 생성(콘솔)](create-asset-models.md#create-asset-model-console) 단원을 참조하세요.

**참고**  
자산 모델 및 대시보드는 10분마다 AWS 클라우드와 SiteWise Edge 게이트웨이 간에 자동으로 동기화됩니다. [SiteWise Edge 게이트웨이 관리](manage-gateways-ggv2.md)에서 수동으로 동기화할 수도 있습니다.

 AWS IoT SiteWise REST APIs 및 AWS Command Line Interface (AWS CLI)를 사용하여 SiteWise Edge 게이트웨이에서 엣지의 데이터를 쿼리할 수 있습니다. SiteWise Edge 게이트웨이에서 엣지에 있는 데이터를 쿼리하려면 먼저 다음 사전 조건을 충족해야 합니다.
+ REST API에 대한 자격 증명을 설정해야 합니다. 자격 증명 설정에 대한 자세한 내용은 [SiteWise Edge 게이트웨이 관리](manage-gateways-ggv2.md) 단원을 참조하세요.
+ SDK 엔드포인트가 SiteWise Edge 게이트웨이의 IP 주소를 가리켜야 합니다. 자세한 내용은 SDK 문서에서 확인할 수 있습니다. 예를 들어 *AWS SDK for Java 2.x 개발자 가이드*의 [사용자 지정 엔드포인트 지정](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/specifying-endpoints.html)을 참조하세요.
+ SiteWise Edge 게이트웨이 인증서를 등록해야 합니다. SiteWise Edge 게이트웨이 인증서 등록에 대한 자세한 내용은 SDK 설명서에서 확인할 수 있습니다. 예를 들어 *AWS SDK for Java 2.x 개발자 가이드*의 [Node.js에 인증서 번들 등록](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-registering-certs.html)을 참조하세요.

를 사용하여 데이터를 쿼리하는 방법에 대한 자세한 내용은 섹션을 AWS IoT SiteWise참조하세요[에서 데이터 쿼리 AWS IoT SiteWise](query-industrial-data.md).

# AWS IoT SiteWise Edge 게이트웨이에 데이터 소스 추가
<a name="add-data-sources"></a>

 AWS IoT SiteWise Edge 게이트웨이를 설정한 후 데이터 소스를 추가하고 구성하여 로컬 산업 장비에서 데이터를 수집할 수 있습니다 AWS IoT SiteWise. SiteWise Edge는 OPC UA를 비롯한 다양한 프로토콜과 파트너 데이터 소스를 통해 사용할 수 있는 기타 여러 프로토콜을 지원합니다. 이러한 소스를 사용하면 게이트웨이가 로컬 서버에 연결하고 산업 데이터를 검색할 수 있습니다. 데이터 소스를 구성하면 다양한 데이터 소스에서 데이터를 수집한 다음 데이터 스트림을 자산 속성과 연결하여 포괄적인 산업 자산 모델링 및 데이터 매핑을 수행할 수 있습니다 AWS IoT SiteWise.

**Topics**
+ [AWS IoT SiteWise Edge 게이트웨이용 OPC UA 데이터 소스](configure-sources-opcua.md)
+ [SiteWise Edge 게이트웨이의 파트너 데이터 소스](partner-data-sources.md)

# AWS IoT SiteWise Edge 게이트웨이용 OPC UA 데이터 소스
<a name="configure-sources-opcua"></a>

 AWS IoT SiteWise Edge 게이트웨이를 설정한 후 SiteWise Edge 게이트웨이가 로컬 산업 장비에서 데이터를 수집할 수 있도록 데이터 소스를 구성할 수 있습니다 AWS IoT SiteWise. 각 소스는 SiteWise Edge 게이트웨이가 산업 데이터 스트림을 연결하고 검색하는 OPC UA 서버와 같은 로컬 서버를 나타냅니다. SiteWise Edge 게이트웨이 설정에 대한 자세한 내용은 [자체 호스팅 SiteWise Edge 게이트웨이 생성](create-gateway-ggv2.md)을 참조하세요.

게이트웨이 유형인 MQTT 지원 V3 게이트웨이와 클래식 스트림인 V2 게이트웨이는 OPC UA 데이터 처리 방식에 영향을 미칩니다. 클래식 스트림, V2 게이트웨이에서 OPC UA 데이터 소스는 게이트웨이 IoT SiteWise 게시자 구성에 직접 추가됩니다. 각 데이터 소스는 게이트웨이와 결합되고 데이터 라우팅은 각 소스에 대해 개별적으로 구성됩니다. 반대로 MQTT 지원 V3 게이트웨이를 사용하면 OPC UA 데이터 소스가 MQTT 주제로 변환되고 중앙 집중식 대상을 통해 관리됩니다. 각 유형에 대한 자세한 내용은 [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 및 단원을 참조하십시오[클래식 스트림, AWS IoT SiteWise Edge용 V2 게이트웨이](classic-streams-v2-gateway.md).

**참고**  
AWS IoT SiteWise 는 소스를 추가하거나 편집할 때마다 SiteWise Edge 게이트웨이를 다시 시작합니다. SiteWise Edge 게이트웨이는 소스 구성을 업데이트하는 동안 데이터를 수집하지 않습니다. SiteWise Edge 게이트웨이를 다시 시작하는 시간은 SiteWise Edge 게이트웨이 소스의 태그 수에 따라 달라집니다. 다시 시작 시간은 몇 초(태그가 거의 없는 SiteWise Edge 게이트웨이)에서 몇 분(태그가 많은 SiteWise Edge 게이트웨이)에 이르기까지 다양할 수 있습니다.

소스를 생성한 후에는 데이터 스트림을 자산 속성과 연결할 수 있습니다. 자산을 만들고 사용하는 방법에 대한 자세한 내용은 [산업 자산 모델링](industrial-asset-models.md) 단원을 참조하십시오.

CloudWatch 지표를 확인하여 데이터 소스가 AWS IoT SiteWise에 연결되어 있는지 확인할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass Version 2 게이트웨이 지표](monitor-cloudwatch-metrics.md#gateway-metrics-ggv2) 단원을 참조하십시오.

현재는 다음 데이터 소스 프로토콜을 AWS IoT SiteWise 지원합니다.
+ [OPC UA](https://en.wikipedia.org/wiki/OPC_Unified_Architecture) – 산업 자동화를 위한 Machine-to-Machine(M2M) 통신 프로토콜입니다.

## 추가 산업 프로토콜 지원
<a name="additional-protocols"></a>

SiteWise Edge는 데이터 소스 파트너와의 통합을 통해 광범위한 산업 프로토콜을 지원합니다. 이러한 파트너십을 통해 200개 이상의 서로 다른 프로토콜과 연결할 수 있으며 다양한 산업 시스템과 디바이스를 수용할 수 있습니다.

사용 가능한 데이터 소스 파트너 목록은 섹션을 참조하세요[SiteWise Edge 게이트웨이 파트너 데이터 소스 옵션](connect-partner-data-source.md).

# SiteWise Edge에서 OPC UA 소스 설정
<a name="configure-opcua-source"></a>

 AWS IoT SiteWise 콘솔 또는 SiteWise Edge 게이트웨이 기능을 사용하여 OPC UA 소스를 정의하고 SiteWise Edge 게이트웨이에 추가하여 로컬 OPC UA 서버를 나타낼 수 있습니다.

**Topics**
+ [OPC UA 소스 구성(콘솔)](#config-opcua-source-console)
+ [OPC UA 소스 구성(AWS CLI)](#configure-opc-ua-source-cli)

## OPC UA 소스 구성(콘솔)
<a name="config-opcua-source-console"></a>

콘솔을 사용하여 다음 절차에 따라 OPC UA 소스를 구성할 수 있습니다.

**참고**  
경고: TQVs 중복되면 이중 충전이 발생할 수 있습니다.

**AWS IoT SiteWise 콘솔을 사용하여 OPC UA 소스를 구성하려면**

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. OPC UA 소스를 추가할 SiteWise Edge 게이트웨이를 선택합니다.

1. **데이터 소스 추가**를 선택합니다.

1. 소스 이름을 입력합니다.

1. 데이터 소스 서버의 **로컬 엔드포인트**를 입력합니다. 엔드포인트는 IP 주소 또는 호스트 이름일 수 있습니다. 로컬 엔드포인트에 포트 번호를 추가할 수도 있습니다. 로컬 엔드포인트를 예를 들면 **opc.tcp://203.0.113.0:49320**과 같습니다.

1. (선택 사항) **선택할 노드 ID**의 경우 노드 필터를 추가하여 AWS 클라우드에 수집되는 데이터 스트림을 제한합니다. 기본적으로 SiteWise Edge 게이트웨이는 서버의 루트 노드를 사용하여 모든 데이터 스트림을 수집합니다. 노드 필터를 사용하면 AWS IoT SiteWise에서 모델링하는 데이터에 대한 경로만 포함하여 SiteWise Edge 게이트웨이의 시작 시간과 CPU 사용량을 줄일 수 있습니다. 기본적으로 SiteWise Edge 게이트웨이는 `/Server/`로 시작하는 경로를 제외한 모든 OPC UA 경로를 업로드합니다. OPC UA 노드 필터를 정의하려면 노드 경로와 `*` 및 `**` 와일드카드 문자를 사용하면 됩니다. 자세한 내용은 [SiteWise Edge에서 OPC UA 노드 필터 사용](opc-ua-node-filters.md) 단원을 참조하십시오.

1. **대상은** MQTT 지원 V3 게이트웨이와 Classic 스트림 V2 게이트웨이 간에 다릅니다.
   + **클래식 스트림인 V2 게이트웨이 대상**은 소스와 1:1 관계를 갖습니다. 각 소스는 특정 대상으로 데이터를 전송합니다.
   + 허브 및 스포크 모델을 사용하면 여러 게이트웨이에서 여러 데이터 소스의 구성 및 관리를 중앙 집중화할 수 있으므로 **MQTT를 사용하는 V3 게이트웨이 대상**은 별도로 설정됩니다. V3 게이트웨이에서 대상을 설정하려면 섹션을 참조하세요[AWS IoT SiteWise 엣지 대상 이해](gw-destinations.md#source-destination).

------
#### [ Classic steams, V2 gateway destinations ]
   + **AWS IoT SiteWise 실시간** - 스토리지로 직접 데이터를 보내려면 AWS IoT SiteWise 선택합니다. 엣지에서 실시간으로 데이터를 수집하고 모니터링합니다.
   + **AWS IoT SiteWise Amazon S3를 사용하여 버퍼링** - Parquet 형식의 데이터를 Amazon S3로 전송한 다음 스토리지로 AWS IoT SiteWise 가져옵니다. 데이터를 배치로 수집하고 기록 데이터를 비용 효과적인 방식으로 저장하려면 이 옵션을 선택합니다. 원하는 Amazon S3 버킷 위치와 데이터를 Amazon S3에 업로드할 빈도를 구성할 수 있습니다. AWS IoT SiteWise에 수집한 후 데이터로 수행할 작업을 선택할 수도 있습니다. AWS IoT SiteWise 및 Amazon S3 모두에서 데이터를 사용할 수 있도록 선택하거나 로 가져온 후 Amazon S3에서 자동으로 삭제하도록 선택할 수 있습니다 AWS IoT SiteWise.
     + Amazon S3 버킷은 스테이징 및 버퍼링 메커니즘이며 Parquet 형식의 파일을 지원합니다.
     + **스토리지로 AWS IoT SiteWise 데이터 가져오기** 확인란을 선택하면 데이터가 먼저 Amazon S3에 업로드된 다음 AWS IoT SiteWise 스토리지에 업로드됩니다.
       + **Amazon S3에서 데이터 삭제** 확인란을 선택하면 SiteWise 스토리지로 가져온 후 Amazon S3에서 데이터가 삭제됩니다.
       + **Amazon S3에서 데이터 삭제** 확인란을 선택 취소하면 데이터가 Amazon S3와 SiteWise 스토리지 모두에 저장됩니다.
     + ** AWS IoT SiteWise 스토리지로 데이터 가져오기** 확인란을 선택 취소하면 데이터가 Amazon S3에만 저장됩니다. 데이터를 SiteWise 스토리지로 가져오지 않습니다.

      AWS IoT SiteWise 에서 제공하는 다양한 스토리지 옵션에 대한 자세한 내용을 [데이터 스토리지 관리](manage-data-storage.md) 섹션을 참조하세요. 요금 옵션에 대한 자세한 내용은 [AWS IoT SiteWise 요금](https://aws.amazon.com/iot-sitewise/pricing/)을 참조하세요.

      
   + **AWS IoT Greengrass 스트림 관리자** - AWS IoT Greengrass 스트림 관리자를 사용하여의 채널 AWS IoT 분석, Amazon Kinesis Data Streams의 스트림,의 자산 속성 AWS IoT SiteWise또는 Amazon Simple Storage Service(Amazon S3)의 객체와 같은 AWS 클라우드 대상으로 데이터를 전송합니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*[의 AWS IoT Greengrass 코어에서 데이터 스트림 관리를 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-data-streams.html).

      AWS IoT Greengrass 스트림의 이름을 입력합니다.

------
#### [ MQTT-enabled, V3 gateway destinations ]

   1. 관련 대상 추가에 [AWS IoT SiteWise Edge용 MQTT 지원 V3 게이트웨이](mqtt-enabled-v3-gateway.md) 대한 자세한 내용은 섹션을 참조하세요.

   1. 소스 대상을 추가한 후이 절차로 돌아갑니다.

------

1. **고급 구성** 창에서 다음을 수행할 수 있습니다.

   1. 소스 서버와 SiteWise Edge 게이트웨이 간의 연결 및 전송 중 데이터에 대해 **메시지 보안 모드**를 선택합니다. 이 필드는 OPC UA 보안 정책과 메시지 보안 모드의 조합입니다. OPC UA 서버에 지정한 것과 동일한 보안 정책 및 메시지 보안 모드를 선택합니다.

   1. 소스에 인증이 필요한 경우 **인증 구성** 목록에서 AWS Secrets Manager 암호를 선택합니다. SiteWise Edge 게이트웨이는 이 데이터 소스에 연결할 때 이 암호에 있는 인증 자격 증명을 사용합니다. 데이터 소스 인증에 사용하려면 SiteWise Edge 게이트웨이의 AWS IoT Greengrass 구성 요소에 보안 암호를 연결해야 합니다. 자세한 내용은 [SiteWise Edge에 대한 데이터 소스 인증 구성](configure-source-authentication-ggv2.md) 단원을 참조하십시오.
**작은 정보**  
데이터 서버에는 [**Allow anonymous login(익명 로그인 허용)**]이라는 옵션이 있을 수 있습니다. 이 옵션이 [**Yes(예)**]인 경우 원본에 인증이 필요하지 않습니다.

   1. (선택 사항) **데이터 스트림 접두사 활성화 - *선택 사항***을 선택하여 데이터 스트림 접두사를 활성화할 수 있습니다.

      1. **데이터 스트림 접두사**를 입력합니다. SiteWise Edge 게이트웨이는 이 접두사를 이 소스의 모든 데이터 스트림에 추가합니다. 데이터 스트림 접두사를 사용하여 서로 다른 소스에서 이름이 같은 데이터 스트림을 구분합니다. 각 데이터 스트림은 계정 내에서 고유한 이름을 가져야 합니다.

   1. (선택 사항) 지원되지 않는 OPC UA 데이터 유형을 AWS IoT SiteWise로 수집하기 전에 문자열로 변환하려면 **데이터 유형 변환** 옵션을 선택합니다. 간단한 데이터 형식의 배열 값을 JSON 문자열로 변환하고 DateTime 데이터 형식을 ISO 8601 문자열로 변환합니다. 자세한 내용은 [지원되지 않는 데이터 유형 변환](string-conversion.md) 단원을 참조하십시오.

   1. 사용자 정의 속성 그룹에 포함되지 않은 노드에 대해 **기본 데이터 변경 트리거**를 선택합니다. 기본 데이터 변경 트리거는 OPC UA 서버가 업데이트된 값을 게이트웨이로 전송하는 시기를 결정합니다. 다음 옵션 중 하나를 선택할 수 있습니다.
      + **상태** - 상태가 변경될 때만 데이터를 수신합니다.
      + **StatusValue** - 상태 또는 값이 변경될 때 데이터를 수신합니다.
      + **StatusValueTimestamp** - 상태, 값 또는 타임스탬프가 변경될 때 데이터를 수신합니다.

   1. (선택 사항) MQTT 지원 V3 게이트웨이에서 **검색 구성을** 사용하여 OPC UA 노드 검색 프로세스를 구성할 수 있습니다. 검색 구성은 이러한 옵션에 대한 이전 구성 재정의 파일 시스템을 게이트웨이를 다시 시작할 필요 없이 동적으로 업데이트되는 콘솔 기반 설정으로 대체합니다.
**참고**  
**기본 데이터 변경 트리거**에는 IoT SiteWise OPC UA 수집기 구성 요소의 버전 3.1.0 이상이 필요합니다. 자세한 내용은 [AWS IoT SiteWise 구성 요소의 버전 업데이트](manage-gateways-ggv2.md#update-component-version) 단원을 참조하십시오.

      1. **최대 동시 찾아보기 요청 수**에 OPC UA 서버가 동시에 처리할 수 있는 최대 찾아보기 요청 수를 입력합니다. 데이터 소스당 최대 500개의 동시 찾아보기 요청을 구성할 수 있습니다.

      1. **찾아보기 요청당 최대 노드 수**에 각 찾아보기 요청에서 OPC UA 서버로 보낼 최대 노드 수를 입력합니다. 찾아보기 요청당 최대 1,000개의 노드를 전송할 수 있습니다.

      1. OPC UA 서버의 구조를 탐색할 때 게이트웨이가 순환 참조에 멈춰 있지 않도록 **하려면 노드 트리 루프 방지**를 선택합니다. 이 옵션을 선택하면 게이트웨이는 방문 위치를 추적하여 서버 노드가 원형 패턴으로 서로를 참조할 때 발생할 수 있는 무한 루프를 방지합니다.

      1. **노드 순회 활성화**를 선택하면 게이트웨이가 OPC UA 서버의 전체 구조를 탐색하여 장비 및 디바이스에서 사용 가능한 모든 데이터 포인트를 검색할 수 있습니다. 선택하면 게이트웨이가 루트 수준 이상으로 장비의 데이터 조직을 탐색하여 모든 센서, 컨트롤 및 측정 지점을 자동으로 찾습니다.

      1. **정기 검색 활성화**를 선택하여 정기적으로 검색 작업을 자동으로 실행하여 OPC UA 서버 구조의 변경 사항을 감지합니다. 선택하면 게이트웨이가 새로 추가된 장비 또는 데이터 포인트를 지속적으로 모니터링하여 자동으로 감지되고 데이터 수집에 사용할 수 있도록 합니다.

         1. **정기 검색 간격**의 경우 정기 검색이 실행 중일 때 자동 검색 작업 간의 시간 간격을 설정합니다. 최소 주기적 검색 간격은 30초이고 최대 검색 간격은 30일입니다.

         1. **간격당 검색된 최대 노드**의 경우 검색 간격당 검색해야 하는 최대 노드 수를 설정합니다. 이렇게 하면 검색 작업 중에 게이트웨이와 OPC UA 서버 모두에서 로드를 제어할 수 있습니다.

   1. (선택 사항) **속성 그룹**의 경우 **새 그룹 추가**를 선택합니다.

      1. 속성 그룹의 **이름**을 입력합니다.

      1. **속성**의 경우:

         1. **노드 경로**의 경우 OPC UA 노드 필터를 추가하여 AWS IoT SiteWise에 업로드되는 OPC UA 경로를 제한합니다. 형식은 **선택할 노드 ID**와 유사합니다.

      1. **그룹 설정**에서 다음을 수행합니다.

         1. **데이터 품질 설정**에서 AWS IoT SiteWise 수집기가 수집할 데이터 품질 유형을 선택합니다.

         1. **스캔 모드 설정**의 경우 **스캔 모드**를 사용하여 표준 구독 속성을 구성합니다. **구독** 또는 **폴링**을 선택할 수 있습니다. 스캔 모드에 대한 자세한 내용은 [OPC UA를 사용하여 데이터 수집 범위 필터링](opcua-data-acquisition.md)을 참조하세요.

------
#### [ Subscribe ]

**모든 데이터 포인트를 보내려면**

            1. **구독**을 선택하고 다음을 설정합니다.

               1. **[데이터 변경 트리거](https://reference.opcfoundation.org/v104/Core/docs/Part4/7.17.2/)** - 데이터 변경 알림을 시작하는 조건입니다.

               1. **[구독 대기열 크기](https://reference.opcfoundation.org/v104/Core/docs/Part4/7.16/)** - 모니터링되는 항목에 대한 알림이 대기열에 저장되는 특정 지표에 대한 OPC UA 서버의 대기열 깊이입니다.

               1. **[구독 게시 간격](https://reference.opcfoundation.org/v104/Core/docs/Part4/5.13.2/)** - 구독이 생성될 때 지정된 게시 주기의 간격(밀리초)입니다.

               1. **스냅샷 간격 - *선택*** 사항 - AWS IoT SiteWise Edge가 안정적인 데이터 스트림을 수집하도록 하는 스냅샷 빈도 제한 시간 설정입니다.

               1. **스캔 속도** - SiteWise Edge 게이트웨이가 registers를 읽도록 하려는 속도입니다.는 SiteWise Edge 게이트웨이에 허용되는 최소 스캔 속도를 AWS IoT SiteWise 자동으로 계산합니다.

               1. **타임스탬프** - OPC UA 데이터 포인트에 포함할 타임스탬프입니다. 서버 타임스탬프 또는 디바이스의 타임스탬프를 사용할 수 있습니다.
**참고**  
IoT SiteWise OPC UA 수집기 구성 요소의 버전 2.5.0 이상을 사용합니다. 이전 버전에서 타임스탬프 기능을 사용하는 경우 구성 업데이트가 실패합니다. 자세한 내용은 [AWS IoT SiteWise 구성 요소의 버전 업데이트](manage-gateways-ggv2.md#update-component-version) 단원을 참조하십시오.

            1. **데드밴드 설정**에서 **데드밴드 유형**을 구성합니다. 데드밴드 유형은 소스가에 전송하는 데이터와 폐기하는 AWS IoT SiteWise데이터를 제어합니다. 데드밴드 설정에 대한 자세한 내용은 [OPC UA를 사용하여 데이터 수집 범위 필터링](opcua-data-acquisition.md)을 참조하세요.
               + **없음** – 연결된 서버가 이 속성 그룹에 대한 모든 데이터 포인트를 전송합니다.
               + **백분율** - 연결된 서버는 데이터 범위의 지정된 백분율을 벗어나는 데이터만 전송합니다. 이 범위는 각 노드에 대해 정의된 엔지니어링 단위 최소값 및 최대값을 기준으로 서버에서 계산합니다. 서버가 백분율 데드밴드를 지원하지 않거나 정의된 엔지니어링 단위가 없는 경우 게이트웨이는 아래에 제공된 최소값과 최대값을 사용하여 범위를 계산합니다.
               + **절대** - 연결된 서버는 특정 범위를 벗어나는 데이터만 전송합니다.

               1. **데드밴드 값**을 데드밴드에 대한 데이터 범위의 백분율로 설정합니다.

               1. (선택 사항) **최소 범위 - *선택 사항*** 및 **최대 범위 - *선택 사항***을 사용하여 데드밴드 범위의 최소값 및 최대값을 지정합니다.

------
#### [ Poll ]

**특정 간격으로 데이터 포인트를 보내려면**
            + **폴링**을 선택하고 다음을 설정합니다.

              1. **스캔 속도** - SiteWise Edge 게이트웨이가 registers를 읽도록 하려는 속도입니다.는 SiteWise Edge 게이트웨이에 허용되는 최소 스캔 속도를 AWS IoT SiteWise 자동으로 계산합니다.

              1. **타임스탬프** - OPC UA 데이터 포인트에 포함할 타임스탬프입니다. 서버 타임스탬프 또는 디바이스의 타임스탬프를 사용할 수 있습니다.
**참고**  
IoT SiteWise OPC UA 수집기 구성 요소의 버전 3.1.0 이상을 사용합니다. 이전 버전에서 타임스탬프 기능을 사용하는 경우 구성 업데이트가 실패합니다. 자세한 내용은 [AWS IoT SiteWise 구성 요소의 버전 업데이트](manage-gateways-ggv2.md#update-component-version) 단원을 참조하십시오.

**참고**  
**데드밴드 설정**은 **스캔 모드 설정**에서 **구독**을 선택한 경우에 적용됩니다.

------

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

## OPC UA 소스 구성(AWS CLI)
<a name="configure-opc-ua-source-cli"></a>

 AWS CLI를 사용하여 SiteWise Edge 게이트웨이에 대한 OPC UA 데이터 소스를 정의할 수 있습니다. 이렇게 하려면 OPC UA 기능 구성 JSON 파일을 생성하고 [update-gateway-capability-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/update-gateway-capability-configuration.html#) 명령을 사용하여 SiteWise Edge 게이트웨이 구성을 업데이트합니다. 단일 기능 구성에서 모든 OPC UA 소스를 정의해야 합니다.

------
#### [ MQTT-enabled, V3 gateway ]

이 기능에는 다음과 같은 네임스페이스가 있습니다.
+ `iotsitewise:opcuacollector:3`

```
{
  "sources": [
    {
      "name": "string",
      "endpoint": {
        "certificateTrust": {
          "type": "TrustAny" | "X509",
          "certificateBody": "string",
          "certificateChain": "string",
        },
        "endpointUri": "string",
        "securityPolicy": "NONE" | "BASIC128_RSA15" | "BASIC256" | "BASIC256_SHA256" | "AES128_SHA256_RSAOAEP" | "AES256_SHA256_RSAPSS",
        "messageSecurityMode": "NONE" | "SIGN" | "SIGN_AND_ENCRYPT",
        "identityProvider": {
          "type": "Anonymous" | "Username",
          "usernameSecretArn": "string"
        },
        "nodeFilterRules": [
          {
            "action": "INCLUDE",
            "definition": {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          }
        ]
      },
      "measurementDataStreamPrefix": "string",
      "typeConversions": {
        "array": "JsonArray",
        "datetime": "ISO8601String"
        },
      "destination": {
        {
          "type":"MQTT"
        }           
      },
      "defaultPropertyGroupConfig": {
        "dataChangeTrigger": "STATUS" | "STATUS_VALUE" | "STATUS_VALUE_TIMESTAMP"
      },
      "discoveryConfig": {
        "enableNodeTraversal": true | false,
        "avoidNodeTreeLoops": true | false,
        "maxConcurrentBrowseRequests": integer,
        "maxNodesPerBrowseRequest": integer,
        "periodicDiscovery": {
          "interval": "string",
          "maxNodesDiscoveredPerInterval": integer
        }
      },
      "propertyGroups": [
        {
          "name": "string",
          "nodeFilterRuleDefinitions": [
            {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          ],
          "deadband": {
            "type": "PERCENT" | "ABSOLUTE",
            "value": double,
            "eguMin": double,
            "eguMax": double,
            "timeoutMilliseconds": integer
          },
          "scanMode": {
            "type": "EXCEPTION" | "POLL",
            "rate": integer,
            "timestampToReturn": "SOURCE_TIME" | "SERVER_TIME"
          },
          "dataQuality": {
            "allowGoodQuality": true | false,
            "allowBadQuality": true | false,
            "allowUncertainQuality": true | false
          },
          "subscription": {
            "dataChangeTrigger": "STATUS" | "STATUS_VALUE" | "STATUS_VALUE_TIMESTAMP",
            "queueSize": integer,
            "publishingIntervalMilliseconds": integer,
            "snapshotFrequencyMilliseconds": integer
          }  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Classic streams, V2 gateway ]

이 기능에는 다음과 같은 네임스페이스가 있습니다.
+ `iotsitewise:opcuacollector:2`

요청 구문

```
{
  "sources": [
    {
      "name": "string",
      "endpoint": {
        "certificateTrust": {
          "type": "TrustAny" | "X509",
          "certificateBody": "string",
          "certificateChain": "string",
        },
        "endpointUri": "string",
        "securityPolicy": "NONE" | "BASIC128_RSA15" | "BASIC256" | "BASIC256_SHA256" | "AES128_SHA256_RSAOAEP" | "AES256_SHA256_RSAPSS",
        "messageSecurityMode": "NONE" | "SIGN" | "SIGN_AND_ENCRYPT",
        "identityProvider": {
          "type": "Anonymous" | "Username",
          "usernameSecretArn": "string"
        },
        "nodeFilterRules": [
          {
            "action": "INCLUDE",
            "definition": {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          }
        ]
      },
      "measurementDataStreamPrefix": "string",
      "typeConversions": {
        "array": "JsonArray",
        "datetime": "ISO8601String"
        },
      "destination": {
        "type": "StreamManager",
        "streamName": "string",
        "streamBufferSize": integer,                      
      },
      "propertyGroups": [
        {
          "name": "string",
          "nodeFilterRuleDefinitions": [
            {
              "type": "OpcUaRootPath",
              "rootPath": "string"
            }
          ],
          "deadband": {
            "type": "PERCENT" | "ABSOLUTE",
            "value": double,
            "eguMin": double,
            "eguMax": double,
            "timeoutMilliseconds": integer
          },
          "scanMode": {
            "type": "EXCEPTION" | "POLL",
            "rate": integer,
            "timestampToReturn": "SOURCE_TIME" | "SERVER_TIME"
          },
          "dataQuality": {
            "allowGoodQuality": true | false,
            "allowBadQuality": true | false,
            "allowUncertainQuality": true | false
          },
          "subscription": {
            "dataChangeTrigger": "STATUS" | "STATUS_VALUE" | "STATUS_VALUE_TIMESTAMP",
            "queueSize": integer,
            "publishingIntervalMilliseconds": integer,
            "snapshotFrequencyMilliseconds": integer
          }  
        }  
      ]  
    }  
  ]  
}
```

------

### 요청 본문
<a name="opcua-request-body"></a>

`sources`  
다음 정보를 포함하는 각 OPC UA 소스 정의 구조의 목록입니다.    
`name`  
고유하고 친숙한 원본 이름입니다.  
`endpoint`  
다음 정보가 포함된 엔드포인트 구조입니다.    
`certificateTrust`  
다음 정보가 포함된 인증서 신뢰 정책 구조:    
`type`  
원본에 대한 인증서 신뢰 모드입니다. 다음 중 하나를 선택합니다.  
+ `TrustAny` – SiteWise Edge 게이트웨이는 OPC UA 소스에 연결될 때 모든 인증서를 신뢰합니다.
+ `X509` – SiteWise Edge 게이트웨이는 OPC UA 소스에 연결될 때 X.509 인증서를 신뢰합니다. 이 옵션을 선택하는 경우, `certificateTrust`에 `certificateBody`을 정의해야 합니다. `certificateTrust`에 `certificateChain`을 정의할 수도 있습니다.  
`certificateBody`  
(선택 사항) X.509 인증서의 본문입니다.  
`certificateTrust`에서 `type`에 대해 `X509`을 선택하는 경우, 이 필드는 필수입니다.  
`certificateChain`  
(선택 사항) X.509 인증서에 대한 신뢰 체인입니다.  
이 필드는 `certificateTrust`에서 `type`에 대해 `X509`를 선택할 때만 사용합니다.  
`endpointUri`  
OPC UA 소스의 로컬 엔드포인트입니다. 로컬 엔드포인트를 예를 들면 `opc.tcp://203.0.113.0:49320`과 같습니다.  
`securityPolicy`  
OPC UA 소스에서 읽은 메시지를 보호할 수 있도록 사용할 보안 정책입니다. 다음 중 하나를 선택합니다.  
+ `NONE` – SiteWise Edge 게이트웨이는 OPC UA 소스의 메시지를 보호하지 않습니다. 다른 보안 정책을 선택하는 것이 좋습니다. 이 옵션을 선택하는 경우, `messageSecurityMode`에 대해 `NONE`을 선택해야 합니다
+ `BASIC256_SHA256`— `Basic256Sha256` 보안 정책.
+ `AES128_SHA256_RSAOAEP`— `Aes128_Sha256_RsaOaep` 보안 정책.
+ `AES256_SHA256_RSAPSS`— `Aes256_Sha256_RsaPss` 보안 정책.
+ `BASIC128_RSA15` – (더 이상 사용되지 않음) `Basic128Rsa15` 보안 정책은 더 이상 안전한 것으로 간주되지 않으므로 OPC UA 사양에서 더 이상 사용되지 않습니다. 다른 보안 정책을 선택하는 것이 좋습니다. 자세한 내용은 [Profile SecurityPolicy – Basic128Rsa15](https://profiles.opcfoundation.org/profile/1532)를 참조하세요.
+ `BASIC256` – (더 이상 사용되지 않음) `Basic256` 보안 정책은 더 이상 안전한 것으로 간주되지 않으므로 OPC UA 사양에서 더 이상 사용되지 않습니다. 다른 보안 정책을 선택하는 것이 좋습니다. 자세한 내용은 [SecurityPolicy – Basic256](https://profiles.opcfoundation.org/profile/1536)을 참조하세요.
이외의 `NONE` 보안 정책을 선택하는 경우 `SIGN` 또는 `SIGN_AND_ENCRYPT` 정책을 선택해야 합니다`messageSecurityMode`. 또한 SiteWise Edge 게이트웨이를 신뢰하도록 소스 서버를 구성해야 합니다. 자세한 내용은 [AWS IoT SiteWise Edge 게이트웨이를 신뢰하도록 OPC UA 서버 설정](enable-source-trust.md) 단원을 참조하십시오.  
`messageSecurityMode`  
OPC UA 소스에 대한 연결을 보호하는 데 사용할 메시지 보안 모드입니다. 다음 중 하나를 선택합니다.  
+ `NONE` – SiteWise Edge 게이트웨이는 OPC UA 소스에 대한 연결을 보호하지 않습니다. 다른 메시지 보안 모드를 선택하는 것이 좋습니다. 이 옵션을 선택하는 경우, `securityPolicy`에 대해 `NONE`을 선택해야 합니다
+ `SIGN` – SiteWise Edge 게이트웨이와 OPC UA 소스 간 전송 중 데이터는 서명되지만 암호화되지는 않습니다.
+ `SIGN_AND_ENCRYPT` – 게이트웨이와 OPC UA 소스 간 전송 중 데이터는 서명되고 암호화됩니다.
`NONE` 이외의 메시지 보안 모드를 선택하는 경우 `NONE` 이외의 `securityPolicy`를 선택해야 합니다. 또한 SiteWise Edge 게이트웨이를 신뢰하도록 소스 서버를 구성해야 합니다. 자세한 내용은 [AWS IoT SiteWise Edge 게이트웨이를 신뢰하도록 OPC UA 서버 설정](enable-source-trust.md) 단원을 참조하십시오.  
`identityProvider`  
다음 정보가 포함된 자격 증명 공급자 구조입니다.    
`type`  
원본에 필요한 인증 보안 인증의 유형입니다. 다음 중 하나를 선택합니다.  
+ `Anonymous` – 원본에 연결하려면 인증이 필요하지 않습니다.
+ `Username` – 원본에 연결하려면 사용자 이름과 암호가 필요합니다. 이 옵션을 선택하는 경우, `identityProvider`에 `usernameSecretArn`을 정의해야 합니다.  
`usernameSecretArn`  
(선택 사항) AWS Secrets Manager 보안 암호의 ARN입니다. SiteWise Edge 게이트웨이는 이 소스에 연결할 때 이 암호에 있는 인증 자격 증명을 사용합니다. 소스 인증에 사용하려면 SiteWise Edge 게이트웨이의 IoT SiteWise 커넥터에 암호를 첨부해야 합니다. 자세한 내용은 [SiteWise Edge에 대한 데이터 소스 인증 구성](configure-source-authentication-ggv2.md) 단원을 참조하십시오.  
`identityProvider`에서 `type`에 대해 `Username`을 선택하는 경우, 이 필드는 필수입니다.  
`nodeFilterRules`  
 AWS 클라우드로 전송할 OPC UA 데이터 스트림 경로를 정의하는 노드 필터 규칙 구조의 목록입니다. 노드 필터를 사용하면 AWS IoT SiteWise에서 모델링하는 데이터에 대한 경로만 포함하여 SiteWise Edge 게이트웨이의 시작 시간과 CPU 사용량을 줄일 수 있습니다. 기본적으로 SiteWise Edge 게이트웨이는 `/Server/`로 시작하는 경로를 제외한 모든 OPC UA 경로를 업로드합니다. OPC UA 노드 필터를 정의하려면 노드 경로와 `*` 및 `**` 와일드카드 문자를 사용하면 됩니다. 자세한 내용은 [SiteWise Edge에서 OPC UA 노드 필터 사용](opc-ua-node-filters.md) 단원을 참조하십시오.  
각 목록 구조에는 다음 정보가 포함되어야 합니다.    
`action`  
이 노드 필터 규칙에 대한 작업입니다. 다음과 같은 옵션을 선택할 수 있습니다.  
+ `INCLUDE` – SiteWise Edge 게이트웨이에는 이 규칙과 일치하는 데이터 스트림만 포함됩니다.  
`definition`  
다음 정보가 포함된 노드 필터 규칙 구조:    
`type`  
이 규칙의 노드 필터 경로 유형입니다. 다음과 같은 옵션을 선택할 수 있습니다.  
+ `OpcUaRootPath` – SiteWise Edge 게이트웨이는 OPC UA 경로 계층의 루트에 대해 이 노드 필터 경로를 평가합니다.  
`rootPath`  
OPC UA 경로 계층의 루트에 대해 평가할 노드 필터 경로입니다. 이 경로는 `/`로 시작되어야 합니다.  
`measurementDataStreamPrefix`  
원본의 모든 데이터 스트림 앞에 추가할 문자열입니다. SiteWise Edge 게이트웨이는 이 접두사를 이 소스의 모든 데이터 스트림에 추가합니다. 데이터 스트림 접두사를 사용하여 서로 다른 소스에서 이름이 같은 데이터 스트림을 구분합니다. 각 데이터 스트림은 계정 내에서 고유한 이름을 가져야 합니다.  
`typeConversions`  
지원되지 않는 OPC UA 데이터 유형에 사용할 수 있는 변환 유형입니다. 각 데이터 유형은 문자열로 변환됩니다. 자세한 내용은 [지원되지 않는 데이터 유형 변환](string-conversion.md) 단원을 참조하십시오.    
`array`  
문자열로 변환되는 단순 배열 데이터 유형입니다. 다음과 같은 옵션을 선택할 수 있습니다.  
+ `JsonArray` - 단순 배열 데이터 유형을 문자열로 변환하도록 선택했음을 나타냅니다.  
`datetime`  
문자열로 변환되는 DateTime 데이터 유형입니다. 다음과 같은 옵션을 선택할 수 있습니다.  
+ `ISO8601String` – ISO 8601 데이터 유형을 문자열로 변환하도록 선택했음을 나타냅니다.  
`destination`  
OPC UA 태그의 대상에 대한 구성입니다. 클래식 스트림, v2 및 MQTT 지원 V3 게이트웨이는 대상에 대해 구성이 다릅니다.    
`type`  
목적지의 유형입니다.  
`streamName` - *Classic 스트림, V2 게이트웨이에만 해당*  
 스트림의 이름입니다. 스트림 이름은 고유해야 합니다.  
`streamBufferSize` - *Classic 스트림, V2 게이트웨이에만 해당*  
스트림 버퍼의 크기입니다. 이는 OPC UA 소스의 데이터 흐름을 관리하는 데 중요합니다.  
`defaultPropertyGroupConfig` *- MQTT 지원, V3 게이트웨이만* 해당  
(선택 사항) 기본 속성 그룹에 대한 구성입니다. 기본 속성 그룹에는 사용자 정의 속성 그룹에 포함되지 않은 모든 노드가 포함됩니다.    
`dataChangeTrigger`  
기본 속성 그룹에서 사용할 기본 데이터 변경 트리거입니다. 유효한 값은 `STATUS_VALUE_TIMESTAMP`, `STATUS_VALUE`또는 `STATUS`입니다.
`defaultPropertyGroupConfig` 에는 IoT SiteWise OPC UA 수집기 구성 요소의 버전 3.1.0 이상이 필요합니다. 자세한 내용은 [AWS IoT SiteWise 구성 요소의 버전 업데이트](manage-gateways-ggv2.md#update-component-version) 단원을 참조하십시오.  
`discoveryConfig` *- MQTT 지원, V3 게이트웨이만* 해당  
(선택 사항) OPC UA 노드 검색 프로세스에 대한 구성입니다.    
`enableNodeTraversal`  
데이터 소스의 노드 필터로 정의된 루트 노드의 하위 노드를 계속 통과할지 여부를 지정합니다. 로 설정하면 루트 노드에서 `false`검색이 중지됩니다.  
`avoidNodeTreeLoops`  
OPC UA 노드 브라우징 프로세스 중에 무한 루프를 피할지 여부를 지정합니다. 로 설정하면 게이트웨이는 방문한 노드`true`를 추적하여 순환 참조를 방지합니다.  
`maxConcurrentBrowseRequests`  
OPC UA 서버가 동시에 처리할 수 있는 최대 동시 찾아보기 요청 수입니다. 유효한 범위는 1\$1500입니다.  
`maxNodesPerBrowseRequest`  
각 찾아보기 요청에서 OPC UA 서버로 전송할 최대 노드 수입니다. 유효한 범위는 1\$11,000입니다.  
`periodicDiscovery`  
고정된 간격으로 검색을 주기적으로 실행하기 위한 구성입니다. 이 구성이 제공되면 주기적 검색이 활성화됩니다.    
`interval`  
정기 검색 작업 사이의 시간입니다. `m`를 분, `h`를 시간,를 일 `d` 동안 사용할 수 있습니다. 예: `90m` 또는 `1h`. 최소 간격은 30초입니다.  
`maxNodesDiscoveredPerInterval`  
검색 간격당 검색해야 하는 최대 노드 수입니다. 이렇게 하면 게이트웨이와 OPC UA 서버 모두에서 로드를 제어할 수 있습니다.
`periodicDiscovery` 에는 IoT SiteWise OPC UA 수집기 구성 요소의 버전 3.1.0 이상이 필요합니다. 자세한 내용은 [AWS IoT SiteWise 구성 요소의 버전 업데이트](manage-gateways-ggv2.md#update-component-version) 단원을 참조하십시오.
검색이 무한 반복되는 경우를 활성화합니다`avoidNodeTreeLoops`. `aws.iot.SiteWiseOpcUaCollector` 구성 요소 아래의 CloudWatch 로그에서 검색 진행 상황을 모니터링합니다.

`propertyGroups`  
(선택 사항) 프로토콜에서 요청한 `deadband` 및 `scanMode`을 정의하는 속성 그룹 목록입니다.    
`name`  
속성 그룹의 이름입니다. 고유 식별자여야 합니다.  
`deadband`  
`deadband` 값은 데이터가 클라우드로 전송되기 전에 발생해야 하는 데이터 포인트 값의 최소 변화를 정의합니다. 여기에는 다음 정보가 포함됩니다.    
`type`  
지원되는 데드밴드 유형입니다. 다음과 같은 옵션을 선택할 수 있습니다.  
+ `ABSOLUTE` - 클라우드로 전송하기에 충분히 중요한 데이터 포인트를 고려하는 데 필요한 최소 절대 변화를 지정하는 고정 값입니다.
+ `PERCENT` – 필요한 최소 변화를 마지막으로 전송된 데이터 포인트 값의 백분율로 지정하는 동적 값입니다. 이러한 유형의 데드밴드는 데이터 값이 시간이 지남에 따라 크게 달라질 때 유용합니다.  
`value`  
데드밴드의 값입니다. `type`가 `ABSOLUTE`인 경우 이 값은 단위가 없는 이중 값입니다. `type`가 `PERCENT`인 경우 이 값은 `1`과 `100` 사이의 두 배입니다.  
`eguMin`  
(선택 사항) `PERCENT` 데드밴드를 사용할 때의 엔지니어링 단위 최소값입니다. OPC UA 서버에 엔지니어링 단위가 구성되어 있지 않은 경우 이를 설정합니다.  
`eguMax`  
(선택 사항) `PERCENT` 데드밴드를 사용할 때의 엔지니어링 단위 최대값입니다. OPC UA 서버에 엔지니어링 단위가 구성되어 있지 않은 경우 이를 설정합니다.  
`timeoutMilliseconds`  
타임아웃까지 남은 시간 (밀리초). 최소값은 `100`입니다.  
`scanMode`  
`scanMode` 구조에는 다음 정보가 포함되어 있습니다.    
`type`  
`scanMode`의 지원되는 유형입니다. 허용되는 값은 `POLL` 및 `EXCEPTION`입니다.  
`rate`  
스캔 모드의 샘플링 간격입니다.  
`timestampToReturn`  
타임스탬프의 소스입니다. 다음과 같은 옵션을 선택할 수 있습니다.  
+ `SOURCE_TIME` - 디바이스의 타임스탬프를 사용합니다.
+ `SERVER_TIME` - 서버의 타임스탬프를 사용합니다.
IoT SiteWise OPC UA 수집기 구성 요소의 `TimestampToReturn` 버전 2.5.0 이상에서를 사용합니다. 이전 버전에서이 기능을 사용하는 경우 구성 업데이트가 실패합니다. 자세한 내용은 [AWS IoT SiteWise 구성 요소의 버전 업데이트](manage-gateways-ggv2.md#update-component-version) 단원을 참조하십시오.  
`nodeFilterRuleDefinitions`  
(선택 사항) 속성 그룹에 포함할 노드 경로 목록입니다. 속성 그룹은 겹칠 수 없습니다. 이 필드에 값을 지정하지 않으면 그룹에 루트 아래의 모든 경로가 포함되므로 추가 속성 그룹을 생성할 수 없습니다. `nodeFilterRuleDefinitions` 구조에는 다음 정보가 포함되어 있습니다.    
`type`  
지원되는 유형은 `OpcUaRootPath`뿐입니다. `rootPath` 값이 OPC UA 브라우징 스페이스의 루트에 상대적인 경로임을 지정합니다.  
`rootPath`  
속성 그룹에 포함할 경로(루트에 대한 경로)를 지정하는 쉼표로 구분된 목록입니다.

### Classic 스트림, V2 게이트웨이(AWS CLI)에 대한 추가 기능 구성 예제
<a name="opc-ua-source-example-cli"></a>

다음 예시에서는 JSON 파일에 저장된 페이로드에서 OPC UA SiteWise Edge 게이트웨이 기능 구성을 정의합니다.

```
aws iotsitewise update-gateway-capability-configuration \
--capability-namespace "iotsitewise:opcuacollector:2" \
--capability-configuration file://opc-ua-configuration.json
```

**Example : OPC UA 소스 구성**  
다음 `opc-ua-configuration.json` 파일은 안전하지 않은 기본 OPC UA 소스 구성을 정의합니다.  

```
{
    "sources": [
        {
            "name": "Wind Farm #1",
            "endpoint": {
                "certificateTrust": {
                    "type": "TrustAny"
                },
                "endpointUri": "opc.tcp://203.0.113.0:49320",
                "securityPolicy": "NONE",
                "messageSecurityMode": "NONE",
                "identityProvider": {
                    "type": "Anonymous"
                },
                "nodeFilterRules": []
            },
            "measurementDataStreamPrefix": ""
        }
    ]
}
```

**Example : 정의된 속성 그룹이 있는 OPC UA 소스 구성**  
다음 `opc-ua-configuration.json` 파일은 정의된 속성 그룹이 있는 안전하지 않은 기본 OPC UA 소스 구성을 정의합니다.  

```
{
    "sources": [
        {
            "name": "source1",
            "endpoint": {
                "certificateTrust": {
                    "type": "TrustAny"
                },
                "endpointUri": "opc.tcp://10.0.0.9:49320",
                "securityPolicy": "NONE",
                "messageSecurityMode": "NONE",
                "identityProvider": {
                    "type": "Anonymous"
                },
                "nodeFilterRules": [
                    {
                        "action": "INCLUDE",
                        "definition": {
                            "type": "OpcUaRootPath",
                            "rootPath": "/Utilities/Tank"
                        }
                    }
                ]
            },
            "measurementDataStreamPrefix": "propertyGroups",
            "propertyGroups": [
                 {
                     "name": "Deadband_Abs_5",
                     "nodeFilterRuleDefinitions": [
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Temperature/TT-001"
                         },
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Temperature/TT-002"
                         }
                     ],
                     "deadband": {
                         "type":"ABSOLUTE",
                         "value": 5.0,
                         "timeoutMilliseconds": 120000
                     }
                 },
                 {
                     "name": "Polling_10s",
                     "nodeFilterRuleDefinitions": [
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Pressure/PT-001"
                         }
                     ],
                     "scanMode": {
                         "type": "POLL",
                         "rate": 10000
                     }
                 },
                 {
                     "name": "Percent_Deadband_Timeout_90s",
                     "nodeFilterRuleDefinitions": [
                         {
                             "type": "OpcUaRootPath",
                             "rootPath": "/Utilities/Tank/Flow/FT-*"
                         }
                     ],
                     "deadband": {
                         "type":"PERCENT",
                         "value": 5.0,
                         "eguMin": -100,
                         "eguMax": 100,
                         "timeoutMilliseconds": 90000
                     }
                 }
             ]
        }
    ]
}
```

**Example : 속성을 포함한 OPC UA 소스 구성**  
`opc-ua-configuration.json`에 대한 다음 JSON 예시는 다음 속성을 가진 OPC UA 소스 구성을 정의합니다.  
+ 모든 인증서를 신뢰합니다.
+ `BASIC256` 보안 정책을 사용하여 메시지를 보호합니다.
+ `SIGN_AND_ENCRYPT` 모드를 사용하여 연결을 보호합니다.
+ Secrets Manager 암호에 저장된 인증 보안 인증을 사용합니다.
+ 경로가 `/WindFarm/2/WindTurbine/`로 시작하는 데이터 스트림을 제외한 데이터 스트림을 필터링합니다.
+ 모든 데이터 스트림 경로의 첫 부분에 `/Washington`을 추가하여 다른 영역에서 이 “Wind Farm \$12”와 “Wind Farm \$12”를 구분합니다.

```
{
    "sources": [
        {
            "name": "Wind Farm #2",
            "endpoint": {
                "certificateTrust": {
                    "type": "TrustAny"
                },
                "endpointUri": "opc.tcp://203.0.113.1:49320",
                "securityPolicy": "BASIC256",
                "messageSecurityMode": "SIGN_AND_ENCRYPT",
                "identityProvider": {
                    "type": "Username",
                    "usernameSecretArn": "arn:aws:secretsmanager:region:123456789012:secret:greengrass-windfarm2-auth-1ABCDE"
                },
                "nodeFilterRules": [
                  {
                      "action": "INCLUDE",
                      "definition": {
                          "type": "OpcUaRootPath",
                          "rootPath": "/WindFarm/2/WindTurbine/"
                    }
                  }
                ]
            },
            "measurementDataStreamPrefix": "/Washington"
        }
    ]
}
```

**Example : 인증서 신뢰가 있는 OPC UA 소스 구성**  
`opc-ua-configuration.json`에 대한 다음 JSON 예시는 다음 속성을 가진 OPC UA 소스 구성을 정의합니다.  
+ 지정된 X.509 인증서를 신뢰합니다.
+ `BASIC256` 보안 정책을 사용하여 메시지를 보호합니다.
+ `SIGN_AND_ENCRYPT` 모드를 사용하여 연결을 보호합니다.

```
{
    "sources": [
        {
            "name": "Wind Farm #3",
            "endpoint": {
                "certificateTrust": {
                    "type": "X509",
                    "certificateBody": "-----BEGIN CERTIFICATE-----
          MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
 WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
 EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
 MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
 WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
 HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
 BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
 k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
 ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
 AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
 KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
 EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
 3rrszlaEXAMPLE=
          -----END CERTIFICATE-----",
                    "certificateChain": "-----BEGIN CERTIFICATE-----
          MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
 WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
 EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
 MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
 WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
 HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
 BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
 k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
 ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
 AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
 KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
 EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
 3rrszlaEXAMPLE=
          -----END CERTIFICATE-----"
                },
                "endpointUri": "opc.tcp://203.0.113.2:49320",
                "securityPolicy": "BASIC256",
                "messageSecurityMode": "SIGN_AND_ENCRYPT",
                "identityProvider": {
                    "type": "Anonymous"
                },
                "nodeFilterRules": []
              },
            "measurementDataStreamPrefix": ""
              
        }
    ]
}
```

# AWS IoT SiteWise Edge 게이트웨이를 신뢰하도록 OPC UA 서버 설정
<a name="enable-source-trust"></a>

OPC UA 소스를 구성할 때 **없음** `messageSecurityMode` 이외의를 선택하는 경우 소스 서버가 AWS IoT SiteWise Edge 게이트웨이를 신뢰하도록 활성화해야 합니다. SiteWise Edge 게이트웨이는 소스 서버에 필요할 수 있는 인증서를 생성합니다. 프로세스는 소스 서버에 따라 다릅니다. 자세한 내용은 서버에 대한 설명서를 참조하세요.

다음 절차에서는 기본 단계를 간략하게 설명합니다.

**OPC UA 서버에서 SiteWise Edge 게이트웨이를 신뢰하도록 설정하려면 다음을 수행하세요.**

1. OPC UA 서버를 구성하기 위한 인터페이스를 엽니다.

1. OPC UA 서버 관리자의 사용자 이름과 암호를 입력합니다.

1. 인터페이스에서 **신뢰할 수 있는 클라이언트**를 찾은 다음, **AWS IoT SiteWise 게이트웨이 클라이언트**를 선택합니다.

1. **신뢰**를 선택하세요.

## OPC UA 클라이언트 인증서 내보내기
<a name="export-opc-ua-client-certificate"></a>

일부 OPC UA 서버는 SiteWise Edge 게이트웨이를 신뢰하기 위해 OPC UA 클라이언트 인증서 파일에 액세스해야 합니다. OPC UA 서버에 적용되는 경우, 다음 절차를 사용하여 SiteWise Edge 게이트웨이에서 OPC UA 클라이언트 인증서를 내보낼 수 있습니다. 그런 다음 OPC UA 서버에서 인증서를 가져올 수 있습니다.

**소스에 대한 OPC UA 클라이언트 인증서 파일을 내보내려면**

1. 다음 명령을 실행하여 인증서 파일이 있는 디렉터리로 변경합니다. *sitewise-work*를 *aws.iot.SiteWiseEdgeCollectorOpcua* Greengrass 작업 폴더의 로컬 스토리지 경로로 바꾸고 *source-name*을 데이터 소스의 이름으로 바꿉니다.

   기본적으로 Greengrass 작업 폴더는 Linux의 경우 */greengrass/v2/work/aws.iot.SiteWiseEdgeCollectorOpcua*이고의 경우 *C:/greengrass/v2/work/aws.iot.SiteWiseEdgeCollectorOpcua*입니다Microsoft Windows.

   ```
   cd /sitewise-work/source-name/opcua-certificate-store
   ```

1. 이 소스에 대한 SiteWise Edge 게이트웨이의 OPC UA 클라이언트 인증서가 `aws-iot-opcua-client.pfx` 파일에 있습니다.

   다음 명령을 실행하여 인증서를 `aws-iot-opcua-client-certificate.pem`라는 `.pem` 파일로 내보냅니다

   ```
   keytool -exportcert -v -alias aws-iot-opcua-client -keystore aws-iot-opcua-client.pfx -storepass amazon -storetype PKCS12 -rfc > aws-iot-opcua-client-certificate.pem
   ```

1. SiteWise Edge 게이트웨이에서 OPC UA 서버로 인증서 파일(`aws-iot-opcua-client-certificate.pem`)을 전송합니다.

   그러려면 SSH 프로토콜을 사용하여 파일을 전송하는 `scp` 프로그램과 같은 일반적인 소프트웨어를 사용하면 됩니다. 자세한 내용은 *Wikipedia*에서 [비밀번호 복사](https://en.wikipedia.org/wiki/Secure_copy)를 참조하세요.
**참고**  
SiteWise Edge 게이트웨이가 Amazon Elastic Compute Cloud(Amazon EC2)에서 실행 중이며 SiteWise Edge 게이트웨이에 처음 연결하는 경우, 연결하기 위한 필수 조건을 구성해야 합니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [SSH를 사용하여 Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)을 참조하세요.

1. SiteWise Edge 게이트웨이를 신뢰하기 위해 OPC UA 서버에서 인증서 파일(`aws-iot-opcua-client-certificate.pem`)을 가져옵니다. 사용하는 원본 서버에 따라 단계가 다를 수 있습니다. 서버 설명서를 참조하세요.

# OPC UA를 사용하여 데이터 수집 범위 필터링
<a name="opcua-data-acquisition"></a>

스캔 모드 및 데드밴드 범위를 사용하여 OPC UA 소스로 데이터를 수집하는 방식을 제어할 수 있습니다. 이러한 기능을 통해 수집할 데이터의 종류와 서버 및 SiteWise Edge 게이트웨이가 이 정보를 교환하는 방법과 시기를 제어할 수 있습니다.

## 품질을 기반으로 데이터 수집 또는 필터링
<a name="opcua-data-quality"></a>

OPC UA 소스에서 수집되는 데이터를 제어하도록 데이터 품질 설정을 구성할 수 있습니다. 데이터 소스에는 전송 시 품질 등급이 메타데이터로 포함됩니다. 다음 옵션 중 하나 또는 전부를 선택할 수 있습니다.
+ `Good`
+ `Bad`
+ `Uncertain`

### NaN 또는 null 값 처리
<a name="nan-null"></a>

SiteWise Edge는 NaN 및 null 값의 수집 및 처리를 지원합니다.
+ *NaN(숫자가 아님):* 정의되지 않았거나 대표할 수 없는 숫자 결과를 나타냅니다.
+ *Null:* 누락된 데이터를 나타냅니다.

IoT SiteWise OPC UA 수집기는 BAD 또는 UNCERTAIN 품질로 NaN 및 Null 값을 캡처합니다. 이러한 특수 값은 로컬 스트림에 기록되므로 보다 포괄적인 데이터 수집이 가능합니다.

## 스캔 모드로 데이터 수집 빈도 제어
<a name="opcua-scanmode"></a>

OPC UA 스캔 모드를 구성하여 OPC UA 소스에서 데이터를 수집하는 방식을 제어할 수 있습니다. 구독 또는 폴링 모드를 선택할 수 있습니다.
+ 구독 모드 – OPC UA 소스는 스캔 속도에 정의된 빈도로 SiteWise Edge 게이트웨이로 보낼 데이터를 수집합니다. 서버는 값이 변경된 경우에만 데이터를 전송하므로 이 빈도는 SiteWise Edge 게이트웨이가 데이터를 수신하는 최대 빈도입니다.
+ 폴링 모드 – SiteWise Edge 게이트웨이는 스캔 속도에 정의된 설정된 빈도로 OPC UA 소스를 폴링합니다. 서버는 값 변경 여부에 관계없이 데이터를 전송하므로 SiteWise Edge 게이트웨이는 항상 이 간격으로 데이터를 수신합니다.
**참고**  
폴링 모드 옵션은 이 소스의 데드밴드 설정보다 우선 적용됩니다.

## 데드밴드 범위를 사용하여 OPC UA 데이터 수집 필터링
<a name="opcua-deadbanding"></a>

 OPC UA 소스 속성 그룹에 데드밴드를 적용하여 특정 데이터를 AWS 클라우드로 보내는 대신 필터링하여 폐기할 수 있습니다. 데드밴드는 OPC UA 소스에서 들어오는 데이터 값의 예상 변동 기간을 지정합니다. 값이이 기간 내에 있으면 OPC UA 서버가 해당 값을 AWS 클라우드로 전송하지 않습니다. 데드밴드 필터링을 사용하여 처리하여 AWS 클라우드로 전송하는 데이터의 양을 줄일 수 있습니다. SiteWise Edge 게이트웨이에 대한 OPC UA 소스를 설정하는 방법은 [AWS IoT SiteWise Edge 게이트웨이용 OPC UA 데이터 소스](configure-sources-opcua.md) 섹션을 참조하세요.

**참고**  
 서버는 데드밴드에서 지정한 기간 내에 있는 모든 데이터를 삭제합니다. 이러한 폐기된 데이터는 복구할 수 없습니다.

### 데드밴드 유형
<a name="deadband-types"></a>

 OPC UA 서버 속성 그룹에 두 가지 유형의 데드밴드를 지정할 수 있습니다. 이를 통해 AWS 클라우드로 전송할 데이터의 양과 폐기할 데이터의 양을 선택할 수 있습니다.
+ 백분율 — 측정값의 예상 변동 비율을 사용하여 기간을 지정합니다. 서버는이 백분율에서 정확한 기간을 계산하고를 초과하는 데이터를 AWS 클라우드로 전송합니다. 예를 들어 화씨 -100도에서 화씨 \$1100도 범위의 센서에 2% 데드밴드 값을 지정하면 값이 화씨 4도 이상으로 변경될 때 AWS 클라우드로 데이터를 보내도록 서버에 지시합니다.
**참고**  
 소스 서버에서 엔지니어링 단위를 정의하지 않는 경우 이 기간의 최소 및 최대 데드밴드 값을 선택적으로 지정할 수 있습니다. 엔지니어링 단위 범위가 제공되지 않은 경우 OPC UA 서버는 측정 데이터 유형의 전체 범위를 기본적으로 사용합니다.
+ 절대 — 정확한 단위를 사용하여 기간을 지정합니다. 예를 들어 센서에서 데드밴드 값을 2로 지정하면 값이 2단위 이상 변경될 때 AWS 클라우드로 데이터를 보내도록 서버에 지시합니다. 정상 작동 중에 변동이 정기적으로 예상되는 동적 환경에는 절대 데드밴딩을 사용할 수 있습니다.

### 데드밴드 타임아웃
<a name="deadband-timeout"></a>

 데드밴드 타임아웃 설정을 선택적으로 구성할 수 있습니다. 이 타임아웃이 지나면 OPC UA 서버는 예상 데드밴드 변동 범위 내에 있더라도 현재 측정값을 전송합니다. 제한 시간 설정을 사용하면 값이 정의된 데드밴드 기간을 초과하지 않더라도 AWS IoT SiteWise 가 항상 안정적인 데이터 스트림을 수집하도록 할 수 있습니다.

# SiteWise Edge에서 OPC UA 노드 필터 사용
<a name="opc-ua-node-filters"></a>

SiteWise Edge 게이트웨이에 대한 OPC UA 데이터 소스를 정의할 때 노드 필터를 정의할 수 있습니다. 노드 필터를 사용하면 SiteWise Edge 게이트웨이가 클라우드로 보내는 데이터 스트림 경로를 제한할 수 있습니다. 노드 필터를 사용하면 AWS IoT SiteWise에서 모델링하는 데이터에 대한 경로만 포함하여 SiteWise Edge 게이트웨이의 시작 시간과 CPU 사용량을 줄일 수 있습니다. 기본적으로 SiteWise Edge 게이트웨이는 `/Server/`로 시작하는 경로를 제외한 모든 OPC UA 경로를 업로드합니다. 노드 필터에 `*` 및 `**` 와일드카드 문자를 사용하여 하나의 필터에 여러 데이터 스트림 경로를 포함할 수 있습니다. SiteWise Edge 게이트웨이에 대한 OPC UA 소스를 설정하는 방법은 [AWS IoT SiteWise Edge 게이트웨이용 OPC UA 데이터 소스](configure-sources-opcua.md) 섹션을 참조하세요.

**참고**  
AWS IoT SiteWise 는 소스를 추가하거나 편집할 때마다 SiteWise Edge 게이트웨이를 다시 시작합니다. SiteWise Edge 게이트웨이는 소스 구성을 업데이트하는 동안 데이터를 수집하지 않습니다. SiteWise Edge 게이트웨이를 다시 시작하는 시간은 SiteWise Edge 게이트웨이 소스의 태그 수에 따라 달라집니다. 다시 시작 시간은 몇 초(태그가 거의 없는 SiteWise Edge 게이트웨이)에서 몇 분(태그가 많은 SiteWise Edge 게이트웨이)에 이르기까지 다양할 수 있습니다.

다음 표에는 OPC UA 데이터 소스를 필터링하는 데 사용할 수 있는 와일드카드가 나열되어 있습니다.


**OPC UA 노드 필터 와일드카드**  

| 와일드카드 | 설명 | 
| --- | --- | 
| \$1 | 데이터 스트림 경로의 단일 레벨과 일치합니다. | 
| \$1\$1 | 데이터 스트림 경로의 여러 레벨을 일치합니다. | 

**참고**  
광범위한 필터로 소스를 구성한 다음 나중에 보다 제한적인 필터를 사용하도록 소스를 변경하면는 새 필터와 일치하지 않는 데이터 저장을 AWS IoT SiteWise 중지합니다.

**Example : 노드 필터를 사용한 시나리오**  
다음의 가상 데이터 스트림을 고려하세요.  
+ `/WA/Factory 1/Line 1/PLC1`
+ `/WA/Factory 1/Line 1/PLC2`
+ `/WA/Factory 1/Line 2/Counter1`
+ `/WA/Factory 1/Line 2/PLC1`
+ `/OR/Factory 1/Line 1/PLC1`
+ `/OR/Factory 1/Line 2/Counter2`
이전 데이터 스트림을 사용해 노드 필터를 정의하여 OPC UA 소스에서 포함할 데이터를 제한할 수 있습니다.  
+ 이 예제에서 모든 노드를 선택하려면 `/` 또는 `/**/`를 사용합니다. `**` 와일드카드 문자가 있는 여러 디렉터리 또는 폴더를 포함할 수 있습니다.
+ 모든 `PLC` 데이터 스트림을 선택하려면 `/*/*/*/PLC*` 또는 `/**/PLC*`을 사용합니다.
+ 이 예제에서 모든 카운터를 선택하려면 `/**/Counter*` 또는 `/*/*/*/Counter*`를 사용합니다.
+ `Line 2`의 모든 카운터를 선택하려면 `/**/Line 2/Counter*`를 사용합니다.

# 지원되지 않는 데이터 유형 변환
<a name="string-conversion"></a>

선택적으로 단순 배열 및 DateTime 데이터 형식에 AWS IoT SiteWise 대해에서 데이터 형식 변환을 활성화합니다. AWS IoT SiteWise 모든 OPC UA 데이터 형식을 지원하지는 않습니다. 지원되지 않는 데이터를 AWS IoT Greengrass 데이터 스트림으로 보내면 해당 데이터가 손실됩니다. 그러나 지원되지 않는 기본 데이터 형식을 문자열로 변환하면 데이터를 삭제 AWS IoT SiteWise 하지 않고 로 수집할 수 있습니다.는 나중에 필요한 경우 자체 함수를 사용하여 문자열을 다시 원래 데이터 유형 다운스트림으로 변환할 수 있도록 변환된 데이터를 AWS IoT SiteWise 직렬화합니다.

언제든지 데이터 소스에 대한 데이터 유형 변환 설정을 업데이트할 수 있으며 각 데이터 소스에는 고유한 설정이 있을 수 있습니다.

에 데이터 소스를 추가하면 **고급 구성**의 **데이터 유형 변환** 아래에 두 개의 확인란 AWS IoT SiteWise Console이 있습니다. 문자열로 변환할 데이터 유형을 지정할 수 있습니다.

또한 IoT SiteWise OPC UA 수집기는 엣지에서 NaN 또는 null 값을 수락할 수 있습니다.
+ 간단한 데이터 유형의 배열 값을 JSON 문자열로 변환
+ DateTime 값을 ISO 8601 문자열로 변환

## 사전 조건
<a name="string-conversion-prereq"></a>
+ [IoT SiteWise OPC UA 수집기](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-opcua-collector-component.html)의 버전 2.5.0 이상을 사용합니다.

## 제한 사항
<a name="string-conversion-limits"></a>

다음은 AWS IoT SiteWise에서 OPC UA 데이터 유형을 문자열로 변환하는 데 따르는 제한 사항입니다.
+ 복잡한 데이터 유형 변환은 지원되지 않습니다.
+ 변환 후 문자열 제한은 1,024바이트입니다. 문자열이 1024바이트보다 길면가 문자열을 거부합니다 AWS IoT SiteWise.

# SiteWise Edge에 대한 데이터 소스 인증 구성
<a name="configure-source-authentication-ggv2"></a>

OPC UA 서버에 연결하기 위해 인증 자격 증명이 필요한 경우 AWS Secrets Manager 를 사용하여 SiteWise Edge 게이트웨이에 보안 암호를 생성하고 배포할 수 있습니다.는 디바이스에서 보안 암호를 AWS Secrets Manager 암호화하여 사용자 이름과 암호를 사용해야 할 때까지 안전하게 유지합니다. AWS IoT Greengrass 보안 암호 관리자 구성 요소에 대한 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [보안 암호 관리자](https://docs.aws.amazon.com/greengrass/v2/developerguide/secret-manager-component.html)를 참조하세요.

Secrets Manager 보안 암호에 대한 액세스 관리에 대한 자세한 내용은 다음을 참조하세요.
+ [AWS Secrets Manager 보안 암호에 대한 권한이 있는 사용자.](https://docs.aws.amazon.com/secretsmanager/latest/userguide/determine-acccess_examine-iam-policies.html)
+ [ 계정 내에서 요청이 허용되는지 또는 거부되는지 여부를 결정합니다](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow).

## 1단계: 소스 인증 암호 만들기
<a name="create-secrets-ggv2"></a>

 AWS Secrets Manager 를 사용하여 데이터 소스에 대한 인증 암호를 생성할 수 있습니다. 암호에서 데이터 소스에 대한 인증 세부 정보를 포함하는 **username** 및 **password** 키-값 쌍을 정의합니다.

**보안 암호(콘솔) 생성**

1. [AWS Secrets Manager 콘솔](https://console.aws.amazon.com/secretsmanager/)로 이동합니다.

1. **새 보안 암호 저장**을 선택합니다.

1. **암호 유형**에서 **다른 암호 유형**을 선택합니다.

1. **키/값 페어**에서 다음을 수행합니다.

   1. 첫 번째 입력 상자에 **username**을 입력하고 두 번째 입력 상자에 사용자 이름을 입력합니다.

   1. **Add row(행 추가)**를 선택합니다.

   1. 첫 번째 입력 상자에 **password**를 입력하고 두 번째 입력 상자에 암호를 입력합니다.

1. **암호화 키**로 **aws/secretsmanager**를 선택하고 **다음**을 선택합니다.

1. **새 암호 저장** 페이지에서 **암호 이름**을 입력합니다.

1. (선택 사항) 이 암호를 식별하는 데 도움이 되는 **설명**을 입력하고 **다음**을 선택합니다.

1. (선택 사항) **새 암호 저장** 페이지에서 **자동 교체**를 켤 수 있습니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [비밀번호 교체](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)를 참조하세요.

1. 교체 일정을 지정합니다.

1. 이 암호를 교체할 수 있는 Lambda 함수를 선택한 후 **다음**을 선택합니다.

1. 보안 구성을 검토한 다음 **저장**을 선택합니다.

SiteWise Edge 게이트웨이가 상호 작용할 수 있는 권한을 부여하려면 SiteWise Edge 게이트웨이 AWS Secrets Manager의 IAM 역할이 `secretsmanager:GetSecretValue` 작업을 허용해야 합니다. **Greengrass 코어 디바이스**를 사용하여 IAM 정책을 검색할 수 있습니다. IAM 정책 업데이트에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [IAM 정책 편집](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)을 참조하세요.

**Example 정책**  
*secret-arn*을 이전 단계에서 생성한 암호의 Amazon 리소스 이름(ARN)으로 변경합니다. 보안 암호의 ARN을 가져오는 방법에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [에서 보안 암호 찾기 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_search-secret.html)를 참조하세요.    
****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement":[
  {
     "Action":[
        "secretsmanager:GetSecretValue"
     ],
     "Effect":"Allow",
     "Resource":[
        "arn:aws:secretsmanager:us-east-1:123456789012:secret/*"
     ]
  }
]
}
```

## 2단계: SiteWise Edge 게이트웨이 디바이스에 암호 배포
<a name="deploy-secrets-ggv2"></a>

 AWS IoT SiteWise 콘솔을 사용하여 SiteWise Edge 게이트웨이에 보안 암호를 배포할 수 있습니다.

**암호를 업데이트하려면(콘솔) 다음을 수행하세요.**

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 탐색 창에서 **게이트웨이**를 선택합니다.

1. **게이트웨이** 목록에서 대상 SiteWise Edge 게이트웨이를 선택합니다.

1. **게이트웨이 구성** 섹션에서 **Greengrass 코어 디바이스** 링크를 선택하여 SiteWise Edge 게이트웨이와 연결된 AWS IoT Greengrass 코어를 엽니다.

1. 탐색 창에서 **배포**를 선택합니다.

1. 대상 배포를 선택한 다음 **수정**을 선택합니다.

1. **대상 지정** 페이지에서 **다음**을 선택합니다.

1. **구성 요소 선택** 페이지의 **공용 구성 요소** 섹션에서 **선택한 구성 요소만 표시**를 끕니다.

1. **AWS.Greengrass.SecretManager** 구성 요소를 검색하여 선택한 후 **다음**을 선택합니다.

1. **선택한 구성 요소** 목록에서 **aws.greengrass.SecretManager** 구성 요소를 선택한 다음 **구성 요소 구성**을 선택합니다.

1. **병합할 구성** 필드에 다음 JSON 객체를 추가합니다.
**참고**  
*secret-arn*을 이전 단계에서 생성한 암호의 ARN으로 변경합니다. 보안 암호의 ARN을 가져오는 방법에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [에서 보안 암호 찾기 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_search-secret.html)를 참조하세요.

   ```
   {
   "cloudSecrets":[
     {
        "arn":"secret-arn"
     }
   ]
   }
   ```

1. **확인**을 선택합니다.

1. **다음**을 선택합니다.

1. **구성 고급 설정** 페이지에서 **다음**을 선택합니다.

1. **배포 구성을 검토한 다음 배포**를 선택합니다.

## 3단계: 인증 구성 추가
<a name="add-authentication-configurations"></a>

 AWS IoT SiteWise 콘솔을 사용하여 SiteWise Edge 게이트웨이에 인증 구성을 추가할 수 있습니다.

**인증 구성을 추가하려면(콘솔) 다음을 수행하세요.**

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. **게이트웨이** 목록에서 대상 SiteWise Edge 게이트웨이를 선택합니다.

1. **데이터 소스** 목록에서 대상 데이터 소스를 선택한 다음 **편집**을 선택합니다.

1. **데이터 소스 추가** 페이지에서 **고급 구성**을 선택합니다.

1. **인증 구성**의 경우 이전 단계에서 배포한 암호를 선택합니다.

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

# SiteWise Edge 게이트웨이의 파트너 데이터 소스
<a name="partner-data-sources"></a>

Edge 게이트웨이를 사용하는 경우 파트너 데이터 소스를 SiteWise AWS IoT SiteWise Edge 게이트웨이에 연결하고 SiteWise Edge 게이트웨이 및 AWS 클라우드의 파트너로부터 데이터를 수신할 수 있습니다. 이러한 파트너 데이터 소스는 AWS 와 파트너 간의 파트너십을 통해 개발된 AWS IoT Greengrass 구성 요소입니다. 파트너 데이터 소스를 추가하면 AWS IoT SiteWise 가 이 구성 요소를 생성하여 SiteWise Edge 게이트웨이에 배포합니다.

**참고**  
각 게이트웨이의 각 파트너에 대해 하나의 데이터 소스를 추가할 수 있습니다.

파트너 데이터 소스를 추가하려면 다음을 수행합니다.

1. [SiteWise Edge에 파트너 데이터 소스 추가](cpa-add-source.md)

1. 파트너의 웹 포털로 이동하여 SiteWise Edge 게이트웨이에 연결되도록 파트너 데이터 소스를 구성합니다.

**Topics**
+ [보안](#cpa-security)
+ [SiteWise Edge 게이트웨이Docker에 설정](cpa-install-docker.md)
+ [SiteWise Edge에 파트너 데이터 소스 추가](cpa-add-source.md)
+ [SiteWise Edge 게이트웨이 파트너 데이터 소스 옵션](connect-partner-data-source.md)

## 보안
<a name="cpa-security"></a>

 AWS, 고객 및 파트너 간의 [공동 책임 모델의](https://aws.amazon.com/compliance/shared-responsibility-model/) 일환으로 다음은 보안의 다양한 측면을 담당하는 사람을 설명합니다.

**고객의 책임**  
+ 파트너를 심사합니다.
+ 파트너에게 부여된 네트워크 액세스를 구성합니다.
+ SiteWise Edge 게이트웨이 머신 리소스(CPU, 메모리 및 파일 시스템)의 합리적인 사용 모니터링.

**AWS 책임**  
+ 파트너가 필요로 하는 리소스를 제외한 고객 AWS 클라우드 리소스에서 파트너를 격리합니다. 이 경우에는 AWS IoT SiteWise 수집입니다.
+ 파트너 솔루션을 SiteWise Edge 게이트웨이 컴퓨터 리소스(CPU 및 메모리)의 합리적인 사용으로 제한.

**파트너의 책임**  
+ 보안 기본값을 사용합니다.
+ 패치 및 기타 적절한 업데이트를 통해 시간이 지나도 솔루션을 안전하게 유지합니다.
+ 고객 데이터의 기밀을 유지합니다.

# SiteWise Edge 게이트웨이Docker에 설정
<a name="cpa-install-docker"></a>

AWS IoT SiteWise 는 다양한 플랫폼 및 환경에서 SiteWise Edge 애플리케이션을 실행할 수 있는 Docker 이미지를 제공합니다. 이 Docker 이미지는 산업 장비에서 AWS 클라우드로 데이터를 수집, 처리 및 전송하는 데 필요한 모든 구성 요소와 종속성을 캡슐화합니다. Docker 이미지를 사용하면 서버, 엣지 디바이스 또는 클라우드 기반 컨테이너 서비스와 같은 Docker 호환 호스트에서 SiteWise Edge 애플리케이션을 배포하고 실행할 수 있습니다.

파트너 데이터 소스를 추가하려면 로컬 디바이스에 [Docker Engine](https://docs.docker.com/engine/) 1.9.1 이상을 설치해야 합니다.

**참고**  
버전 20.10은 SiteWise Edge 게이트웨이 소프트웨어와 함께 작동하는 것으로 확인된 최신 버전입니다.

## Docker가 설치되었는지 확인
<a name="cpa-install-docker-verify"></a>

Docker가 설치되었는지 확인하려면 SiteWise Edge 게이트웨이에 연결된 터미널에서 다음 명령을 실행합니다.

```
docker info
```

명령이 `docker is not recognized` 결과를 반환하거나 이전 버전의 Docker가 설치된 경우 계속하기 전에 [Docker Engine을 설치합니다](https://docs.docker.com/engine/install/).

## Docker 설정
<a name="cpa-install-docker-setup"></a>

Docker 컨테이너 구성 요소를 실행하는 시스템 사용자에게 루트 또는 관리자 권한이 있거나 루트가 아닌 사용자 또는 관리자가 아닌 사용자로 실행Docker하도록를 구성해야 합니다.

Linux 디바이스에서는 `docker` 그룹에 `ggc_user` 사용자를 추가하여 없이 Docker 명령을 호출해야 합니다`sudo`.

`ggc_user`또는 Docker 컨테이너 구성 요소를 실행하는 데 사용하는 루트가 아닌 사용자를 `docker` 그룹에 추가하려면 다음 명령을 실행합니다.

```
sudo usermod -aG docker ggc_user
```

자세한 내용은 [Docker엔진의 Linux 설치 후 단계를 참조하세요](https://docs.docker.com/engine/install/linux-postinstall/).

# SiteWise Edge에 파트너 데이터 소스 추가
<a name="cpa-add-source"></a>

파트너 데이터 소스를 SiteWise Edge 게이트웨이에 연결하려면 이를 데이터 소스로 추가합니다. 데이터 소스로 추가하면 AWS IoT SiteWise 가 SiteWise Edge 게이트웨이에 프라이빗 AWS IoT Greengrass 구성 요소를 배포합니다.

## 사전 조건
<a name="cpa-add-prereqs"></a>

파트너 데이터 소스를 추가하려면 다음을 수행해야 합니다.
+ EasyEdge 및 CloudRail의 경우 파트너와 계정을 생성한 다음 계정을 결합합니다.
+ [SiteWise Edge 게이트웨이Docker에 설정](cpa-install-docker.md)

## 파트너 데이터 소스를 사용하여 SiteWise Edge 게이트웨이 생성
<a name="cpa-add-create-gateway"></a>

새 SiteWise Edge 게이트웨이를 만들려면 [자체 호스팅 SiteWise Edge 게이트웨이 생성](create-gateway-ggv2.md)의 단계를 완료하세요. SiteWise Edge 게이트웨이를 만든 후에는 [기존 SiteWise Edge 게이트웨이에 파트너 데이터 소스 추가](#cpa-existing-gateway)의 단계에 따라 파트너 데이터 소스를 추가하세요.

## 기존 SiteWise Edge 게이트웨이에 파트너 데이터 소스 추가
<a name="cpa-existing-gateway"></a>

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. 파트너 데이터 소스를 연결하려는 SiteWise Edge 게이트웨이를 선택합니다.

1. **데이터 소스**에서 **데이터 소스 추가**를 선택합니다.

1. **데이터 소스 추가** 화면에서 **소스 유형**을 선택하여 SiteWise Edge 게이트웨이를 연결하는 파트너를 선택합니다. 각 데이터 소스에는 고유한 구성 옵션이 있습니다. 데이터 소스에는 AWS 소스와 파트너 소스의 두 가지 카테고리가 있습니다.

   파트너 데이터 소스를 사용하여 게이트웨이당 하나의 소스를 선택할 수 있습니다. 데이터 소스 파트너 통합 옵션 목록은 [SiteWise Edge 게이트웨이 파트너 데이터 소스 옵션](connect-partner-data-source.md) 섹션을 참조하세요. 최대 100개의 OPC UA 데이터 소스(AWS 소스)를 추가할 수 있습니다. OPC UA 데이터 소스를 시작하려면 [AWS IoT SiteWise Edge 게이트웨이용 OPC UA 데이터 소스](configure-sources-opcua.md) 섹션을 참조하세요.

1. 소스 이름을 입력합니다.

1. 아래에서 데이터 소스의 탭을 선택하고 구성 절차를 따릅니다.

------
#### [ CloudRail ]

   대부분의 CloudRail 구성은 SiteWise Edge 게이트웨이의 데이터 소스를 저장한 후 CloudRail 포털에서 수행됩니다. 그러나 연결에 권한을 부여해야 합니다.

**참고**  
CloudRail 연결은 Linux에서만 사용할 수 있습니다.

   1. [CloudRail 계정을 생성](https://devices.cloudrail.com/signup)하여 AWS IoT SiteWise에 대한 연결을 시작합니다.

   1. Docker가 게이트웨이에 설치되어 있는지 확인합니다. 자세한 내용은 [SiteWise Edge 게이트웨이Docker에 설정](cpa-install-docker.md) 단원을 참조하십시오.

   1. **액세스 및 배포 권한 부여** 계약을 읽은 다음 **권한 부여**를 선택합니다. 확인란을 선택하면 AWS 파트너에게 데이터 소스에 대한 액세스 권한이 부여되고 AWS 가 파트너의 구성 요소에 배포할 수 있습니다.

**참고**  
CloudRail 포털 내에 **측정 접두사 – *선택 사항***이 설정됩니다.

**참고**  
파트너 소프트웨어는 AWS 파트너가 개발, 유지 관리 및 지원합니다. AWS 는 인터페이스, 구성 또는 소프트웨어에 대해 책임을 지지 않습니다.

   자세한 내용은 [CloudRail](connect-partner-data-source.md#cp-cloudrail) 단원을 참조하십시오.

------
#### [ EasyEdge ]

   대부분의 EasyEdge 구성은 SiteWise Edge 게이트웨이의 데이터 소스를 저장한 후 EasyEdge 포털에서 수행됩니다. 그러나 연결에 권한을 부여해야 합니다.

**참고**  
EasyEdge 연결은 Linux에서만 사용할 수 있습니다.

   1. [EasyEdge 계정을 생성](https://accounts.easyedge.io/signup?partner=aws)하여 AWS IoT SiteWise에 대한 연결을 시작합니다.

   1. Docker가 게이트웨이에 설치되어 있는지 확인합니다. 자세한 내용은 [SiteWise Edge 게이트웨이Docker에 설정](cpa-install-docker.md) 단원을 참조하십시오.

   1. **액세스 및 배포 권한 부여** 계약을 읽은 다음 **권한 부여**를 선택합니다. 확인란을 선택하면 AWS 파트너에게 데이터 소스에 대한 액세스 권한이 부여되고 AWS 가 파트너의 구성 요소에 배포할 수 있습니다.

**참고**  
EasyEdge 포털 내에 **측정 접두사 – *선택 사항***이 설정됩니다.

**참고**  
파트너 소프트웨어는 AWS 파트너가 개발, 유지 관리 및 지원합니다. AWS 는 인터페이스, 구성 또는 소프트웨어에 대해 책임을 지지 않습니다.

   자세한 내용은 [EasyEdge](connect-partner-data-source.md#cp-easyedge) 단원을 참조하십시오.

------
#### [ Litmus Edge ]

   두 가지 방법으로 Litmus 구성을 활성화할 수 있습니다. Litmus Edge Manager 포털의 정보를 사용하여 AWS IoT SiteWise 를 통해 Litmus Edge를 직접 활성화합니다. 또는 Litmus Edge Manager를 통해 AWS IoT SiteWise 에 대해 Litmus Edge를 수동으로 활성화할 수 있습니다.

**참고**  
Litmus Edge 연결은 Linux에서만 사용할 수 있습니다.

    

**에서 활성화 코드를 사용하여 Litmus Edge를 활성화하려면 AWS IoT SiteWise**

    AWS IoT SiteWise Console에 Litmus Edge 활성화 코드가 있는 Litmus Edge 데이터 소스를 추가할 때 이 절차를 사용합니다.

   1. **코드를 사용하여 지금 활성화**를 선택합니다. 추가 구성 옵션이 나타납니다.

   1. Litmus Edge를 SiteWise Edge 게이트웨이에 연결하려면 Litmus Edge Manager로 들어갑니다. 자세한 내용은 Litmus Edge Manager 설명서의 [3a단계: 데이터 및 디바이스 관리 엔드포인트 설정](https://docs.litmus.io/edgemanager/quickstart-guide/activate-an-edge-device/step-3-activation-request)을 참조하세요.

   1. Litmus Edge Manager 활성화할 활성화 코드 제공 Litmus Edge AWS IoT SiteWise

   1. 선택적으로 **Litmus Edge Manager CA 인증서**와 AWS IoT SiteWise 함께를 제공합니다. 인증서는 Litmus Edge가 권한 부여되지 않은 Litmus Edge Manager에서 활성화되지 않도록 합니다.

   1. Docker가 게이트웨이에 설치되어 있는지 확인합니다. 자세한 내용은 [SiteWise Edge 게이트웨이Docker에 설정](cpa-install-docker.md) 단원을 참조하십시오.
**참고**  
AWS IoT SiteWise 는 파트너 애플리케이션을 Docker 컨테이너로 배포합니다. 애플리케이션은 Litmus Edge Manager를 통해 Litmus Edge Docker 컨테이너를 관리할 수 있도록 `NET_ADMIN` 기능과 함께 배포됩니다. Litmus Edge는 디바이스에서 실행하기 위해 이 권한 있는 액세스를 필요로 합니다. Litmus Edge Docker 요구 사항에 대한 자세한 내용은 Litmus Edge 설명서의 *QuickStart 가이드*에서 [Docker 설치](https://docs.litmus.io/litmusedge-v1/quickstart-guide/installation-and-deployments/docker-installation)를 참조하세요.

   1. **액세스 및 배포 권한 부여** 계약을 읽은 다음 **권한 부여**를 선택합니다. 확인란을 선택하면 AWS 파트너에게 데이터 소스에 대한 액세스 권한이 부여되고 AWS 가 파트너의 구성 요소에 배포할 수 있습니다.

    

**Litmus Edge를 통해 수동으로 활성화하려면 다음을 수행하세요.**

   1. **나중에 Litmus Edge에서 활성화**를 선택합니다.

   1. Docker가 게이트웨이에 설치되어 있는지 확인합니다. 자세한 내용은 [SiteWise Edge 게이트웨이Docker에 설정](cpa-install-docker.md) 단원을 참조하십시오.
**참고**  
AWS IoT SiteWise 는 파트너 애플리케이션을 Docker 컨테이너로 배포합니다. 애플리케이션은 Litmus Edge Manager를 통해 Litmus Edge Docker 컨테이너를 관리할 수 있도록 `NET_ADMIN` 기능과 함께 배포됩니다. Litmus Edge는 디바이스에서 실행하기 위해 이 권한 있는 액세스를 필요로 합니다. Litmus Edge Docker 요구 사항에 대한 자세한 내용은 Litmus Edge 설명서의 *QuickStart 가이드*에서 [Docker 설치](https://docs.litmus.io/litmusedge-v1/quickstart-guide/installation-and-deployments/docker-installation)를 참조하세요.

   1. **액세스 및 배포 권한 부여** 계약을 읽은 다음 **권한 부여**를 선택합니다. 확인란을 선택하면 AWS 파트너에게 데이터 소스에 대한 액세스 권한이 부여되고 AWS 가 파트너의 구성 요소에 배포할 수 있습니다.

   1. 배포가 완료되면 Litmus Edge *QuickStart Guide* 설명서의 [Litmus Edge 웹 UI 액세스](https://docs.litmus.io/litmusedge/quickstart-guide/access-the-litmus-edge-web-ui) 지침을 따릅니다.

**참고**  
파트너 소프트웨어는 AWS 파트너가 개발, 유지 관리 및 지원합니다. AWS 는 인터페이스, 구성 또는 소프트웨어에 대해 책임을 지지 않습니다.

   자세한 내용은 [Litmus Edge](connect-partner-data-source.md#cp-litmus) 단원을 참조하십시오.

------

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

# SiteWise Edge 게이트웨이 파트너 데이터 소스 옵션
<a name="connect-partner-data-source"></a>

AWS IoT SiteWise 를 사용하면 산업 장비, 센서 및 기타 타사 시스템과 같은 다양한 파트너 데이터 소스에서 데이터를 연결하고 수집할 수 있습니다. 파트너 데이터 소스를 연결하려면 데이터를 전송할 데이터 소스 구성, 필요한 권한 및 인증 AWS IoT SiteWise설정, 자산 모델에 데이터 매핑 등 몇 가지 단계를 따라야 합니다. 이 프로세스를 통해 파트너 데이터가 AWS IoT SiteWise 환경에 원활하게 통합되어 다른 데이터 소스와 함께 모니터링하고 분석할 수 있습니다.

이 섹션에서는 SiteWise Edge 게이트웨이에서 타사 데이터 소스 통합에 사용할 수 있는 파트너를 나열합니다. 아래 정보를 사용하여 파트너 데이터 소스를 구성하세요.

**참고**  
각 게이트웨이의 각 파트너에 대해 하나의 데이터 소스를 추가할 수 있습니다.

## CloudRail
<a name="cp-cloudrail"></a>

**포털:**   
[https://devices.cloudrail.com/](https://devices.cloudrail.com/)

**요구 사항**  
CloudRail 요구 사항에 대한 자세한 내용은 CloudRail 웹 사이트의 [FAQ](https://cloudrail.com/faqs/)를 참조하세요.

**CloudRail 설명서:**  
[엣지 컴퓨팅: SiteWise Edge](https://devices.cloudrail.com/documentation?service=AWSIoTSitewiseEdge#awsiotsitewiseEdge1)

## EasyEdge
<a name="cp-easyedge"></a>

**포털:**   
[https://studio.easyedge.io/](https://studio.easyedge.io/)

**요구 사항**  
[EasyEdge 요구 사항](https://docs.easyedge.io/getting-started/requirements.html) - 방화벽 구성에 필요한 엔드포인트 및 포트를 포함한 EasyEdge 요구 사항에 대한 정보입니다. **참고**: 이 설명서에 액세스하려면 EasyEdge 계정이 필요합니다.

**EasyEdge 설명서:**  
[EasyEdge( AWS](https://www.easyedge.io/easyedge-for-aws/)일 때)

## Litmus Edge
<a name="cp-litmus"></a>

**Litmus Edge Manager에 액세스:**   
Litmus Edge에 액세스하려면 [Litmus Edge Manager 계정](https://docs.litmus.io/edgemanager/quickstart-guide/access-to-litmus-edge-manager)을 설정합니다.

**요구 사항**  
[Litmus Edge 요구 사항](https://docs.litmus.io/litmusedge/quickstart-guide/system-requirements) - Litmus Edge 배포를 위한 권장 구성 및 시스템 요구 사항입니다.

**Litmus 설명서:**  
+ [에 통합 AWS IoT SiteWise](https://docs.litmus.io/litmusedge-v1/litmusedge-with-aws-iot-sitewise)
+ [Litmus Edge 설명서](https://docs.litmus.io/litmusedge/)

# AWS IoT Greengrass AWS IoT SiteWise Edge용 구성 요소
<a name="sw-edge-components"></a>

SiteWise Edge는 AWS IoT Greengrass 구성 요소를 사용하여 엣지에서 산업 데이터를 수집, 처리 및 전송합니다. 이러한 구성 요소는 함께 작동하여 로컬 데이터 처리를 지원하고 AWS IoT SiteWise 클라우드 서비스와 원활하게 통합할 수 있습니다.

**IoT SiteWise 게시자**  
IoT SiteWise 게시자 구성 요소(`aws.iot.SiteWiseEdgePublisher`)는 다음을 담당합니다.  
+ 수집된 데이터를 AWS IoT SiteWise 클라우드 서비스로 안전하게 전송
+ 연결 문제 중 데이터 버퍼링 및 재시도 관리
SiteWise Edge의 게시자 구성에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT SiteWise 게시자 구성 요소 구성](configure-publisher-component.md). 게시자 구성 요소에 대한 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [IoT SiteWise 게시자를](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-publisher-component.html) 참조하세요.

**IoT SiteWise 프로세서**  
IoT SiteWise 프로세서 구성 요소(`aws.iot.SiteWiseEdgeProcessor`)는 다음 작업을 수행합니다.  
+ 엣지에서 데이터 변환 및 계산 실행
+ 로컬에서 자산 속성 정의 및 계산 구현
+ 전송 전에 데이터를 집계하거나 필터링하여 데이터 볼륨 줄이기
프로세서 구성 요소에 대한 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [IoT SiteWise 프로세서](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-processor-component.html)를 참조하세요.

**IoT SiteWise OPC UA 수집기**  
IoT SiteWise OPC UA 수집기(`aws.iot.SiteWiseEdgeCollectorOpcua`) 구성 요소는 다음과 같이 설계되었습니다.  
+ 산업 환경의 OPC UA 서버에 연결
+ OPC UA 데이터 소스에서 효율적으로 데이터 수집
+ OPC UA 데이터를와 호환되는 형식으로 변환 AWS IoT SiteWise
OPC UA 수집기 구성 요소에 대한 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [IoT SiteWise OPC UA 수집기를](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-opcua-collector-component.html) 참조하세요.

**IoT SiteWise OPC UA 데이터 소스 시뮬레이터**  
IoT SiteWise OPC UA 데이터 소스 시뮬레이터 구성 요소(`aws.iot.SiteWiseEdgeOpcuaDataSourceSimulator`)는 다음 기능을 제공합니다.  
+ 샘플 데이터를 생성하는 로컬 OPC UA 서버를 시작합니다.
+  AWS IoT SiteWise 게이트웨이의 AWS IoT SiteWise OPC UA 수집기 구성 요소에서 읽을 수 있는 데이터 소스를 시뮬레이션합니다.
+ 생성된 샘플 데이터를 사용하여 AWS IoT SiteWise 기능을 탐색할 수 있습니다.
이 구성 요소는 테스트 및 개발 목적에 특히 유용하므로 물리적 장비 없이도 산업 데이터 소스를 시뮬레이션할 수 있습니다.  
데이터 소스 시뮬레이션 구성 요소에 대한 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [IoT SiteWise OPC UA 데이터 소스 시뮬레이터](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-opcua-data-source-simulator-component.html)를 참조하세요.

이러한 AWS IoT Greengrass 구성 요소는 SiteWise Edge 기능을 활성화하는 데 사용됩니다. IoT SiteWise 게시자는 데이터가 클라우드로 안정적으로 전송되도록 보장하고, IoT SiteWise 프로세서는 로컬 계산 및 데이터 최적화를 처리하며, IoT SiteWise OPC UA 수집기는 일반적인 산업 프로토콜과의 통합을 용이하게 합니다.

**참고**  
이러한 구성 요소를 사용하려면 엣지 디바이스에 AWS IoT Greengrass V2 이상이 설치되어 있어야 합니다. SiteWise Edge의 성능을 최적화하려면 각 구성 요소의 적절한 구성이 중요합니다.

# SiteWise Edge 게이트웨이에서 자산 필터링
<a name="filter-assets-ggv2"></a>

엣지 필터링을 사용하면 데이터 처리에 사용하기 위한 자산의 일부만 특정 SiteWise Edge 게이트웨이로 전송하여 자산을 보다 효율적으로 관리할 수 있습니다. 자산이 트리 또는 상위-하위 구조로 정렬되어 있는 경우 SiteWise Edge 게이트웨이의 IAM 역할에 연결된 IAM 정책을 설정하여 트리의 루트, 즉 상위 항목 및 해당 하위 항목만 특정 SiteWise Edge 게이트웨이로 전송하도록 허용할 수 있습니다.

**참고**  
기존 자산을 트리 구조로 정렬하는 경우 구조를 생성한 후 구조에 추가한 각 기존 자산으로 이동하여 **편집**을 선택한 다음 **저장**을 선택하여가 새 구조를 AWS IoT SiteWise 인식하는지 확인합니다.

## 엣지 필터링 설정
<a name="set-up-edge-filter-ggv2"></a>

다음 IAM 정책을 SiteWise Edge 게이트웨이의 IAM 역할에 추가하고 *<root-asset-id>*를 SiteWise Edge 게이트웨이로 전송하려는 루트 자산의 ID로 대체하여 SiteWise Edge 게이트웨이에 엣지 필터링을 설정합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iotsitewise:DescribeAsset",
                "iotsitewise:ListAssociatedAssets"
            ],
            "Resource": "arn:aws:iotsitewise:*:*:asset/*",
            "Condition": {
                "StringNotLike": {
                    "iotsitewise:assetHierarchyPath": "/<root-asset-id>*"
                }
            }
        }
    ]
}
```

------

현재 SiteWise Edge 게이트웨이에 제거하려는 자산이 있는 경우 SiteWise Edge 게이트웨이에 로그인하고 다음 명령을 실행하여 캐시를 삭제 AWS IoT SiteWise 하여 SiteWise Edge 게이트웨이가와 동기화되도록 합니다.

```
sudo rm /greengrass/v2/work/aws.iot.SiteWiseEdgeProcessor/sync-app/sync_resource_bundles/edge.json
```

# 프록시 지원 구성 및 AWS IoT SiteWise Edge용 트러스트 스토어 관리
<a name="edge-apis-manage-trust-stores-proxy"></a>

 AWS IoT SiteWise 엣지에서 트러스트 스토어를 구성하고 관리하여 엣지 디바이스에 대한 프록시 지원을 설정합니다. 먼저 프록시 구성을 설정한 다음 트러스트 스토어를 구성합니다. 게이트웨이 설치 중에 또는 게이트웨이가 설정된 후 수동으로 트러스트 스토어를 구성할 수 있습니다.
+ **프록시** - 다양한 네트워크 환경에서 엣지 디바이스와 AWS 서비스 간의 연결을 촉진합니다.
+ **트러스트 스토어** - 신뢰할 수 있는 인증서를 관리하여 보안 연결을 보장합니다. 적절한 구성을 사용하면 네트워크 보안 정책을 준수하고, 제한된 네트워크 환경에서 통신을 활성화하고, 엣지 디바이스와 클라우드 서비스 간의 데이터 전송을 최적화할 수 있습니다.

SiteWise Edge는 다양한 구성 요소 유형에 대해 여러 트러스트 스토어를 활용하여 엣지 디바이스에서 클라우드로 안전하고 효율적인 데이터 흐름을 보장합니다. 기존 게이트웨이에서 또는 새 게이트웨이를 생성할 때 설치 프로세스 중에 트러스트 스토어와 프록시를 구성할 수 있습니다.

## 트러스트 스토어 및 프록시 구성 요구 사항
<a name="manage-trust-stores-proxy_implementation-requirements"></a>

트러스트 스토어를 구성하거나 프록시 설정으로 SiteWise Edge를 설치하기 전에 사전 조건을 충족하는지 확인합니다. 구성 요소 사용 및 기능 요구 사항에 따라 다양한 구현 요구 사항이 있습니다.

**프록시 지원 요구 사항**
+ 프록시 서버의 URL입니다. URL에는 호스트의 포트 번호인 사용자 정보가 포함되어야 합니다. 예를 들어 `scheme://[userinfo@]host[:port]`입니다.
  + `scheme` - HTTP 또는 HTTPS여야 합니다.
  + (선택 사항) `userinfo` - 사용자 이름 및 암호 정보
  + `host` - 프록시 서버의 호스트 이름 또는 IP 주소
  + `port` - 포트 번호
+ 프록시를 우회할 주소 목록입니다.
+ (선택 사항) 자체 서명된 인증서와 함께 HTTPS 프록시를 사용하는 경우 프록시 CA 인증서 파일입니다.

**트러스트 스토어 요구 사항**
+ HTTPS 프록시를 사용하여 전체 데이터 처리 팩 기능을 사용하려면 세 개의 트러스트 스토어를 모두 업데이트해야 합니다.
+ IoT SiteWise OPC UA 수집기 및 IoT SiteWise 게시자만 사용하는 경우 AWS IoT Greengrass Core 및 Java 신뢰 스토어 인증서를 최신 버전으로 업데이트합니다.

## 트러스트 스토어 및 프록시 서버 엣지 구성 모범 사례
<a name="manage-trust-stores-proxy_best-practices"></a>

지속적인 유지 관리와 엣지 환경에서 최고 수준의 보안을 유지하려면:
+ 네트워크 보안 요구 사항에 맞게 프록시 설정을 정기적으로 검토하고 업데이트합니다.
+ 게이트웨이 연결 및 데이터 흐름을 모니터링하여 적절한 프록시 통신을 보장합니다.
+ 조직의 인증서 관리 정책에 따라 트러스트 스토어 유지 관리 및 업데이트
+ 다음과 같은 엣지 환경에서 보안 통신을 위한 권장 모범 사례를 구현하고 따를 수 있습니다.
+ 운영 가시성을 위해 프록시 및 트러스트 스토어 구성 문서화
+ 자격 증명 관리에 대한 조직의 보안 관행을 따릅니다.

이러한 관행은 광범위한 보안 정책에 부합하면서 SiteWise Edge 게이트웨이에 대한 안전하고 신뢰할 수 있는 작업을 유지하는 데 도움이 됩니다.

# AWS IoT SiteWise Edge 게이트웨이 설치 중 프록시 설정 구성
<a name="manage-trust-stores-proxy_config"></a>

게이트웨이 설치 중에 프록시 서버와 함께 작동하도록 AWS IoT SiteWise Edge를 구성할 수 있습니다. 설치 스크립트는 HTTP 및 HTTPS 프록시를 모두 지원하며 보안 프록시 연결을 위해 트러스트 스토어를 자동으로 구성할 수 있습니다.

프록시 설정으로 설치 스크립트를 실행하면 다음과 같은 몇 가지 중요한 작업이 수행됩니다.
+ 프록시 URL 형식 및 파라미터를 검증하여 올바르게 지정되었는지 확인합니다.
+ 구성된 프록시를 통해 필요한 종속성을 다운로드하고 설치합니다.
+ 프록시 CA 인증서가 제공된 경우 AWS IoT Greengrass 루트 CA 인증서에 추가되고 Java KeyStore로 가져옵니다.
+ 모든 아웃바운드 연결에 프록시를 사용하도록 AWS IoT Greengrass (SiteWise Edge가 사용하는)를 구성합니다.
+ 적절한 프록시 및 트러스트 스토어 구성을 사용하여 SiteWise Edge 설치를 완료합니다.

**게이트웨이 소프트웨어를 설치할 때 프록시 설정을 구성하려면**

1. SiteWise Edge 게이트웨이를 생성합니다. 자세한 내용은 [자체 호스팅 SiteWise Edge 게이트웨이 생성](create-gateway-ggv2.md) 및 [로컬 디바이스에 AWS IoT SiteWise Edge 게이트웨이 소프트웨어 설치](install-gateway-software-on-local-device.md) 섹션을 참조하세요.

1. 환경에 적합한 프록시 설정으로 설치 스크립트를 실행합니다. 자리 표시자를 특정 프록시 정보로 바꿉니다.

   다음 각 항목을 바꿉니다.
   + `-p`, `--proxy-url`- 프록시 서버의 URL입니다. URL은 `http` 또는 중 하나여야 합니다`https`.
   + `-n`, `--no-proxy` - 프록시를 우회하기 위해 쉼표로 구분된 주소 목록입니다.
   + (선택 사항) `-c``--proxy-ca-cert`- 프록시 CA 인증서 파일의 경로입니다.
   + (선택 사항) `-j``--javastorepass`- Java KeyStore 암호입니다. 기본 암호는 `changeit`입니다.

------
#### [ Linux ]

   Linux 시스템의 경우 다음 명령 구조를 사용합니다.

   ```
   sudo ./install.sh -p proxy-url -n no-proxy-addresses [-c proxy-ca-cert-path] [-j javastorepass]
   ```

------
#### [ Windows ]

   PowerShell을 사용하는 Microsoft Windows 시스템의 경우 다음 명령 구조를 사용합니다.

   ```
   .\install.ps1 -ProxyUrl proxy-url -NoProxyAddresses no-proxy-addresses [-ProxyCaCertPath proxy-ca-cert-path] [-JavaStorePass javastorepass]
   ```

------

## 프록시 지원 설치 중 문제 해결
<a name="manage-trust-stores-proxy_installation-process_troubleshooting"></a>

SiteWise Edge 게이트웨이와 관련된 트러스트 스토어 문제를 해결하는 방법에 대한 자세한 내용은 섹션을 참조하세요[프록시 지원 설치 문제](troubleshooting-gateway.md#troubleshoot-proxy-during-installation).

# Edge에서 HTTPS 프록시 지원을 위한 AWS IoT SiteWise 트러스트 스토어 수동 구성
<a name="manage-trust-stores-proxy_trust-store-locations-and-configuration"></a>

HTTPS 프록시를 통해 연결하도록 AWS IoT SiteWise Edge 구성 요소를 구성할 때 프록시 서버의 인증서를 적절한 트러스트 스토어에 추가합니다. SiteWise Edge는 여러 트러스트 스토어를 사용하여 통신을 보호합니다. 세 개의 트러스트 스토어가 있으며, 이를 사용하는 것은 게이트웨이 구현의 SiteWise Edge 구성 요소 유형에 따라 달라집니다.

트러스트 스토어는 프록시 설정이 제공되면 설치 프로세스 중에 자동으로 업데이트됩니다.
+ [AWS IoT Greengrass 코어 구성 요소 트러스트 스토어 구성](#manage-trust-stores-proxy_greengrass-core-components) - AWS IoT Greengrass 루트 CA 인증서는 AWS 서비스의 신뢰성을 확인하기 위해 트러스트 스토어에 포함됩니다.

  이 트러스트 스토어는 AWS IoT Greengrass 구성 요소가 프록시를 통해 서비스와 안전하게 통신하는 AWS 동시에 해당 서비스의 신뢰성을 확인하는 데 도움이 됩니다.
+ [Java 기반 구성 요소 트러스트 스토어 구성](#manage-trust-stores-proxy_java-based-components) – Java KeyStore(JKS)는 SSL/TLS 연결을 위해 Java 기반 구성 요소가 사용하는 기본 트러스트 스토어입니다.

   Java 애플리케이션은 JKS를 사용하여 보안 연결을 설정합니다. 예를 들어 Java 기반 IoT SiteWise 게시자 또는 IoT SiteWise OPC UA 수집기를 사용하는 경우이 트러스트 스토어를 구성해야 합니다. 이렇게 하면 클라우드로 데이터를 전송하거나 OPC UA 서버에서 데이터를 수집할 때 이러한 구성 요소가 HTTPS 프록시를 통해 안전하게 통신할 수 있습니다.
+ [시스템 수준 구성 요소 트러스트 스토어 구성](#manage-trust-stores-proxy_system-level-components) - HTTPS 프록시를 사용하는 경우 보안 연결을 활성화하려면 인증서를 적절한 트러스트 스토어에 추가해야 합니다.

  HTTPS 프록시를 사용하는 경우 보안 연결을 활성화하려면 인증서를 적절한 트러스트 스토어에 추가해야 합니다. 이는 Rust 또는 Go와 같은 언어로 작성되는 시스템 수준 구성 요소가 Java의 JKS가 아닌 시스템의 트러스트 스토어에 의존하기 때문에 필요합니다. 예를 들어 프록시를 통해 통신해야 하는 시스템 유틸리티(예: 소프트웨어 업데이트 또는 시간 동기화)를 사용하는 경우 시스템 수준 트러스트 스토어를 구성해야 합니다. 이렇게 하면 이러한 구성 요소와 유틸리티가 프록시를 통해 보안 연결을 설정할 수 있습니다.

## AWS IoT Greengrass 코어 구성 요소 트러스트 스토어 구성
<a name="manage-trust-stores-proxy_greengrass-core-components"></a>

Amazon의 루트 CA를 사용하는 AWS IoT Greengrass 코어 함수의 경우:

1. 에서 인증서 파일 찾기 `/greengrass/v2/AmazonRootCA1.pem`

1. HTTPS 프록시 루트 인증서(자체 서명)를이 파일에 추가합니다.

```
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIQWgIVAMHSAzWG/5YVRYtRQOxXUTEpHuEmApzGCSqGSIb3DQEK
\nCwUAhuL9MQswCQwJVUzEPMAVUzEYMBYGA1UECgwP1hem9uLmNvbSBJbmMuMRww
... content of proxy CA certificate ...
+vHIRlt0e5JAm5\noTIZGoFbK82A0/nO7f/t5PSIDAim9V3Gc3pSXxCCAQoFYnui
GaPUlGk1gCE84a0X\n7Rp/lND/PuMZ/s8YjlkY2NmYmNjMCAXDTE5MTEyN2cM216
gJMIADggEPADf2/m45hzEXAMPLE=
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
MIIDQTCCAimgF6AwIBAgITBmyfz/5mjAo54vB4ikPmljZKyjANJmApzyMZFo6qBg
ADA5MQswCQYDVQQGEwJVUzEPMA0tMVT8QtPHRh8jrdkGA1UEChMGDV3QQDExBBKW
... content of root CA certificate ...
o/ufQJQWUCyziar1hem9uMRkwFwYVPSHCb2XV4cdFyQzR1KldZwgJcIQ6XUDgHaa
5MsI+yMRQ+hDaXJiobldXgjUka642M4UwtBV8oK2xJNDd2ZhwLnoQdeXeGADKkpy
rqXRfKoQnoZsG4q5WTP46EXAMPLE
-----END CERTIFICATE-----
```

### 설정된 게이트웨이에서 HTTPS 프록시 구성
<a name="manage-trust-stores-proxy_proxy-configuration"></a>

포트 8883 대신 포트 443에 연결하여 설정된 게이트웨이에 프록시 지원을 추가할 수 있습니다. 프록시 서버 사용에 대한 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [포트 443에서 연결 또는 네트워크 프록시를 통해](https://docs.aws.amazon.com/greengrass/v2/developerguide/configure-greengrass-core-v2.html#configure-alpn-network-proxy) 연결을 참조하세요. 새 게이트웨이를 생성하는 경우 게이트웨이 설치 중에 프록시 구성을 설정할 수 있습니다. 자세한 내용은 [AWS IoT SiteWise Edge 게이트웨이 설치 중 프록시 설정 구성](manage-trust-stores-proxy_config.md) 단원을 참조하십시오.

SiteWise Edge AWS IoT Greengrass 에서와 함께 HTTPS 프록시를 사용하는 경우 소프트웨어는 제공된 URL을 기반으로 프록시 연결을 위해 HTTP와 HTTPS 중에서 자동으로 선택합니다.

**중요**  
HTTPS 프록시를 통해 연결을 시도하기 전에 필요한 모든 트러스트 스토어를 업데이트합니다.

## Java 기반 구성 요소 트러스트 스토어 구성
<a name="manage-trust-stores-proxy_java-based-components"></a>

데이터 처리 팩의 IoT SiteWise 게시자, IoT SiteWise OPC UA 수집기 및 Java 서비스의 경우 기본 Java 트러스트 스토어 위치는 입니다. `$JAVA_HOME/jre/lib/security/cacerts` 

**인증서를 추가하려면**

1. 와 같은 프록시 서버의 인증서를 저장할 파일을 생성합니다`proxy.crt`.
**참고**  
프록시 서버의 인증서를 사용하여 미리 파일을 생성합니다.

1. 다음 명령을 사용하여 Java의 트러스트 스토어에 파일을 추가합니다.

   ```
   sudo keytool -import -alias proxyCert -keystore /usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts -file proxy.crt
   ```

1. 메시지가 표시되면 기본 암호를 사용합니다. `changeit` 

## 시스템 수준 구성 요소 트러스트 스토어 구성
<a name="manage-trust-stores-proxy_system-level-components"></a>

Rust, Go 및 시스템 트러스트 스토어를 사용하는 기타 언어로 작성된 구성 요소의 경우:

------
#### [ Linux ]

Linux 시스템:에 인증서 추가 `/etc/ssl/certs/ca-certificates.crt`

------
#### [ Windows ]

Microsoft Windows 시스템: 트러스트 스토어를 구성하려면 *Microsoft Ignite* 설명서의 [인증서 스토어](https://learn.microsoft.com/en-us/windows-hardware/drivers/install/certificate-stores) 절차를 따릅니다.

Windows는 각각 여러 하위 저장소가 있는 사용자 및 컴퓨터 범위에 대한 별도의 저장소를 포함하여 여러 인증서 저장소를 제공합니다. 대부분의 SiteWise Edge 설정의 경우 `COMPUTER | Trusted Root Certification Authorities` 스토어에 인증서를 추가하는 것이 좋습니다. 그러나 특정 구성 및 보안 요구 사항에 따라 다른 스토어를 사용해야 할 수 있습니다.

------

## 트러스트 스토어 문제 해결
<a name="manage-trust-stores-proxy_trust-stores-troubleshooting"></a>

SiteWise Edge 게이트웨이와 관련된 트러스트 스토어 문제를 해결하는 방법에 대한 자세한 내용은 섹션을 참조하세요[트러스트 스토어 문제](troubleshooting-gateway.md#troubleshoot-trust-stores).

# 엣지에서 AWS IoT SiteWise APIs 사용
<a name="edge-apis"></a>

AWS IoT SiteWise 는 엣지별 APIs와 함께 APIs의 하위 집합을 제공하므로 엣지에 배포된 자산 모델 및 관련 자산과 원활하게 상호 작용할 수 있습니다. 이러한 자산 모델은 엣지에서 실행되도록 구성해야 합니다. 자세한 내용은 [SiteWise Edge에서 데이터 처리를 위한 자산 모델 구성](edge-processing.md#process-gateway-data-edge)에서 이 설정 프로세스에 대한 자세한 지침을 참조하세요.

이러한 API를 구성한 후 자산 모델 및 개별 자산에 대한 포괄적인 데이터를 검색할 수 있습니다. 자산 모델, 자산, 대시보드, 포털 및 프로젝트 정보를 검색하면 배포된 포털 및 대시보드를 모니터링하고 엣지 수준에서 수집된 자산 데이터에 액세스할 수 있습니다. 이렇게 하면 웹 API 호출 AWS IoT SiteWise 없이와 상호 작용할 수 있도록 네트워크의 중앙 호스트가 제공됩니다.

**Topics**
+ [사용 가능한 모든 AWS IoT SiteWise Edge 디바이스 APIs](edge-apis-available.md)
+ [엣지 디바이스에 사용할 AWS IoT SiteWise 엣지 전용 APIs](edge-local-apis.md)
+ [AWS IoT SiteWise Edge APIs에서 CORS 활성화](enable-cors-edge-apis.md)
+ [AWS IoT SiteWise Edge에 대한 세션 제한 시간 구성](edge-apis-session-timeout.md)
+ [자습서: AWS IoT SiteWise Edge 게이트웨이의 자산 모델 나열](edge-apis-tutorial.md)

# 사용 가능한 모든 AWS IoT SiteWise Edge 디바이스 APIs
<a name="edge-apis-available"></a>

AWS IoT SiteWise 는 엣지 디바이스에서 사용할 수 있는 다양한 APIs를 제공하므로 디바이스에서 로컬로 작업을 완료할 수 있습니다. 사용 가능한 엣지 API 중 일부에는 자산 모델 검색, 자산 속성 생성 및 업데이트, 클라우드로 데이터 스트림 전송이 포함됩니다. 이러한 API를 활용하여 간헐적이거나 제한된 네트워크 연결이 있는 환경에서 작동할 수 있는 솔루션을 구축할 수 있습니다.

## 사용 가능한 AWS IoT SiteWise APIs
<a name="edge-apis-available-sw"></a>

엣지 디바이스에서 사용할 수 AWS IoT SiteWise APIs는 다음과 같습니다.
+ [ListAssetModels](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListAssetModels.html)
+ [DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html)
+ [ListAssets](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListAssets.html)
+ [DescribeAsset](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAsset.html)
+ [DescribeAssetProperty](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetProperty.html)
+ [ListAssociatedAssets](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListAssociatedAssets.html)
+ [GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)
+ [GetAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValue.html)
+ [GetAssetPropertyValueHistory](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValueHistory.html)
+ [ListDashboards](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListDashboards.html)
+ [ListPortals](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListPortals.html)
+ [ListProjectAssets](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListProjectAssets.html)
+ [ListProjects](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListProjects.html)
+ [DescribeDashboard](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeDashboard.html)
+ [DescribePortal](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribePortal.html)
+ [DescribeProject](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeProject.html)

## 사용 가능한 엣지 전용 API
<a name="edge-apis-available-local"></a>

다음 API는 엣지에 있는 디바이스에서 로컬로 사용됩니다.
+ [인증](edge-local-apis.md#edge-local-apis-authenticate) - 이 API를 사용하여 API 직접 호출에 사용할 SigV4 임시 보안 인증을 가져옵니다.

# 엣지 디바이스에 사용할 AWS IoT SiteWise 엣지 전용 APIs
<a name="edge-local-apis"></a>

엣지에서 사용할 수 있는 AWS IoT SiteWise APIs 외에도 엣지별 API가 있습니다. 이러한 엣지별 API가 아래에 설명되어 있습니다.

## 인증
<a name="edge-local-apis-authenticate"></a>

SiteWise Edge 게이트웨이에서 자격 증명을 가져옵니다. 로컬 사용자를 추가하거나 LDAP 또는 Linux 사용자 풀을 사용하여 시스템에 연결해야 합니다. 사용자 추가에 대한 자세한 내용은 [LDAP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) 또는 [Linux 사용자 풀](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app)을 참조하세요.

### 요청 구문
<a name="authenticate-request-syntax"></a>

```
POST /authenticate HTTP/1.1
Content-type: application/json
{
  "username": "string",
  "password": "string",
  "authMechanism": "string"
}
```

### URI 요청 파라미터
<a name="authenticate-request-parameters"></a>

요청은 URI 파라미터를 사용하지 않습니다.

### 요청 본문
<a name="authenticate-request-body"></a>

요청은 JSON 형식으로 다음 데이터를 받습니다.

**사용자 이름**  
요청 호출을 검증하는 데 사용되는 사용자 이름입니다.  
유형: 문자열  
필수 항목 여부: 예

**비밀번호**  
보안 인증을 요청하는 사용자의 비밀번호입니다.  
유형: 문자열  
필수 항목 여부: 예

**authMechanism**  
호스트에서 이 사용자의 유효성을 검사하기 위한 인증 방법입니다.  
유형: 문자열  
유효한 값: `ldap`, `linux`, `winnt`   
필수 항목 여부: 예

### 응답 구문
<a name="authenticate-response-syntax"></a>

```
HTTP/1.1 200
Content-type: application/json
{
  "accessKeyId": "string",
  "secretAccessKey": "string",
  "sessionToken": "string",
  "region": "edge"
}
```

### 응답 요소
<a name="authenticate-response-elements"></a>

작업이 성공하면 서비스가 HTTP 200 응답을 반송합니다.

다음 데이터는 JSON 형식으로 반환됩니다.

**accessKeyId**  
임시 보안 인증 정보를 식별하는 액세스 키 ID입니다.  
길이 제약: 최소 길이는 16입니다. 최대 길이 128.  
패턴: `[\w]*`

**secretAccessKey**  
요청에 서명하는 데 사용되는 비밀 액세스 키입니다.  
유형: 문자열

**sessionToken**  
사용자가 임시 보안 인증을 사용하기 위해 서비스 API에 전달해야 하는 토큰입니다.  
유형: 문자열

**리전**  
API 직접 호출 대상 지역입니다.  
유형: CONSTANT - `edge`

### 오류
<a name="authenticate-errors"></a>

**IllegalArgumentException**  
제공된 본문 문서의 형식이 잘못되어 요청이 거부되었습니다. 오류 메시지에 특정 오류가 설명되어 있습니다.  
HTTP 상태 코드: 400

**AccessDeniedException**  
사용자는 현재 ID 제공자에 기반한 유효한 보안 인증을 가지고 있지 않습니다. 오류 메시지에 인증 메커니즘이 설명되어 있습니다.  
HTTP 상태 코드: 403

**TooManyRequestsException**  
요청이 인증 시도 한도에 도달했습니다. 오류 메시지에는 새 인증 시도가 이루어질 때까지 기다리는 시간이 포함됩니다.  
HTTP 상태 코드: 429

# AWS IoT SiteWise Edge APIs에서 CORS 활성화
<a name="enable-cors-edge-apis"></a>

 AWS IoT SiteWise Edge APIs에서 CORS(교차 오리진 리소스 공유)를 활성화하면 웹 애플리케이션이 여러 도메인에서 APIs 수 있습니다. 이를 통해 중간 서버 또는 해결 방법 없이 원활한 통합, 실시간 데이터 교환 및 도메인 간 데이터 액세스를 수행할 수 있습니다. 허용 가능한 오리진을 지정하도록 CORS 설정을 구성하여 교차 오리진 액세스를 제어할 수 있습니다.

**참고**  
CORS는 `aws.iot.SiteWiseEdgeProcessor` 구성 요소의 버전 3.3.1 이상에서 사용할 수 있습니다.이 기능은 버전 3.3.1 이상에서 사용할 수 있습니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [AWS IoT SiteWise 프로세서](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-processor-component.html)를 참조하세요.

**SiteWise Edge APIs에서 CORS를 활성화하려면**

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 탐색 창에서 **엣지 게이트웨이**를 선택합니다.

1. CORS를 활성화하려는 SiteWise Edge 게이트웨이를 선택합니다. AWS IoT Greengrass V2 배포 유형에서 CORS를 활성화할 수 있습니다.

1. **게이트웨이 구성** 섹션에서 연결된 **Greengrass 코어 디바이스**를 선택합니다.

1. **배포** 탭의 **Greengrass 디바이스**에서 적절한 배포 링크를 선택합니다.

1. **작업**에서 **수정**을 선택한 다음 **배포 수정을** 선택합니다.
**중요**  
수정된 CORS 지원 구성을 생성하면 디바이스의 현재 구성이 대체됩니다.

1. **1단계, 대상 지정**에서 배포를 식별할 선택적 **이름을** 제공합니다.

1. **2단계, 구성 요소 선택 - 선택 사항**에서 모든 현재 선택을 그대로 두고 **다음을** 선택할 수 있습니다.

1. **3단계, 구성 요소 구성 - 선택 사항**에서 **aws.iot.SiteWiseEdgeProcessor**를 선택하고 구성 **요소 구성을** 선택합니다.

1. 구성 업데이트 섹션의 병합할 구성에 다음 JSON을 입력합니다.

   ```
   {
       "AWS_SITEWISE_EDGE_ACCESS_CONTROL_ALLOW_ORIGIN": "*"
   }
   ```
**참고**  
를의 값으로 사용하면 모든 오`*`리진이 `AWS_SITEWISE_EDGE_ACCESS_CONTROL_ALLOW_ORIGIN` 허용됩니다. 프로덕션 환경의 경우 보안을 강화하기 위해 정확한 오URLs을 지정하는 것이 좋습니다.

1. **확인**을 선택합니다.

1. **다음을** 선택하여 **Step5, 검토**에 도달할 때까지 나머지 단계를 진행합니다.

1. 구성 변경 사항을 검토한 다음 **배포**를 선택하여 SiteWise Edge 게이트웨이에 변경 사항을 적용합니다.
**참고**  
또는 전역 환경 변수를 AWS IoT SiteWise 게이트웨이에서 로 설정하여 CORS`*`를 활성화`AWS_SITEWISE_EDGE_ACCESS_CONTROL_ALLOW_ORIGIN`할 수 있습니다.

**참고**  
인증된 프록시의 경우는 분리된 `username` 필드와 `url` 필드 대신 프록시 구성의 `password` 필드에 포함되어야 `userinfo` 합니다.

배포가 완료되면 SiteWise Edge API에서 CORS가 활성화되어 지정된 오리진이 API에 교차 오리진 요청을 할 수 있습니다.

# AWS IoT SiteWise Edge에 대한 세션 제한 시간 구성
<a name="edge-apis-session-timeout"></a>

SiteWise Edge를 사용하면 SiteWise Edge API에 대한 세션 제한 시간을 구성할 수 있습니다. 이 기능은 지정된 기간이 지나면 비활성 세션을 자동으로 종료하여 보안을 강화합니다. 이 섹션에서는를 사용하여 세션 제한 시간을 구성하는 프로세스를 안내합니다 AWS IoT SiteWise Console.

**참고**  
세션 제한 시간 구성은 `aws.iot.SiteWiseEdgeProcessor` 구성 요소의 버전 3.4.0 이상에서 사용할 수 있습니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [AWS IoT SiteWise 프로세서](https://docs.aws.amazon.com/greengrass/v2/developerguide/iotsitewise-processor-component.html)를 참조하세요.

**SiteWise Edge 게이트웨이에 대한 세션 제한 시간을 구성하려면**

1. [AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 탐색 창에서 **엣지 게이트웨이**를 선택합니다.

1. 세션 제한 시간을 구성할 SiteWise Edge 게이트웨이를 선택합니다.
**참고**  
 AWS IoT Greengrass V2 배포 유형에서 세션 제한 시간을 구성할 수 있습니다.

1. **게이트웨이 구성** 섹션에서 연결된 **Greengrass 코어 디바이스**를 선택합니다.

1. **배포** 탭의 **Greengrass 디바이스**에서 적절한 배포 링크를 선택합니다.

1. **작업**에서 **수정을** 선택합니다. 경고를 읽은 다음 **배포 수정을** 선택합니다.
**중요**  
수정된 세션 제한 시간 구성을 생성하면 디바이스의 현재 구성이 대체됩니다.

1. **1단계, 대상 지정**에서 선택적 **이름을** 제공하여 수정된 배포를 식별한 **후 다음을** 선택합니다.

1. **2단계, 구성 요소 선택 - 선택 사항**에서 모든 현재 선택을 그대로 두고 **다음을** 선택할 수 있습니다.

1. **3단계, 구성 요소 구성 - 선택 사항**에서 **aws.iot.SiteWiseEdgeProcessor**를 선택하고 구성 **요소 구성을** 선택합니다.

1. **구성 업데이트** 섹션의 **병합할 구성**에 다음 JSON을 입력합니다.

   ```
   {
       "AWS_SITEWISE_EDGE_SESSION_TIMEOUT_MINUTES": "240"
   }
   ```

1. 의 값을 분 `AWS_SITEWISE_EDGE_SESSION_TIMEOUT_MINUTES` 단위로 설정합니다. 세션 제한 시간 값은 1분에서 10080분(7일) 사이일 수 있습니다. 기본값은 240분(4시간)입니다.

1. **확인**을 선택합니다.

1. **다음을** 선택하여 5단계, **검토**에 도달할 때까지 나머지 단계를 진행합니다.

1. 구성 변경 사항을 검토한 다음 **배포**를 선택하여 SiteWise Edge 게이트웨이에 변경 사항을 적용합니다.

**참고**  
또는 글로벌 환경 변수 **AWS\$1SITEWISE\$1EDGE\$1SESSION\$1TIMEOUT\$1MINUTES**를 SiteWise Edge 게이트웨이에서 원하는 값(분)으로 설정하여 세션 제한 시간을 구성할 수 있습니다.

배포가 완료되면 새 세션 제한 시간 구성이 SiteWise Edge API에 적용됩니다.

# 자습서: AWS IoT SiteWise Edge 게이트웨이의 자산 모델 나열
<a name="edge-apis-tutorial"></a>

엣지별 API와 함께 사용 가능한 AWS IoT SiteWise APIs의 하위 집합을 사용하여 엣지에서 자산 모델 및 해당 자산과 상호 작용할 수 있습니다. APIs 이 자습서에서는 Edge 게이트웨이에 대한 임시 자격 증명을 가져오고 SiteWise AWS IoT SiteWise Edge 게이트웨이에서 자산 모델 목록을 가져오는 방법을 안내합니다.

## 사전 조건
<a name="edge-apis-tutorial-prerequisites"></a>

이 자습서의 단계에서는 다양한 도구를 사용할 수 있습니다. 이러한 도구를 사용하려면 해당 필수 조건이 설치되어 있어야 합니다.

이 자습서를 완료하려면 다음이 필요합니다.
+ 배포 및 실행 중인 [AWS IoT SiteWise 엣지 자체 호스팅 게이트웨이 요구 사항](configure-gateway-ggv2.md)
+ 포트 443을 통해 동일한 네트워크의 SiteWise Edge 게이트웨이에 액세스합니다.
+ [OpenSSL](https://www.openssl.org/) 설치됨
+ (AWS OpsHub for AWS IoT SiteWise) [AWS OpsHubAWS IoT SiteWise 애플리케이션용](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app)
+ (curl) [curl](https://ec.haxx.se/install/) 설치됨
+ (Python) [urllib3](https://urllib3.readthedocs.io/en/stable/index.html) 설치됨
+ (Python) [Python3](https://www.python.org/downloads/) 설치됨
+ (Python) [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) 설치됨
+ (Python) [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html) 설치됨

## 1단계: SiteWise Edge 게이트웨이 서비스 서명 인증서 가져오기
<a name="edge-apis-tutorial-gateway-cert"></a>

SiteWise Edge 게이트웨이에서 사용할 수 있는 API에 TLS 연결을 설정하려면 신뢰할 수 있는 인증서가 필요합니다. OpenSSL 또는를 사용하여이 인증서를 생성할 수 AWS OpsHub 있습니다 AWS IoT SiteWise.

------
#### [ OpenSSL ]

**참고**  
이 명령을 실행하려면 [OpenSSL](https://www.openssl.org/)이 설치되어 있어야 합니다.

SiteWise Edge 게이트웨이에서 서명된 인증서를 가져오려면 터미널을 열고 다음 명령을 실행합니다. `<sitewise_gateway_ip>`를 SiteWise Edge 게이트웨이의 IP로 바꿉니다.

```
openssl s_client -connect <sitewise_gateway_ip>:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > GatewayCert.pem
```

------
#### [ AWS OpsHub for AWS IoT SiteWise ]

를 AWS OpsHub 에 사용할 수 있습니다 AWS IoT SiteWise. 자세한 내용은 [SiteWise Edge 게이트웨이 관리](manage-gateways-ggv2.md) 단원을 참조하십시오.

------

이 자습서에서는 다운로드한 SiteWise Edge 게이트웨이 인증서의 절대 경로를 사용합니다. 다음 명령을 실행하여 인증서의 전체 경로를 내보내고 `<absolute_path_to_certificate>`를 인증서 경로로 대체합니다.

```
export PATH_TO_CERTIFICATE='<absolute_path_to_certificate>'
```

## 2단계: SiteWise Edge 게이트웨이 호스트 이름 가져오기
<a name="edge-apis-tutorial-gateway-hostname"></a>

**참고**  
이 명령을 실행하려면 [OpenSSL](https://www.openssl.org/)이 설치되어 있어야 합니다.

자습서를 완료하려면 SiteWise Edge 게이트웨이의 호스트 이름이 필요합니다. SiteWise Edge 게이트웨이의 호스트 이름을 가져오려면 `<sitewise_gateway_ip>`를 SiteWise Edge 게이트웨이의 IP로 대체하여 다음을 실행합니다.

```
openssl s_client -connect <sitewise_gateway_ip>:443 </dev/null 2>/dev/null | grep -Po 'CN = \K.*'| head -1
```

다음 명령을 실행하여 나중에 사용할 수 있도록 호스트 이름을 내보내고 `<your_edge_gateway_hostname>`을 SiteWise Edge 게이트웨이의 호스트 이름으로 대체합니다.

```
export GATEWAY_HOSTNAME='<your_edge_gateway_hostname>'
```

## 3단계: SiteWise Edge 게이트웨이의 임시 자격 증명 가져오기
<a name="edge-apis-tutorial-temporary-credentials"></a>

이제 서명된 인증서와 SiteWise Edge 게이트웨이의 호스트 이름을 가지고 있으므로 SiteWise Edge 게이트웨이에서 API를 실행할 수 있도록 임시 자격 증명을 가져와야 합니다. AWS OpsHub 용를 통해 AWS IoT SiteWise 또는 API를 사용하여 SiteWise Edge 게이트웨이에서 직접 이러한 자격 증명을 가져올 수 있습니다. APIs

**중요**  
자격 증명은 4시간마다 만료되므로 SiteWise Edge 게이트웨이에서 API를 사용하기 직전에 자격 증명을 가져와야 합니다. 보안 인증을 4시간 이상 캐시하지 마세요.

### AWS OpsHub 용를 사용하여 임시 자격 증명 가져오기 AWS IoT SiteWise
<a name="edge-apis-tutorial-temp-creds-opshub"></a>

**참고**  
[AWS OpsHubAWS IoT SiteWise 애플리케이션용](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app)가 설치되어 있어야 합니다.

 AWS OpsHub 를 AWS IoT SiteWise 애플리케이션에 사용하여 임시 자격 증명을 가져오려면 다음을 수행합니다.

1. 애플리케이션에 로그인합니다.

1. **설정**을 선택합니다.

1. **인증**에서 **보안 인증 복사**를 선택합니다.

1. 환경에 맞는 옵션을 확장하고 **복사**를 선택합니다.

1. 나중에 사용할 수 있도록 보안 인증을 저장합니다.

### SiteWise Edge 게이트웨이 API를 사용하여 임시 자격 증명 가져오기
<a name="edge-apis-tutorial-temp-creds-api"></a>

SiteWise Edge 게이트웨이 API를 사용하여 임시 자격 증명을 가져오려면 Python 스크립트 또는 curl을 사용할 수 있습니다. 먼저 SiteWise Edge 게이트웨이의 사용자 이름과 암호가 있어야 합니다. SiteWise Edge 게이트웨이는 SigV4 인증 및 권한 부여를 사용합니다. 사용자 추가에 대한 자세한 내용은 [LDAP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app) 또는 [Linux 사용자 풀](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#opshub-app)을 참조하세요. 이러한 자격 증명은 다음 단계에서 API를 사용하는 데 필요한 SiteWise Edge 게이트웨이의 로컬 자격 증명을 가져오는 데 사용됩니다 AWS IoT SiteWise APIs.

------
#### [ Python ]

**참고**  
[urllib3](https://urllib3.readthedocs.io/en/stable/index.html)와 [Python3](https://www.python.org/downloads/)이 설치되어 있어야 합니다.

**Python을 사용하여 보안 인증을 가져오려면**

1. **get\$1credentials.py**라는 파일을 생성하고 다음 코드를 그 안에 복사합니다.

   ```
   '''
   The following demonstrates how to get the credentials from the SiteWise Edge gateway. You will need to add local users or connect your system to LDAP/AD
   https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#create-user-pool
   
   Example usage:
       python3 get_credentials.py -e https://<gateway_hostname> -c <path_to_certificate> -u '<gateway_username>' -p '<gateway_password>' -m '<method>'
   '''
   import urllib3
   import json
   import urllib.parse
   import sys
   import os
   import getopt
   
   """
   This function retrieves the AWS IoT SiteWise Edge gateway credentials.
   """
   def get_credentials(endpoint,certificatePath, user, password, method):
       http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs= certificatePath)
       encoded_body = json.dumps({
           "username": user,
           "password": password,
           "authMechanism": method,
       })
   
       url =  urllib.parse.urljoin(endpoint, "/authenticate")
   
       response = http.request('POST', url,
           headers={'Content-Type': 'application/json'}, 
           body=encoded_body)
       
       if response.status != 200:
           raise Exception(f'Failed to authenticate! Response status {response.status}')
   
       auth_data = json.loads(response.data.decode('utf-8'))
   
       accessKeyId = auth_data["accessKeyId"]
       secretAccessKey = auth_data["secretAccessKey"]
       sessionToken = auth_data["sessionToken"]
       region = "edge"
   
       return accessKeyId, secretAccessKey, sessionToken, region
   
   def print_help():
       print('Usage:')
       print(f'{os.path.basename(__file__)} -e <endpoint> -c <path/to/certificate> -u <user> -p <password> -m <method> -a <alias>')
       print('')
       print('-e, --endpoint   edge gateway endpoint. Usually the Edge gateway hostname.')
       print('-c, --cert_path path to downloaded gateway certificate')
       print('-u, --user       Edge user')
       print('-p, --password   Edge password')
       print('-m, --method     (Optional) Authentication method (linux, winnt, ldap), default is linux')
       sys.exit()
   
   
   def parse_args(argv):
       endpoint = ""
       certificatePath = None
       user = None
       password = None
       method = "linux"
       
       try:
           opts, args = getopt.getopt(argv, "he:c:u:p:m:", ["endpoint=","cert_path=", "user=", "password=", "method="])
       except getopt.GetoptError:
           print_help()
   
       for opt, arg in opts:
           if opt == '-h':
               print_help()
           elif opt in ("-e", "--endpoint"):
               endpoint = arg
           elif opt in ("-u", "--user"):
               user = arg
           elif opt in ("-p", "--password"):
               password = arg
           elif opt in ("-m", "--method"):
               method = arg.lower()
           elif opt in ("-c", "--cert_path"):
               certificatePath = arg
   
       if method not in ['ldap', 'linux', 'winnt']:
           print("not valid method parameter, required are ldap, linux, winnt")
           print_help()
   
       if (user == None or password == None):
           print("To authenticate against edge user, password have to be passed together, and the region has to be set to 'edge'")
           print_help()
       
       if(endpoint == ""):
           print("You must provide a valid and reachable gateway hostname")
           print_help()
   
       return endpoint,certificatePath, user, password, method
   
   
   def main(argv):
       # get the command line args
       endpoint, certificatePath, user, password, method = parse_args(argv)
       
       accessKeyId, secretAccessKey, sessionToken, region=get_credentials(endpoint, certificatePath, user, password, method)
   
       print("Copy and paste the following credentials into the shell, they are valid for 4 hours:")
       print(f"export AWS_ACCESS_KEY_ID={accessKeyId}")
       print(f"export AWS_SECRET_ACCESS_KEY={secretAccessKey}")
       print(f"export AWS_SESSION_TOKEN={sessionToken}")
       print(f"export AWS_REGION={region}")
       print()
       
       
       
   
   if __name__ == "__main__":
      main(sys.argv[1:])
   ```

1. 터미널에서 **get\$1credentials.py**를 실행하여 `<gateway_username>` 및 `<gateway_password>`를 생성한 보안 인증으로 교체합니다.

   ```
   python3 get_credentials.py -e https://$GATEWAY_HOSTNAME -c $PATH_TO_CERTIFICATE -u '<gateway_username>' -p '<gateway_password>' -m 'linux'
   ```

------
#### [ curl ]

**참고**  
[curl](https://ec.haxx.se/install/)이 설치되어 있어야 합니다.

**curl을 사용하여 보안 인증을 가져오려면**

1. <gateway\$1username> 및 <gateway\$1password>를 생성한 자격 증명으로 교체하여 터미널에서 다음 명령을 실행합니다.

   ```
   curl --cacert $PATH_TO_CERTIFICATE --location \
   -X POST https://$GATEWAY_HOSTNAME:443/authenticate \
   --header 'Content-Type: application/json' \
   --data-raw '{
       "username": "<gateway_username>",
       "password": "<gateway_password>",
       "authMechanism": "linux"
   }'
   ```

   응답은 다음과 같아야 합니다.

   ```
   {
       "username": "sweuser",
       "accessKeyId": "<accessKeyId>",
       "secretAccessKey": "<secretAccessKey>",
       "sessionToken": "<sessionToken>",
       "sessionExpiryTime": "2022-11-17T04:51:40.927095Z",
       "authMechanism": "linux",
       "role": "edge-user"
   }
   ```

1. 터미널에서 다음 명령을 실행합니다.

   ```
   export AWS_ACCESS_KEY_ID=<accessKeyId>
   export AWS_SECRET_ACCESS_KEY=<secretAccessKey>
   export AWS_SESSION_TOKEN=<sessionToken>
   export AWS_REGION=edge
   ```

------

## 4단계: SiteWise Edge 게이트웨이의 자산 모델 목록 가져오기
<a name="edge-apis-tutorial-get-asset-models"></a>

서명된 인증서, SiteWise Edge 게이트웨이 호스트 이름, SiteWise Edge 게이트웨이의 임시 자격 증명이 준비되었으므로 `ListAssetModels` API를 사용하여 SiteWise Edge 게이트웨이의 자산 모델 목록을 가져올 수 있습니다.

------
#### [ Python ]

**참고**  
[Python3](https://www.python.org/downloads/), [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html), [BotoCore](https://botocore.amazonaws.com/v1/documentation/api/latest/index.html)가 설치되어 있어야 합니다.

**Python을 사용하여 자산 모델 목록을 가져오려면**

1. **list\$1asset\$1model.py**라는 파일을 만들고 그 안에 다음 코드를 복사합니다.

   ```
   import json
   import boto3
   import botocore
   import os
   
   # create the client using the credentials
   client = boto3.client("iotsitewise", 
       endpoint_url= "https://"+ os.getenv("GATEWAY_HOSTNAME"),
       region_name=os.getenv("AWS_REGION"), 
       aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"), 
       aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY"), 
       aws_session_token=os.getenv("AWS_SESSION_TOKEN"),
       verify=os.getenv("PATH_TO_CERTIFICATE"),
       config=botocore.config.Config(inject_host_prefix=False))
   
   # call the api using local credentials
   response = client.list_asset_models()
   print(response)
   ```

1. 터미널에서 **list\$1asset\$1model.py**를 실행합니다.

   ```
   python3 list_asset_model.py
   ```

------
#### [ curl ]

**참고**  
[curl](https://ec.haxx.se/install/)이 설치되어 있어야 합니다.

**curl을 사용하여 자산 모델 목록을 가져오려면**

터미널에서 다음 명령을 실행합니다.

```
curl \
  --request GET https://$GATEWAY_HOSTNAME:443/asset-models \
  --cacert $PATH_TO_CERTIFICATE \
  --aws-sigv4 "aws:amz:edge:iotsitewise" \
  --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \
  -H "x-amz-security-token:$AWS_SESSION_TOKEN"
```

응답은 다음과 같아야 합니다.

```
{
    "assetModelSummaries": [
        {
            "arn": "arn:aws:iotsitewise:{region}:{account-id}:asset-model/{asset-model-id}",
            "creationDate": 1.669245291E9,
            "description": "This is a small example asset model",
            "id": "{asset-model-id}",
            "lastUpdateDate": 1.669249038E9,
            "name": "Some Metrics Model",
            "status": {
                "error": null,
                "state": "ACTIVE"
            }
        },
        .
        .
        .
    ],
    "nextToken": null
}
```

------