728x90
1. AWS Lambda란?
AWS Lambda는 서버를 관리하지 않고 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다.
Lambda는 특정 이벤트(예: S3 버킷에 파일 업로드)를 트리거로 실행됩니다.
2. 시나리오
S3 버킷에 파일이 업로드되면 Lambda 함수가 트리거되어 해당 파일을 처리합니다.
예제: S3에 업로드된 CSV 파일을 읽고, 데이터를 처리한 후 결과를 다른 S3 버킷에 저장하기.
3. 준비 사항
- S3 버킷 2개 생성:
- input-bucket: 원본 파일 업로드용
- output-bucket: 처리된 파일 저장용
- 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 이벤트 연결
- AWS Lambda 콘솔에서 새 함수를 생성합니다.
- 트리거로 S3를 선택하고 input-bucket에 파일 업로드 이벤트를 설정합니다.
- 작성한 Lambda 코드를 업로드하거나, 인라인 편집기에서 붙여넣습니다.
- Lambda에 적절한 IAM 역할을 연결합니다.
6. 테스트 및 결과
- input-bucket에 CSV 파일을 업로드합니다.
- Lambda가 트리거되고, 처리된 파일이 output-bucket에 저장됩니다.
- output-bucket/processed/ 경로에서 결과를 확인합니다.
7. 시각적 자료
- Lambda 함수 설정 화면 캡처
- S3 트리거 설정 화면
- 처리 전후 CSV 파일 비교 화면
다음 글 예고
다음 글에서는 AWS Glue를 활용해 대규모 데이터 ETL 작업을 자동화하는 방법을 다룹니다.
이 시리즈는 점진적으로 AWS 데이터 엔지니어링 역량을 키우는 데 초점을 맞춥니다. 😊
궁금하시면 구독 하고 따라와주세요!
728x90
'IT_Engineer > DataEngineer' 카테고리의 다른 글
[DE] 데이터 엔지니어를 위한 AWS#3 Glue: ETL 작업 자동화하기 (2) | 2024.11.24 |
---|---|
[DE] 에어플로우 DAG 최적화와 모니터링 기법 (0) | 2024.11.21 |
[DE] Spark + Airflow #2: Airflow와 Spark를 활용한 데이터 처리 파이프라인 완성하기 (3) | 2024.11.20 |
[DE] Spark + Airflow #1: Spark on Kubernetes 구현하기 (0) | 2024.11.19 |
[DE] 데이터 엔지니어를 위한 AWS 입문#1 : AWS 기초와 S3 사용법 (0) | 2024.11.17 |