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 |