[AWS] EC2 기반의 서버 구성
AWS에서 EC2와 ELB, AutoScailingGroup 등을 이용해서 웹서버를 구성하는 방법을 간단히 다뤄본다.
대충 만들어서 대충 운영할 거라면 그냥 EC2 하나만 띄워서 IP에 도메인달고 그러면 되지만, 확장성있는 서버 구성을 원한다면 로드밸런서가 필수적이다.
아래와 같은 형태로 여러개의 인스턴스들을 띄워 지속적인 scailout이 가능하기 때문이다.
https://cloud.in28minutes.com/aws-certification-elastic-load-balancers-elb
또한 재배포를 할 때에도 새 버전의 인스턴스를 띄워서 로드밸런서에서 스위칭을 하면 되기 때문에, 배포에 있어서도 이점이 크다.
근데 개인적으로, 좋은 배포나 지속적인 스케일링 관리를 원한다면 ec2보단 컨테이너 단위의 관리를 추천한다. ECS라든지, EKS라든지...
인스턴스 관리로 매니징하는건 한계가 좀 있더라.
대신 비용면에서 좀더 저렴한 편이고, Network Loadbalancer로 L4 로드밸런싱을 타기 때문에 성능적 이점이 약간 있다.
대상그룹 만들기
로드밸런서를 만들려면 먼저 대상그룹을 만들어야 한다.
대상그룹은 로드밸런서와 붙어서 인스턴스 목록을 관리해주고, 헬스체크 등을 해주는 역할을 해준다.
인스턴스 타입으로 해서 대강 만들어준다.
적당히 이름만 잘 지어서 만들어주면 끝이다.
인스턴스 등록은 나중에 오토스케일링 그룹이 대행해줄 것이다.
로드밸런서 만들기
인스턴스 타입의 대상그룹을 사용하려면 Network Loadbalancer를 만들어줘야 한다.

이름 짓고,

VPC와 서브넷을 지정해주고

방금 만든 대상그룹을 리스너로 등록해준다.

기본 EC2 이미지 작업하기
먼저 서버 베이스로 사용할 EC2를 작업해준다.
나는 우분투로 시작해서 nodejs 등, 서버에 필요한 디펜던시들을 깔아줬다.

서버 실행도 가능하게 초기화해주고

실행용 스크립트도 구성해준다.

그리고 인스턴스가 시작됐을때 자동으로 부팅되게 하기 위해서 systemd 서비스를 활용했다.
아래 구성을 작성해서
sudo vi /etc/systemd/system/server.service
이런식으로 방금 만든 스크립트를 트리거하도록 했다.
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/bin/sh /home/ubuntu/run.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
그리고 systemctl로 등록하면 끝이다.
sudo systemctl daemon-reload
sudo systemctl enable server.service

서버가 기대한대로 동작하는지 확인한다,

AMI 및 템플릿 구성
그리고 저걸로 이미지와 템플릿을 따놔야 한다.
그래야 오토스케일링 그룹이 저걸 그대로 실행해줄 수 있다.
이미지는 이렇게 따면 되고


템플릿은 이렇게 따면 된다.


오토스케일링 그룹
지속적으로 EC2 인스턴스의 수를 늘리거나 줄이게 하려면 오토스케일링 그룹을 사용해야 한다.
로드밸런서와 연동해서 상태확인을 기반으로 EC2 인스턴스를 직접 띄우거나 줄이는 공급자 역할을 한다.

네트워크 설정 잘 해주고
로드밸런서와 연결도 해준다.
혹시 중간에 터지면 다시 띄울 수 있도록 해주고
용량을 적절히 설정해준다.
이러면 CPU가 튈때 인스턴스를 늘려줄 수 있다.
필요하다면 SNS 등을 활용해 알림을 받게 할 수 있다.
그래서 이렇게 생성되면 잘 된 것이다.
좀 기다리면 스케일링 그룹이 인스턴스를 띄워줄 것이고

대상그룹에서 헬스체크도 잘 되면

로드밸런서로도 접속이 될 것이다.

이외에 CI/CD까지 완전하게 무중단으로 구성하려면 고려할게 좀더 많아진다.
그건 별도 포스트에서 다뤄보겠다.