728x90
Lambda의 소개(멱등성)
Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 컴퓨팅 서비스입니다. Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버 및 운영 체제 유지 관리, 용량 프로비저닝 및 자동 확장, 코드 모니터링 및 로깅을 비롯한 모든 컴퓨팅 리소스 관리를 수행합니다. Lambda를 사용하면 거의 모든 유형의 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행할 수 있습니다. Lambda가 지원하는 언어 중 하나로 코드를 공급하기만 하면 됩니다.
Lambda의 구동 방식
- Event
- 예로 S3 Trigger -> Lambda
- RequestResponse
- 예로 API Gateway -> Lambda
전역 변수(Global Scope)
- 핸들러 함수 바깥의 영역은 콜드 스타트시(Init) 에서만 실행되는 부분.
- 함수 종료후에도 Worker 노드가 종료되지 않는 이상, 메모리에 상주해 있음.
- 초기화(Initalization)에 관한 Task를 이 영역에 배치해서 적절하게 사용하면 AWS Lambda 퍼포먼스를 향상시킬 수 있음.
- 흔히 사용하는 RDB 커넥션 같은 경우 해당 커넥션 유지가 깨지게 되면 문제가 발생할 수 있기 때문에 일부 주의사항도 있음
AWS Lambda Invoke
- Invocation Type은 Event, RequestResponse, DryRun으로 나뉨
- Event는 Asynchronous방식, RequestReponse는 Synchronous방식이며 DryRun은 파라미터 및 권한을 검사해서 실행 가능 여부를 체크하는것
- 주의사항
- Invocation Type이 Event인 경우 Lambda 함수가 성공했는지 여부를 알 수 없다(StatusCode : 202 형태로 리턴됨)
- Event 타입인 경우는 함수를 호출했을때 별도의 큐(SQS)에 저장되며 비동기로 내부 Worker가 호출된다. 실행이 실패하면 내부적으로 다시 실행하지만 중복 실행등을 고려하여 반드시 멱등성을 고려하여 작성되어야함. 또한 실패한 경우 사용자는 알 수 없기 때문에 별도의 Dead-letter-Queue를 활성화 시켜 실패한 함수를 체크해야함.
- Event 방식으로 호출 되는 경우
- Amazon S3, Amazon SNS, EventBridge(CloudWatch Event) 등
- RequestResponse 방식으로 호출 되는 경우
- Amazon Kinesis, DynamoDB Streams, SQS, ALB, API Gateway
Parameter
- Secret Manager의 ARN을 통한 파라미터 호출 가능
- Parameter Store에서 호출
Lambda Firecracker
- AWS Lambda의 실행환경은 2015년부터 EC2 Instance 위에서 MicroVM을 올려놓고 실행시키는 방식이었음
- AWS Lambda 소유의 EC2 Instance 위에 MicroVM을 올려놓고 그 위에 복수개의 AWS Lambda의 실행환경을 세팅하는 방식
- 하나의 EC2 Instance 위에 복수개의 MicroVM을 올리고, 각 MicroVM 위에 복수개의 실행환경을 세팅 - MicroVM은 다른 고객들과 공유되지 않는다
- 현재는 Firecracker 기반으로, EC2 Bare Metal Instance위에 KVM 및 Firecracker를 올리고, Firecracker 위에 MicroVM을 올려두고 AWS Lambda 실행 환경을 세팅함
- Bare Metal 위에 Host OS 및 KVM을 올리고, 이 위에 복수개의 Firecracker를 띄운다.
- 하나의 Firecracker 프로세스는 다른 고객들과 공유되지 않는다
💡 현재는 위 모든과정이 1ms 내에 빌딩 되도록 지원하고 있다
네트워크 설정 방식
Hyperplane 이란?
- AWS 내부에서 사용되는 로드밸런싱
- S3 API의 로드밸런서 기반
- EFS에서는 초기부터 사용되고 있는 기술
- API Gateway의 VPC Link, NLB, NAT Gateway등 다양한 서비스에서 사용되고 있음
<aside> 💡 사실 EC2인스턴스의 Fleet 구성일 뿐, 필요에 따라 알아서 스케일 업/다운및 인/아웃 된다. Hyperplane에 액세스 가능한 ENI풀이 별도 존재(AWS 내부 별도 VPC내 존재함)
</aside>
Lambda Invoke?
- LB를 통한 호출
- Front 호출
- SQS 저장
- 내부 Poller 호출 및 worker 호출
- 실패시 dlq저장
- LB를 통한 호출
- Front 호출
- Worker Manager에서 Worker 호출
- 생성 되어 있는 worker가 없다면 Plancement를 통한 체크
- Plancement에 생성된 Worker가 없다면 init
- Worker Manager에 탐제
- Worker 실행
Lambda@Edge
Cloud Front와 함께 결합하여 오리진 또는 뷰어 단에서 실행 되어 Header나 Parameter를 변복조 가능, 또한 User-Agent 헤더 기반으로 다른 객체 전송 하는 방식으로 쿠키, 캐시를 사용자 능동적으로 조절할 수 있음.
Builder, Deploy
- SAM
- CodeCommit, Deploy
SAM?
- Jetbrains, VS Code등 IDEA에 AWS Tool kit 제공
- Docker에 경량 실행 모델을 탑제하여 로컬 환경에서 빌드 및 디버깅 가능
- CodeDeploy와 연동 되어 블루/그린 배포 가능
제약 사항
- 동시 실행에 대한 제약(1000개)
- 프로비저닝 가능하여 해당 기능을 활용한 동시성 제약 이슈 일부 해결
- 전역 세션 유지시간 제한
- 실행 용량 제한
- 기존 250~300mb였다가 최근 도커 이미지를 활용한 실행이 가능하여 10GB까지 가능함
- EFS를 활용한 마운트 가능
- 실행시 메모리 제약
- 실행 시간 제약(최대 15분)
728x90
'Server Infra > AWS' 카테고리의 다른 글
DynamoDB (0) | 2022.01.05 |
---|---|
AWS Elasticsearch Service (0) | 2022.01.05 |
AWS Organization (0) | 2022.01.05 |
AWS DevOps Engineer - Professional 취득 후기 (0) | 2022.01.05 |
AWS Developer – Associate 취득 후기 (0) | 2022.01.05 |