Customization At The Edge (엣지에서의 사용자 지정)
- 보통은 함수와 애플리케이션을 특정 리전에서 배포하지만 CloudFront를 사용할 때는 엣지 로케이션을 통해 콘텐츠를 배포한다.
- 모던 애플리케이션에서는 애플리케이션에 도달하기 전에 엣지에서 로직을 실행하도록 요구하기도 한다.
- 이를 엣지 함수라고 하며, CloudFront 배포에 연결하는 코드이다. - 이 함수는 사용자 근처에서 실행하여 지연 시간을 최소화하는 것이 목적이다.
- CloudFront에는 두 종류의 함수가 있다.
- CloudFront 함수
- Lambda@Edge : 엣지 함수를 사용하면 서버를 관리할 필요가 없다. (전역으로 배포되기 때문에) - 사용 사례
- CloudFront의 CDN 콘텐츠를 사용자 지정하는 경우
: 사용한 만큼만 비용을 지불하며 완전 서버리스이다.
CloudFront Functions & Lambda@Edge의 사용사례
- 웹 사이트 보안과 프라이버시
- 엣지에서의 동적 웹 애플리케이션
- 검색 엔진 최적화(SEO)에 활용 가능
- 오리진 및 데이터 센터 간 지능형 경로에 활용
- 엣지에서의 Bot Mitigation(봇 완화)
- 실시간 이미지 변환
- A/B 테스트
- 사용자 Authentication(인증) 및 Authorization(권한 부여)
- 사용자 Prioritization (우선 순위 지정)
- 사용자 Tracking(추적) 및 Analytics(분석) 등등
CloudFront Functions
- 일반적인 CloudFront의 요청 처리 과정은 화면의 도식과 같다.
- CloudFront에 클라이언트가 요청을 보내는 것을 뷰어 요청이라고 한다.
- 클라이언트가 뷰어니깐 - 그런 다음 CloudFront가 오리진 요청을 오리진 서버에 전송한다.
- 서버가 CloudFront에 오리진 응답을 보내고 CloudFront가 클라이언트에게 뷰어 응답을 전송한다.
- CloudFront 함수는 JavaScript로 작성된 경량 함수로 뷰어 요청과 응답을 수정한다.
- 확장성이 높고 지연 시간에 민감한 CDN 사용자 지정에 사용된다.
- 시작 시간은 1밀리초 미만이며 초당 백만 개의 요청을 처리한다.
- 뷰어 요청과 응답을 수정할 때만 사용된다. - CloudFront가 뷰어로부터 요청을 받은 다음에 뷰어 요청을 수정할 수 있고 CloudFront가 뷰어에게 응답을 보내기 전에 뷰어 응답을 수정할 수 있다.
- CloudFront의 네이티브 기능으로 모든 코드가 CloudFront에서 직접 관리된다.
- CloudFront 함수는 고성능, 고확장성이 필요할 때 뷰어 요청과 뷰어 응답에만 사용된다.
Lambda@Edge
- 이 함수는 Node.js나 Python으로 작성하며 초당 수천 개의 요청을 처리할 수 있다.
- 모든 CloudFront 요청 및 응답을 변경할 수 있다.
- 뷰어 요청은 앞서 본대로고 오리진 요청은 CloudFront가 오리진에 요청을 전송하기 전에 수정할 수 있다.
- 오리진 응답은 CloudFront가 오리진에서 응답을 받은 후에 수정된다.
- 뷰어 응답은 CloudFront가 뷰어에게 응답을 보내기 전에 수정된다.
- 함수는 us-east-1 리전에만 작성할 수 있다.
- CloudFront 배포를 관리하는 리전과 같은 리전이다. - 함수를 작성하면 CloudFront가 모든 로케이션에 해당 함수를 복제한다.
CloudFront Functions vs Lambda@Edge
- 가장 눈에 띄는 차이점은 런타임 지원이다.
- CloudFront는 JavaScript, Lambda@Edge는 Node.js와 Python을 지원한다. - CloudFront 함수의 확장성은 매우 높다.
- 수백만 개의 요청을 처리
- Lambda@Edge는 수천 개 수준인 반면에 - 트리거가 발생 위치도 크게 다르다.
- Lambda@Edge는 뷰어와 오리진 모두에게 영향을 미치는 반면
- CloudFront 함수는 뷰어에만 영향력이 있다. - CloudFront 함수의 최대 실행시간은 1밀리초 미만으로 아주 빠르고 간단한 함수이고, Lambda@Edge는 실행에 5~10초가 소요된다.
CloudFront Functions vs Lambda@Edge - 사용사례
CloudFront Functions
- 캐시 키를 정규화한다.
- 요청 속성을 변환하여 최적의 캐시 키를 생성한다. - 요청이나 응답에 HTTP 헤더를 삽입, 수정, 삭제하도록 헤더를 조작한다.
- URL을 다시 쓰거나 리디렉션한다.
- 요청을 허용 또는 거부하기 위해 JWT를 생성하거나 검증하는 요청 인증 및 권하 부여에도 사용된다.
- 모든 작업이 1밀리초 이내에 이뤄진다.
Lambda@Edge
- 실행 시간은 10초가 걸릴 수도 있다.
- CPU와 메모리가 증가하므로 여러 라이브러리를 로드할 수 있고 타사 라이브러리에 코드를 의존시킬 수 있다.
- SDK에서 다른 AWS 서비스에 액세스 할 수 있도록 - 네트워크 액세스를 통해 외부 서비스에서 데이터를 처리할 수 있어 대규모 데이터 통합도 수행할 수 있다.
- 파일 시스템이나 HTTP 요청 본문에도 바로 액세스 할 수 있다.
- 다양한 사용자 지정이 가능하다.
'AWS(Amazon Web Service)' 카테고리의 다른 글
[AWS] 솔루션 설계자 관점의 Serverless - RDS 람다 호출 및 이벤트 알림 (0) | 2024.12.13 |
---|---|
[AWS] 솔루션 설계자 관점의 Serverless - Lambda in VPC (0) | 2024.12.12 |
[AWS] 솔루션 설계자 관점의 Serverless - Lambda (0) | 2024.12.10 |
[AWS] 솔루션 설계자 관점의 Serverless (0) | 2024.12.09 |
[AWS] AWS's containers - AWS App2Container (A2C) (0) | 2024.12.08 |