S3 버킷에 파일이 업로드될 때 트리거되는 Lambda 함수 구축 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- AWS Lambda와 S3를 사용한 서버리스 아키텍처 개발자
- DevOps 엔지니어 및 클라우드 인프라 관리자
- 난이도: 중급~고급 (AWS CLI, IAM 역할, Python 기초 지식 필요)
핵심 요약
- IAM 역할 생성은
AWSLambdaBasicExecutionRole
과AmazonS3ReadOnlyAccess
정책을 반드시 포함해야 합니다. - Lambda 핸들러(
lambda_handler
)는event
객체에서bucket
과key
를 추출하여 S3 객체를 읽고,json.loads()
로 파싱해야 합니다. - S3 버킷 알림 설정 시
s3:ObjectCreated:*
이벤트와.json
접두사 필터를 적용해야 하며,aws s3api put-bucket-notification-configuration
명령어로 구성합니다.
섹션별 세부 요약
1. 사전 준비 사항
- AWS 계정은
Admin
권한이 필요하며, AWS CLI와 Python 3.11+이 설치되어 있어야 합니다. - IAM 역할은
trust.json
파일을 기반으로 생성되며,LambdaFunctionArn
을 통해 S3 이벤트를 트리거합니다.
2. Lambda 함수 구조
- 핸들러 함수(
lambda_handler
)는event
의Records
배열에서bucket
과key
를 추출합니다. - URL 인코딩된 키는
urllib.parse.unquote_plus()
로 디코딩해야 하며,boto3
를 통해 S3 객체를 읽습니다. - 구조화된 로깅을 위해
logging
모듈과json.dumps(event, indent=2)
를 사용해야 합니다.
3. 배포 및 설정
- Lambda 함수는
zip
파일로 패키징되어aws lambda create-function
명령어로 배포됩니다. - S3 버킷 알림은
aws s3api put-bucket-notification-configuration
명령어로 구성되며,.json
확장자만 트리거하도록 필터링합니다. - CloudWatch 로그를 통해
event
객체의 변경 사항을 추적할 수 있습니다.
4. 테스트 및 확장
- 테스트용 JSON 파일은
aws s3 cp
명령어로 업로드되며,CloudWatch
로그를 통해 처리 결과를 확인합니다. - 다른 Lambda 함수 호출은
boto3.client("lambda").invoke()
를 통해 가능하며,lambda:InvokeFunction
권한이 필요합니다.
5. 리소스 정리
- 테스트 후 정리는
aws lambda delete-function
,aws s3 rb
,aws iam delete-role
명령어로 수행됩니다.
결론
- AWS CLI와 IAM 역할 설정은 서버리스 아키텍처의 핵심입니다.
- 구조화된 로깅(logging.info
, json.dumps
)과 URL 인코딩 처리는 디버깅 효율을 높입니다.
- S3 이벤트 필터링(suffix: .json
)과 Lambda 함수 연동은 자동화 흐름을 안정적으로 유지합니다.
- 리소스 정리는 클라우드 비용 절감과 보안 강화에 필수적입니다.