2021.08.20 - [AWS] - [AWS] Public Subnet, Private Subnet, ALB, ASG 를 이용한 서버 아키텍쳐 구축(1) - VPC 구축하기
이전 블로그 에서 VPC, Subnet, 라우팅 테이블 등 네트워크 관련하여 구축을 하였다면 오늘 블로그에서는 네트워크 안에 서버를 직접 만들어 보려고 합니다. EC2를 그냥 만드는 것이 아니라 트래픽에 따라서 서버의 갯수를 늘렸다가 줄였다가 하기 위해 AutoScaling group이라는 것을 만들어 보려고 합니다.
간략히 설명을 하자면 ASG(AutoScaling group)는 트래픽이나 CPU 사용률등 개발자가 설정한 규칙에 따라서 서버를 늘리고 줄이고 할 수 있는 서비스 입니다. 서버를 감소시킬 때 있는 서버를 종료시키면 되는데 서버를 늘릴 때 어떻게 늘릴 수 있을까요? 단순히 늘리기만 하는게 아니라 늘린 서버도 기존 서버와 같은 역할을 해야 합니다. 그러기 위해서는 시작 템플릿이라는 것을 만들어야 합니다. 시작 템플릿은 ASG에서 서버를 늘릴 때 사용하는 템플릿입니다. 서버를 늘리기 위하여 새로운 서버를 시작할 때 이 시작 템플릿을 실행 시킵니다.
그럼 시작 템플릿은 어떻게 만들 수 있을까요? 시작 템플릿을 만들기 위해서는 이미지라는 것이 필요합니다. 그럼 이미지는 무엇일까요? 어렵게 생각할 필요 없습니다. 우리가 처음 EC2를 만들 때 선택하는 amazon linux 2, ubuntu, window server 등등이 다 이미지입니다. amazon linux2, ubuntu 등 원하는 OS를 선택하여 EC2를 만들고 필요한 서비스들이나 모듈을 해당 서버에 설치하고 이미지화 시키면 이미지가 만들어 집니다. 글로 설명을 하는 것보다 직접 실습을 통해서 이미지와 시작 템플릿과 ASG까지 만들어 보겠습니다.
실습
서버 세팅하기
Autoscaling group을 생성하기 위해 필요한 이미지를 만들기 위해 서버 세팅을 해보려고 합니다. 서버에 apache web server를 설치하고 몇 개의 파일을 만들어주겠습니다.
먼저, public subnet에 amazon-linux-2 이미지로 서버 하나를 만들어 줍니다. private subnet에 autoscaling group을 만들 것인데, 왜 public subnet에 서버를 만들지라고 의문이 생길 수 있습니다. 이미지는 그저 서버에 설치한 파일들이나 서버의 상태를 이미지화 하는 것이고 나중에 autoscaling group을 생성할 때 따로 VPC와 Subnet 설정을 할 수 있기에, 어떤 VPC, subnet안에 만들어도 상관이 없습니다.
ssh를 사용해서 서버에 접속하거나 Amazon console에서 연결을 하거나 session manager를 사용하거나 해서 서버 안으로 접속해 줍니다. 접속을 한 후 다음과 같은 명령어를 입력하여 apache 서버를 설치해 줍니다.
sudo yum install httpd -y
설치를 하였으면 설치가 되었는지 다음과 같은 명령어로 확인해 줍니다.
sudo systemctl status httpd
위의 사진처럼 나오면 설치가 완료된 것입니다. 설치를 완료하고 실행을 시켜주기 위해 다음과 같은 명령어를 입력하고 다시 확인해 줍니다.
sudo systemctl start httpd // httpd 실행시켜주는 명령어
sudo systemctl status httpd // httpd 실행이 되었는지 확인하는 명령어
그러면 다음과 같은 창이 보이고, apache server가 실행이 되었다는 것을 볼 수 있습니다.
이제 apache Document Root 파일에 몇 개의 파일을 만들려고 합니다. apache의 포트 번호, Document Root 파일 위치는 apache 설정파일에서 볼 수 있습니다. 다음과 같이 명령어를 입력하면 설정 파일을 확인할 수 있습니다.
sudo vim /etc/httpd/conf/httpd.conf
위의 명령어를 입력하면 설정 파일 내용을 볼 수 있습니다. 여기서 크게 중요한 내용은 다음과 같습니다.
왼쪽 사진은 apache 포트에 대한 정보입니다. 기본적으로 80번 포트에서 실행이 되고 포트를 바꾸고 싶은 경우 원하는 숫자를 입력하고 apache server를 재시작해주면 됩니다. 오른쪽 사진은 DocumentRoot의 위치입니다. DocumentRoot는 내가 보여주고 싶은 파일의 기본적인 위치 입니다. 위치를 바꿀 수 있지만, 지금은 그대로 사용하겠습니다.
DocumentRoot의 위치를 알았으면 해당 위치로 가서 파일을 3개 만들어 주겠습니다.
cd /var/www/html //apache의 DocumentRoot 파일 위치
sudo vim main
sudo vim health
sudo vim admin
내용은 원하는대로 만들어주면 됩니다. 파일 3개를 만든 이유는 나중에 Load balancer와 연결을 할 때 필요하기 때문입니다. ALB를 다룰 때 더 자세히 설명하겠습니다. 파일들을 만들었으면 결과가 잘 나오는지 확인을 해보겠습니다.
curl -X GET http://localhost:80/main
curl -X GET http://localhost:80/health
curl -X GET http://localhost:80/admin
위의 명령어를 사용하여 요청을 보내면 다음과 같이 결과가 나오는 것을 알 수 있습니다. 꼭 밑에 응답이 아니고 자신이 위에서 만든 파일의 응답이 오게 됩니다.
이러면 서버세팅이 끝이 나게 됩니다. 하지만 여기서 중요한 점이 한 가지 있습니다. 이미지를 만들기 전에 다음과 같은 명령어를 입력해줘야 합니다.
sudo systemctl enable httpd
이 명령어를 간략히 설명하자면, 서버가 재시작을 했을 때 httpd 즉 apache server를 알아서 실행을 시켜주는 명령어 입니다. 이 명령어를 입력해야하는 이유는 서버를 이미지로 만들면 이미지는 실행하고 있는 상태가 아니라 종료되어 있는 상태입니다. 여기서 이 이미지를 이용하여 서버를 실행할 경우에 apache server를 다시 실행시켜줘야 합니다. 직접 수동으로 실행시키려면 모든 서버에 다 접속해야 하지만, 위의 명령어를 통해서 자동으로 실행을 시켜줄 수 있습니다.
위의 명령어까지 입력을 하였으면 이제 서버 세팅은 완료되었습니다!! 다음은 방금 세팅한 서버를 가지고 이미지를 만들어 보겠습니다.
이미지 만들기
서버 세팅이 완료가 되었으면, 세팅한 서버를 이용하여 이미지를 만들어 보려고 합니다. 이미지를 만드는 방법은 간단합니다. 이미지를 만들 서버의 우클릭을 하고 이미지 및 템플릿을 클릭하여 이미지 생성을 클릭합니다.
이미지 생성을 클릭하면 다음과 같은 창이 나옵니다.
이미지 이름과 설명 칸에 원하는 이름과 설명을 기입합니다. 재부팅 여부와 볼륨이 더 필요하면 추가를 해주고 이미지 생성을 클릭해줍니다.
이미지의 경우 옆에 인스턴스 및에 이미지 AMI를 클릭하여 확인을 할 수 있습니다.
확인을 해보면 현재 상태는 대기중 상태인데 사용 가능으로 바뀌면 그 때 사용 가능한 이미지 형태로 만들어 진 것입니다. 이미지를 만들 때 서버 세팅에 따라 시간이 상이하기에, 시간이 오래 걸린다고 해서 오류가 발생하는 것이 아닙니다.
이미지가 사용가능 상태로 바뀌면 이미지 만들기에 성공했습니다. 이제 이 이미지를 가지고 시작템플릿을 만들어 보겠습니다.
시작템플릿 생성하기
이미지를 가지고 바로 ASG를 만들 수 없습니다. 우리가 이미지만 가지고 서버를 만들 수 없는것과 마찬가지인 이유입니다. 처음에 EC2를 만들 때 이미지를 선택하고 t2.micro, t3.small 등 인스턴스 유형을 선택합니다. 그리고 VPC, subnet등을 선택합니다. 시작템플릿에서도 인스턴스를 선택하고 VPC, Subnet등도 선택할 수 있습니다.
그럼, 이제 시작템플릿을 생성해보겠습니다. 인스턴스 쪽에 시작템플릿을 클릭합니다. 여기서 먼저, Auto Scaling밑에 시작 구성이 있는데 이건 언제 사용하는지 궁금해할 수 있습니다. 예전에는 autoScaling group을 만들 때 시작 구성을 사용했지만, 이제는 시작템플릿을 사용하는 것을 권장한다고 AWS에 나와있습니다. 그래서 시작 구성말고 시작 템플릿을 사용하여 만들어주면 됩니다.
시작템플릿을 클릭하고 템플릿 생성을 클릭하여 줍니다. 그러면 다음과 같은 창이 나옵니다.
시작 템플릿 이름을 입력하고 템플릿 버전 설명도 입력을 해줍니다. 밑에 Auto Scaling 지침 제공을 선택해주면 AutoScaling을 만드는데 필요한 지침이 표시됩니다.
다음은 시작템플릿 콘텐츠 입니다. 애플리케이션 및 OS이미지를 선택을 해줘야 하는데 옆에 필수라고 적혀 있습니다. 위에서 Auto Scaling 지침제공을 선택하면 생기는 옵션입니다. 위에서 만든 이미지를 선택하기 위해서 내 AMI를 선택하고 아까 위에서 만들어준 AMI를 선택해줍니다.
인스턴스 유형의 경우 t2.micro를 선택해줍니다. 키 페어 이름은 해당 ec2를 접속할 때 필요한 키 페어 이름으로 현재 갖고 있는 키 페어를 선택해줍니다.
네트워크 설정의 경우 서브넷과 보안그룹을 선택하는 설정입니다. 서브넷의 경우 ASG 내부에서 따로 설정을 해줄 것이기에 따로 설정을 하지 않아도 됩니다. 보안 그룹의 경우 이미지를 만들기 위해 만든 보안그룹을 선택해 줍니다.
스토리지 구성, 리소스 태그, 고급 세부 정보 등도 확인을 해서 원하는대로 설정을 해주면 됩니다. 고급 세부 정보에서는 IAM 설정과 사용자 데이터, 메타 데이터등 다양한 설정을 할 수 있습니다. 설정을 다하고 나면 시작 템플릿 생성을 클릭하여 시작 템플릿 생성을 해주면 됩니다.
시작 템플릿이 생성이 되었으면 이 템플릿을 갖고 ASG를 만들어 보겠습니다!!
AutoScaling Group 만들기
시작템플릿을 이용하여 ASG를 만들어보겠습니다.
Auto Scaling 그룹을 들어가서 Auto Scaling 그룹 생성을 클릭해줍니다. 그럼 다음과 같은 창이 나옵니다.
ASG이름을 입력하고 이전에 생성한 시작 템플릿을 선택해 줍니다.
다음은 인스턴스 시작 옵션을 선택하는 창입니다.
Auto Scaling group을 만들고 싶은 VPC와 subnet을 선택해줍니다. 저는 앞선 블로그에서 만든 VPC를 선택해주었고 private subnet안에 ASG를 만들 것이기에 private subnet을 선택해 주었습니다.
다음은 고급 욥션 구성 창입니다.
고급 옵션 구성 창에서는 로드밸런서를 선택할 수 있습니다. 로드 밸런서가 있으면 기존 로드밸런서를 선택해주고 새로 만들고 싶으면 새 로드 밸런서에 연결을 선택하면 됩니다. 저희가 만들 서버 아키텍쳐도 ASG를 로드밸런서에 연결을 할 것입니다. 여기서 로드밸런서를 만들어 주지 않고 나중에 따로 만들어서 연결을 해보겠습니다. 밑에 상태 확인의 경우에는 ASG가 EC2 상태를 확인해서 실패한 인스턴스를 자동으로 교체할 수 있고 ELB 상태 확인도 활성화할 수 있습니다.
다음은 그룹 크기 및 조정 정책 구성입니다.
ASG는 정책에 따라서 서버를 늘리거나 줄일 수 있습니다. 이 창에서 처음에 원하는 용량과 서버가 줄어들었을 때 최소한으로 유지할 서버의 수 그리고 늘어났을 때 최대 용량을 설정할 수 있습니다.
다음은 조정 정책입니다.
이 창에서는 조정 정책을 설정할 수 있습니다. 조정 정책은 서버의 수가 늘어나고 줄어드는데 기준이 되는 정책입니다. 평균 CPU사용률이나 네트워크 사용량 등 원하는 지표로 정책을 설정할 수 있습니다.
다음은 태그를 추가하는 창입니다.
이 창에서 태그를 추가하여 ASG에 의해 생성되는 EC2 instance에 태그를 설정할 수 있습니다. 이름 태그를 설정함으로써 ASG를 통해 만들어진 EC2와 직접 만든 EC2를 구별할 수 있습니다.
태그까지 완료했으면 ASG 생성을 완료하였습니다. ASG 생성을 완료한 후, EC2 instance를 보면 다음과 같이 ASG에 의해 생성된 EC2 instance를 볼 수 있습니다.
이렇게 하면 ASG를 만들어 보았고, ASG에 의해 EC2 instance가 잘 만들어졌는지도 확인할 수 있었습니다.
'AWS' 카테고리의 다른 글
[AWS] EC2에 Apache Tomcat 설치하기 (0) | 2022.03.23 |
---|---|
[AWS] EC2 ssh port 변경하기 (2) | 2022.01.19 |
[AWS Storage Service] S3 (Simple Storage Service) 버킷 정책 생성 및 권한 부여 (0) | 2021.09.13 |
[AWS Run Command]Run Command로 원격으로 명령어 실행하기 (0) | 2021.08.20 |
[AWS] Public Subnet, Private Subnet, ALB, ASG 를 이용한 서버 아키텍쳐 구축(1) - VPC 구축하기 (0) | 2021.08.20 |