AWS(Amazon Web Service)

[AWS] 솔루션 설계자 관점의 Serverless - Lambda@Edge & CloudFront Functions

yunseohhe 2024. 12. 11. 22:51

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 요청 본문에도 바로 액세스 할 수 있다.
  • 다양한 사용자 지정이 가능하다.