Kinesis Data Firehose를 구성하고 Data Generator를 이용한 로드 테스트 방법

Kinesis Data Firehose를 구성하고 Data Generator를 이용해 로드를 테스트하는 방법에 대해 소개합니다.
2021.08.01

안녕하세요 CX사업본부 MAD팀 엔지니어 임홍기입니다.
오늘은 스트리밍 데이터를 데이터 스토어 또는 분석 서비스에 적재하는 경우 많이 사용되는 Kinesis Data Firehose를 구성하고 AWS에서 제공하는 Data Generator를 이용해서 로드를 테스트하는 방법을 알아보고자 합니다.

Kinesis Data Firehose란?

Kinesis Data Firehose는 스트리밍 데이터를 S3, Redshift, Elasticsearch Service와 같은 서비스로 전송할 수 있는 서비스입니다.

또한 데이터 처리량에 비례하여 확장되는 완전관리형 서비스입니다.

동작 방식

동작 방식

위처럼 실시간으로 축적되는 스트리밍 데이터는 Kinesis Data Firehose를 거쳐 AWS의 서비스에 로드됩니다.

구성해 보기

지금부터 실제로 구성해보고 잘 동작되는지 테스트 해보도록 하겠습니다.

이번 포스팅에서는 테스트 데이터를 Kinesis Data Firehose에 투입한 뒤 S3에 적재하는 과정을 소개해보고자 합니다.

개요

  1. S3 버킷 작성 (사전에 작성)
  2. Kinesis Data Firehose 구성
  3. Kinesis Data Generator를 이용한 테스트

Kinesis Data Firehose 구성

콘솔 창을 이용하여 Kinesis -> Data Firehose로 이동합니다.

2

스트림데이터를 전송하기 위한 delivery stream을 생성합니다. Source는 Direct PUT or other sources를 나머지 설정은 Disabled로 설정해주세요.

3

데이터를 적재할 서비스를 선택합니다. 이번에는 S3에 적재해보도록 하겠습니다.

3-1

다음으로 Prefix를 설정해 줍니다.

  • S3 prefix: 데이터가 적재될 S3 버킷 접두사를 지정합니다.
  • S3 error prefix: 오류 조건에서 사용할 S3 버킷 접두사를 지정합니다.

기본적으로 Kinesis Data Firehose는 Amazon S3에 전달하는 데이터에 접두사 "YYYY/MM/dd/HH"(UTC 기준)를 추가합니다.

사용자 정의 접두사를 지정하여 이 기본값을 재정의할 수 있습니다.
자세한 내용은 Custom Prefixes for Amazon S3 Objects 를 참조해주세요.

4

다음으로 상세설정과

5

권한설정을 끝으로

6

수 분 뒤 Kinesis Data Firehose가 활성화됩니다.

Kinesis Data Generator를 이용한 테스트

모든 설정이 끝났습니다!
지금부터는 Kinesis Data Generator를 이용해서 스트림 데이터가 들어와도 지정한 S3 버킷에 적재되는지 확인해보겠습니다.

먼저 Amazon Kinesis Data Generator에 접속해줍니다.

7

Create a Cognito User with CloudFormation 버튼을 통해 Cognito 유저작성을 위한 CloudFormation을 불러옵니다.

8

기본 설정으로 Next를 눌러줍니다.

9

Parameters 부분에 기억할 수 있는 Username과 Password를 입력해주면 됩니다.
다음으로 넘어간 뒤 설정 및 스택옵션은 그대로 넘어갑니다.

10

IAM 리소스가 생성될 수 있다는 것에 동의한 뒤 스택을 생성합니다.

11

CloudFormation이 실행되며 잠시 뒤 테스트를 위한 Cognito User가 만들어집니다.

스택 생성이 완료되면, Outputs의 Value란에 Kinesis Data Generator의 URL을 클릭해줍니다.

또한, 스택작성 시 등록했던 유저명과 패스워드를 입력해서 로그인해줍니다.

12

로그인 하게 되면 위와 같은 화면이 나옵니다.

아래와 같이 설정해줍니다.

  • Region: Kinesis Data Firehose가 생성된 리전
  • Stream/delivery stream: Kinesis Data Firehose의 리소스명
  • Records per second: 전송할 초당 레코드 수
  • Record Template: 전송에 사용할 데이터 템플릿

이번에 제가 사용한 데이터 템플릿은 아래와 같습니다.

{
    "sensorId": {{random.number(50)}},
    "currentTemperature": {{random.number(
        {
            "min":10,
            "max":150
        }
    )}},
    "status": "{{random.arrayElement(
        ["OK","FAIL","WARN"]
    )}}"
}

13

Send data를 통해 설정한 템플릿을 바탕으로 데이터를 전송해봅시다!

(테스트하고자 할 양만 전송한 뒤 전송을 중단해줍시다. 과금의 원인이 될 수 있습니다.)

확인

14

Kinesis Data Firehose에서 지정한 S3에 데이터가 적재된 것을 확인할 수 있습니다.

15

적재된 데이터는 Query with S3 Select를 통해 확인할 수 있습니다.

끝으로

이 방법을 통해 각종 데이터를 실시간으로 처리하고, 적재하는 파이프라인을 간편하게 테스트할 수 있다는 점에서 이점이 많은것 같습니다.
각종 로깅 및 데이터 로드 파이프라인을 구축 전 Data Generator를 사용하여 테스트해보는 것은 어떨까요?
끝으로 해당 기사의 피드백은 yim.hongki@classmethod.jp로 보내주시면 감사하겠습니다.

참조한 기사

Amazon Kinesis Data Firehose FAQ

Amazon Kinesis Data Generator

Kinesis Data Generator를 사용하여 모의 스트리밍 데이터를 생성하는 방법