Check! Terraform 동적 선택 모듈 사용
Prologue
테라form으로 다양한 환경의 샘플을 썼는데 필요에 따라 나눠서 시행착오의 마지막에 안정적인 방법을 쓸 필요가 있다.
Terraform 동적 선택 모듈 사용
이번 구성은 이렇다.
요점 코드를 발췌하다.
source
의 모듈은 되돌아오는 module_name
의 위선일 뿐이다.먼저 모듈을 선택할 매개 변수를 지정합니다.여기에 문자열 배열을 받는 매개 변수
modules
가 준비되어 있습니다.문자열은 키워드로 뒤에 설명됩니다.모듈 이름과 같거나 모듈을 지정하기 쉬운 문자열을 선택하는 것이 좋습니다..auto.tfvars
modules = [
"one",
"two",
]
variables.tfvariable "modules" {
type = list(string)
}
다음에 각 모듈의 경우 매개 변수에 키워드와 일치하는 문자열이 지정되어 있으면 count
또는 for_each
로 분류된 기술을 사용합니다.count
의 예에서 var.modules
에 키워드가 포함된 문자열을 사용할 때 count
에서 1회 실행 모듈을 지정한다.없으면 0번을 지정하고 실행하지 않습니다.main.tf
module "one" {
count = 0 <= try(index(var.modules, "one"), -1) ? 1 : 0
source = "./modules/base"
name = "one"
}
사용for_each
의 예에서 var.modules
에 키워드가 포함된 문자열은 원소"selected"
가 포함된 수조를 set
로 변환하여 실행한다.그렇지 않으면 빈 그룹을 지정해서 실행할 수 없습니다.main.tf
module "two" {
for_each = toset(0 <= try(index(var.modules, "two"), -1) ? ["selected"] : [])
source = "./modules/base"
name = "two"
}
실행 결과 확인은 사용할 모듈에 가깝습니다. 여기outputs
출력 모듈의 출력을 확인하십시오.count
의module.one
를 사용하면 [*]
기호를 사용하여 각 모듈(즉 1개 또는 0개)의 출력을 참조할 수 있다.for_each
의 사용module.two
은 해당 키워드를 지정했을 때for_each
에 하나 이상의 요소를 포함하는 배열을 지정set
하면 문제없이 참조할 수 있으나 키워드를 지정하지 않았을 때for_each
빈 배열을 지정했을 때set
참조 오류가 발생할 수 있습니다.이용try()
회피.outputs.tf
output "one_module_name" {
value = module.one[*].module_name
}
output "two_module_name" {
value = try(module.two["selected"].module_name, "Not found")
}
그럼 코드가 준비되면 확인해 보세요.Terraform 명령을 실행합니다.terraform init
terraform plan
는 이러한 출력으로 표시됩니다.기대했던 대로!✨Changes to Outputs:
+ one_module_name = [
+ "one",
]
+ two_module_name = "two"
또한 모듈이 지정되지 않았는지 확인해 보십시오.매개변수modules
가 비어 있으면 각각 count
또는 for_each
에서 선택되지 않으므로 개별 모듈이 실행되지 않습니다..auto.tfvars
modules = [
# "one",
# "two",
]
terraform plan
의 집행 결과는 다음과 같다.Changes to Outputs:
+ one_module_name = []
+ two_module_name = "Not found"
잘됐다, 의도대로!통쾌하다🙌✨또한 오류가 발생한 사람은 다음과 같은 내용을 참고하시기 바랍니다.
장애점
for_each
사용 시 참고가 좀 독특합니다.개별 인스턴스를 보려면 참조가 아닌 레이아웃의 쓰기 방법<TYPE>.<NAME>["<KEY>"]
또는 module.<NAME>["<KEY>"]
을 참조하십시오.toset () 를 사용하여 문자열 목록을 지정할 때
main.tf
module "example" {
for_each = toset(["a_member"])
...
}
outputs.tfoutput "output_example" {
value = module.example["a_member"].output_a_string
}
맵으로 지정한 경우
main.tf
module "example" {
for_each = { a_key = "a_value" }
...
}
outputs.tfoutput "output_example" {
value = module.example["a_key"].output_a_string
}
오류 예
잘못된 특집을 지정하면, 예를 들어 실행
terraform plan
할 때 다음과 같은 오류가 나타납니다.outputs.tf
output "output_example" {
value = module.example.output_a_string # <- Wrong reference
}
Error: Unsupported attribute
on outputs.tf line 6, in output "output_example":
6: value = module.example.output_a_string
|----------------
| module.example is object with 1 attribute "a_key"
This object does not have an attribute named "output_a_string".
Epilogue
이 방법으로 모듈을 선택한 것은 창고 코드입니다.Azure PaaS에 안전하게 연결된 샘플 몇 개를 모듈로 나누어 설명합니다.관심 있으신 분들은 꼭 참고해주세요.😊
Reference
이 문제에 관하여(Check! Terraform 동적 선택 모듈 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/dzeyelid/articles/97cfc1c162d6f5b61821텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)