✔️ 변수의 연쇄 참조
인스턴스의 리전을 정하는 variable 블록을 보자variable.tf
variable "aws_region" {
description = "AWS Region"
type = string
default = "ap-northeast-1"
}
리전의 값은 string type이며
default의 값만 바꾸면 ec2 인스턴스를 배치할 리전을 변경할 수 있다.
aws ec2 인스턴스를 배치 시킬 때 가용 영역을 인스턴스에 직접 정의하는 방식보다는
어떤 서브넷에 배치 시킬 것이냐를 결정하면 어떤 가용영역에 배치될 것인지가 결정되는 경우가 많다.
즉 가용 영역이 아닌 서브넷에 의해 배치되는 경우가 많다.
variable.tf
variable "aws_availability_zone" {
description = "AWS AZs"
type = map(string)
default = {
ap-northeast-1 = "ap-northeast-1c"
ap-northeast-2 = "ap-northeast-2c"
ap-northeast-3 = "ap-northeast-3c"
}
}
맵의 값 타입은 string 타입이다.
default 값도 map 타입이므로 {}
를 사용해야 하며 가용 영역을 선언한다.
메인 파일로 넘어가보자main.tf
AZ = var.aws_availability_zone["ap-northeast-1"]
AZ = var.aws_availability_zone.ap-northeast-1
AZ = var.aws_availability_zone.[aws_region]
가용 영역을 다음과 같이 정의하면 [ ] 안에 들어가는 값에 따라 가용 영역이 변경된다.
여기에 가용 영역을 직접 입력하는 것보다 aws_region 값을 참조하도록 변경한다.
이렇게 했을 때의 장점은 변수를 하나만 변경해도 연관되어 있는 변수들이 연쇄적으로 변경된다는 것이다.
다음은 연쇄적으로 참조할 수 있도록 변경한 파일이다.
variable.tf
variable "aws_region" {
description = "AWS Region"
type = string
default = "ap-northeast-1"
}
variable "aws_availability_zone" {
description = "AWS AZs"
type = map(string)
default = {
ap-northeast-1 = "ap-northeast-1c"
ap-northeast-2 = "ap-northeast-2c"
ap-northeast-3 = "ap-northeast-3c"
}
}
main.tf
availability_zone = var.aws_availability_zone[var.aws_region]
다시 설명하면 aws_region variable 블록의 default 값이 ap-northease-1로 설정되어 있고
main.tf 에서 그 값을 참조하여 aws_availability_zone 값을 ap-northease-1c 로 정하고 있다.
따라서 만약 aws_region의 default 값을 ap-northease-2로 변경한다면 main.tf 에서 따로 값을 변경할 필요 없이 aws_availability_zone의 값을 자동적으로 ap-northease-2c로 정할 것이다.
테라폼에서는 이러한 기법을 많이 사용한다.
추가로 이미지 변경도 진행해보자
같은 이미지라도 리전에 따라 id가 다 다르다.
따라서 리전을 변경할 때마다 사용할 이미지의 id도 같이 변경해주는 것이 효율적이다.variable.tf
variable "aws_region" {
description = "AWS Region"
type = string
default = "ap-northeast-1"
}
variable "aws_availability_zone" {
description = "AWS AZs"
type = map(string)
default = {
ap-northeast-1 = "ap-northeast-1c"
ap-northeast-2 = "ap-northeast-2c"
ap-northeast-3 = "ap-northeast-3c"
}
}
variable "aws_amazon_linux_ami" {
description = "Amazon Linux 5.10 AMI Image"
type = map(string)
default = {
ap-northeast-1 = "ami-0bcc04d20228d0cf6"
ap-northeast-2 = "ami-02e05347a68e9c76f"
ap-northeast-3 = "ami-0fe7b77eb0549da6c"
}
}
앞선 예시와 마찬가지로 리전이 변경됨에 따라 ami의 id가 변경되도록 만들고 main.tf 파일에 다음과 같이 선언하면 aws_region의 값만을 변경하여 사용할 이미지를 변경할 수 있다.
그리고 자주 변경할 가능성이 있는 변수(ex. aws_region)를 terraform.tfvars 파일에 분리하면
변수를 몇개만 조작해도 다양한 리소스를 생성할 수 있다.terraform.tfvars
instance_name = "MyInstance"
aws_region = "ap-northeast-2"
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] ec2 인스턴스 생성시 사용자 데이터 실행하기 (0) | 2022.04.22 |
---|---|
[Terraform] 출력값(Output Value), 로컬값(Local Value) (0) | 2022.04.22 |
[Terraform] 입력 변수 (Input Variable) (0) | 2022.04.21 |
[Terraform] 리소스 생성 순서와 의존성 (0) | 2022.04.21 |
[Terraform] Terraform 상태 확인 (0) | 2022.04.21 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!