여러 Terraform 작업 공간에 대한 입력 변수 파일
dev
, test
및 prod
. 구성이 아무리 훌륭하더라도 모든 환경에서 모든 세부 정보가 정확히 동일한 경우는 매우 드뭅니다. 일반적으로 다음과 같이 끝납니다. 완벽하게 괜찮습니다(가독성을 위해 코드를 약간 압축했습니다. 더 완전한 예는 this gist 참조).resource "aws_instance" "this" {
count = var.instance_count
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = "project-xyz-${terraform.workspace}-${count.index}"
}
}
이것이 아프기 시작하는 곳은 적용 시간 동안입니다. 예를 들면 다음과 같습니다.
terraform workspace select prod
terraform apply -var='instance_count=5' -var='ami_id=ami-1a2b3c' -var='instance_type=t2.large'
이 변수 라인은 매우 빠르게 불분명해집니다. 또한 이러한 모든 변수를 기억하거나 명령줄에서 명령문을 기억하도록 만드는 것은(환경별로) 다소 번거롭습니다. 또한 자동화에서 이 작업을 수행하려면(다시 말하지만 환경별로...) 일부
env
변수 마법이 필요할 가능성이 큽니다. 이는 인프라 정의를 표준 호출 방식과 분리하는데, 이는 좋지 않습니다. (그런데 connascence에 대해 들어본 적이 없다면 이 기사를 읽지 말고 대신 this one을 읽으십시오.)Terraform Cloud는 이에 대한 몇 가지 해결 방법을 제공하지만 여기에서도 템플릿과 변수 세트
env
를 분리합니다. 구성 옆에 있는 버전 제어에서 기본 변수 세트를 유지할 수 있다면 훨씬 더 좋을 것입니다. 약간의 땜질 끝에 다음 해결책을 찾았습니다.variable "workspace_variables" {
type = map(object({
instance_count = number
ami_id = string
instance_type = string
}))
default = {}
}
locals {
default_vars = lookup(var.workspace_variables, terraform.workspace, {
instance_count = 2
ami_id = "ami-abc123"
instance_type = "t2.micro"
})
instance_count = var.instance_count != null ? var.instance_count : local.default_vars["instance_count"]
ami_id = var.ami_id != null ? var.ami_id : local.default_vars["ami_id"]
instance_type = var.instance_type != null ? var.instance_type : local.default_vars["instance_type"]
}
이 코드 스니펫은
workspace_variables
와 같이 하나의 선택적 변수를 읽어 모두 지배합니다. 아무것도 제공되지 않으면 기본 하위 변수 세트를 사용합니다. 또한 여전히 Terraform cli를 사용하여 모든 변수 집합을 재정의할 수 있습니다. 이 스니펫 다음에는 모든 변수null
에 대한 기본값을 설정해야 하며 변수를 사용할 때 var.
를 local.
로 바꿔야 합니다. 그런 다음 다음과 같이 Terraform vars 파일을 만들 수 있습니다.workspace_variables = {
dev = {
instance_count = 2
ami_id = "ami-abc123"
instance_type = "t2.micro"
}
test = {
instance_count = 3
ami_id = "ami-a1b2c3"
instance_type = "t2.medium"
}
prod = {
instance_count = 5
ami_id = "ami-1a2b3c"
instance_type = "t2.large"
}
}
버전 제어에 넣을 수 있는 찾기 쉬운 한 곳에 모두 보관되어 훨씬 더 명확해졌습니다! 작업 공간을 선택하고 적용을 누르는 간단한 Terraform 흐름으로 원하는 구성을 얻을 수 있습니다. 또한 핫픽스, 테스트 등을 위해 명령줄로 변수를 재정의할 수 있습니다.
terraform workspace select prod
terraform apply -var='ami_id=ami-x1337x'
단순한 매개변수 입력에는 너무 많은 상용구처럼 보일 수 있지만 변수가 많을 경우 '정상적인' 방식으로 변수를 설정하는 데 무게가 있음을 발견했습니다. 그것이 당신에게 효과가 있는지 확인하십시오!
마지막 설명: 적절한 Terraform 변수 유효성 검사 및 vars 파일의 호환성을 구현하려면 약간의 수정과 상용구가 필요하지만 optional variable attributes이 공개 베타에서 나올 때 수정될 수 있습니다.
(위의 코드는 가독성을 위해 축약되었습니다. 더 완전한 예는 this gist 을 참조하십시오.)
Reference
이 문제에 관하여(여러 Terraform 작업 공간에 대한 입력 변수 파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/carlovo/input-variables-file-for-multiple-terraform-workspaces-19f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)