원리
- 사용자가 Route53 DNS 접속
- Cloudfront에서 생성한 캐싱서버로 라우팅
- Cloudfront의 단일 배포로 정적 데이터는 S3 버킷에 동적 데이터(PHP)는 EC2를 기반한 로드밸런싱을 통해 접속
- ELB에서 발생한 액세스 로그 또한 S3 버킷에 저장
가정
- S3 버킷과 ELB 및 Auto Scaling Group이 구현된 상태
- RDB 구축
실습
- Cloudfront 배포 생성
- Route53 정책 생성 및 Cloudfront 배포 원본 설정 편집(OAI 생성)
- Cloudfront 동작 설정 및 편집
- S3 버킷 액세스 로그 설정
- 동작 모습
1. Cloudfront 배포 생성
사전에 구축한 ELB 영역을 선택해 주고 나머지는 그대로 냅둬도 된다.
HTTP/HTTPS 어차피 ACM 인증서를 통해 Route53 도메인으로 접속할 거여서 기본으로 설정해도 된다.
뷰어 프로토콜 정책은 Redirect HTTP to HTTPS
허용된 HTTP 방법은 3번째 POST Method가 포함된 걸 선택해주면 된다.
(웹 리소스 동작에 GET/POST 동작이 이루어지는 경우)
CachingDisabled를 선택하면 해당 ELB에 대해서는 캐싱을 하지 않는다.
이 정책을 선택한 이유는 먼저 동적 콘텐츠는 기본적으로 캐싱을 하지 않는다.
그리고 즉각적인 동적인 반응은 원본에 대해서 요청이 이루어져야 하기 때문에 원본 요청 정책에 대해 세부적으로 설정이 되어 있지 않으면 PHP의 세션 기능이 활성화되지 않는다.
즉 정적인 콘텐츠는 모두 S3에 의해 호스팅 될거기 때문에 동적인 콘텐츠는 그대로 원본 서버로 응답받는다.
이 부분이 중요하다.
이 부분은 Route53을 먼저 설정하고 편집을 통해 설정하겠다.
(빈칸으로 냅두고 배포 생성)
2. Route53 정책 생성 및 Cloudfront 배포 원본 설정 편집(OAI 생성)
레코드 생성은 본 이미지처럼 설정해 주면 된다.
(방금 생성해 준 캐싱 서버로 라우팅 정책)
이제 다시 Cloudfront 대시보드로 이동해 준다.
S3로 정적 웹 호스팅 하는 게 아니기 때문에 S3의 엔드 포인트가 아닌 버킷 엔드포인트를 선택
(그냥 눌러서 나오는 건 선택하면 됨)
- 원본 액세스 제어 설정(권장)
이 부분이 OAI 생성 부분이다.
*OAI는 외부에서 접근이 불가능하고 오로지 Cloudfront를 통해서만 접근이 가능하게 하는 설정이다.
- 제어 설정 생성 선택
OAI를 생성하는 건 매우 간단함
위 이미지대로 생성하면 됨
생성해 준 OAI를 선택해 주고
정책 복사 - S3 버킷 권한으로 이동
여기까지 완료했으면 원본 생성해 주면 된다.
3. Cloudfront 동작 설정 및 편집
현재는 ELB만 생성되어 있는 상태
경로 패턴은 S3 버킷 안에 정적 파일이 들어있는 경로를 설정해 주면 된다.
원본 및 원본 그룹은 S3 버킷 선택(동작은 S3의 엔드포인트를 이용)
나머지는 기본 옵션
S3 버킷은 정적 콘텐츠를 캐싱해야 하기 때문에 CachingOptimized를 선택하면 된다.
- 생성
이제 아까 빈칸으로 냅둔 부분을 수정해 줄 거다.
일반 - 편집
대체 도메인에 아까 Route53에서 생성한 정책의 도메인을 추가해 주고, 사용자 정의 SSL 인증서에는 '인증서 요청'을 통해 ACM을 생성해 주고 해당 도메인 인증서를 선택해 주면 된다.
- 기본값 루트 객체 본인의 index 파일로 지정
- 변경 사항 저장
이렇게 설정이 되면 우선순위가 S3 버킷이 먼저이고 로드될 때 S3 버킷에 객체가 없으면 ELB를 통해 동적 콘텐츠로 라우팅 하는 방식이다.
4. S3 버킷 액세스 로그 설정
5. 동작 모습
이제 EC2 인스턴스에 대한 웹 리소스를 수정해 주면 된다.
로드되는 정적 콘텐츠를 Cloudfront을 도메인을 기준으로 상대 경로로 다시 수정해주면 된다.
이렇게 되면 OAI를 설정했기 때문에 Cloudfront 도메인 외에는 접근할 수 없게 된다.
'서버 > AWS' 카테고리의 다른 글
[AWS]16. S3 업로드 이벤트 트리거 Lambda 함수로 SNS 필터 (0) | 2024.03.13 |
---|---|
[AWS]15. OwnCloud와 S3 연동 (feat. SNS Topic) (1) | 2024.03.13 |
[AWS]13. S3 버킷에 ELB Access Log 저장 (0) | 2024.01.24 |
[AWS]12. S3 기반 정적 웹 사이트 호스팅 (Route53, Cloudfront) (0) | 2024.01.20 |
[AWS]11. Amazon DynamoDB 실습 (0) | 2023.02.26 |
댓글