반응형
variables / 입력 변수
입력 변수(Input variable)
를 사용하면 테라폼 구성 파일을 수정하지 않고 유연하게 정의할 수 있습니다.입력 변수는 테라폼이 실행 되기 전에 할당
되기에 인프라를 보다 안전하게 정의할 수 있습니다.- 변수 선언은 모든 구성파일의 모든 위치에서 가능하지만,
variables.tf
에서 선언 할 것을 권장합니다.
변수 선언 블럭
description
: 변수의 목적을 문서화하는 간단한 설명type
: 변수의 데이터 타입default
: 변수의 기본 값- 모든 변수에 대해 description과 type을 지정하고, 가능한 경우 default까지 설정하는 것이 좋습니다.
variable "aws_region" {
description = "AWS region"
type = string
default = "us-west-2"
}
- 테라폼 구성에서 입력 변수를 매개변수화(parameterize)하려면 입력 변수를 선언하고 구성 파일에서 하드코딩된 정보를 변수에 대한 참조로 변경하면 됩니다.
var.<variable_name>
으로 변수를 참조 할 수 있습니다.- 표현식을 문자열에 삽입하는 방법인
Interpolation(보간)
도“${var.cluster_name}-web-sg”
와 같이 가능
변수 자료형
number
variable "instance_count" { description = "Number of instances to provision." type = number default = 2 }
bool
variable "enable_vpn_gateway" { description = "Enable a VPN gateway in your VPC." type = bool default = false }
list
같은 유형의 값 시퀀스, 0부터 시작하는 인덱스로 개별 항목을 참조할 수 있습니다.
variable "public_subnet_cidr_blocks" { description = "Available cidr blocks for public subnets." type = list(string) default = [ "10.0.1.0/24", "10.0.2.0/24" ] }
map
같은 유형의 데이터를 키와 값으로 일치시키는 룩업테이블
키는 항상 문자열(string)이고, type이 map(number)라면 값은 숫자이다.
var.resource_tags[”environment”]
와 같이 사용 가능하다variable "resource_tags" { description = "Tags to set for all resources" type = map(string) default. = { project = "project-alpha", environment = "dev" } }
set
같은 유형인 고유한 값이 저장되며 정렬되지 않는 자료형입니다.
variable "users" { description = "user names" type = set(string) default = ["nice", "value", "lion"] }
object
여러가지 타입의 value를 가질 수 있는 자료형
variable "user_information" { type = object({ no = number name = string leader = bool }) default = { no = 0, name = "hyuckang" leader = true } }
tuple
고정된 길이로 여러 타입의 변수를 있는 자료형
variable "team_leader_info" { description = "Team leader information" type = tuple([number, string, bool]) default = [0, "hyuckang", true] }
변수 할당
- 변수에 default를 설정하지 않으면 terraform apply 이전에 변수를 지정해야 합니다. 테라폼은 unassigned variable을 지원하지 않습니다.
- 테라폼에 변수를 전달하는 방법은 여러가지이며, 여러개의 변수가 전달되었을 경우 우선순위에 따라 가장 마지막에 찾은 값을 사용합니다.
- 변수 할당하는 방법
- prompted : 할당되지 않은 변수가 있는 채로 plan, destroy, apply 할 경우 사용
- file : 파일명이
terraform.tfvars
,*.auto.tfvars
인 파일을 생성하면 자동으로 변수가 로딩 되며,-var-file
플래그를 사용하여 다른 파일명을 가진 변수 파일도 로드 할 수 있습니다. - CLI flag : CLI flag를 통해서 변수를 할당
변수 유효성 검증
리소스를 선언할 때 리소스의 이름의 길이, 허용되는 문자 등의 제한이 있을 수 있다.
이를 위해 variable 블럭 안의
validation
으로 변수의 값을 사전에 검증 할 수 있다.variable "resource_tags" { description = "Tags to set for all resources" type = map(string) default = { project = "my-project", environment = "dev" } validation { condition = length(var.resource_tags["project"]) <= 16 error_message = "The project tag must be no more than 16 characters, and only contain letters, numbers, and hyphens." } }
반응형
'IaC > Terraform' 카테고리의 다른 글
[Terraform] data source (0) | 2022.09.04 |
---|---|
[Terraform] Output 출력 변수 (0) | 2022.09.03 |
[Terraform] Error: Incompatible provider version (0) | 2022.08.23 |
[Terraform] Provider, Resource, Data Source, Variable, Output, Locals, Module (0) | 2022.08.11 |
[Terraform] Configuration file과 HCL (0) | 2022.08.08 |