참고
개발과정
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 등을 설치하려고 코드를 작성했으나, 실제로 설치되었는지 확인하기도 힘들고, 잘못된 코드를 입력해도 서버가 그대로 생성되므로 코드를 제거했다.