기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Terraform 변수, 로컬 값 및 출력 이해
변수는 코드 블록 내의 자리 표시자를 허용하여 코드 유연성을 향상시킵니다. 변수는 코드를 재사용할 때마다 서로 다른 값을 나타낼 수 있습니다. Terraform은 모듈식 범위에 따라 변수 유형을 구분합니다. 입력 변수는 모듈에 삽입할 수 있는 외부 값이고, 출력 값은 외부에서 공유할 수 있는 내부 값이며, 로컬 값은 항상 원래 범위 내에 유지됩니다.
변수
AWS CloudFormation 는 파라미터를 사용하여 한 스택 배포에서 다음 스택 배포로 설정하고 재설정할 수 있는 사용자 지정 값을 나타냅니다. 마찬가지로 Terraform은 입력 변수
variable "thing_i_made_up" { type = string } variable "random_number" { default = 5 } variable "dogs" { type = list(object({ name = string breed = string })) default = [ { name = "Sparky", breed = "poodle" } ] }
구성 내에서 Sparky의 품종에 액세스하려면 변수를 사용합니다var.dogs[0].breed. 변수에 기본값이 없고 null로 분류되지 않는 경우 각 배포에 대해 변수 값을 설정해야 합니다. 그렇지 않으면 변수에 대한 새 값을 설정하는 것은 선택 사항입니다. 루트 모듈에서는 명령줄
# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"
dogs이 예제 terraform.tfvars 파일의 값은 변수 선언의 기본값을 재정의합니다. 하위 모듈 내에서 변수를 선언하는 경우 다음 예제와 같이 모듈 선언 블록 내에서 직접 변수 값을 설정할 수 있습니다.
module "my_custom_module" { source = "modulesource/custom" version = "0.0.1" random_number = 8 }
변수를 선언할 때 사용할 수 있는 다른 인수는 다음과 같습니다.
-
sensitive-이 값을 로 설정하면 변수 값이 Terraform 프로세스 출력에 노출되지true않습니다. -
nullable-이 값을 로 설정true하면 변수에 값이 없을 수 있습니다. 이는 기본값이 설정되지 않은 변수에 유용합니다. -
description- 스택의 메타데이터에 변수에 대한 설명을 추가합니다. -
validation- 변수에 대한 검증 규칙을 설정합니다.
Terraform 변수의 가장 편리한 측면 중 하나는 변수 선언 내에 하나 이상의 검증 객체를 추가하는 기능입니다. 검증 객체를 사용하여 변수가 전달해야 하는 조건을 추가할 수 있습니다. 그렇지 않으면 배포가 실패합니다. 조건을 위반할 때마다 표시되도록 사용자 지정 오류 메시지를 설정할 수도 있습니다.
예를 들어 팀 구성원이 실행할 Terraform 구성 파일을 설정합니다. 스택을 배포하기 전에 팀원은 중요한 구성 값을 설정하기 위해 terraform.tfvars 파일을 생성해야 합니다. 이를 상기시키기 위해 다음과 같은 작업을 수행할 수 있습니다.
variable "important_config_setting" { type = string validation { condition = length(var.important_config_setting) > 0 error_message = "Don't forget to create the terraform.tfvars file!" } validation { condition = substr(var.important_config_setting, 0, 7) == "prefix-" error_message = "Remember that the value always needs to start with 'prefix-'" } }
이 예제와 같이 단일 변수 내에서 여러 조건을 설정할 수 있습니다. Terraform은 실패한 조건에 대한 오류 메시지만 표시합니다. 이렇게 하면 변수 값에 모든 종류의 규칙을 적용할 수 있습니다. 변수 값이 파이프라인 장애를 일으키는 경우 그 이유를 정확히 알 수 있습니다.
로컬 값
모듈 내에 별칭을 지정하려는 값이 있는 경우 업데이트되지 않는 기본 변수를 선언하지 말고 locals 키워드를 사용합니다. 이름에서 알 수 있듯이 locals 블록에는 해당 특정 모듈로 내부적으로 범위가 지정된 용어가 포함됩니다. 리소스 이름에 사용할 변수 값에 접두사를 추가하는 등 문자열 값을 변환하려는 경우 로컬 값을 사용하는 것이 좋습니다. 다음 예제와 같이 단일 locals 블록은 모듈의 모든 로컬 값을 선언할 수 있습니다.
locals { moduleName = "My Module" localConfigId = concat("prefix-", var.important_config_setting) }
값에 액세스할 때 locals 키워드는와 같이 단수로 바뀝니다local.LocalConfigId.
출력 값
Terraform 입력 변수가 CloudFormation 파라미터와 같은 경우 Terraform 출력 값이 output 블록을 추가해야 합니다.
output "module_id" { value = local.module_id } Then in the first module you could use it like this: module "first_module" { source = "path/to/first/module" } resource "example_resource" "example_resource_name" { module_id = module.first_module.module_id }
Terraform 출력 값은 동일한 스택 내에서 사용할 수 있으므로 output 블록의 sensitive 속성을 사용하여 스택 출력에 값이 표시되지 않도록 할 수도 있습니다. 또한 output 블록은 변수가 precondition 블록을 사용하는 것과 동일한 방식으로 validation 블록을 사용하여 변수가 특정 규칙 세트를 따르도록 할 수 있습니다. 이렇게 하면 배포를 진행하기 전에 모듈 내의 모든 값이 예상대로 존재하는지 확인할 수 있습니다.
output "important_config_setting" { value = var.important_config_setting precondition { condition = length(var.important_config_setting) > 0 error_message = "You forgot to create the terraform.tfvars file again." } }