최근 오토스케일링 그룹을 만드는 과정에서 애를 좀 많이 먹었다.
처음에 EC2인스턴스를 오토스케일링 그룹으로 만들어주면 알아서 되겠지~ 했다가 많은 삽질을 했다.
그래서 그 삽질한 부분을 정리하려고 한다.
오토스케일링 그룹이란 유동적으로 인스턴스의 수를 관리하는 것이다.
예를 들면 하나의 EC2 인스턴스로 홈페이지를 만들었다고 하자.
평소엔 잘 돌아가다가 갑자기 이벤트를 진행하여 사용자들이 몰렸다. 그래서 서버가 터졌다.
흔히 수강신청, 티켓팅 등 유저들이 몰리면서 서버가 터지는 경우가 있다.
만약 어느정도 유저들이 몰리면 새로운 EC2 인스턴스를 자동으로 생성하고
이벤트가 끝나면 생성했던 EC2를 종료한다면 가격적으로 금상첨화일것이다.
예는 들었지만 내 생각은 수강신청, 티켓팅은 단시간에 몰리는 경우는 오토스케일링이 적합하지 않다고 생각한다.
인스턴스가 생성되고 구동되는 시간이 있기 때문에 1초가 중요한 경우에는 해당하지 않는것 같다.
아무튼 인스턴스를 자동으로 생성하고 삭제하는 오토스케일링 그룹 만드는 법을 정리하려고한다.
1. AMI란?
AMI는 Amazon Machine Image의 약자로 하나의 이미지이다.
도커를 해봤다면 친숙하겠지만 이미지란 대량생산을 위한 양식이라고 생각하면 된다.
결국 오토스케일링에서 인스턴스를 생성할때는 양식이 필요한데 여기서 AMI를 양식으로 쓴다고 생각하면 된다.
2. Template
AMI와 비슷한 기능으로 시작 템플릿이 있다.
EC2를 처음 생성할때 OS를 고르고 pem키를 설정하고 보안 그룹 설정하고... 등등 많은 설정을 해준다.
이때 내가 많이쓰는 조건들을 미리 설정해 놓는것이다.
Template을 사용하면 EC2를 큰 설정없이 빠르게 만들수 있다.
3. AMI와 Template
그렇다면 AMI와 Template을 어떻게 사용할 수 있을까?
내가 가장 삽질했던 부분이다.
AMI는 내 인스턴스를 그대로 이미지로 만들 수 있다.
즉, 안에 설치했던 내용들을 그대로 복사하는 것이다.
이 AMI를 시작 템플릿으로 만든다면 이 템플릿을 사용하여 만든 EC2는 안에 설치했던 파일들이 그대로 남아있는 것이다.
그렇기 때문에 오토스케일링에서 인스턴스를 추가로 생성할 때 이 템플릿으로 만든다면 추가 설정없이 그대로 기존 서버와 같은 환경을 만들어 줄 수 있다.
4. AMI로 Template 만들기
먼저 EC2 인스턴스(ubuntu 22.04)를 생성한다.
나는 docker를 주로 사용하기 때문에 docker를 설치해준다.
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
그 다음 인스턴스를 이미지로 만든다.
이름과 설명을 적고 생성을 누르면 이미지가 생성된다.
생성한 이미지는 AMI에서 확인할 수 있다.
이 이미지를 가지고 바로 인스턴스를 만들수 도 있다.
하지만 나는 시작 템플릿으로 만든 후 오토스케일링 그룹으로 설정해줄 것이다.
시작 템플릿에 들어가 템플릿을 생성해준다.
그 다음 오토스케일링 지침 제공에 체크를 하고 아까 만들었던 AMI를 설정해준다.
cli에 접근할 수 있게 키페어도 미리 설정해주고 보안그룹도 설정해준다. 다른것도 설정해줘도 된다.
그 다음 가장 중요한게 남아있다.
나는 EC2인스턴스에 docker만 설치하고 로그인만 해줬다.
가장 중요한 docker run ~~~~ 이라는 코드를 친적이 없다.
이제 이 부분을 해결할 것이다.
템플릿 가장 아래 고급 세부정보에서 사용자 데이터칸이 있다.
여기서 이 템플릿으로 EC2인스턴스를 생성할 때마다 입력하는 코드를 정해줄 수 있다.
여기서 중요한건 맨 윗줄 코드이다.
#!/bin/bash
linux에서 위 코드가 없다면 script가 실행되지 않는다.
끝
'개발 > AWS' 카테고리의 다른 글
[AWS] aws 서버에 ssh 로 깃설정하기 (ubuntu 22.04) (0) | 2024.01.11 |
---|