AWS

AWS Cloudfront란? / Canary 및 Blue-Green 배포

Somaz 2023. 4. 3. 20:00
728x90
반응형

Overview

2022.11.11 - [Networking, Security, Protocols] - CDN이란?

이전에 CDN에서 대해선 자세히 공부한 내용이 있다.

 

AWS Cloudfront 설정방법과 요소에 대해 공부해보려고 한다.

https://aws.amazon.com/ko/cloudfront/


AWS Cloudfront(CDN)란?

Amazon CloudFront는 뛰어난 성능, 보안 및 개발자 편의를 위해 구축된 콘텐츠 전송 네트워크(CDN) 서비스이다.

 

CloudFront는 정적 및 동적 웹 페이지, 이미지, 비디오, API와 같은 웹 콘텐츠를 전 세계 사용자에게 빠르게 제공하도록 설계되었다. 엣지 로케이션 네트워크 전체에 콘텐츠를 배포함으로써 지연 시간을 줄이고 성능을 개선하며 웹 애플리케이션의 사용자 경험을 향상시킨다.

 


 

AWS CloudFront의 주요 기능 및 이점

 

글로벌 배포(Global distribution)

CloudFront는 여러 지리적 지역에 분산된 엣지 로케이션 네트워크를 사용하여 콘텐츠를 사용자에게 더 가까이 제공할 수 있으므로 지연 시간이 줄어들고 로드 시간이 빨라진다.

 

다른 AWS 서비스와의 통합(Integration with other AWS services)

CloudFront는 Amazon S3, Amazon EC2, Elastic Load Balancing 및 AWS Lambda@Edge와 같은 다른 AWS 서비스와 쉽게 통합될 수 있으므로 AWS 플랫폼에서 포괄적이고 확장 가능한 솔루션을 구축할 수 있다.

 

동적 콘텐츠 가속(Dynamic content acceleration)

CloudFront는 연결 유지, TCP 최적화 및 콘텐츠 압축과 같은 기술을 활용하여 정적 콘텐츠와 동적 콘텐츠의 제공을 모두 최적화할 수 있다.

 

캐싱 및 캐시 제어(Caching and cache control)

CloudFront는 엣지 로케이션에서 콘텐츠를 캐싱하여 오리진 서버의 부하를 줄이고 사용자의 지연 시간을 줄인다. 또한 캐시 동작 및 캐시 제어 헤더를 구성하여 다양한 콘텐츠 유형에 대한 캐싱 정책을 미세 조정할 수 있다.

 

보안 기능(Security features)

CloudFront는 SSL/TLS 암호화, DDoS 보호를 위한 AWS Shield, AWS WAF(Web Application Firewall) 통합, 민감한 데이터를 위한 필드 레벨 암호화 등 다양한 보안 기능을 제공한다.

 

사용자 지정(Customization)

CloudFront에서는 Lambda@Edge(에지 위치에서 서버리스 기능 실행), 사용자 지정 헤더, 서명된 URL 및 쿠키, 사용자 지정 오류 페이지와 같은 기능을 사용하여 CDN의 동작을 사용자 지정할 수 있다.

 

비용 효율적(Cost-effective)

CloudFront는 선불 비용이나 장기 약정 없이 종량제 요금 모델을 사용한다. 사용한 데이터 전송 및 요청에 대해서만 비용을 지불하면 되며 대용량 워크로드에 대해 예약된 용량 요금을 활용할 수도 있다.

 

모니터링 및 분석(Monitoring and analytics)

CloudFront는 콘텐츠 전송의 성능과 사용량을 모니터링하고 분석하는 데 도움이 되는 실시간 지표, 로깅 및 보고 기능을 제공한다.


AWS Cloudfront Continuous deployment

Cloudfront의 지속적 배포를 사용하면, Staging 서버에 먼저 테스트하여 변경 사항을 Primary 서버에 안전하게 배포할 수 있다. 그래서 새로운 CDN 구성으로 일부 트래픽을 보내고 예상한 대로 잘 작동하는지 확인할 수 있다.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/continuous-deployment.html?icmpid=docs_cf_help_panel#continuous-deployment-general


Cloudfront 2가지 유형의 트래픽 구성

 

헤더 기반(Header-based)

스테이징 베포로의 리디렉션은 클라이언트 요청에서 헤더를 감지하여 수행할 수 있다. 그러나 이를 위해서는 클라이언트가 CloudFront에 대한 HTTP 요청의 일부로 미리 정의된 사용자 지정 헤더를 포함해야 한다. 해당 방식은 소규모 테스트를 수행하는데 적합하다.

 

가중치 기반(Weight-based)

일반적으로 카나리아 배포(Canary deployment) 라고 하는 가중치 기반을 사용하면 프로덕션 트래픽의 백분율을 정의하여 스테이징 배포로 푸시할 수 있다. 백분율 값은 작게 시작하여 시간이 지남에 따라 증가할 수 있으므로 애플리케이션이나 클라이언트를 변경할 필요 없이 대규모 테스트를 원할하게 수행할 수 있다.

 

https://aws.amazon.com/ko/blogs/networking-and-content-delivery/use-cloudfront-continuous-deployment-to-safely-validate-cdn-changes/

 


 

Canary 및 Blue-Green 배포란?

Canary 및 Blue-Green 배포는 애플리케이션의 새 버전 도입 위험을 최소화하기 위해 소프트웨어 개발에서 널리 사용되는 두 가지 전략이다. 이러한 전략은 업데이트를 점진적으로 롤아웃하거나 새로운 변경 사항을 완전히 구현하기 전에 테스트할 수 있는 병렬 환경을 갖추는 데 중점을 둔다.


 

카나리아(Canary) 배포

카나리아 배포는 새로운 기능, 업데이트 또는 버그 수정이 전체 사용자 기반에 배포되기 전에 소수의 사용자에게 점진적으로 출시되는 전략입니다. 이 접근 방식의 목적은 실제 환경에서 새 버전을 테스트하고 모니터링하여 모든 사람이 사용할 수 있도록 하기 전에 잠재적인 문제를 파악하고 사용자 반응을 측정하는 것이다.

 

카나리아 배포에서는 애플리케이션의 새 버전이 현재 버전과 함께 배포됩니다. 처음에는 사용자 트래픽의 일부가 새 버전으로 전달되고 대부분의 트래픽은 기존 버전에서 계속 제공된다.

 

개발자는 새 버전의 성능, 안정성 및 사용자 피드백을 모니터링하여 필요한 조정을 한다. 새 버전이 성공적이라고 판단되면 롤아웃이 완료될 때까지 나머지 사용자 트래픽은 점진적으로 새 버전으로 이동된다. 문제가 발생하면 프로세스가 중단되거나 취소되어 전체 사용자 기반에 미치는 영향을 제한할 수 있다.

 

아래의 이미지는 애플리케이션이 버전 V1.0이고 새 릴리스 또는 배포가 V2.0을 배포한다고 가정한다. 이 배포는 4단계로 이루어진다. 1단계에서 릴리스는 클러스터에 있는 노드의 25%에서 발생하며 사용자 집합에 의해 테스트된다. 그런 다음 2단계에서는 노드의 50%가 V2.0을, 3단계에서는 75%가, 마지막으로 4단계에서는 노드의 100%가 새 버전을 받게 된다. 

https://digitalvarys.com/canary-vs-blue-green-vs-rolling-deployment/

장점

  • 점진적 롤아웃
    • 카나리아 배포를 통해 새로운 기능을 제어되고 점진적으로 릴리스할 수 있으므로 전체 사용자 기반에 영향을 주지 않고 문제를 식별하고 수정하는 데 도움이 된다.

 

  • 실제 테스트
    • 새 버전은 소수의 실제 사용자에게 노출되어 프로덕션 환경에서 응용 프로그램이 작동하는 방식에 대에 테스트 한다.

 

  • 낮은 위험
    • 소수의 사용자만 새 버전에 노출되기 때문에 문제의 잠재적인 영향이 최소화된다.

 

단점

  • 복잡성
    • 카나리아 배포는 사용자 트래픽의 일부를 새 버전으로 보내고 해당 성능을 모니터링하기 위한 메커니즘이 필요하기 때문에 다른 전략보다 설정 및 관리가 더 복잡하다.

 

  • 긴 배포 시간
    • 카나리아 배포의 점진적 특성은 특히 롤아웃 프로세스 중에 문제가 발견되는 경우 애플리케이션의 새 버전을 완전히 릴리스하는 데 더 오래 걸린다.

 

  • 전체 성능 영향
    • 최종 사용자의 노드 수를 제한하면 전체 성능에 영향을 미칠 수 있다.

 


 

블루-그린(Blue-Green) 배포

블루-그린 배포는 블루와 그린으로 알려진 두 개의 프로덕션 환경이 병렬로 실행되는 전략이다. 한 환경은 활성 상태이고 사용자 트래픽에 서비스를 제공하는 반면 다른 환경은 유휴 상태이다. 애플리케이션의 새 버전을 배포할 준비가 되면 유휴 환경에 배포된다.

 

배포 후 새 버전이 유휴 환경에서 올바르게 작동하는지 확인하기 위해 테스트가 수행된다. 새 버전이 확인되면 트래픽이 활성(Blue) 환경에서 유휴(Green) 환경으로 점진적으로 전환된다.

 

이 프로세스는 로드 밸런서 또는 기타 트래픽 관리 도구를 사용하여 수행할 수 있다. 트래픽 이동 중 또는 이후에 문제가 감지되는 경우 트래픽을 원래 환경으로 다시 전환하기만 하면 이전 버전으로 쉽게 되돌릴 수 있다.

 

아래는 블루-그린 배포가 무엇인지에 대한 간단한 설명이다. 블루와 그린은 두 개의 동일한 프로덕션 환경을 의미한다. 

 

즉, 우리는 두 개의 동일한 프로덕션 환경이 필요하다. 하나는 Blue 또는 스테이징 환경이고 다른 하나는 Green 또는 Production 환경이며 그 중 하나는 한 번에 최종 사용자에게 서비스를 제공한다.

 

https://digitalvarys.com/canary-vs-blue-green-vs-rolling-deployment/

 

장점

  • 다운타임 최소화
    • 블루-그린 배포는 애플리케이션 버전 간에 원활한 전환을 가능하게 하여 배포 프로세스 동안 다운타임을 줄이거나 제거한다.

 

  • 손쉬운 롤백
    • 새 버전에서 문제가 발견되면 원래 환경이 그대로 유지되므로 이전 버전으로 간단하고 빠르게 되돌릴 수 있다.

 

  • 예측 가능한 환경
    • Blue-Green 배포는 각 환경이 격리되고 전용이므로 새 애플리케이션 버전을 테스트하고 검증하기 위해 보다 예측 가능한 환경을 제공한다.

 

단점

  • 리소스 집약적
    • 두 개의 병렬 환경을 실행하면 배포 프로세스 중에 두 배의 인프라 용량이 필요하므로 리소스 집약적일 수 있다.

 

  • 제한된 실제 노출
    • Canary 배포와 달리 Blue-Green 배포는 트래픽이 새 버전으로 전환되기 전에 실제 사용자에게 실제 테스트를 제공하지 않는다. 이로 인해 새 버전이 활성화될 때 발견되지 않은 문제가 발생할 수 있다.

 

  • 높은 비용
    • Identical Two 프로덕션 환경이 있기 때문에 인프라 비용이 매우 많이 든다.

 

 

 

블루-그린 배포 과정

Blue 라고 하는  Production Environment-1  과 Green 이라고 하는 Production Environment-2 가 있다고 가정한다 . 그리고 모든 최종 사용자 트래픽은 Version-1 에 있는 Green Environment로 라우팅된다

 

그런 다음 Blue 환경 을 Version-2 로 업그레이드 한다. 설치가 올바른지 여부를 확인하기 위해 모든 온전성 및 생산 테스트를 수행한다.

 

그 후 Blue 환경에서 프로덕션 테스트를 통과한  후 모든 사용자를  Version 2 와 함께 설치된  Blue환경으로 천천히 라우팅한다

 

마지막으로 동일한 패키지를 Green Environment에 설치하고 최종 사용자를 다시  Green  Environment로 라우팅한다.

 


 

롤링(Rolling) 배포

롤링 배포는 카나리아 배포와 같다. 그러나 차이점은 롤링 배포에서 최신 버전을 단일/방어된 인스턴스 수로 업데이트한다는 것이다.

업데이트를 하나씩 프로세스로 릴리스합니다. 즉, 처음 두 인스턴스에서 배포가 발생하고 그 다음 두 인스턴스에서 점진적으로 그 반대의 경우가 발생한다. 따라서 릴리스의 각 배치에서 테스트가 수행된다.

 

https://digitalvarys.com/canary-vs-blue-green-vs-rolling-deployment/#Rolling_Deployment

 


Reference

AWS CDN 서비스

 

CDN 작업

 

Using CloudFront continuous deployment to safely test CDN configuration changes

 

Amazon CloudFront 지속적 배포를 사용하여 CDN 변경 사항을 안전하게 검증하기

 

Canary vs Blue-Green vs Rolling Deployment

what is Blud Green Deployment?

728x90
반응형

'AWS' 카테고리의 다른 글

AWS IRSA(IAM Roles for Service Accounts)란?  (0) 2023.05.28
AWS VPC란?  (0) 2023.04.07
AWS Secrets Manager란?(OAuth, SSO)  (0) 2023.04.01
AWS CLI 정리  (0) 2023.03.31
AWS IAM이란?  (0) 2023.03.30