Terraform에는 명명된 값을 요청하거나 게시하기 위한 몇 가지 종류의 블록이 포함되어 있습니다.
- Input Variables 는 Terraform 모듈의 매개변수 역할을 하므로 사용자는 소스를 편집하지 않고도 동작을 커스터마이징할 수 있습니다.
- Output Values 은 Terraform 모듈의 반환(return) 값과 같습니다.
- Local Values 은 표현식에 간단한 이름을 지정할 수 있는 편리한 기능입니다.
2023.02.07 - [IaC/Terraform] - [Terraform]테라폼 Input Variables 사용법
2023.08.14 - [IaC/Terraform] - [Terraform]테라폼 Output Values 사용법
2023.02.09 - [IaC/Terraform] - [Terraform]테라폼 Local Values 사용법
Input Variables doc Link
사용한 terraform code
2023.02.05 - [IaC/Terraform] - [Terraform]AWS Provider로 Ubuntu AWS EC2 Instance 만들기
Input Variables
테라폼에서 사용하는 값(value)의 이름을 작성하거나 배포하기 위한 몇가지 블럭이 존재한다.
그중 아래에서 Input Variables에 대하여 알아보자.
- Input Variables은 테라폼 모듈의 파라미터 역할을 하여 사용자가 소스를 편집하지 않고 동작을 customize할 수 있다.
- 이 기능을 사용하면 다양한 테라폼 구성에서 모듈을 공유할 수 있으므로 모듈을 구성 및 재사용할 수 있다.
테라폼 모듈이란? doc link 모듈은 Terraform으로 리소스 구성을 패키징하고 재사용하는 주요 방법
main.tf 안에서 Input variable 설정하고 apply시 입력하기
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
# Configure the AWS Provider
provider "aws" {
region = "ap-northeast-2"
}
variable "ec2_name" {
# 공백으로 두고 apply할때 ec2_name을 입력 받는다.
}
# resource - instanace
resource "aws_instance" "jeff_tf_ubuntu" {
ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
subnet_id = "subnet-004f0791a0c0c4e57" # jeff-subnet-public-management-1a
security_groups = [ "sg-07a2fa9eb741e42d6" ] # management
tags = {
Name = "var.ec2_name"
}
}
# data - aws_ami
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
- Input variable을 추가하여 apply시 ec2_name을 입력 받도록 하였다.
tf apply
➜ tf apply
var.ec2_name
Enter a value: ec2-name-from-variable
~ tags = {
~ "Name" = "jeff_tf_ubuntu" -> "ec2-name-from-variable"
}
## 중략
Plan: 1 to add, 0 to change, 1 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
## 중략
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
결과
- terraform apply시 입력헀던 값으로 설정됐다.
환경 변수로 Input variable 설정하기
export TF_VAR_ec2_name="ec2-name-from-env"
- 작업 환경에서 환경 변수에 TF_VAR_[variable] 형식으로 변수를 설정할 수 있다.
tf apply
➜ tf apply
~ tags = {
~ "Name" = "ec2-name-from-variable" -> "ec2-name-from-env"
}
Plan: 1 to add, 0 to change, 1 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
결과
- 환경변수에서 설정했던 값(export TF_VAR_ec2_name="ec2-name-from-env”) 이 variable값으로 설정됐다.
Variable Definition Precedence
우선순위: input(default) < env < terraform.tfvars < custom.auto.tfvars < 파일명 또는 변수 지정
아래와 같은 형식(.tfvars or .tfvars.json)으로 Variable을 정의하여 사용할 수 있다. 파일명 지정 없이도 tfvars 파일을 인식한다.
- terraform.tfvars
- terraform.tfvars.json
- *.auto.tfvars
- *.auto.tfvars.json
terraform.tfvars 으로 variable 설정하기
terraform.tfvars
ec2_name = "ec2-name-from-terraform.tfvars"
tf apply
➜ tf apply
~ tags = {
~ "Name" = "ec2-name-from-env" -> "ec2-name-from-terraform.tfvars"
}
Plan: 1 to add, 0 to change, 1 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
custom.tfvars으로 variable 설정하기(특정 파일을 지정하여 사용)
custom.tfvars
ec2_name = "ec2-name-from-custom.tfvars"
tf apply
➜ tf apply -var-file=custom.tfvars
~ tags = {
~ "Name" = "ec2-name-from-terraform.tfvars" -> "ec2-name-from-custom.tfvars"
}
Plan: 1 to add, 0 to change, 1 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
*.auto.tfvars으로 variable 설정하기
custom.auto.tfvars
ec2_name = "ec2-name-from-custom.auto.tfvars"
tf apply
- 파일명 지정 없이도 tfvars 파일을 인식한다.
➜ tf apply
~ tags = {
~ "Name" = "ec2-name-from-terraform.tfvars" -> "ec2-name-from-custom.auto.tfvars"
}
Plan: 1 to add, 0 to change, 1 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
terraform apply 명령어에서 variable 설정하기
tf apply -var
➜ tf apply -var="ec2_name=ec2-name-from-var-option"
~ tags = {
~ "Name" = "ec2-name-from-terraform.tfvars" -> "ec2-name-from-var-option"
}
- *.tfvars 파일 없이도 variable 설정이 가능하다.
variable Arguments 사용법 - Link
- default - A default value which then makes the variable optional.
- type - This argument specifies what value types are accepted for the variable.
- description - This specifies the input variable's documentation.
- validation - A block to define validation rules, usually in addition to type constraints.
- sensitive - Limits Terraform UI output when the variable is used in configuration.
- nullable - Specify if the variable can be null within the module.
description
- description - This specifies the input variable's documentation.
variable "ec2_name" {
description = "생성되는 VPC의 이름 설정"
}
tf apply
➜ terraform apply
var.ec2_name
생성되는 ec2의 이름 설정
Enter a value:
type
- type - This argument specifies what value types are accepted for the variable.
variable "ec2_name" {
description = "생성되는 ec2의 이름 설정"
type = string
}
default
- default - A default value which then makes the variable optional.
variable "vpc_name" {
description = "생성되는 VPC의 이름 설정"
type = string
default = "ec2-name-from-input-variable"
}
'IaC > Terraform' 카테고리의 다른 글
[Terraform]테라폼 Output Values 사용법 (0) | 2023.08.14 |
---|---|
[Terraform]테라폼 Local Values 사용법 (0) | 2023.02.09 |
[Terraform]AWS Provider로 Ubuntu AWS EC2 Instance 만들기 (0) | 2023.02.05 |
[Terraform]테라폼 workspace 이해하기 (0) | 2023.02.04 |
[Terraform]테라폼 기본 사용법 with aws provider (0) | 2023.02.01 |