Notice
Recent Posts
Recent Comments
Link
devops
Terraform Backend, Variables 알아보기 본문
반응형
Terraform Backend
Terraform의 State 파일을 저장하는 위치와 어디서 가져올지에 대한 설정이다. 대체로 로컬에 저장하지만 설정에 따라서 s3, consul 등 다양한 backend type을 사용할 수 있다.
Backend를 사용하는 이유
1) 대체로 Terraform 코드는 혼자 작성하지 않는다. 인프라를 변경하는 것은 민감하기 때문에 원격 저장소를 활용해서 같은 state를 사용하는 것을 막을 수 있다.
2) 로컬 스토리지에 저장하면 유실의 위험이 있다. 그래서 S3와 같은 원격 저장소를 활용하기도 한다.
*주로 s3를 많이 사용한다.
terraform {
backend "s3" {
bucket = "terraform-s3-bucket" # s3 bucket 이름
key = "terraform/own-your-path/terraform.tfstate" # s3 내에서 저장되는 경로를 의미
region = "ap-northeast-2"
encrypt = true
dynamodb_table = "terraform-lock"
}
}
S3를 먼저 생성한다. 그리고 Terraform의 init.tf 파일을 작성하여 Backend 설정을 위한 s3와 DynamoDB를 생성한다.
DynamoDB는 복수의 사람이 동시에 state에 접근하여 사용하지 않도록 lock하는 역할을 한다.
provider "aws" {
region = "ap-northeast-2"
version = "~> 2.49.0"
}
# backend를 위한 s3
resource "aws_s3_bucket" "tfstate" {
bucket = "bucket-tfstate"
versioning {
enabled = true # tfstate file를 삭제하는 것을 예방
}
}
# terraform state를 잠금할 DynamoDB
resource "aws_dynamodb_table" "terraform_state_lock" {
name = "terraform-lock"
hash_key = "LockID"
billing_mode = "PAY_PER_REQUEST"
attribute {
name = "LockID"
type = "S"
}
}
Terraform Variables
테라폼은 HCL 언어를 사용한다. 이 언어의 특성을 통해서 변수를 정의하고 주입해서 활용할 수 있다.
- Variable type : String, Number, Bool
- Complex variable types : list(), set(), map(), object({..}), tuple([...])
변수 정의를 위해서 variable.tf를 생성한다. 그리고 안에 원하는 변수를 정의한다.
variable "image_id" {
type = string
}
variable "availability_zone_names" {
type = list(string)
default = ["us-west-1a"]
}
variable "ami_id_maps" {
type = map
default = {}
}
정의한 변수에 값을 주입하기 위해서 terraform.tfvars 파일을 생성한다. Variable = Value 형태로 정의한다.
image_id = "ami-064c81ce3a290fde1"
availability_zone_names = ["us-west-1a","us-west-1b","us-west-1c"]
ami_id_maps = {
ap-northeast-2 = {
amazon_linux2 = "ami-010bf43fe22f847ed"
ubuntu_18_04 = "ami-061b0ee20654981ab"
}
us-east-1 = {
amazon_linux2 = "ami-0d29b48622869dfd9"
ubuntu_18_04 = "ami-0d324124b7b7eec66"
}
}
반응형
'DevOps > Terraform' 카테고리의 다른 글
토스, GitOps와 OPA로 실수 없이 안전하게 쿠버네티스 운영 (0) | 2022.07.03 |
---|---|
Terraform으로 AWS VPC, Private Subnet, NAT Gateway 구성 (0) | 2022.06.28 |
Terraform 기반, AWS 대규모 마이크로서비스 인프라 운영 노하우 (0) | 2022.06.28 |
Terraform 파헤치기 (0) | 2022.06.26 |
Comments