Terraform을 시작하기 전...

링키텍트·2025년 3월 28일

Terraform

목록 보기
1/2
post-thumbnail

목적

테라폼을 시작해보고는 싶은데 어디서부터 어떻게 시작해야할지 모르는 '나'와 이 글을 읽는 분들께
테라폼을 AWS와 연동하고, AWS 내에 동작하는 리소스를 생성하기 위한 방법을 정리합니다.

뭐부터 시작해야할까?

테라폼 코드를 무작정 작성할 수는 없으니 아래와 같이 단계별로 진행해보려 합니다.

  1. 테라폼 설치하기
  2. 코드 디렉토리 트리 구성하기
  3. 구조 모듈화를 통한 관리 방식 수립하기
  4. 트리 구조에 맞게 코드 작성하기

목표

테라폼 코드 작성 전 저는 아래와 같은 목표를 갖고 작업 진행 예정입니다.
이를 바탕으로 이 페이지에서는 기본적인 트리구조와 모듈화를 통한 관리 방식 수립 부분 까지만 진행해보도록 하겠습니다.

  • 초기 인프라 구축 자동화: 네트워크부터 애플리케이션 인프라까지 Terraform으로 완전 자동화된 배포 가능 여부 검증
  • 기존 인프라 활용 자동화: 이미 존재하는 네트워크를 활용하여 신규 리소스 배포 및 삭제의 효율성 검증
  • 운영 리소스 변경 및 업그레이드: 운영 중인 리소스의 버전 업데이트 및 세부 설정 변경 시 안정성 및 운영 효율성 평가
  • CI/CD 파이프라인 연계 가능성 검토: Terraform을 GitOps와 연계하여 자동화 배포 및 변경 관리가 가능하도록 테스트


1. 테라폼 설치하기

테라폼을 사용하기 위해서는 테라폼과 AWS CLI를 설치해야합니다.
각자의 환경에 맞는 Terraform과 CLI를 설치하도록 합니다.

👉🏻테라폼 설치
👉🏻AWS CLI 설치


2. 코드 디렉토리 트리 구성하기

트리 구조는 아래와 같습니다.
트리 구조를 이렇게 짠 이유는 운영까지 고려하여 영향도를 최소화 하고 운영 편의성을 높이기 위해 리소스 별로 상세하게 나누었습니다.

terraform
├─ 100_network
├─── 101_network_default
├───── main.tf
├───── variables.tf
├───── versions.tf
├───── output.tf
├───── locals.tf
├─── 102_network_gw
├─── 103_network_vep
├─── 104_network_routing
├─── 105_network_sg_rule
├─ 200_compute
├─ 300_eks
├─ 400_s3
├─ 500_rds
├─ 600_iam
├─── 601_iam_policy
├─── 602_iam_rule
...



3. 구조 모듈화를 통한 관리 방식 수립하기

각 리소스 내에 있는 tf 파일들은 각자의 역할에 따라 구분되어 있습니다.
이 파일들을 어떻게 사용하느냐에 따라 운영의 편리함을 구분지을 수 있다고 생각합니다.

그래서 저는 테라폼을 통한 리소스 구성 시 variables.tf 파일만 수정하도록 관리 방식을 수립했습니다.

[main.tf] (주요 리소스 정의)

  • 인프라의 주요 리소스를 선언하는 파일로, AWS 서비스(EKS, RDS, EC2 등)를 구성하는 코드가 포함됩니다.
  • 변경을 최소화 하기 위하여 이 파일은 운영 및 구축 시 변경하지 않아도 되도록 설계합니다.

[variables.tf] (입력 변수 정의)

  • Terraform 코드에서 사용할 변수들을 정의하는 파일입니다.
  • 프로젝트의 유연성을 높이며, 특정 값(VPC ID, 인스턴스 유형 등)을 변경할 때 이 파일만 수정하면 됩니다.

[versions.tf] (버전 관리)

  • Terraform 및 필요한 provider(AWS 등)의 버전을 지정하는 파일입니다.
  • 특정 버전을 명시하여 환경 간 일관성을 유지하고, 호환성을 일관되게 유지하는 역할을 합니다.

[output.tf](출력 변수 정의)

  • Terraform 실행 후 생성된 리소스의 중요한 정보를 출력하는 파일입니다.
  • 예를 들어, 생성된 EC2의 Public IP, RDS 엔드포인트, ALB 주소 등을 출력하도록 설정할 수 있습니다.

[locals.tf](로컬 변수 정의)

  • locals 블록을 사용하여 반복적으로 사용되는 값이나 계산된 값을 정의하는 파일입니다.
  • 자주 사용되는 값을 정의해놓고 사용하면 편리한 사용이 가능합니다.

0개의 댓글