AWS CloudFront, S3, ALB, Route53 몽땅 연동하기
이렇게 연동할 것이다
그리고 CloudFront 앞단에 WAF를 위치시킬 예정이다
S3 버킷
- 다음과 같이 contents라는 폴더에 파일들을 집어넣었다
로드 밸런서
- 오토 스케일링 그룹으로 EC2 인스턴스 2개를 생성했다. 인스턴스는 각각 다른 AZ의 private 서브넷에 존재한다
- 그리고 ALB의 타겟 그룹에 다음과 같이 등록해둔 상태이다.
- 그리고, 로드 밸런서는 application load balancer를 생성해 리스너 규칙을 다음과 같이 생성했다
- HTTP:80으로 들어온 모든 요청은 타겟그룹으로 전달되도록 했다
Route 53
- 기존에 사용하던 도메인을 Route 53의 호스팅 영역에 등록했다
- 처음 등록하면 네임서버가 자동으로 생성되는데 그 네임서버를 기존 호스팅 업체인 가비아에 등록했다.
WAF
- AWS WAF - Web ACLs - Web ACL 생성하기
- 이름 : 알아서 지정
- Resource type : Amazon CloudFront distributions
- Associated AWS resources : [Add AWS resources] - 생성한 CloudFront 배포 선택
- Next
- 규칙은 [Add managed rule groups]를 선택해서 비용 안드는거 아무거나 활성화하기
- 다 다음다음해서 생성완료 하기
CloudFront
- CloudFront 배포를 생성해보자.
- 하나의 배포에 두 가지 원본을 생성할 것이다.
[원본]
- 원본 도메인 : 생성한 S3 버킷 선택
- S3 버킷 액세스 : 원본 액세스 제어 설정(권장)
- Origin access control
- [제어 설정 생성] 선택
- 기본값 그대로 두고 생성하기
- 이름은 변경해도 된다
- 생성한 OAC(Origin access control) 선택하기
- 이걸 하면 S3 URL로 접근하려고 했을 때 access denied가 나도록 할 수 있다
[기본 캐시 동작]
- 뷰어 프로토콜 정책 : Redirect HTTP to HTTPS
그럼 CloudFront 배포가 생성된다
그리고 생성된 CloudFront 배포로 들어가서 원본 탭 - [원본 생성]
[원본]
- 원본 도메인 : ALB 선택
- 프로토콜 : HTTPS만 해당
그리고 동작 탭 - [동작 생성]
[설정]
- 뷰어 프로토콜 정책 : Redirect HTTP to HTTPS
- 허용된 HTTP 방법 : GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- 웹/와스에서 이미지를 업로드하는 경우도 있을테니 POST도 되도록..
- 캐시 키 및 원본 요청
- 캐시 정책 : CachingDisabled
- 원본 요청 정책 : AllViewer
일반 탭 - [설정] - [편집]으로 가서
[설정]
- AWS WAF 웹 ACL : 이전에 생성한 WAF 선택
- 대체 도메인 이름(CNAME) : 쓸 도메인 이름 생성. 필자의 경우 plum.example.store임
- 사용자 정의 SSL 인증서 : <버지니아 북부>에서 생성한 ACM 인증서 선택 - HTTPS 통신을 하기 위해 인증서가 필요함(없다면 [인증서 요청]을 통해 생성하기. 그냥 도메인 이름 넣고 생성하면 됨! 불친절해서 미안)
이렇게 구성하기
추가적으로 S3 버킷의 contents 라는 폴더로만 전달되도록 경로를 지정하고 싶으면 동작 탭에서 생성된 S3로의 동작 선택 - 경로패턴 - /contents/* 로 수정하기
Route 53 레코드 생성하기
- 생성한 CloudFront로의 레코드를 생성한다
- 레코드 이름에 아까 CloudFront 생성하면서 지정한 CNAME을 입력해준다. 아마, plum.example.store니까, plum을 레코드 이름에 등록하면 되겠지?
- 그리고 별칭을 활성화하고, 트래픽 라우팅 대상 - CloudFront 배포 - 생성된 CloudFront 배포를 선택하고 완료한다
그럼 끗
S3, ALB, WAF, Route53 모두 연동이 완료되었다
그래서 도메인에 들어가보면,
캐싱 전
캐싱 후
다음과 같이 바뀌었음을 확인할 수 있다!