[ terraform ] 이란?
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 생성
- 가이드 : https://developer.hashicorp.com/terraform/language/meta-arguments/resource-provider
- provider.tf은 terraform version 정의, 배포할 aws 정보 입력
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 생성
- 가이드 : https://developer.hashicorp.com/terraform/language/settings/backends/configuration
- backend.tf은 terraform init,apply 후 terraform 상태(tfstate) 결과를 저장하는 위치를 정의(s3, local disk 등)
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 생성
- 가이드 : https://developer.hashicorp.com/terraform/language/values
- output.tf은 terraform apply 후 생성된 Resource ID값을 output으로 저장하는 역할.
- output으로 resource ID값을 저장해 놓으면 해당 변수를 이용해서 다른 곳에서 이용할 수 있다.
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가 있다.