본문 바로가기
서버/AWS

[AWS]14. Cloudfront 단일 배포로 웹 서비스 구현 (Route53, ELB, Auto Scaling, S3, RDB)

by jamong1014 2024. 1. 24.
반응형

구성도

 

원리

  • 사용자가 Route53 DNS 접속
  • Cloudfront에서 생성한 캐싱서버로 라우팅
  • Cloudfront의 단일 배포로 정적 데이터는 S3 버킷에 동적 데이터(PHP)는 EC2를 기반한 로드밸런싱을 통해 접속
  • ELB에서 발생한 액세스 로그 또한 S3 버킷에 저장

가정

  • S3 버킷과 ELB 및 Auto Scaling Group이 구현된 상태
  • RDB 구축

실습

  1. Cloudfront 배포 생성
  2. Route53 정책 생성 및 Cloudfront 배포 원본 설정 편집(OAI 생성)
  3. Cloudfront 동작 설정 및 편집
  4. S3 버킷 액세스 로그 설정
  5. 동작 모습

1. Cloudfront 배포 생성

배포 생성 클릭

 

원본 도메인 설정

 

사전에 구축한 ELB 영역을 선택해 주고 나머지는 그대로 냅둬도 된다.

HTTP/HTTPS 어차피 ACM 인증서를 통해 Route53 도메인으로 접속할 거여서 기본으로 설정해도 된다.

 

기본 캐시 동작 설정

 

뷰어 프로토콜 정책은 Redirect HTTP to HTTPS

허용된 HTTP 방법은 3번째 POST Method가 포함된 걸 선택해주면 된다.

(웹 리소스 동작에 GET/POST 동작이 이루어지는 경우)

 

캐시 정책 설정

 

CachingDisabled를 선택하면 해당 ELB에 대해서는 캐싱을 하지 않는다.

이 정책을 선택한 이유는 먼저 동적 콘텐츠는 기본적으로 캐싱을 하지 않는다.

그리고 즉각적인 동적인 반응은 원본에 대해서 요청이 이루어져야 하기 때문에 원본 요청 정책에 대해 세부적으로 설정이 되어 있지 않으면 PHP의 세션 기능이 활성화되지 않는다.

 

즉 정적인 콘텐츠는 모두 S3에 의해 호스팅 될거기 때문에 동적인 콘텐츠는 그대로 원본 서버로 응답받는다.

 

WAF는 본 실습에 굳이 필요 없기에 비활성화

 

대체 도메인 설정

이 부분이 중요하다.

이 부분은 Route53을 먼저 설정하고 편집을 통해 설정하겠다. 

(빈칸으로 냅두고 배포 생성)


2. Route53 정책 생성 및 Cloudfront 배포 원본 설정 편집(OAI 생성)

 

Route53 정책 설정

레코드 생성은 본 이미지처럼 설정해 주면 된다.

(방금 생성해 준 캐싱 서버로 라우팅 정책)

 

이제 다시 Cloudfront 대시보드로 이동해 준다.

 

원본 추가 생성

 

원본 추가 설정

 

S3로 정적 웹 호스팅 하는 게 아니기 때문에 S3의 엔드 포인트가 아닌 버킷 엔드포인트를 선택

(그냥 눌러서 나오는 건 선택하면 됨)

 

- 원본 액세스 제어 설정(권장)

이 부분이 OAI 생성 부분이다.

*OAI는 외부에서 접근이 불가능하고 오로지 Cloudfront를 통해서만 접근이 가능하게 하는 설정이다.

 

- 제어 설정 생성 선택

 

제어 설정 생성

OAI를 생성하는 건 매우 간단함

위 이미지대로 생성하면 됨

 

생성해 준 OAI를 선택해 주고

정책 복사 - S3 버킷 권한으로 이동

 

권한 정책에 그대로 복사한걸 붙여넣기 해주면 된다.

 

여기까지 완료했으면 원본 생성해 주면 된다.

 

S3, ELB 두개의 원본이 생성된 모습


3. Cloudfront 동작 설정 및 편집

 

동작 생성

현재는 ELB만 생성되어 있는 상태

 

 

경로 패턴은 S3 버킷 안에 정적 파일이 들어있는 경로를 설정해 주면 된다.

원본 및 원본 그룹은 S3 버킷 선택(동작은 S3의 엔드포인트를 이용)

나머지는 기본 옵션

 

캐시 키 및 원본 요청

 

S3 버킷은 정적 콘텐츠를 캐싱해야 하기 때문에 CachingOptimized를 선택하면 된다.

- 생성

 

 

이제 아까 빈칸으로 냅둔 부분을 수정해 줄 거다.

일반 - 편집

 

 

대체 도메인에 아까 Route53에서 생성한 정책의 도메인을 추가해 주고, 사용자 정의 SSL 인증서에는 '인증서 요청'을 통해 ACM을 생성해 주고 해당 도메인 인증서를 선택해 주면 된다.

 

 

- 기본값 루트 객체 본인의 index 파일로 지정

- 변경 사항 저장

 

이렇게 설정이 되면 우선순위가 S3 버킷이 먼저이고 로드될 때 S3 버킷에 객체가 없으면 ELB를 통해 동적 콘텐츠로 라우팅 하는 방식이다.


4. S3 버킷 액세스 로그 설정

 

[AWS]13. S3 버킷에 ELB Access Log 저장

Enable access logs for your Application Load Balancer - Elastic Load Balancing Enable access logs for your Application Load Balancer When you enable access logs for your load balancer, you must specify the name of the S3 bucket where the load balancer will

jamong1014.tistory.com


5. 동작 모습

 

이제 EC2 인스턴스에 대한 웹 리소스를 수정해 주면 된다.

로드되는 정적 콘텐츠를 Cloudfront을 도메인을 기준으로 상대 경로로 다시 수정해주면 된다.

 

이렇게 되면 OAI를 설정했기 때문에 Cloudfront 도메인 외에는 접근할 수 없게 된다.

 

ELB 도메인으로는 접근 안됨

 

Cloudfonrt 도메인으로 라우팅 된 Route53 도메인으로는 접근이 되는 모습

 

로그인(동적 콘텐츠)
정상적으로 동적 콘텐츠가 작동되는 모습

 

정적 콘텐츠는 Cloudfront에 의해 캐싱되는 모습

반응형

댓글