엣지 함수를 사용한 사용자 지정
Amazon CloudFront를 사용하면 자체 코드를 작성하여 CloudFront 배포에서 HTTP 요청 및 응답을 처리하는 방법을 사용자 지정할 수 있다. 코드는 최종 사용자(사용자) 가까이에서 실행되어 지연 시간을 최소화하고 서버나 기타 인프라를 관리할 필요가 없다. 코드를 작성하여 CloudFront를 통해 흐르는 요청 및 응답을 조작하고, 기본 인증 및 권한 부여를 수행하고, 엣지에서 HTTP 응답을 생성하는 등의 작업을 수행할 수 있다.
CloudFront 배포에 작성하고 연결하는 코드를 엣지 함수라고 한다. CloudFront는 엣지 함수를 작성하고 관리하는 두 가지 방법을 제공한다.
-
CloudFront 함수 - CloudFront 함수를 사용하면 지연 시간에 민감한 대규모 CDN 사용자 지정을 위해 JavaScript로 경량 함수를 작성할 수 있다. CloudFront 함수 런타임 환경은 밀리초 미만의 시작 시간을 제공하고 초당 수백만 건의 요청을 처리할 수 있도록 즉시 확장되며 매우 안전하다. CloudFront 함수는 CloudFront의 기본 기능이다. 즉, CloudFront 내에서 완전히 코드를 빌드, 테스트 및 배포할 수 있다.
-
Lambda@Edge - Lambda@Edge는 더 가까운 전체 애플리케이션 로직 및 복잡한 함수에 대한 강력하면서도 유연한 서버리스 컴퓨팅을 뷰어에게 제공하는 AWS Lambda의 확장으로, 매우 안전하다. Lambda@Edge 함수는 Node.js 또는 Python 런타임 환경에서 실행된다. 단일 AWS 리전에 함수를 게시하고, 함수를 CloudFront 배포에 연결하면 Lambda@Edge에서 자동으로 전 세계에 코드를 복제한다.
1. CloudFront 함수와 Lambda@Edge 중에서 선택
CloudFront 함수와 Lambda@Edge 모두 CloudFront 이벤트에 대한 응답으로 코드를 실행할 수 있는 방법을 제공한다. 그러나 이 둘을 구별하는 중요한 차이점이 있다. 이러한 차이점은 사용 사례에 적합한 것을 선택하는 데 도움이 될 수 있다. 다음 표는 CloudFront 함수와 Lambda@Edge의 몇 가지 중요한 차이점을 나열한다.
CloudFront 함수 | Lambda@Edge | |
---|---|---|
프로그래밍 언어 | JavaScript(ECMAScript 5.1 호환) | Node.js 및 Python |
이벤트 소스 |
|
|
Scale | 초당 10,000,000건 이상의 요청 | 리전별 초당 최대 10,000건의 요청 |
함수 지속 시간 | 서브밀리초 | 최대 5초(최종 사용자 요청 및 최종 사용자 응답)최대 30초(오리진 요청 및 오리진 응답) |
최대 메모리 | 2MB | 128~3,008MB |
함수 코드 및 포함된 라이브러리의 최대 크기 | 10KB | 1MB(최종 사용자 요청 및 최종 사용자 응답)50MB(오리진 요청 및 오리진 응답) |
네트워크 액세스 | 아니요 | 예 |
파일 시스템 액세스 | 아니요 | 예 |
요청 본문에 대한 액세스 | 아니요 | 예 |
위치 정보 및 장치 데이터에 대한 액세스 | 예 | 아니요(최종 사용자 요청)예(오리진 요청, 오리진 응답 및 최종 사용자 응답) |
CloudFront 내에서 완전히 빌드 및 테스트 가능 | 예 | 아니요 |
함수 로깅 및 지표 | 예 | 예 |
요금 | 프리 티어 이용 가능. 요청당 청구됨 | 프리 티어 없음. 요청 및 함수 기간에 따라 요금이 청구됨 |
CloudFront 함수는 다음과 같은 사용 사례의 단기 실행 경량 함수에 적합하다.
-
캐시 키 정규화 - HTTP 요청 속성(헤더, 쿼리 문자열, 쿠키 및 URL 경로)을 변환하여 캐시 적중률을 개선할 수 있도록 최적의 캐시 키를 생성할 수 있다.
-
헤더 조작 - 요청 또는 응답에서 HTTP 헤더를 삽입, 수정 또는 삭제할 수 있다. 예를 들어 모든 요청에 True-Client-IP 헤더를 추가할 수 있다.
-
URL 리디렉션 또는 다시 쓰기 - 요청 정보에 따라 최종 사용자를 다른 페이지로 리디렉션하거나 한 경로에서 다른 경로로 모든 요청을 다시 쓸 수 있다.
-
요청 권한 부여 - 권한 부여 헤더 또는 다른 요청 메타데이터를 검사하여 JSON 웹 토큰(JWT)과 같은 해시된 권한 부여 토큰을 검증할 수 있다.
CloudFront 함수를 시작하려면 CloudFront 함수를 사용해 엣지에서 사용자 지정 단원을 참조한다.
Lambda@Edge는 다음 시나리오에 적합하다.
-
완료하는 데 몇 밀리초 이상이 걸리는 함수.
-
조정 가능한 CPU 또는 메모리가 필요한 함수.
-
서드 파티 라이브러리(다른 AWS 서비스와의 통합을 위한 AWS SDK 포함)에 의존하는 함수.
-
처리에 외부 서비스를 사용하기 위해 네트워크 액세스가 필요한 함수.
-
파일 시스템 액세스 또는 HTTP 요청 본문에 대한 액세스가 필요한 함수.
Lambda@Edge를 시작하려면 Lambda@Edge를 사용하여 엣지에서 사용자 지정 단원을 참조한다.