Iac를 통한 AWS Infra 프로비저닝 프로젝트 리뷰

사연있는사람·2024년 1월 26일
0
post-custom-banner

카카오 클라우드 스쿨 교육과정을 이수하며 진행했던 프로젝트에 대해 리뷰해볼려고 합니다.

1. 기술 스택 선정 이유:

Terraform

많은 회사에서 IaC를 통한 인프라 프로비저닝을 하기때문에 경험해 보는것도 도움이 될거라 생각했고
그 중에서도 Terraform을 선정한 이유는 높은 퍼블릭 클라우드 서비스와의 호환성과 교육과정을 진행하며 접해봤던 IaC 스택 중 하나 였기 때문이다.

AWS

프라이빗 클라우드로 온프레미스 환경에서 인프라를 구축하려고 했지만 교육시설의 공인 IP 할당 한계로 인하여 퍼블릭 클라우드를 사용하게 되었고
그 중 에서도 AWS를 사용한 이유는 현재 전세계에서 가장 많이 사용하는 퍼블릭 클라우드 서비스이며 또한 전파진흥협회에서 AWS 비용을 지원해준다고하여 사용하게 되었다.
그렇다고 AWS의 모든 서비스를 활용하는것이 아닌 최대한 오픈소스를 활용하는 방안으로 프로젝트를 진행하기로했다.

GitOps

개발자 관점에서 기존에 사용하고 있던 Git Repository에서 형상 관리하던 방식 그대로 사용하기만 해도 실제 환경에 배포가 가능하며, 배포 결과를 즉시 확인하고 보다 나은 방식을 다시 적용할 수 있어 Jenkins, Argo CD를 활용한 Gitops 방식을 사용하게 되었습니다.

아래는 저희 프로젝트에서 사용한 파이프라인입니다.

Gitlab에서의 Push가 이루어졌을때 발생한 Webhook을 Jenkins에 전달하여 이미지를 빌드한뒤 Docker harbor의 Repository에 저장이 되고 성공적으로 빌드가 이루어지면 ArgoCD에 배포 이벤트를 전송하며 Git Repository에 정의된 매니페스트를 통해 클러스터에 배포가 이루어집니다

Monitoring

멀티리전을 통한 가용성 보장한 인프라이므로 Route53 트래픽 전환을 위해 AWS의 CloudWatch을 사용해야 했지만 오픈소스를 최대한 활용하는게 능력을 기르는데에 좋을거같아 클러스터의 모니터링은 Prometheus + Grafana를 이용하여 모니터링 시스템을 구축하였습니다.

추후에 ELK, EFK를 활용한 로그와 이벤트 데이터 시각화도 추가하였습니다.
요기있습니다.


2. Architecture 구성

Bastion Host

개발자들의 입장을 고려하여 기존의 환경과 동일하게 Git Push가 가능하게끔 Bastion Host를 두었습니다.
VPN을 사용하여 더욱 안전한 환경에서 프로젝트를 진행하면 좋았겠지만 비용, 예산상의 문제로 Public Subnet에 Bastion Host를 두었습니다.

EKS

3개의 AZ에 각각 Master Node가 위치하게끔 클러스터를 구성하였으며
NAT GateWay를 통해 외부로의 접속이 가능하게끔 하였습니다.

RDS

각 리전별로 1개의 RDS를 두고 클러스터링을 통해 연동을 시켰습니다.

Route53

사전 구매한 도메인을 활용하여 AWS의 Route53과 연동시킨뒤 Nginx Ingress Controller를 통하여 로드밸런싱을 진행하였습니다.
또한 리전별로 Health Check를 진행하여 트래픽을 분산, 전환하였습니다.

Cloud Watch

서비스 중단, 임계값 임박 등 상황에 도달하면 경보를 발생시키며 Route53의 트래픽 전환의 기준이 됩니다.

3. 보완사항

3-1. Terraform을 어디까지 사용해야 하나?

  • 테라폼의 한계로 인하여 상세한 설정 불가로 기준을 확실히 하고 프로젝트를 진행하였으면 서비스에 더욱 집중할 시간이 많지 않았을까 라는 아쉬움이 남는다.

3-2. AWS 서비스를 어디까지 사용해야 하나?

  • 프로젝트 초기 비용적인 문제와 더불어 범용성을 위해 오픈소스를 최대한 활용해보고자 하였는데 생각보다 AWS의 고도화된 자동화 때문에 오픈소스간의 호환이 제대로 되지않아 초기에 생각했던것 보다 더많은 AWS 서비스를 사용하게 되었다.
    AWS에 대해 제대로 알지 못하여 발생한 문제로 다양한 퍼블릭 클라우드 서비스에 대해 공부를 해야함을 깨달았다.

3-3. 항상 예산과 시간이 문제

  • 경험의 부재로 발생한 문제로 해보지 않았으니 어떻게 될지 모른다.
    아무리 좋은 가설을 세우더라도 항상 변수는 발생하며 이에대해 어떻게 대응하는지가 중요한듯하다.
    많은 경험을 해보자..

4. 마무리

처음으로 퍼블릭 클라우드를 사용하여 진행해본 프로젝트인 만큼 시행착오도 많고
계획한대로 흘러가지 않았던점이 많았다.
계획대로 되지않아도 그 상황에 맞춰 최선의 선택을 했어야 하는데 그 부분이 미숙했던거같다.
하지만 우여곡절이 많아서 오히려 많은걸 배울 수 있던것 같다.

post-custom-banner

0개의 댓글