[파이썬] AWS Lambda와 Kinesis Firehose를 활용한 데이터 전송과 분석

AWS Lambda와 Kinesis Firehose는 데이터 처리와 분석에 매우 유용한 서비스입니다. 이 블로그 글에서는 이 두 서비스를 함께 사용하여 데이터를 수집하고 전송하며, 데이터를 분석하는 방법에 대해 알아보겠습니다. 이를 위해 파이썬을 사용할 예정입니다.

AWS Lambda란?

AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 서비스입니다. 사용자에게는 자신이 작성한 코드를 업로드하면 Lambda가 코드를 실행하고 결과를 반환해줍니다. 이것은 이벤트에 기반한 서버리스 아키텍처를 구축하는 데 사용됩니다.

Kinesis Firehose란?

Amazon Kinesis Firehose는 대량의 스트리밍 데이터를 수집, 수신 및 배포하는 서비스입니다. 데이터의 소스로부터 Kinesis Firehose에 데이터를 전달하면, 이 데이터는 다양한 대상에게 저장 또는 전달될 수 있습니다.

데이터 전송 아키텍처

Architecture

위의 아키텍처 다이어그램은 데이터 전송을 위한 예시 아키텍처입니다. 데이터는 Kinesis Data Streams에서 생성되고, 데이터 스트림을 이용하여 AWS Lambda 함수로 전송됩니다. Lambda 함수에서는 데이터를 가공하고 Kinesis Firehose로 전달됩니다. Kinesis Firehose는 데이터를 처리하여 S3 버킷에 저장하거나 Redshift 클러스터에 로드할 수 있습니다.

코드 예시

이제 AWS Lambda 함수의 코드 예시를 살펴보겠습니다. 아래의 예시는 Python으로 작성된 Lambda 함수입니다.

import boto3
import json

def lambda_handler(event, context):
    # Kinesis 데이터 스트림 이름
    stream_name = 'my-kinesis-stream'

    # Kinesis 스트림에 연결
    kinesis_client = boto3.client('kinesis')

    # 전달된 이벤트의 데이터 엔트리들을 반복
    for record in event['Records']:
        # 데이터를 추출
        payload = record['kinesis']['data']
        decoded_payload = base64.b64decode(payload).decode('utf-8')
        data = json.loads(decoded_payload)
        
        # 데이터 가공 및 분석 작업 수행
        processed_data = process_data(data)
        
        # Kinesis Firehose로 데이터 전송
        response = kinesis_client.put_record(
            DeliveryStreamName='my-kinesis-firehose-stream',
            Record={
                'Data': processed_data
            }
        )
        
        print(response)
        
    return {
        'statusCode': 200,
        'body': 'Data processed and sent to Kinesis Firehose'
    }

위의 코드는 AWS Lambda 함수의 예시입니다. 데이터 스트림에서 전달된 데이터를 추출하고 가공한 후에 Kinesis Firehose로 전송합니다. 전송된 데이터는 S3 버킷에 저장되거나 Redshift 클러스터에 로드됩니다.

결론

AWS Lambda와 Kinesis Firehose는 데이터 처리와 분석을 위한 강력한 도구입니다. 이 글에서는 이 두 서비스를 함께 활용하여 데이터를 전송하고 분석하는 방법에 대해 알아보았습니다. Lambda 함수를 작성하고 Kinesis Firehose를 사용하여 데이터를 처리하고 저장하는 방법을 살펴보았습니다. 이를 통해 빠르고 확장 가능한 데이터 파이프라인을 구축할 수 있습니다.