본문 바로가기!

Terraform

[Terraform] 조건문 - 3항 연산자

728x90
반응형

 

 

1. 조건문 (3항 연산자)

Terraform은 3항 연산자 조건문을 지원하며, 인프라를 동적으로 구성하거나 간단한 조건문을 구현할 때 적합합니다.

 

1-1) 3항 연산자의 기본 문법

condition ? true_value : false_value

 

 

1-2) 사용 사례

  • 환경별 설정 : 개발, 테스트, 프로덕션 환경에 따라 다른 설정 값을 사용할 경우나 가용영역을 다르게 사용해야 할 경우 유용합니다.
  • 리소스 조건부 생성 : 특정 조건에 따라 리소스를 생성하거나 변경해야 할때 사용됩니다.

 

 

2. 조건문 (3항 연산자) 예시

1. 조건문(3항 연산자)을 활용하여 (각자 편리한) AWS 리소스를 배포하는 코드를 작성

 

Terraform-Study/Week3/challenge1,2 at main · junho102/Terraform-Study

Contribute to junho102/Terraform-Study development by creating an account on GitHub.

github.com

resource "aws_vpc" "vpc" {
  cidr_block           = local.vpc_cidr
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "${local.project_name}-vpc-${local.env}-apne2"
  }
}

resource "aws_subnet" "pub_subnet" {
  count             = length(local.pub_cidr)
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = element(local.pub_cidr, count.index)
  availability_zone = ((count.index) % 2) == 0 ? local.zone_id.names[0] : local.zone_id.names[2]

  tags = {
    Name = "${local.project_name}-snet-${local.env}-pub-${((count.index) % 2) == 0 ? "a" : "c"}-apne2"
  }
}

resource "aws_subnet" "primary_pri_subnet" {
  count             = length(local.primary_pri_cidr)
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = element(local.primary_pri_cidr, count.index)
  availability_zone = ((count.index) % 2) == 0 ? local.zone_id.names[0] : local.zone_id.names[2]

  tags = {
    Name = "${local.project_name}-snet-${local.env}-pri-${((count.index) % 2) == 0 ? "a" : "c"}-apne2"
  }
}

 

 

 

 

2. 코드 설명

  • Public & Private Subnet을 설정하는 부분에서 3항 연산자를 사용하였습니다.
resource "aws_subnet" "primary_pri_subnet" {
  count             = length(local.primary_pri_cidr)
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = element(local.primary_pri_cidr, count.index)
  availability_zone = ((count.index) % 2) == 0 ? local.zone_id.names[0] : local.zone_id.names[2]

  tags = {
    Name = "${local.project_name}-snet-${local.env}-pri-${((count.index) % 2) == 0 ? "a" : "c"}-apne2"
  }
}
availability_zone = ((count.index) % 2) == 0 ? local.zone_id.names[0] : local.zone_id.names[2]
  • ((count.index) % 2) == 0: count.index가 짝수인지 확인하는 조건입니다.
  • local.zone_id.names[0]: 조건이 참일 때 사용할 값입니다 (첫 번째 가용 영역).
  • local.zone_id.names[2]: 조건이 거짓일 때 사용할 값입니다 (세 번째 가용 영역).

 

  • 서브넷의 Tag를 설정할 때 또한 3항 연산자를 사용하였습니다.
Name = "${local.project_name}-snet-${local.env}-pub-${((count.index) % 2) == 0 ? "a" : "c"}-apne2"
  • ((count.index) % 2) == 0 ? "a" : "c": count.index가 짝수이면 “a”, 홀수이면 “c”를 반환합니다.

 

 

 

 

 

 

 

728x90
반응형