DevOps/Terraform

[Terraform] Terraform과 Ansible 사용하여 3-tier 구현하기 Project

All in Notion

  • 📔 Notion를 가시면 Timeline에 따라 Project 구현 및 진행을 보실 수 있습니다.
  • 🥰 Github은 바로 Project를 실행해 볼 수 있습니다!

 

Background

  • 최근에 배운 기술 2가지를 사용하여 간단하게 만드는 프로젝트를 진행하고자 했다.
  • Terraform과 Ansible을 사용하여 간단한 3-tier를 자동으로 구현할 수 있는 주제로 하였다.

 

PLAN

  • terraform의 기초를 배우면서 Project를 만드는 기간을 포함해서 1달(20.12.25 ~ 21.01.25)을 잡았다.
  • 이미 AWS Cloud Resource를 Web Console을 통해 원하는 것을 조작해서 만들 수 있는 수준으로 자가판단(?)해서 그 부분에 대해서 Design적인 부분보다 그것을 어떻게 IaC로 만들 수 있는가를 고민하는 부분이 많이했다.
    => Architecture에 대한 고민 X, IaC로 구현의 고민 O

 

What is?

  • Terraform : 인프라를 building, changing, 그리고 versioing하는 안전하고 강력한 도구이다. 프로젝트에서는 AWS를 사용하여 VPC를 구성하고 EC2를 만드는 등 Cloud Resource의 provisioning하는 부분으로 접근하였다.

  • Ansible : 어플리케이션 전개 + 구성관리 + Provisioning 도구이다. 프로젝트에서는 mysql, ansible, flask 등 Package과 그 환경 구성으로 사용했다.

 

Concept

두 기술을 사용하기 때문에 그 역활에 맞는 정확한 구분이 필요했다.

 

[Terraform]

  1. VPC를 생성한다.
  2. SubnetRoute Table을 생성하고 구성한다.
  3. Internet Gateway를 생성하고 VPC에 Attach한다.
  4. 필요한 개수만큼 Security Group을 생성하고 EC2에 Attach한다. 각 Security Group의 in/outbonud의 rules에 대해서는 필요에 의한 변경이 필요하다.
  5. Load Balancer는 Auto Scaling부분과 High Availability 부분에서 필요해서 생성한다.
  6. DB는 RDS를 사용한다.
  7. 필요한 수만큼 EC2 instance를 생성한다. (Ansible Master, WEB, WAS)
  8. Ansible Master Instance에는 Ansible의 기본 환경을 구성한다. ( Ansible 설치, ssh connection, inventory 등 )

[Ansible]

  1. Nginx 설치 및 nginx.conf 설정
  2. Flask 설치 및 환경 구성, App project는 github에서 clone
  3. MySQL 설치 및 환경 구성 (for mysql-client)

 

Architecture

최종적으로 구성된 Project의 Architecture입니다.