배워서 바로 쓰는 14가지 AWS 구축 패턴 | 2
아아- 이것이 "AWS"라는 것이다.
이전 글에서 알아봤던 서비스는 제외하겠다.
웹 서버 다중화
새로운 EC2를 만들어 기존 EC2와 동일한 보안규칙을 설정해주고 서버를 구성한다.
`24. 01. 25. 아래의 포트 포워딩은 불필요하다. EC2의 인바운드와 로드 밸런서 설정만으로도 작동한다.
EC2 인스턴스를 재시작하면 iptables가 초기화되어 HTTP 요청을 받지 못하니 다시 등록해주자.
sudo iptables -t nat -L --line-numbers
해당 명령어로 iptables를 확인할 수 있다.
기존에 설정한 포트 포워딩이 사라졌다면 아래의 명령어로 포트 포워딩을 한다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
EC2 로드밸런싱에서 Application Load Balancer를 생성한다.
서브넷을 2개 이상 매핑한다.
새로운 보안 그룹을 만들어 HTTP, HTTPS 인바운드를 모두 허용한다.
리스너 및 라우팅에서 HTTP를 사용하는 인스턴스 대상 그룹을 생성하고 리스너로 등록한다.
Route 53에서 A 유형이 등록되어있다면 수정, 없다면 레코드를 추가하고 별칭을 예로 변경한다.
Application Load Balancer를 선택, 서울 지역과 방금 생성한 로드밸런서를 선택한다.
로드밸런서의 네트워크 매핑, IPv4의 주소와 서브넷을 복사한다.
EC2 인바운드 규칙은 SSH와 HTTP만 설정하는데, SSH는 내 IP, HTTP는 로드밸런서의 네트워크 매핑 주소를 설정한다.
수차례 새로고침을 해보면 로드밸런서가 알아서 부하가 적은 다른 서버에 요청함을 알 수 있다.
EC2 월간 총 사용시간이 750시간을 넘으면 과금해야 하기에 둘 중 하나는 종료한다.
HTTP와 마찬가지로 HTTPS도 리스너에 등록해주면 https로도 접속된다.
HTTPS를 사용하기 위해선 먼저 Certificate Manager에서 SSL 인증서를 발급해야 한다.
신청한 인증서의 CNAME 레코드 이름과 값을 Route 53에 등록하면 발급이 진행된다.
RDB 관리 서비스
RDS 설정 화면에서 DB 서브넷 그룹을 생성한다.
DB 2개를 활용하는 것은 비용이 발생하기 때문에 프리티어로 활용할 수 있는 1개의 DB만 사용한다.
프리티어를 선택하고 비밀번호를 설정한다.
생성한 DB 서브넷 그룹을 지정하고 VPC 보안 그룹도 새로 생성한다.
가용 영역은 연결할 EC2와 동일한 서브넷을 선택한다.
이제 데이터베이스 생성을 누르면 된다.
데이터베이스 생성이 완료되고 나면 EC2와 연결한다.
정적 콘텐츠 배포
S3는 기본값으로 생성만 하면 되니 어렵지 않다.
CDN(Content Delivery Network) 정적 콘텐츠 배포
CloudFront에서 배포 생성하기를 누른다.
원본 도메인을 S3로 선택한다.
원본 액세스 제어 설정에서 Origin access control에 Origin type: S3를 선택한다.
웹 애플리케이션 방화벽에서 보안 보호를 활성화한다.
사용자 정의 SSL 인증서를 발급받아 설정한다.
이번에는 다른 조치할 필요 없이 기다리면 금방 발급된다.
이제 배포 생성을 누르면 된다.
아래 링크에서 정적 파일 CloudFormation으로 배포하기의 Launch stack을 클릭해서 설정되어 있는 기본값으로 스택을 설정한다.
S3에 이미지 파일을 올리고 CloudFront의 배포 도메인/이미지 파일 이름으로 접속하면 정상적으로 이미지가 출력되는 것을 확인할 수 있다.
막상 완성하고 보면 별거 없는데 만드는 과정은 결코 쉽지 않았다.
수많은 시행착오와 구글링을 거쳐 겨우겨우 완성했기에 너무 기분이 좋다.
조만간 있을 팀 프로젝트에서 활용해도 좋을거 같다.
얼마 전에 있었던 AWS 온라인 컨퍼런스를 들었다고 AWS에서 인증서를 보내줬다.
앞으로 더 많은 AWS 행사에 참여할 수 있도록 실력을 갖춰야겠다.