[AWS] Lambda@Edge와 CloudFront Function란? 차이점까지 쉽게 정리
◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
TL;DR
특징 | CloudFront Function | Lambda@Edge |
지원 언어 | JavaScript | Node.js, Python |
실행 속도 | 빠름 (단기, 단순 작업에 최적화) | 상대적으로 느림 (복잡한 작업에 적합) |
용도 | 간단한 요청 및 응답 처리 | 복잡한 로직 처리 및 비동기 작업 |
Lambda@Edge = "Lambda" + "CloudFront"
Lambda@Edge
Lambda@Edge는 Lambda를 통해 CloudFront의 Edge Location(엣지 로케이션)에서 코드를 실행할 수 있도록 지원하는 서비스이다.
전 세계에 분산된 CloudFront Edge Server에서 Lambda 함수를 실행하여 더 낮은 대기 시간로 콘텐츠를 전달한다.
(사실 좀더 구체적으로는 Cloudfront regional edge cache라는 곳에서 실행된다고 한다)
Lambda@Edge 특징
- 현재 Node.js와 Python으로만 작성할 수 있다. 다른 언어(예: Java, Go, .NET 등)는 지원하지 않는다
- Lambda@Edge는us-east-1 region에서만 작성 가능하다. (다른 리전에서 작성할려하면 에러가 띈다)
- – 최대 메모리 사이즈(max):128 MB, Timeout : 5초
- Lambda@Edge 만드는 법
- Lambda 함수 생성 > Lambda 코드 작성
- CloudFront와 연동: Lambda 함수에서 "Action" > "Deploy to Lambda@Edge" 선택
Lambda@Edge가 실행되는 이벤트
CloudFront distribution에서 다음과 같은 CloudFront event(이벤트)가 발생할 경우, Lambda@Edge를 trigger(트리거)하여 실행시킬 수 있다.
- Viewer Request ...사용자가 CloudFront에 요청을 보낼 때 실행
- Origin Request ...CloudFront가 Origin 서버로 요청을 전달하기 전에 실행
- Origin Response ...Origin 서버에서 응답을 받은 후 CloudFront가 응답을 사용자에게 전달하기 전에 실행
- Viewer Response ...CloudFront가 사용자에게 응답을 보내기 전에 실행
자세한 설명 (AWS 공식 문서):
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-cloudfront-trigger-events.html
CloudFront Function
CloudFront Function도 Lambda@Edge와 비슷하다
전 세계적으로 분산된 엣지 로케이션에서 코드를 실행시킬 수 있다.
CloudFront Function 특징
- 단순한 작업에 최적화되어 있다. 빠르고 짧은 실행 시간이 특징이다
- 현재 JavaScript 만 지원하고 있다.
CloudFront Function가 실행되는 이벤트
Lambda@Edge와 달리 다음과같은 이벤트에서만 작동한다.
- Viewer Request
- Viewer Response
[CloudFront Function 만드는 법]
CloudFront Function 사용 예시
Viewer Request(CloudFront가 클라이언트의 요청을 받을 때)에서 요청 헤더에 X-Custom-Header
라는 값을 추가하기
// CloudFront Function for Viewer Request
function handler(event) {
var request = event.request;
// 요청 헤더에 X-Custom-Header 추가
request.headers['x-custom-header'] = [{ key: 'X-Custom-Header', value: 'CustomHeaderValue' }];
// 요청 객체 반환
return request;
}