제퍼넷 로고

Amazon Data Firehose 및 Snowflake | 아마존 웹 서비스

시간

오늘날의 빠르게 변화하는 세계에서는 시기적절한 통찰력과 결정이 요구되며, 이는 스트리밍 데이터의 중요성을 높이고 있습니다. 스트리밍 데이터는 다양한 소스에서 지속적으로 생성되는 데이터를 의미합니다. 클릭스트림 이벤트, 변경 데이터 캡처(CDC), 애플리케이션 및 서비스 로그, 사물 인터넷(IoT) 데이터 스트림과 같은 이 데이터의 소스가 급증하고 있습니다. Snowflake는 스트리밍 데이터를 플랫폼으로 가져오는 두 가지 옵션인 Snowpipe와 Snowflake Snowpipe Streaming을 제공합니다. Snowpipe는 대용량 파일을 로드하는 등의 파일 수집(배칭) 사용 사례에 적합합니다. 아마존 단순 스토리지 서비스 (Amazon S3)을 Snowflake로 변환합니다. 2023년 XNUMX월에 출시된 최신 기능인 Snowpipe Streaming은 다음에서 연속적인 데이터 스트림을 로드하는 등의 행 집합 수집(스트리밍) 사용 사례에 적합합니다. Amazon Kinesis 데이터 스트림 or Apache Kafka 용 Amazon Managed Streaming (아마존 MSK).

Snowpipe Streaming 이전에 AWS 고객은 파일 수집과 행 집합 수집이라는 두 가지 사용 사례에 Snowpipe를 사용했습니다. 먼저 스트리밍 데이터를 Kinesis Data Streams 또는 Amazon MSK에 수집한 다음 Amazon Data Firehose를 사용하여 스트림을 집계하고 Amazon S3에 쓴 다음 Snowpipe를 사용하여 데이터를 Snowflake에 로드했습니다. 그러나 이 다단계 프로세스로 인해 Snowflake에서 분석할 데이터를 사용할 수 있을 때까지 최대 XNUMX시간이 지연될 수 있습니다. 게다가 Snowpipe가 Snowflake 고객 클러스터에 업로드해야 하는 작은 파일이 있는 경우 특히 비용이 많이 듭니다.

이 문제를 해결하기 위해 Amazon Data Firehose는 이제 Snowpipe Streaming과 통합되어 Kinesis Data Streams, Amazon MSK 및 Firehose Direct PUT에서 저렴한 비용으로 몇 초 만에 데이터 스트림을 캡처, 변환 및 Snowflake로 전달할 수 있습니다. Amazon Data Firehose 콘솔에서 몇 번의 클릭만으로 Firehose 스트림을 설정하여 Snowflake에 데이터를 전송할 수 있습니다. Amazon Data Firehose 사용에 대한 약정이나 사전 투자는 없으며 스트리밍된 데이터 양에 대해서만 비용을 지불하면 됩니다.

Amazon Data Firehose의 주요 기능은 다음과 같습니다.

  • 완전관리형 서버리스 서비스 – 리소스를 관리할 필요가 없으며 Amazon Data Firehose는 지속적인 관리 없이 데이터 소스의 처리량에 맞게 자동으로 확장됩니다.
  • 코드 없이 바로 사용 가능 – 신청서를 작성할 필요가 없습니다.
  • 실시간 데이터 전달 – 몇 초 안에 빠르고 효율적으로 데이터를 목적지로 가져올 수 있습니다.
  • 20개 이상의 AWS 서비스와 통합 – Kinesis Data Streams, Amazon MSK, Amazon VPC 흐름 로그, AWS WAF 로그, Amazon CloudWatch Logs, Amazon EventBridge, AWS IoT Core 등과 같은 많은 AWS 서비스에 원활한 통합이 가능합니다.
  • 종량제 모델 – Amazon Data Firehose가 처리하는 데이터 볼륨에 대해서만 비용을 지불합니다.
  • 입/출력 라인 – Amazon Data Firehose는 VPC의 퍼블릭 또는 프라이빗 서브넷에 연결할 수 있습니다.

이 게시물에서는 고급 분석을 수행하기 위해 몇 초 내에 AWS에서 Snowflake로 스트리밍 데이터를 가져오는 방법을 설명합니다. 일반적인 아키텍처를 살펴보고 지연 시간이 짧은 데이터 스트리밍을 위한 로우 코드, 서버리스, 비용 효율적인 솔루션을 설정하는 방법을 설명합니다.

솔루션 개요

다음은 AWS에서 Snowflake로 데이터를 스트리밍하는 솔루션을 구현하는 단계입니다.

  1. Snowflake 데이터베이스, 스키마 및 테이블을 만듭니다.
  2. Kinesis 데이터 스트림을 생성합니다.
  3. 보안 프라이빗 링크를 사용하여 Kinesis Data Streams를 소스로, Snowflake를 대상으로 사용하여 Firehose 전송 스트림을 생성합니다.
  4. 설정을 테스트하려면 다음에서 샘플 스트림 데이터를 생성하세요. Amazon Kinesis 데이터 생성기 (KDG)를 대상으로 Firehose 전송 스트림을 사용합니다.
  5. Snowflake 테이블을 쿼리하여 Snowflake에 로드된 데이터의 유효성을 검사합니다.

솔루션은 다음 아키텍처 다이어그램에 설명되어 있습니다.

사전 조건

다음과 같은 전제 조건이 있어야 합니다.

Snowflake 데이터베이스, 스키마, 테이블 만들기

Snowflake에서 데이터를 설정하려면 다음 단계를 완료하세요.

  • Snowflake 계정에 로그인하고 데이터베이스를 생성합니다.
    create database adf_snf;

  • 새 데이터베이스에 스키마를 만듭니다.
    create schema adf_snf.kds_blog;

  • 새 스키마에 테이블을 만듭니다.
    create or replace table iot_sensors
    (sensorId number,
    sensorType varchar,
    internetIP varchar,
    connectionTime timestamp_ntz,
    currentTemperature number
    );

Kinesis 데이터 스트림 생성

데이터 스트림을 생성하려면 다음 단계를 완료하세요.

  • Kinesis Data Streams 콘솔에서 다음을 선택합니다. 데이터 스트림 탐색 창에서
  • 왼쪽 메뉴에서 데이터 스트림 생성.
  • 데이터 스트림 이름에 이름을 입력합니다(예: KDS-Demo-Stream).
  • 나머지 설정은 기본값으로 둡니다.
  • 데이터 스트림 생성을 선택합니다.

Firehose 배송 스트림 만들기

Kinesis Data Streams를 소스로, Snowflake를 대상으로 사용하여 Firehose 전송 스트림을 생성하려면 다음 단계를 완료하십시오.

  • Amazon Data Firehose 콘솔에서 다음을 선택합니다. Firehose 스트림 생성.
  • 럭셔리 출처선택한다. Amazon Kinesis 데이터 스트림.
  • 럭셔리 목적지선택한다. 눈송이.
  • 럭셔리 Kinesis 데이터 스트림에서 이전에 생성한 데이터 스트림을 찾습니다.
  • 럭셔리 Firehose 스트림 이름, 기본 생성 이름을 그대로 두거나 원하는 이름을 입력하세요.
  • $XNUMX Million 미만 연결 설정, Amazon Data Firehose를 Snowflake에 연결하려면 다음 정보를 제공하십시오.
    • 럭셔리 눈송이 계정 URL, Snowflake 계정 URL을 입력하세요.
    • 럭셔리 사용자, 필수 구성 요소에서 생성된 사용자 이름을 입력합니다.
    • 럭셔리 개인 키, 필수 구성 요소에서 생성된 개인 키를 입력합니다. 개인 키가 PKCS8 형식인지 확인하세요. PEM을 포함하지 마세요. header-BEGIN 접두사 및 footer-END 개인 키의 일부로 접미사를 붙입니다. 키가 여러 줄로 분할된 경우 줄바꿈을 제거하세요.
    • 럭셔리 직위별, 고르다 사용자 정의 Snowflake 역할 사용 데이터베이스 테이블에 쓸 수 있는 액세스 권한이 있는 IAM 역할을 입력합니다.

공개 또는 비공개 연결을 사용하여 Snowflake에 연결할 수 있습니다. VPC 엔드포인트를 제공하지 않으면 기본 연결 모드는 공개입니다. Snowflake 네트워크 정책에서 Firehose IP 목록을 허용하려면 다음을 참조하세요. 목적지에 눈송이를 선택하세요. 비공개 링크 URL을 사용하는 경우 다음을 사용하여 VPCE ID를 제공하세요. SYSTEM$GET_PRIVATELINK_CONFIG:

select SYSTEM$GET_PRIVATELINK_CONFIG();

이 함수는 다음 스크린샷에 표시된 것처럼 Snowflake 서비스에 대한 개인 연결의 셀프 서비스 구성을 용이하게 하는 데 필요한 Snowflake 계정 정보의 JSON 표현을 반환합니다.

  • 이 게시물에서는 비공개 링크를 사용하므로 VPCE ID, VPCE ID를 입력하세요.
  • $XNUMX Million 미만 데이터베이스 구성 설정에서 Snowflake 데이터베이스, 스키마 및 테이블 이름을 입력합니다.
  • . 백업 설정 섹션 S3 백업 버킷, 사전 요구 사항의 일부로 생성한 버킷을 입력합니다.
  • 왼쪽 메뉴에서 Firehose 스트림 생성.

또는 다음을 사용할 수 있습니다. AWS 클라우드 포메이션 Amazon Data Firehose 콘솔을 사용하는 대신 Snowflake를 대상으로 사용하여 Firehose 전송 스트림을 생성하는 템플릿입니다.

CloudFormation 스택을 사용하려면 다음을 선택하십시오.

BDB-4100-CFN-런치-스택

샘플 스트림 데이터 생성
생성한 Kinesis 데이터 스트림을 사용하여 KDG에서 샘플 스트림 데이터를 생성합니다.

{ 
"sensorId": {{random.number(999999999)}}, 
"sensorType": "{{random.arrayElement( ["Thermostat","SmartWaterHeater","HVACTemperatureSensor","WaterPurifier"] )}}", 
"internetIP": "{{internet.ip}}", 
"connectionTime": "{{date.now("YYYY-MM-DDTHH:m:ss")}}", 
"currentTemperature": {{random.number({"min":10,"max":150})}} 
}

Snowflake 테이블 쿼리

Snowflake 테이블을 쿼리합니다.

select * from adf_snf.kds_blog.iot_sensors;

Kinesis Data Streams로 전송된 KDG에서 생성된 데이터가 Amazon Data Firehose를 통해 Snowflake 테이블에 로드되는 것을 확인할 수 있습니다.

문제해결

KDG가 Firehose 전송 스트림으로 데이터를 보낸 후 데이터가 Kinesis Data Steams에 로드되지 않으면 새로 고치고 KDG에 로그인되어 있는지 확인하세요.

Snowflake 대상 테이블 정의를 변경한 경우 Firehose 전송 스트림을 다시 생성합니다.

정리

향후 비용이 발생하지 않도록 하려면 이 연습의 일부로 생성한 리소스를 더 이상 사용할 계획이 없다면 삭제하세요.

결론

Amazon Data Firehose는 Snowpipe Streaming에 데이터를 전달하는 간단한 방법을 제공하므로 비용을 절감하고 지연 시간을 초 단위로 줄일 수 있습니다. Snowflake와 함께 Amazon Kinesis Firehose를 사용해 보려면 Snowflake를 대상 실습으로 사용하는 Amazon Data Firehose를 참조하세요.


저자에 관하여

스왑나 반들라 AWS Analytics Specialist SA 팀의 수석 솔루션 아키텍트입니다. Swapna는 고객의 데이터 및 분석 요구 사항을 이해하고 고객이 클라우드 기반의 Well-Architected 솔루션을 개발할 수 있도록 지원하는 데 열정을 갖고 있습니다. 업무 외에 그녀는 가족과 함께 시간을 보내는 것을 즐깁니다.

모스타파 만수르 Amazon Kinesis Data Firehose에서 근무하는 Amazon Web Services의 수석 제품 관리자 – 기술 담당자입니다. 그는 대규모 고객의 복잡한 문제를 해결하는 직관적인 제품 경험 개발을 전문으로 합니다. 그가 Amazon Kinesis Data Firehose에서 열심히 일하지 않을 때는 스쿼시 코트에서 도전자를 상대하고 드롭샷을 완성하는 것을 좋아하는 Mostafa를 보게 될 것입니다.

보스코 앨버 커키 AWS의 선임 파트너 솔루션 아키텍트이며 엔터프라이즈 데이터베이스 공급업체 및 클라우드 제공업체의 데이터베이스 및 분석 제품에 대한 작업 경험이 20년 이상 있습니다. 그는 기술 회사가 데이터 분석 솔루션 및 제품을 설계하고 구현하도록 도왔습니다.

spot_img

최신 인텔리전스

spot_img