CloudFront와 ALB를 연동해 보기
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 CloudFront와 ALB를 연동해서, CloudFront 도메인 주소를 통해서 ALB -> EC2로 접속하는 방법을 정리해 봤습니다.
해보고 싶은 것
이번 블로그에서 구축할 환경을 아키텍쳐로 그려봤습니다.
CloudFront 도메인으로 접속하면 Application Load Balancer를 통해 EC2로 접속하게 됩니다.
HTTPS로 접속할 생각이기 때문에, Route53와 ACM을 통해 도메인을 등록할 필요가 있습니다. 도메인 등록 방법은 아래 블로그를 참고해 주세요.
EC2 및 기본 환경 생성
보안 그룹과 NAT Gateway
먼저 보안 그룹을 생성합니다. ALB의 보안 그룹은 인바운드 규칙에서 HTTPS 포트를 열고, 소스 0.0.0.0으로 설정합니다.
EC2의 보안 그룹에는 HTTP 포트를 열고, 소스는 ALB의 보안 그룹을 선택합니다. 그리고 SSH 포트를 열고 소스는 내IP를 선택합니다.
여기서 Bastion Host를 세워서 Private Subnet에 접속하는 방법과 같은 여러 접속 방법이 있으니 아래 블로그를 참고해 주세요.
Session Manager 블로그의 경우 NAT Gateway 대신 엔드포인트를 사용하고 있는데, 이번에는 엔드포인트 대신 NAT Gateway 사용해서 접속해 보도록 하겠습니다.
NAT Gateway 생성에서 서브넷은 Public을 선택하고「탄력적 IP 할당」을 클릭한 다음 NAT Gateway 생성을 끝마칩니다.
이어서 Private 서브넷의 라우팅 테이블에서 NAT Gateway를 설정합니다.
IAM Role 및 EC2 생성
먼저 IAM -> 역할로 들어와서 역할 만들기 버튼을 클릭합니다.
EC2를 선택하고 다음으로 넘어갑니다.
AmazonSSMManagedInstanceCore를 선택한 다음, 적절하게 IAM Role이름을 입력하고 IAM Role 생성을 끝마칩니다.
이어서 EC2 생성에서 조금 전 생성한 IAM 역할을 선택하면 됩니다.
EC2 인스턴스가 생성 되면, Session Manager로 접속합니다.
yum update -y yum install httpd-2.4.51 -y systemctl start httpd systemctl enable httpd httpd -v
그리고 위 명령어로 아파치를 설치합니다.
ALB 생성
이제 ALB를 생성합니다.
로드 밸런서 이름을 입력하고, 나머지는 디폴트 값으로 넘어갑니다.
VPC를 선택해주고, 서브넷은 Public Subnet을 선택합니다.
이전에 만들어 두었던 보안 그룹을 선택하고, 리스너에서 프로토콜은 HTTPS로 선택합니다.
이어서 대상 그룹 생성 버튼을 눌러서 타겟 그룹을 생성합니다.
이어서 타겟 그룹 이름을 적어주고, 프로토콜은 HTTP 80번 포트로 설정합니다.
대상에 EC2 인스턴스를 추가해주고, 대상 그룹 생성 버튼을 클릭합니다.
이제 리스너에서 조금 전 생성한 타겟 그룹을 추가하고, 보안 리스너에서 SSL 인증서를 선택하고 ALB 생성을 끝마칩니다.
마지막으로 Route53에서 레코드를 생성합니다.
이제 도메인 주소로 들어가 보면, 아파치 페이지가 표시 되는 것을 확인할 수 있습니다.
CloudFront 생성
CloudFront 생성으로 들어가서, 원본 도메인에는 ALB로 접속했던 도메인 주소를 적어줍니다.
CNAME에는 접속할 도메인 주소를 적어주고(ALB에서는 alb.test.com 느낌으로 적어줬다면 이번에는 cf.test.com 느낌으로 적어줬습니다.)
버지니아에 생성 되있는 SSL 인증서를 선택하고 CloudFront 생성을 끝마칩니다.
ALB와 마찬가지로 Route53로 들어가서 레코드를 생성합니다. 도메인 주소에는 CloudFront에서 입력했던 CNAME을 입력합니다.
이제 CloudFront 도메인 주소로 접속해 보면 아파치 웹 페이지가 표시 되는 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.