본문 바로가기
IT_Engineer/DataEngineer

[DE] 데이터 엔지니어를 위한 AWS#2 Lambda: S3 이벤트 기반 파일 처리 자동화

by 좋은데이피치 2024. 11. 18.
728x90

1. AWS Lambda란?

AWS Lambda는 서버를 관리하지 않고 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다.
Lambda는 특정 이벤트(예: S3 버킷에 파일 업로드)를 트리거로 실행됩니다.

2. 시나리오

S3 버킷에 파일이 업로드되면 Lambda 함수가 트리거되어 해당 파일을 처리합니다.
예제: S3에 업로드된 CSV 파일을 읽고, 데이터를 처리한 후 결과를 다른 S3 버킷에 저장하기.


3. 준비 사항

  1. S3 버킷 2개 생성:
    • input-bucket: 원본 파일 업로드용
    • output-bucket: 처리된 파일 저장용
  2. IAM 역할 생성:
    Lambda가 S3에 접근할 수 있도록 적절한 권한을 가진 역할을 생성하세요.

4. Lambda 함수 생성

Python 코드 예제:

import boto3
import csv

def lambda_handler(event, context):
    s3 = boto3.client('s3')
    
    # S3 이벤트에서 버킷 이름과 파일 이름 가져오기
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    file_name = event['Records'][0]['s3']['object']['key']
    
    # 원본 파일 읽기
    response = s3.get_object(Bucket=bucket_name, Key=file_name)
    lines = response['Body'].read().decode('utf-8').splitlines()
    
    # 데이터 처리: CSV 읽기 및 변환
    reader = csv.reader(lines)
    transformed_data = []
    for row in reader:
        transformed_row = [col.upper() for col in row]  # 데이터를 대문자로 변환
        transformed_data.append(transformed_row)
    
    # 결과 저장
    output_file = '/tmp/processed_file.csv'
    with open(output_file, 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(transformed_data)
    
    # 처리된 파일을 output-bucket에 업로드
    output_key = f'processed/{file_name}'
    s3.upload_file(output_file, 'output-bucket', output_key)
    
    return {
        'statusCode': 200,
        'body': f'Processed file saved to output-bucket/{output_key}'
    }

5. Lambda와 S3 이벤트 연결

  1. AWS Lambda 콘솔에서 새 함수를 생성합니다.
  2. 트리거로 S3를 선택하고 input-bucket에 파일 업로드 이벤트를 설정합니다.
  3. 작성한 Lambda 코드를 업로드하거나, 인라인 편집기에서 붙여넣습니다.
  4. Lambda에 적절한 IAM 역할을 연결합니다.

6. 테스트 및 결과

  1. input-bucket에 CSV 파일을 업로드합니다.
  2. Lambda가 트리거되고, 처리된 파일이 output-bucket에 저장됩니다.
  3. output-bucket/processed/ 경로에서 결과를 확인합니다.

7. 시각적 자료

  • Lambda 함수 설정 화면 캡처
  • S3 트리거 설정 화면
  • 처리 전후 CSV 파일 비교 화면

다음 글 예고
다음 글에서는 AWS Glue를 활용해 대규모 데이터 ETL 작업을 자동화하는 방법을 다룹니다.

이 시리즈는 점진적으로 AWS 데이터 엔지니어링 역량을 키우는 데 초점을 맞춥니다. 😊

궁금하시면 구독 하고 따라와주세요!

728x90

최근댓글

최근글