Lambda@Edge
1 Lambda@Edge
- Lambda@Edge는 Amazon CloudFront의 글로벌 콘텐츠 전송 네트워크(CDN)를 활용하여 사용자 가까이에서 코드를 실행할 수 있는 AWS 서비스입니다.
- 이 서비스는 지리적 제약을 초월하여 사용자에게 더 빠르고 개인화된 콘텐츠를 제공하는 데 중점을 둡니다.
2 주요 기능
2.1 글로벌 배포 및 실행
- Lambda@Edge는 AWS의 엣지 로케이션에서 코드를 실행합니다.
- 전 세계적으로 분산된 엣지 로케이션을 통해 지연 시간을 최소화할 수 있습니다.
- 사용자 요청이 엣지 로케이션에서 처리되므로 중앙 서버로의 요청 왕복을 줄입니다.
2.2 이벤트 기반 트리거
- Lambda@Edge는 다양한 CloudFront 이벤트에서 트리거될 수 있습니다:
- Viewer Request: 사용자가 CloudFront에 요청을 보낼 때 실행.
- Viewer Response: CloudFront가 사용자에게 응답을 보낼 때 실행.
- Origin Request: CloudFront가 오리진 서버에 요청을 보낼 때 실행.
- Origin Response: 오리진 서버에서 CloudFront로 응답을 보낼 때 실행.
2.3 확장성 및 고가용성
- AWS Lambda의 서버리스 아키텍처를 기반으로 하여 자동으로 확장됩니다.
- 높은 트래픽을 처리할 수 있도록 설계되어 있습니다.
- 별도의 인프라 관리 없이 고가용성을 제공합니다.
2.4 개인화된 콘텐츠 제공
- 사용자의 요청에 따라 실시간으로 콘텐츠를 수정하고 개인화할 수 있습니다.
- 예를 들어, 사용자 위치에 기반한 콘텐츠 제공, 광고 삽입, 사용자 세션 데이터 분석 등이 가능합니다.
3 사용 사례
3.1 실시간 이미지 처리
- 사용자 요청 시 이미지를 변환하거나 조정하여 제공할 수 있습니다.
- 예: 다양한 해상도 및 크기로 이미지 제공.
3.2 A/B 테스트 및 콘텐츠 실험
- 다양한 사용자 그룹에게 다른 콘텐츠를 제공하여 A/B 테스트를 수행할 수 있습니다.
- 실험 결과에 따라 콘텐츠 전략을 최적화합니다.
3.3 보안 강화
- 사용자 요청을 검증하고, 불법적인 요청을 차단할 수 있습니다.
- 예: JWT 토큰 검증, 사용자 인증 및 권한 부여.
4 비용
- Lambda@Edge는 사용한 만큼 지불하는 종량제 요금제를 적용합니다.
- 실행 시간, 요청 수, 전송된 데이터 양에 따라 요금이 부과됩니다.
- 별도의 서버 관리 비용이 들지 않아 경제적입니다.
5 CloudFront Functions와 Lambda@Edge 비교
5.1 사용 사례 비교
CloudFront Functions 사용 사례
- 캐시 키 정규화:
- 요청 속성(헤더, 쿠키, 쿼리 문자열, URL)을 변환하여 최적의 캐시 키 생성
- 캐시 적중률을 높이고 효율적인 콘텐츠 전달 가능
- 헤더 조작:
- HTTP 요청 또는 응답의 헤더를 삽입, 수정, 삭제
- 클라이언트나 오리진 서버와의 통신을 최적화
- URL 재작성 또는 리디렉션:
- 요청된 URL을 동적으로 변경하거나 다른 위치로 리디렉션
- 콘텐츠 구조 변경이나 마이그레이션 시 유용
- 요청 인증 및 권한 부여:
- 사용자 생성 토큰(예: JWT)을 생성하고 검증
- 요청을 허용하거나 거부하여 기본적인 보안 계층 제공
Lambda@Edge 사용 사례:
- 긴 실행 시간:
- 여 러 밀리초가 소요되는 복잡한 처리 작업 수행 가능
- 조정 가능한 CPU 또는 메모리:
- 리소스 집약적인 작업에 적합
- 필요에 따라 컴퓨팅 리소스 조정 가능
- 서드파티 라이브러리 사용:
- AWS SDK 등 외부 라이브러리를 활용한 복잡한 로직 구현
- 다른 AWS 서비스와의 통합 용이
- 외부 서비스 접근:
- 네트워크 액세스를 통해 외부 서비스와 통신 가능
- 데이터 처리나 외부 API 호출 등에 활용
- 파일 시스템 접근:
- 로컬 파일 시스템에 접근하여 데이터 읽기/쓰기 가능
- HTTP 요청 본문 접근:
- POST 요청 등의 본문 데이터를 처리하고 수정 가능
5.2 요약
| 기능 | CloudFront Functions | Lambda@Edge |
|---|---|---|
| Runtime Support | JavaScript | Node.js, Python |
| # of Requests | Millions of requests per second | Thousands of requests per second |
| CloudFront Triggers | Viewer Request/Response | Viewer Request/ResponseOrigin Request/Response |
| Max. Execution Time | < 1 ms | 5 – 10 seconds |
| Max. Memory | 2 MB | 128 MB – 10 GB |
| Total Package Size | 10 KB | 1 MB – 50 MB |
| Network Access, File System Access | No | Yes |
| Access to the Request Body | No | Yes |
| Pricing | Free tier available,1/6th price of Lambda@Edge | No free tier,charged per request & duration |
- CloudFront Functions는 JavaScript로 작성되며, 초당 수백만 건의 요청을 처리할 수 있습니다. 최대 실행 시간은 1ms 미만이며, 네트워크와 파일 시스템 접근은 불가능합니다. 요청 본문에 접근할 수 없고, 가격은 Lambda@Edge의 1/6입니다.
- Lambda@Edge는 Node.js와 Python을 지원하며, 초당 수천 건의 요청을 처리합니다. 최대 실행 시간은 5-10초이며, 네트워크와 파일 시스템 접근이 가능합니다. 요청 본문에 접근할 수 있으며, 사용량에 따라 요금이 부과됩니다.
6 제약사항
- 함수는 반드시 US East (N. Virginia) 리전에서 생성해야 함
- 번호가 지정된 함수 버전만 사용 가능 ($LATEST 또는 별칭 사용 불가)
- 최대 실행 시간: 5-10초
- 지원되는 런타임: Node.js와 Python의 특정 버전만
- VPC 내 리소스 접근, 환경 변수, 계층, AWS X-Ray 등 일부 Lambda 기능 지원 안 함
- 요청 본문 크기 제한: Viewer Request 40KB, Origin Request 1MB
7 결론
- Lambda@Edge는 콘텐츠 전송 속도 향상, 개인화된 사용자 경험 제공, 보안 강화 등 다양한 이점을 제공합니다.
- AWS의 글로벌 인프라를 활용하여 전 세계 사용자에게 높은 성능과 가용성을 제공합니다.
- 서버리스 아키텍처로 인프라 관리 부담을 줄이고 비용 효율적인 솔루션을 구현할 수 있습니다.