# AWS Lambda (서버리스 컴퓨트 서비스) 백과사전 항목 AWS Lambda는 이벤트 기반으로 코드를 실행하는 서버리스(Serverless) 컴퓨트 서비스이다. 사용자는 인프라 프로비저닝이나 서버 관리에 신경 쓸 필요 없이 코드 핸들러(handler)만 작성하고 업로드하면 되며, Lambda가 자동으로 실행 환경을 관리하고 필요에 따라 수평적으로 확장한다. --- ## 개요 - 정의: 이벤트가 발생하면 코드가 실행되도록 트리거되는 관리형 런타임(runtime) 환경으로, 사용한 만큼 비용을 지불하는 모델이다. - 핵심 특징 - 서버 관리 자동화: 인프라 프로비저닝, 패치, 확장성 관리가 Lambda의 책임이다. - 이벤트 주도 실행: 파일 업로드(S3), 메시지 큐(SQS), API 엔드포인트(API Gateway) 등 다양한 이벤트 소스에서 트리거 가능. - 자동 확장성: 동시성에 따라 필요한 수의 인스턴스가 자동으로 생성되어 처리한다. - 다양한 런타임 지원: Python, Node.js, Java, Go, .NET(C#, PowerShell) 등 여러 런타임을 기본으로 제공. - 비용 효율성: 사용한 실행 시간과 메모리 크기에 따라 요금이 산정된다. --- ## 핵심 용어 - Lambda function: 실행 단위가 되는 함수 정의체. - Handler: Lambda가 이벤트를 받아 실행하는 진입점 함수. - Runtime: 코드가 실행되는 런타임 환경(Python, Node.js, Java 등). - Event: 함수가 반응하는 입력 데이터(예: S3 객체 생성 이벤트). - Trigger(트리거): 이벤트 소스가 Lambda를 호출하는 방식. - Invocation: Lambda 함수의 실행 인스턴스. - Version & Alias: 특정 버전의 함수에 대한 고정된 이름/별칭. - Layers: 함수에 공통 라이브러리나 코드 의존성을 추가하는 방법. - Concurrency: 동시에 실행되는 Lambda 함수의 수. - Cold start: 새로운 컨테이너 시작 시 초기 로딩 시간. - Provisioned Concurrency: 사전 프로비저닝된 동시 실행 용량으로 cold start를 제거하는 기능. - DLQ(Dead Letter Queue): 실패한 실행을 전달받아 보존하는 큐. - IAM Role: Lambda가 AWS 리소스에 접근할 때의 권한 역할. - VPC 연결(VPC): VPC와의 네트워크 연결 설정. - Deployment package: ZIP 파일 또는 컨테이너 이미지 형태의 배포 단위. - Environment variables: 런타임 구성 값을 주입하는 변수. --- ## 아키텍처 - 기본 구성 요소 - Event Source: Lambda를 트리거하는 외부/내부 시스템(S3, DynamoDB Streams, API Gateway, SNS/SQS, CloudWatch Events/EventBridge, Kinesis 등). - Lambda Function: 실제 비즈니스 로직이 구현된 코드. - Execution Role: Lambda가 다른 AWS 리소스에 접근할 수 있게 하는 IAM Role. - Layer: 공용 라이브러리와 의존성 관리. - CloudWatch: 로그(Log), 지표(Metric), 알람(Alarm) 관리. - Optional: X-Ray 트레이싱으로 분산 트레이스 수집. - 일반적 데이터 흐름 - 이벤트 소스가 트리거를 발생 → Lambda가 함수 핸들러를 실행 → 결과를 대상 서비스(S3, DynamoDB, API, SNS 등)로 전달 또는 응답 반환. - 확장 및 관리 포인트 - 동시성 관리: 기본 동시성, Provisioned Concurrency, reserved concurrency 설정 가능. - 배포 전략: 버전/별칭, 무중단 배포를 위한 Aliases, CI/CD 파이프라인과의 통합. --- ## 실행 모델과 운영 원리 - 실행 모델 - 이벤트 기반 비동기 실행: 이벤트 수신 시 인스턴스가 생성되고 함수가 실행된다. - Cold vs Warm: 초기 실행은 콜드 스타트로 지연이 발생할 수 있고, Provisioned Concurrency를 통해 완화 가능. - 런타임 제약 - 실행 시간 제한: 기본적으로 최대 실행 시간은 설정된 타임아웃으로 제한된다. - 메모리 및 CPU: 할당된 메모리량에 따라 CPU 성능도 비례적으로 증가한다. - 예외 처리 및 재시도 - 실패 시 재시도 정책은 이벤트 소스에 따라 다르다(예: SQS는 재시도, API Gateway는 응답 코드에 따라 처리). - DLQ를 구성해 실패 이벤트를 보관하고 후속 처리 가능. - 보안 및 네트워크 - IAM Role에 최소 권한 원칙 적용. - VPC를 연결하면 비공개 서브넷에서 실행 가능하지만 네트워크 설정이 필요하고 대기 시간이 증가할 수 있다. --- ## 함수 작성 및 배포 - 함수 작성 언어 - Python, Node.js, Java, Go, .NET 등 Lambda가 공식 지원하는 런타임 활용. - 핸들러 핸들링 예시 - Python 예시: - 파일: lambda_function.py - 핸들러: lambda_function.lambda_handler - Node.js 예시: - 파일: index.js - 핸들러: exports.handler - 배포 방법 - 배포 패키지: ZIP 파일 또는 컨테이너 이미지(Container image)로 배포 가능. - 배포 도구 및 프레임워크: AWS SAM, Serverless Framework, AWS CDK, CloudFormation 등. - 모듈화와 재사용 - Layers를 활용해 공통 라이브러리 공유. - Alias와 Version를 활용해 롤백 및 안정적 배포를 구현. --- ## 예시 코드 - Python 3.11 간단 핸들러 ```python def lambda_handler(event, context): return { "statusCode": 200, "body": "Hello from Lambda!" } ``` - Node.js 18 간단 핸들러 ```javascript exports.handler = async (event) => { return { statusCode: 200, body: "Hello from Lambda!" }; }; ``` --- ## 모니터링, 로깅 및 디버깅 - 로깅 - 기본 로그는 CloudWatch Logs로 자동 수집. - 로그 포맷 및 구조를 일관되게 구성하면 모니터링이 용이. - 지표와 알람 - 요청 수, 실패율, 평균 실행 시간, 프로비저닝된 동시 실행 수 등을 CloudWatch Metrics에서 확인. - 임계치 기반의 알람 설정으로 이상징후를 조기에 탐지. - 트레이싱 - AWS X-Ray를 이용한 분산 트레이스 수집으로 핀포인트 디버깅 가능. - 테스트 및 로컬 개발 - SAM CLI를 이용한 로컬 테스트 및 디버깅 가능. - 단위 테스트 및 모의 이벤트(Mock Event) 활용 권장. --- ## 성능 최적화 및 비용 관리 - 적정 메모리 할당 - 메모리 크기를 조정해 CPU 성능과 실행 비용의 균형을 맞춘다. 과도한 메모리는 비용 증가를 야기할 수 있다. - 동시성 관리 - 기본 동시성 한도 확인 및 필요 시 조정. - Provisioned Concurrency를 활용해 핫 스텟을 유지할 수 있다. - 배포 전략 - 버전과 별칭을 활용한 점진적 배포로 다운타임을 최소화. - CodeDeploy/CI-CD 파이프라인과 연동하여 안정적인 운영. - 네트워크 고려 - VPC 연결 시 NAT Gateway/인터넷 경로 비용 및 대기 시간에 주의. --- ## 보안 모범 사례 - 최소 권한 원칙 - Lambda 역할은 필요한 최소 권한만 부여. - 환경 변수 보안 - 민감한 정보는 AWS KMS로 암호화된 시크릿 관리 또는 AWS Secrets Manager에서 주입. - 네트워크 격리 - 공개 엔드포인트를 피하거나, VPC 내에서 필요한 리소스에만 접근하도록 구성. - 감사 및 규정 준수 - CloudTrail을 통한 Lambda 호출 추적 및 변경 이력 관리. --- ## 배포 및 운영 관행 - CI/CD 파이프라인 - 코드 변경 시 자동 테스트, 보안 검사, 패키징 및 배포를 포함하는 파이프라인 구성. - Canary/Blue-Green 배포 - 별칭(Alias) 및 버전 관리로 순차적 배포 및 롤백 지원. - 장애 대비 설계 - DLQ, 재시도 정책, 아이덴티티 및 자격 증명의 안전한 관리로 장애 시 복구를 용이하게 함. --- ## 지역성, 한계 및 비교 - 지역성 - Lambda는 여러 AWS 리전에서 운영 가능하며, 리전 간 데이터 전송 시 비용과 지연이 발생할 수 있다. - 한계와 주의점 - 런타임별 지원 버전 및 기능 차이, 동시성 한도, VPC 연결 시 및 기타 네트워크 제약 우선 고려. - 비교 - 전통적 EC2 인스턴스나 컨테이너 기반 서비스와 달리 서버 관리가 필요 없고, 자동 확장성과 이벤트 중심 구성이 강점이다. --- ## 역사 및 발전 방향 - 초기 도입은 간단한 이벤트 처리에서 시작되어 현재는 API Gateway, S3, DynamoDB, EventBridge 등 다양한 이벤트 소스와의 깊은 통합을 제공한다. - 향후 확장으로는 더 강력한 보안 기능, 성능 예측 개선, 더 나은 개발자 경험 및 로컬 개발 생태계 강화가 지속될 전망이다. --- 관련 문서: [[AWS Lambda 아키텍처 및 이벤트 소스 트리거]], [[AWS Lambda 보안 모범 사례]]