현재 인프라에는 문제점이 많다.
현재 개인적으로 진행하는 개인 프로젝트의 인프라 구조에는 사실 문제점이 굉장히 많다.
S3 부분은 제외 하고 얼추 구조도를 그려보면, 위처럼 표현이 가능하다.
사실 문제점이 굉장히 많은데, LB 자체에 물려있는 EC2도 하나고 EC2 하나에서 하는 작업도 굉장히 많다.
DB도 전부 내장으로 처리되어 있어서 EC2가 죽게 되면 큰일이다.
이와 같은 문제점들이 있어서, DB의 자동 백업을 진행하고 S3에 자동적으로 업로드 되게끔 처리 해 두긴 했지만 이건 해당 구조가 아니더라도 일반적으로 DB 자동백업은 처리해 두는 것이 좋은 편이라, 당연히 해야 하는 작업이다.
심지어 EC2 내부에서 cron으로 데이터 동기화 처리도 진행되고 있고, 각 어플리케이션의 컴파일도 내부에서 처리중이다. 이러한 EC2의 성능은 무려.. t3 micro..로 작업 중이다.
비용적인 측면이 없다면 당연히, 위 구조에서 적합한 구조도는 아래와 비슷할 것이다.
물론, EC2는 더 여러개로 구축이 가능하고, 각 디비는 서버와 연결이 되어 있을 것이다.
각 EC2별로 안정성도 생기게 되고, 데이터 동기화 서버가 따로 존재하기 때문에 EC2에 부담도 덜 된다.
하나의 EC2가 죽게 되더라도 LB의 target이 여러 EC2로 연결되어 있어서 어플리케이션이 돌아가는데 있어서 크리티컬한 오류가 발생하지도 않을 것이고,
DB가 외부에 존재해 EC2가 죽더라도 데이터베이스는 안전할 것이다.
위와같은 구조도로 작업을 하게 된다면, AWS CloudFormation을 사용하여 각 어플리케이션 별 필요한 세팅을 설정해두고, EC2를 손쉽게 생성 하여 문제도 빠르게 처리 할 수 있다.
하지만 이러한 장점들을 전부 이겨내는게 현실적인 문제..인 비용 문제 때문에, 실질적으로는 내가 구성한 인프라처럼 구축하는 경우가 상당히 많다.
그럼, 비용적인 측면을 고려해서 손쉽게 EC2를 복구하는 적합한 방법은 무엇일까?
위에서도 언급했듯, AWS CloudFormation을 이용하여 EC2 기본 세팅값을 처리해야 한다.
EC2가 죽더라도, 쉽게 복구가 가능할 것이다.
여기에 도커 이미지와 컨테이너도 이용할 것인데, EC2 내부에는 각종 설정에 필요하거나 최추 구축시 데이터베이스에 백업할 데이터를 불러와서 저장해주고 EC2 컨테이너에 마운트 하여 데이터 복구와 설정값들을 넣어 줄 것이다.
(예를 들면 .env 파일)
도커 이미지 자체에 .env파일을 COPY 명령어로 넣어준다던가 하는 방식도 존재하겠지만, 보안 문제상 해당 파일들은 외부로 유출되면 안된다.
AWS CloudFormation은 기본적으로 외부에 유출될 걱정이 없기 때문에 IAM 키값들을 사용 할 수 있고 이에 따라 S3에 백업해둔 데이터를 EC2 초기 데이터로 넣어 줄 수 있을 것이다.
위와 같이 변경하게 될 경우 수정하거나 추가해야 될 사항들을 먼저 살펴보면
- gitAction->ansible로 자동배포 하던 부분을 gitAction->docker-compose로 수정
- dockerFile 생성
- AWS CloudFormation으로 EC2 세팅 (해당 EC2 에서는 기본 설정값들과 docker 컨테이너, docker-compose 파일들로 구성)
위처럼 구현해야 할 것이다.
비록 하나의 EC2를 돌려야 한다는 점으로 EC2 내부에서 데이터 동기화도 하고 컴파일도 진행하지만, 손쉽게 EC2가 복구가 가능하기 때문에 갑작스럽게 죽어버리는 EC2에 대하여 빠르게 대응이 가능 할 것이다.
먼저 AWS CloudFormation으로 도커 부분을 제외 하고 해야되는 작업이라면
- EC2 생성
- AWS CLI을 이용하여 DB 백업 데이터 가져오기
- LB의 target 그룹에 생성된 EC2 추가
- 고정 IP값을 EC2에 넣어주기
정도의 작업이 있을 것이고, DockerFile 쪽에서 해줘야 하는 작업은
- PHP Setting
- Nginx Setting
- Pm2 Setting
- 각 Application Setting
- NVM, NPM 세팅
- MongoDB 세팅
- Mysql 세팅
이 존재 할 것이다.
필요한 docker-compose 들은
- 자동배포
- 포트 매핑
- 파일 마운트
정도로 생각된다.
일단 뇌피셜로 정리는 해보았고, 작업해보면서 필요한 부분들을 메꿔가봐야 겠다.
'프로그래밍 일지' 카테고리의 다른 글
[AWS CloudFormation] EC2 생성 및 탄력적 IP 자동 부여Infra (0) | 2023.06.20 |
---|---|
EC2 내부 mysql / mongodb 자동 백업 이후 S3 업로드 (0) | 2023.06.05 |