IaC 배포/Terraform

[ terraform ] 이란?

김붕어87 2022. 5. 3. 10:52
반응형

1. terraform 이란?

테라폼은 Hashicorp에서 만든 오픈소스이며, 클라우드 인프라스트럭처(IaC, Infrastructure as Code) 도구이다.

하시코프 언어 (HCL, Hasicorp Configuration Language)으로 클라우드 인프라를 구축 및 관리한다.

가능한 클라우드 : AWS, GCP, Azure 등 가능하다.

링크 : https://www.terraform.io/

 

 

테라폼을 사용하는 이유

1. 여러 개의 AWS 환경(Prod, STG, DEV 등)을 테라폼으로 인프라 리소스를 정의해서 동일한 인프라를 구축할 수 있다. 
> module을 사용해서 변수의 내용만 변경해주면 prod, stg, dev 등 다양한 환경을 동일한 정보를 찍어 낼 수 있다.

(정합성)

2. Jenkins, CD툴로 테라폼을 연결해서 사용하면, 자동화로 AWS 인프라 정보를 수정 및 변경이 가능하다 (EC2, ASG 등)

3. 테라폼 리소스를 github으로 관리하기 때문에, 작업 후 문제가 생기면 이전 상태로 롤백도 가능하다.  (이력 및 롤백)

> 인프라 수정 및 변경 정보를 이력을 남길 수 있다. (revision)

4. HCL 언어로 리소스를 정의해 놓으면, 여러개의 작업을 한번에 수행 및 롤백이 가능하다. (빠른 작업)


 

2. terraform 설치

  • linux 설치

terraform cli 설치 링크 : https://www.terraform.io/downloads

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform

 

  • windows 설치

1. https://releases.hashicorp.com/terraform/1.1.9/terraform_1.1.9_windows_amd64.zip 다운로드

2. terraform_1.1.9_windows_amd64.zip 파일 압축 해지

> 폴더 위치 : C:\업무\기타\terraform_1.1.9_windows_amd64\terraform

3. terraform 파일 path 지정

> 윈도우키 클릭 + 시스템 환경 변수 편집 > 고급 > 환경변수 > 시스템 변수 > "paht" 편집 > terraform path 경로 입력

 

 

 

 

 

3. terraform code 작성

Example) VPC 생성

 

1. provider.tf 생성

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.55.0"
    }
  }
  required_version = "= 1.0.4"
}

provider "aws" {
  allowed_account_ids = ["123456789"]       # AWS AccountID 입력
  region              = "ap-northeast-2"    # AWS 배포할 Region 입력
  profile             = "service-dev"        # AWS AccessKey, SecretKey profile 입력
}

 

2. backend.tf 생성

terraform {
  backend "s3" {
    bucket         = "service-devops-terraform-tfstate-s3"
    key            = "terraform/vpc/service-dev"
    region         = "ap-northeast-2"
    profile        = "service-dev"
    encrypt        = true
    dynamodb_table = "service-devops-terraform-lock"         
    # dynamodb_table은 terraform code를 여러명이 동시에 실행하지 못하도록 Lock 거는 용도 
  }
}

 

 

 

3. output.tf 생성

output "vpc_id" {
  value = module.vpc.vpc_id
}

output "vpc_cidr" {
  value = module.vpc.vpc_cidr
}

output "subnet_map" {
  value = {
    public = {
      common = [module.vpc.public_subnet_map["0"], module.vpc.public_subnet_map["1"], module.vpc.public_subnet_map["2"]]
    }
    private = {
      en = [module.vpc.private_en_subnet_map["0"], module.vpc.private_en_subnet_map["1"], module.vpc.private_en_subnet_map["2"]]
      eks = [module.vpc.private_eks_subnet_map["0"], module.vpc.private_eks_subnet_map["1"], module.vpc.private_eks_subnet_map["2"]]
      db  = [module.vpc.private_db_subnet_map["0"], module.vpc.private_db_subnet_map["1"], module.vpc.private_db_subnet_map["2"]]
      private2  = [module.vpc.private2_subnet_map["0"], module.vpc.private2_subnet_map["1"], module.vpc.private2_subnet_map["2"]]
      private1  = [module.vpc.private_subnet_map["0"], module.vpc.private_subnet_map["1"], module.vpc.private_subnet_map["2"]]
    }
  }
}

 

 

4. vpc.tf 생성

  • vpc.tf은 vpc resource 생성에 필요한 정보를 정의하는 파일
module "vpc" {
  source = "../../module/vpc/"

  availability_zones = ["ap-northeast-2a", "ap-northeast-2c", "ap-northeast-2d"]
  cidr_block         = "10.254.0.0/16"
  vpc_name           = "infra-dev"
  cluster_name = "service-dev-eks"

  # subnet create
  create_private2       = "false"
  create_en             = "false"
  create_eks            = "true"
  create_db             = "false"
}

 


 

 

 

4. terraform 실행

terraform init;
> terraform를 실행하기 전에 프로비저닝 단계
> 네트워크나 컴퓨팅 자원을 준비하는 작업과 준비된 컴퓨팅 자원에 사이트 패키지나 애플리케이션 의존성을 준비하는 단계로 나뉘어집니다.

terraform plan;
> terraform 실행 위치에 있는 *.tf파일들을 적용이 가능한지 확인하는 작업

terraform apply;
> 실제로 원하는 resource를 생성하는 작업(생성, 수정, 삭제)

 

 


5. Terraform code 관리

  • terraform code은 Git으로 저장해서 형상 관리를 유지한다.
  • terraform code를 실행 후 tfstate 파일은 안전하게 AWS S3에 저장해서 사용한다.
  • terraform code 실행 권한은 AWS credential Key를 가지고 한다.
  • terraform code 실행 및 관리해주는 UI를 지원해주는 프로그램은 아틀란티스, terraform Enterprise가 있다.
 

 

반응형