

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

# Amazon MSK로 Studio 노트북 생성
<a name="example-notebook-msk"></a>

이 자습서에서는 소스로 Amazon MSK 클러스터를 사용하는 Studio 노트북을 생성하는 방법을 설명합니다.

**Topics**
+ [Amazon MSK 클러스터 설정](#example-notebook-msk-setup)
+ [VPC에 NAT 게이트웨이 추가](#example-notebook-msk-nat)
+ [AWS Glue 연결 및 테이블 생성](#example-notebook-msk-glue)
+ [Amazon MSK로 Studio 노트북 생성](#example-notebook-msk-create)
+ [Amazon MSK 클러스터로 데이터 전송](#example-notebook-msk-send)
+ [Studio 노트북을 테스트](#example-notebook-msk-test)

## Amazon MSK 클러스터 설정
<a name="example-notebook-msk-setup"></a>

이 자습서에서는 일반 텍스트 액세스를 허용하는 Amazon MSK 클러스터가 필요합니다. Amazon MSK 클러스터를 아직 설정하지 않은 경우, [Amazon MSK 사용 시작하기](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) 자습서를 따라 Amazon VPC, Amazon MSK 클러스터, 주제 및 Amazon EC2 클라이언트 인스턴스를 생성하세요.

자습서에 따라 다음을 수행하십시오:
+ [3단계: Amazon MSK 클러스터 생성](https://docs.aws.amazon.com/msk/latest/developerguide/create-cluster.html)의 4단계에서 `ClientBroker` 값을 `TLS`에서 **PLAINTEXT**로 변경합니다.

## VPC에 NAT 게이트웨이 추가
<a name="example-notebook-msk-nat"></a>

[Amazon MSK 사용 시작하기](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) 자습서에 따라 Amazon MSK 클러스터를 생성했거나 기존 Amazon VPC에 프라이빗 서브넷용 NAT 게이트웨이가 아직 없는 경우, Amazon VPC에 NAT 게이트웨이를 추가해야 합니다. 다음 다이어그램은 아키텍처입니다.

![\[AWS VPC architecture with public and private subnets, NAT gateway, and Glue Data Catalog integration.\]](http://docs.aws.amazon.com/ko_kr/managed-flink/latest/java/images/vpc_05.png)


Amazon VPC용 NAT 게이트웨이를 생성하려면 다음을 수행합니다.

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. 왼쪽 탐색 모음에서 **NAT 게이트웨이**를 선택합니다.

1. **NAT 게이트웨이** 페이지에서 **NAT 게이트웨이 생성**을 선택합니다.

1. **NAT 게이트웨이 생성** 페이지에서 다음 값을 입력합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/managed-flink/latest/java/example-notebook-msk.html)

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

1. 왼쪽 탐색 모음에서 **경로 표**를 선택합니다.

1. [**Create Route Table**]을 선택합니다.

1. **경로 표 생성** 페이지에서 다음 정보를 제공합니다.
   + **Name tag:** **ZeppelinRouteTable**
   + **VPC**: VPC(예: **AWS KafkaTutorialVPC**)를 선택합니다.

   **생성(Create)**을 선택합니다.

1. 경로 표 목록에서 **ZeppelinRouteTable**을 선택합니다. **경로** 탭에서 **경로 편집**을 선택합니다.

1. **경로 편집** 페이지에서 **경로 추가**를 선택합니다.

1. ****에서 **대상 주소**에 **0.0.0.0/0**을 입력합니다. **타겟**에서 **NAT 게이트웨이**, **ZeppelinGateway**를 선택합니다. **경로 저장**을 선택합니다. **닫기**를 선택하세요.

1. 경로 표 페이지에서 **ZeppelinRouteTable**을 선택한 상태에서 **서브넷 연결** 탭을 선택합니다. **서브넷 연결 편집**을 선택합니다.

1. **서브넷 연결 편집** 페이지에서 **AWS KafkaTutorialSubnet2**와 **AWS KafkaTutorialSubnet3**을 선택합니다. **저장(Save)**을 선택합니다.

## AWS Glue 연결 및 테이블 생성
<a name="example-notebook-msk-glue"></a>

Studio 노트북은 Amazon MSK 데이터 소스에 대한 메타데이터용 [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) 데이터베이스를 사용합니다. 이 섹션에서는 Amazon MSK 클러스터에 액세스하는 방법을 설명하는 AWS Glue 연결과 Studio 노트북과 같은 클라이언트에 데이터 소스의 데이터를 제공하는 방법을 설명하는 AWS Glue 테이블을 생성합니다.

**연결 생성**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) AWS Glue 콘솔을 엽니다.

1. 아직 AWS Glue 데이터베이스가 없는 경우 왼쪽 탐색 모음에서 **데이터베이스를** 선택합니다. **데이터베이스 추가**를 선택합니다. **데이터베이스 추가** 창에서 **데이터베이스 이름**을 **default**(으)로 입력합니다. **생성(Create)**을 선택합니다.

1. 왼쪽 탐색 모음에서 **연결**을 선택합니다. **연결 추가**를 선택합니다.

1. **연결 추가** 창에서 다음 값을 입력합니다.
   + **연결 명칭**에 **ZeppelinConnection**을 입력합니다.
   + **연결 유형**에서 **Kafka**를 선택합니다.
   + **Kafka 부트스트랩 서버 URL**에 클러스터의 부트스트랩 브로커 문자열을 제공하세요. MSK 콘솔에서 또는 다음 CLI 명령을 입력하여 부트스트랩 브로커를 가져올 수 있습니다.

     ```
     aws kafka get-bootstrap-brokers --region us-east-1 --cluster-arn ClusterArn
     ```
   + **SSL 연결 필요** 확인란의 선택을 취소하세요.

   **Next**(다음)를 선택합니다.

1. **VPC** 페이지에서 다음 값을 입력합니다.
   + **VPC**에서 VPC의 이름(예: ** AWS KafkaTutorialVPC**)을 선택합니다.
   + **서브넷**에서 **AWS KafkaTutorialSubnet2**를 선택합니다.
   + **보안 그룹**의 경우 사용 가능한 모든 그룹을 선택합니다.

   **Next**(다음)를 선택합니다.

1. **연결 속성** 및 **연결 액세스** 페이지에서 **마침**을 선택합니다.

**표 생성**
**참고**  
다음 단계에 설명된 대로 표을 수동으로 생성하거나 Apache Zeppelin 내의 노트북에서 Managed Service for Apache Flink용 표 커넥터 코드 생성을 사용하여 DDL 문을 통해 표을 생성할 수 있습니다. 그런 다음 테이블 AWS Glue 이 올바르게 생성되었는지 확인할 수 있습니다.

1. 왼쪽 탐색 모음에서 **표**를 선택합니다. **표** 페이지에서 **표 추가**, **표 수동 추가**를 선택합니다.

1. **표 속성 설정** 페이지에서 **표 명칭**에 **stock**을 입력합니다. 이전에 만든 데이터베이스를 선택했는지 확인하세요. **Next**(다음)를 선택합니다.

1. **데이터 스토어 추가** 페이지에서 **Kafka**를 선택합니다. **주제 명칭**에는 주제 명칭(예: **AWS KafkaTutorialTopic**)을 입력합니다. **연결**에서 **Zeppel In Connection**을 선택합니다.

1. **분류** 페이지에서 **JSON**을 선택합니다. **Next**(다음)를 선택합니다.

1. **스키마 정의** 페이지에서 열 추가를 선택하여 열을 추가합니다. 다음 속성을 가진 열을 추가합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/managed-flink/latest/java/example-notebook-msk.html)

   **Next**(다음)를 선택합니다.

1. 다음 페이지에서 설정을 확인하고 **마침**을 선택합니다.

1. 테이블 목록에서 새로 생성한 테이블을 선택합니다.

1. **테이블 편집**을 선택하고 다음 속성을 추가합니다.
   + 키: `managed-flink.proctime`, 값: `proctime`
   + 키: `flink.properties.group.id`, 값: `test-consumer-group`
   + 키: `flink.properties.auto.offset.reset`, 값: `latest`
   + 키: `classification`, 값: `json`

   이러한 키/값 페어가 없으면 Flink 노트북에 오류가 발생합니다.

1. **적용**을 선택합니다.

## Amazon MSK로 Studio 노트북 생성
<a name="example-notebook-msk-create"></a>

애플리케이션에서 사용하는 리소스를 생성했으니 이제 Studio 노트북을 생성합니다.

**Topics**
+ [를 사용하여 Studio 노트북 생성 AWS Management Console](#example-notebook-create-msk-console)
+ [를 사용하여 Studio 노트북 생성 AWS CLI](#example-notebook-msk-create-api)

**참고**  
Amazon MSK 콘솔에서 기존 클러스터를 선택한 다음 **실시간 데이터 처리**를 선택하여 Studio 노트북을 생성할 수도 있습니다.

### 를 사용하여 Studio 노트북 생성 AWS Management Console
<a name="example-notebook-create-msk-console"></a>

1. [https://console.aws.amazon.com/managed-flink/home?region=us-east-1\$1/applications/dashboard](https://console.aws.amazon.com/managed-flink/home?region=us-east-1#/applications/dashboard)에서 Managed Service for Apache Flink 콘솔을 엽니다.

1. **Managed Service for Apache Flink 애플리케이션** 페이지에서 **Studio** 탭을 선택합니다. **Studio 노트북 생성**을 선택합니다.
**참고**  
Amazon MSK 또는 Kinesis Data Streams 콘솔에서 Studio 노트북을 생성하려면 입력 Amazon MSK 클러스터 또는 Kinesis 데이터 스트림을 선택한 다음 **실시간 데이터 처리**를 선택합니다.

1. **Studio 노트북 생성** 페이지에서 다음 정보를 입력합니다.
   + **Studio 노트북 명칭** **MyNotebook**을 입력합니다.
   + **AWS Glue 데이터베이스**의 **기본값**을 선택합니다.

   **Studio 노트북 생성**을 선택합니다.

1. **MyNotebook** 페이지에서 **구성** 탭을 선택합니다. **네트워킹** 섹션에서 **편집**을 선택합니다.

1. **MyNotebook의 네트워킹 편집** 페이지에서 **Amazon MSK 클러스터를 기반으로 하는 VPC 구성**을 선택합니다. **Amazon MSK 클러스터**용 Amazon MSK 클러스터를 선택하세요. **Save changes**(변경 사항 저장)를 선택합니다.

1. **MyNotebook** 페이지에서 **실행**을 선택합니다. **상태**가 **실행 중**으로 표시될 때까지 기다리세요.

### 를 사용하여 Studio 노트북 생성 AWS CLI
<a name="example-notebook-msk-create-api"></a>

를 사용하여 Studio 노트북을 생성하려면 다음을 AWS CLI수행합니다.

1. 다음 정보가 있는지 확인합니다. 애플리케이션을 생성하려면 이러한 값이 필요합니다.
   + 계정 ID
   + Amazon MSK 클러스터를 포함하는 Amazon VPC의 서브넷 ID 및 보안 그룹 ID

1. 다음 콘텐츠를 가진 `create.json`이라는 파일을 생성합니다: 자리 표시자 값을 정보로 바꿉니다.

   ```
   {
       "ApplicationName": "MyNotebook",
       "RuntimeEnvironment": "ZEPPELIN-FLINK-3_0",
       "ApplicationMode": "INTERACTIVE",
       "ServiceExecutionRole": "arn:aws:iam::AccountID:role/ZeppelinRole",
       "ApplicationConfiguration": {
           "ApplicationSnapshotConfiguration": {
               "SnapshotsEnabled": false
           },
           "VpcConfigurations": [
               {
                   "SubnetIds": [
                       "SubnetID 1",
                       "SubnetID 2",
                       "SubnetID 3"
                   ],
                   "SecurityGroupIds": [
                       "VPC Security Group ID"
                   ]
               }
           ],
           "ZeppelinApplicationConfiguration": {
               "CatalogConfiguration": {
                   "GlueDataCatalogConfiguration": {
                       "DatabaseARN": "arn:aws:glue:us-east-1:AccountID:database/default"
                   }
               }
           }
       }
   }
   ```

1. 애플리케이션을 생성하려면 다음 명령을 실행합니다.

   ```
   aws kinesisanalyticsv2 create-application --cli-input-json file://create.json 
   ```

1. 명령이 완료되면 새 Studio 노트북의 세부 정보를 보여 주는 다음과 유사한 출력이 나타나야 합니다.

   ```
   {
       "ApplicationDetail": {
           "ApplicationARN": "arn:aws:kinesisanalyticsus-east-1:012345678901:application/MyNotebook",
           "ApplicationName": "MyNotebook",
           "RuntimeEnvironment": "ZEPPELIN-FLINK-3_0",
           "ApplicationMode": "INTERACTIVE",
           "ServiceExecutionRole": "arn:aws:iam::012345678901:role/ZeppelinRole",
   ...
   ```

1. 애플리케이션을 시작하려면 다음 명령을 실행합니다. 샘플 값을 계정 ID로 바꿉니다.

   ```
   aws kinesisanalyticsv2 start-application --application-arn arn:aws:kinesisanalyticsus-east-1:012345678901:application/MyNotebook\
   ```

## Amazon MSK 클러스터로 데이터 전송
<a name="example-notebook-msk-send"></a>

이 섹션에서는 Amazon EC2 클라이언트에서 Python 스크립트를 실행하여 Amazon MSK 데이터 소스로 데이터를 전송합니다.

1. Amazon EC2 클라이언트에 연결합니다.

1. 다음 명령을 실행하여 Python 버전 3, Pip 및 Python용 Kafka 패키지를 설치하고 작업을 확인합니다.

   ```
   sudo yum install python37
   curl -O https://bootstrap.pypa.io/get-pip.py
   python3 get-pip.py --user
   pip install kafka-python
   ```

1. 다음 명령을 입력하여 클라이언트 시스템에서를 구성합니다 AWS CLI .

   ```
   aws configure
   ```

   `region`에 계정 자격 증명 및 **us-east-1**을 제공하세요.

1. 다음 콘텐츠를 가진 `stock.py`이라는 파일을 생성합니다: 샘플 값을 Amazon MSK 클러스터의 부트스트랩 브로커 문자열로 바꾸고, 주제가 **AWS KafkaTutorialTopic**이 아닌 경우 주제 명칭을 업데이트하세요.

   ```
   from kafka import KafkaProducer
   import json
   import random
   from datetime import datetime
   
   BROKERS = "<<Bootstrap Broker List>>"
   producer = KafkaProducer(
       bootstrap_servers=BROKERS,
       value_serializer=lambda v: json.dumps(v).encode('utf-8'),
       retry_backoff_ms=500,
       request_timeout_ms=20000,
       security_protocol='PLAINTEXT')
   
   
   def getStock():
       data = {}
       now = datetime.now()
       str_now = now.strftime("%Y-%m-%d %H:%M:%S")
       data['event_time'] = str_now
       data['ticker'] = random.choice(['AAPL', 'AMZN', 'MSFT', 'INTC', 'TBV'])
       price = random.random() * 100
       data['price'] = round(price, 2)
       return data
   
   
   while True:
       data =getStock()
       # print(data)
       try:
           future = producer.send("AWSKafkaTutorialTopic", value=data)
           producer.flush()
           record_metadata = future.get(timeout=10)
           print("sent event to Kafka! topic {} partition {} offset {}".format(record_metadata.topic, record_metadata.partition, record_metadata.offset))
       except Exception as e:
           print(e.with_traceback())
   ```

1. 다음 명령으로 스크립트를 실행합니다:

   ```
   $ python3 stock.py
   ```

1. 다음 섹션을 완료하는 동안 스크립트는 실행 상태로 두세요.

## Studio 노트북을 테스트
<a name="example-notebook-msk-test"></a>

이 섹션에서는 Studio 노트북을 사용하여 Amazon MSK 클러스터에서 데이터를 쿼리합니다.

1. [https://console.aws.amazon.com/managed-flink/home?region=us-east-1\$1/applications/dashboard](https://console.aws.amazon.com/managed-flink/home?region=us-east-1#/applications/dashboard)에서 Managed Service for Apache Flink 콘솔을 엽니다.

1. **Managed Service for Apache Flink 애플리케이션** 페이지에서 **Studio 노트북** 탭을 선택합니다. **MyNotebook**을 선택합니다.

1. **MyNotebook** 페이지에서 **Apache Zeppelin에서 열기**를 선택합니다.

   Apache Zeppelin 인터페이스가 새 탭에서 열립니다.

1. **제플린에 오신 것을 환영합니다\$1** 페이지에서 **Zeppelin 새로운 노트**를 선택하세요.

1. **Zeppelin 노트** 페이지에서 새로운 노트에 다음 쿼리를 입력합니다.

   ```
   %flink.ssql(type=update)
   select * from stock
   ```

   실행 아이콘을 선택합니다.

   애플리케이션은 Amazon MSK 클러스터의 데이터를 표시합니다.

애플리케이션에서 작동 측면을 볼 수 있도록 Apache Flink 대시보드를 열려면 **FLINK JOB**을 선택합니다. Flink 대시보드에 대한 자세한 내용을 알아보려면 [Managed Service for Apache Flink 개발자 가이드](https://docs.aws.amazon.com/)의 [Apache Flink 대시보드](https://docs.aws.amazon.com/managed-flink/latest/java/how-dashboard.html)를 참조하세요.

Flink Streaming SQL 쿼리의 더 많은 예는 [Apache Flink 설명서](https://nightlies.apache.org/flink/flink-docs-release-1.15/)의 [쿼리](https://nightlies.apache.org/flink/flink-docs-release-1.15/dev/table/sql/queries.html)를 참조하세요.