Search
Duplicate
📒

[Devops Study] 06. 자율배포 - Terraform으로 서버구성하기

상태
완료
수업
Devops Study
주제
4 more properties
참고

개발과정

NOTE
여러대의 서버를 Terraform으로 생성하는데 있어 어떤점을 고려해야하는지 기록한다.

서버환경

.pem키를 제공받은 Xlarge사양의 AWS 서버 2대
프로젝트 종료(5/19)까지 480달러이내로 사용가능한 AWS 계정

목표

6대의 데이터 생성/송신 서버
3대의 Kafka 서버
1대의 Jenkins 서버

Terraform 코드구성

NOTE
Terraform에 대한 개념을 빠르게 학습하고 프로젝트 기간내에 적용하기 위해 GPT에게 요구사항에 맞추어 코드를 시키며 진행했다.
최종 구조

GPT-4를 활용한 코드작성

Terraform 코드 초안작성
Terraform에서 생성한 서버 외부와 통신
Terraform 코드에서 추가적인 요구사항 & 모듈화

AWS 서버간의 통신

NOTE
기존에는 Xlarge의 서버에 Jenkins를 설치하고, Terraform에 있는 각 서버에 배포하려했는데, Terraform에서 생성한 서버는 비용문제로 주기적으로 on/off 시킨다 ⇒ public ip가 계속해서 변경됨
아래는 GPT에게 물어보며 얻은 해결책들이다.
1.
각 서버에 탄력적 IP를 모두 할당한다.
탄력적 IP의 경우 5개의 제한이 있다. (문의해서 해결이 가능하다지만, 근본적인 해결책이 아닌거 같아 넘어감)
2.
베스쳔 호스트 방식 사용
동일 VPC내에서는 서버가 on/off되어도 고정되는 private ip로 통신할 수 있다.
동일 VPC내에 각 서버와 통신할 수 있는 서버를 하나 생성하고, 해당 서버를 중계기 삼아 통신하는 방법이다.
3.
동일 VPC내에 Jenkins 서버 따로두기
2번방식으로 진행하려다가 동일 VPC내에 Jenkins서버를 두면 되지 않나? 라고 생각해서 Jenkins서버를 따로 생성했다.

user_data 사용

NOTE
초기 Ansible을 제대로 알기전에, Terraform에서 user_data를 활용해 서버 프로비저닝이 가능하다는 방법을 알고 사용하려고 했었다.
Ansible을 사용하지 않고, 초기 서버생성시 docker, java 등을 설치하려고 코드를 작성했으나, 실제로 설치되었는지 확인하기도 힘들고, 잘못된 코드를 입력해도 서버가 그대로 생성되므로 코드를 제거했다.