안녕하세요, 이번 포스팅은 테라폼 입력변수에 대해서 정리한 내용을 가지고 포스팅합니다.
‘테라폼으로 시작하는 IaC’를 기준으로 내용 정리하였으며, Cloudnet의 테라폼 스터디 내용을 기반으로 하고 있습니다.
Terraform에서 입력 변수 (Input Variables) 사용하기
Terraform을 사용하여 인프라를 구성할 때, 입력 변수(Input Variables)를 활용하면 코드의 변경 없이 여러 환경에서 다양한 인프라를 손쉽게 생성할 수 있습니다. 입력 변수는 인프라를 구성하는 데 필요한 속성 값을 정의하고, 이를 통해 재사용 가능한 구성 파일을 작성하는 데 목적이 있습니다.
입력 변수는 인프라 구성의 유연성과 재사용성을 높여주며, 코드의 유지보수성을 향상합니다.
예를 들어, 동일한 Terraform 코드베이스를 사용하여 개발 환경, 테스트 환경, 프로덕션 환경 등 여러 환경을 손쉽게 생성할 수 있습니다. 이는 입력 변수를 통해 각 환경에 맞는 설정 값을 제공함으로써 가능해집니다.
입력 변수의 정의와 사용
입력 변수는 variable 블록을 사용하여 정의합니다. 각 변수는 이름, 설명, 데이터 타입, 기본값 등을 포함할 수 있습니다.
아래는 입력 변수를 정의하는 예제입니다.
variable "<이름>" {
<인수> = <값>
}
입력 변수 블록은 이름, 인수, 값으로 구성되며, 예제는 다음과 같습니다.
variable "image_id" {
type = string
}
Terraform에서 입력 변수의 메타인수 사용하기
Terraform의 입력 변수(Input Variables)를 정의할 때, 다양한 메타인수를 활용하여 변수의 동작과 유효성을 제어할 수 있습니다. 이러한 메타인수를 사용하면 변수의 기본값, 타입, 설명, 유효성 검사 규칙 등을 정의할 수 있습니다. 아래는 입력 변수를 정의할 때 사용 가능한 주요 메타인수에 대한 설명입니다.
변수 정의 시 사용 가능한 메타인수
- default:
- 설명: 변수 값을 전달하는 여러 가지 방법을 지정하지 않으면 기본값이 사용됩니다. 기본값이 없으면 대화식으로 사용자에게 변수 값을 물어봅니다.
- 예시:
variable "region" { description = "The AWS region to deploy resources" type = string default = "us-west-2" }
- type:
- 설명: 변수에 허용되는 값 유형을 정의합니다. 지원되는 유형으로는 string, number, bool, list, map, set, object, tuple 등이 있습니다. 유형을 지정하지 않으면 any 유형으로 간주됩니다.
- 예시:
variable "instance_count" { description = "Number of instances to create" type = number default = 1 }
- description:
- 설명: 입력 변수의 설명을 작성합니다. 이는 문서화와 가독성을 높이는 데 유용합니다.
- 예시:
variable "instance_type" { description = "The type of instance to use" type = string default = "t2.micro" }
- validation:
- 설명: 변수 선언에 제약조건을 추가해 유효성 검사 규칙을 정의합니다. 예를 들어, 특정 형식이나 값 범위를 강제할 수 있습니다. 링크
- 예시:
variable "ami" { description = "The AMI ID for the EC2 instance" type = string validation { condition = can(regex("^ami-[a-z0-9]+$", var.ami)) error_message = "The AMI ID must start with 'ami-' and followed by alphanumeric characters." } }
- sensitive:
- 설명: 민감한 변수 값임을 나타내며, Terraform 출력에서 해당 값이 노출되지 않도록 합니다. 주로 암호 등 민감한 데이터를 다룰 때 사용합니다. 링크
- 예시:
variable "db_password" { description = "The password for the database" type = string sensitive = true }
- nullable:
- 설명: 변수가 null 값을 허용할 수 있음을 지정합니다. 기본적으로 모든 변수는 null 값을 허용하지만, 이를 명시적으로 지정할 수도 있습니다. 링크
- 예시:
variable "backup_schedule" { description = "The backup schedule for the database" type = string nullable = true }
이제 실습을 진행해 보겠습니다.
variables.tf
variable "region" {
description = "The AWS region to deploy resources"
type = string
default = "ap-northeast-2"
}
variable "ami" {
description = "The AMI ID for the EC2 instance"
type = string
default = "ami-0edc5427d49d09d2a"
}
variable "instance_type" {
description = "The type of instance to use"
type = string
default = "t2.micro"
}
입력 변수로 region, ami, instance_type을 정의합니다.
region은 서울, ami는 아마존 리눅스 2023, instance_type은 t2.micro로 설정합니다.
main.tf
provider "aws" {
region = var.region
}
resource "aws_instance" "example" {
ami = var.ami
instance_type = var.instance_type
tags = {
Name = "example-instance"
}
}
입력 변수를 받아 인스턴스 생성을 진행할 main.tf 파일에는 위와 같이 작성하였습니다.
수행 결과
인스턴스가 잘 생성된 것을 확인할 수 있습니다.
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] count 사용하기 (0) | 2024.06.23 |
---|---|
[Terraform] 로컬 변수 사용하기 (0) | 2024.06.23 |
[Terraform] 테라폼을 이용한 vpc 배포 (0) | 2024.06.23 |
[Terraform] 테라폼으로 서브넷 생성하기 (0) | 2024.06.23 |
[Terraform] 테라폼 lifecycle의 precondition (0) | 2024.06.16 |