본문 바로가기

DevOps/Terraform

[TF]Terraform Variable & Local & Output

Terraform 정의

variable "vpc_name" {}


module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "0.24.0"

  name                  = "var.vpc_name"
  cidr_block            = "10.0.0.0/16"
 }

Variable를 통한 정의

variable 통해 vpc_name의 값을 입력 받는다.

 

terraform apply를 하고 생성된 리소스를 AWS Console에서 보면 입력받은 값이 name이 된다.

 

환경변수를 통한 정의

운영체제 상에 환경 변수를 추가

export TF_WAR_vpc_name="test_vpc"

위와 같이 vpc name이 test_vpc가 된다.

 

파일을 통한 정의

terraform.tfvars 사용

vpc_name="test_vpc"

 

파일 이름이 terraform.tfvars가 아닌 test.tfvars의 경우 apply 할 때 따로 선언해주면 된다.

terraform apply -var-file=test.tfvars

.auto.tfvars 사용

자동으로 테라폼에서 tfvars를 인식하게 된다.

 

명령어를 통한 정의

-var를 통한 정의

terraform apply -var="vpc_name=test_vpc"

위의 코드처럼 apply 뒤에 -var를 통해 선언해줄 수 있다.

 


variable "vpc_name" {
  description = "Created VPC Name"
  type        = string
  default     = "default"
}

description : 생성되는 VPC 이름

type : 문자 유형

default : vpc_name 정의가 안됐을 때의 기본값

 


Local Values

locals 블록을 사용하여 지역 변수 선언

locals {
  common_tags = {
    Project = "Network"
    Owner   = "posquite"
  }

tags 수정

tags = local.common_tags

모든 tags에 대하여 loacl Block의 common_tags 정의

 

AWS Console 확인

정상적으로 입력된걸 볼 수 있다.

 

이와 같이 Local Values는 코드 여러곳에서 사용되는 공통 태그를 한 곳에서 관리하기 위해서 사용한다.


Output Values

output "vpc_name" {
  value =module.vpc.name
}


output "vpc_id" {
  value =module.vpc.id
}

output "vpc_cidr" {
  value =module.vpc.cidr_block
}

apply를 하면 아래와 같이 output 값을 출력하게 된다.

더보기
더보기

 

public_private_group = {
  "arns" = [
    "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-05349fcd8b3b4288e",
    "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-096eef54c8f953415",
  ]
  "availability_zone_ids" = tolist([
    "apne2-az1",
    "apne2-az2",
  ])
  "availability_zones" = tolist([
    "ap-northeast-2a",
    "ap-northeast-2b",
  ])
  "cache_subnet_group_id" = null
  "cidr_blocks" = [
    "10.0.10.0/24",
    "10.0.11.0/24",
  ]
  "dax_subnet_group_id" = null
  "db_subnet_group_arn" = null
  "db_subnet_group_id" = null
  "dms_replication_subnet_group_id" = null
  "docdb_subnet_group_arn" = null
  "docdb_subnet_group_id" = null
  "ids" = [
    "subnet-05349fcd8b3b4288e",
    "subnet-096eef54c8f953415",
  ]
  "ipv6_cidr_blocks" = tolist([])
  "name" = "test_file_vpc-private"
  "neptune_subnet_group_arn" = null
  "neptune_subnet_group_id" = null
  "redshift_subnet_group_arn" = null
  "redshift_subnet_group_id" = null
  "subnets" = [
    {
      "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-05349fcd8b3b4288e"
      "assign_ipv6_address_on_creation" = false
      "availability_zone" = "ap-northeast-2a"
      "availability_zone_id" = "apne2-az1"
      "cidr_block" = "10.0.10.0/24"
      "customer_owned_ipv4_pool" = ""
      "id" = "subnet-05349fcd8b3b4288e"
      "ipv6_cidr_block" = ""
      "ipv6_cidr_block_association_id" = ""
      "map_customer_owned_ip_on_launch" = false
      "map_public_ip_on_launch" = false
      "outpost_arn" = ""
      "owner_id" = "714546234903"
      "tags" = tomap({
        "Name" = "test_file_vpc-private-001/az1"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-private"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "tags_all" = tomap({
        "Name" = "test_file_vpc-private-001/az1"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-private"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "timeouts" = null /* object */
      "vpc_id" = "vpc-0c434901441bbc2f0"
    },
    {
      "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-096eef54c8f953415"
      "assign_ipv6_address_on_creation" = false
      "availability_zone" = "ap-northeast-2b"
      "availability_zone_id" = "apne2-az2"
      "cidr_block" = "10.0.11.0/24"
      "customer_owned_ipv4_pool" = ""
      "id" = "subnet-096eef54c8f953415"
      "ipv6_cidr_block" = ""
      "ipv6_cidr_block_association_id" = ""
      "map_customer_owned_ip_on_launch" = false
      "map_public_ip_on_launch" = false
      "outpost_arn" = ""
      "owner_id" = "714546234903"
      "tags" = tomap({
        "Name" = "test_file_vpc-private-002/az2"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-private"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "tags_all" = tomap({
        "Name" = "test_file_vpc-private-002/az2"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-private"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "timeouts" = null /* object */
      "vpc_id" = "vpc-0c434901441bbc2f0"
    },
  ]
  "vpc_id" = "vpc-0c434901441bbc2f0"
}
public_subnet_group = {
  "arns" = [
    "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0314462f106805abd",
    "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0dac1ad333aeeb594",
  ]
  "availability_zone_ids" = tolist([
    "apne2-az1",
    "apne2-az2",
  ])
  "availability_zones" = tolist([
    "ap-northeast-2a",
    "ap-northeast-2b",
  ])
  "cache_subnet_group_id" = null
  "cidr_blocks" = [
    "10.0.0.0/24",
    "10.0.1.0/24",
  ]
  "dax_subnet_group_id" = null
  "db_subnet_group_arn" = null
  "db_subnet_group_id" = null
  "dms_replication_subnet_group_id" = null
  "docdb_subnet_group_arn" = null
  "docdb_subnet_group_id" = null
  "ids" = [
    "subnet-0314462f106805abd",
    "subnet-0dac1ad333aeeb594",
  ]
  "ipv6_cidr_blocks" = tolist([])
  "name" = "test_file_vpc-public"
  "neptune_subnet_group_arn" = null
  "neptune_subnet_group_id" = null
  "redshift_subnet_group_arn" = null
  "redshift_subnet_group_id" = null
  "subnets" = [
    {
      "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0314462f106805abd"
      "assign_ipv6_address_on_creation" = false
      "availability_zone" = "ap-northeast-2a"
      "availability_zone_id" = "apne2-az1"
      "cidr_block" = "10.0.0.0/24"
      "customer_owned_ipv4_pool" = ""
      "id" = "subnet-0314462f106805abd"
      "ipv6_cidr_block" = ""
      "ipv6_cidr_block_association_id" = ""
      "map_customer_owned_ip_on_launch" = false
      "map_public_ip_on_launch" = true
      "outpost_arn" = ""
      "owner_id" = "714546234903"
      "tags" = tomap({
        "Name" = "test_file_vpc-public-001/az1"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-public"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "tags_all" = tomap({
        "Name" = "test_file_vpc-public-001/az1"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-public"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "timeouts" = null /* object */
      "vpc_id" = "vpc-0c434901441bbc2f0"
    },
    {
      "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0dac1ad333aeeb594"
      "assign_ipv6_address_on_creation" = false
      "availability_zone" = "ap-northeast-2b"
      "availability_zone_id" = "apne2-az2"
      "cidr_block" = "10.0.1.0/24"
      "customer_owned_ipv4_pool" = ""
      "id" = "subnet-0dac1ad333aeeb594"
      "ipv6_cidr_block" = ""
      "ipv6_cidr_block_association_id" = ""
      "map_customer_owned_ip_on_launch" = false
      "map_public_ip_on_launch" = true
      "outpost_arn" = ""
      "owner_id" = "714546234903"
      "tags" = tomap({
        "Name" = "test_file_vpc-public-002/az2"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-public"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "tags_all" = tomap({
        "Name" = "test_file_vpc-public-002/az2"
        "Owner" = "posquite"
        "Project" = "Network"
        "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
        "module.terraform.io/instance" = "test_file_vpc-public"
        "module.terraform.io/name" = "subnet-group"
        "module.terraform.io/package" = "terraform-aws-network"
        "module.terraform.io/version" = "0.24.0"
      })
      "timeouts" = null /* object */
      "vpc_id" = "vpc-0c434901441bbc2f0"
    },
  ]
  "vpc_id" = "vpc-0c434901441bbc2f0"
}

Subnet_grops 하나로 public/subnet output 출력

output "subnet_groups" {
  value ={

    public = module.subnet_group__public
    private = module.subnet_group__private
  }
}
더보기
더보기
Outputs:

subnet_groups = {
  "private" = {
    "arns" = [
      "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-05349fcd8b3b4288e",
      "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-096eef54c8f953415",
    ]
    "availability_zone_ids" = tolist([
      "apne2-az1",
      "apne2-az2",
    ])
    "availability_zones" = tolist([
      "ap-northeast-2a",
      "ap-northeast-2b",
    ])
    "cache_subnet_group_id" = null
    "cidr_blocks" = [
      "10.0.10.0/24",
      "10.0.11.0/24",
    ]
    "dax_subnet_group_id" = null
    "db_subnet_group_arn" = null
    "db_subnet_group_id" = null
    "dms_replication_subnet_group_id" = null
    "docdb_subnet_group_arn" = null
    "docdb_subnet_group_id" = null
    "ids" = [
      "subnet-05349fcd8b3b4288e",
      "subnet-096eef54c8f953415",
    ]
    "ipv6_cidr_blocks" = tolist([])
    "name" = "test_file_vpc-private"
    "neptune_subnet_group_arn" = null
    "neptune_subnet_group_id" = null
    "redshift_subnet_group_arn" = null
    "redshift_subnet_group_id" = null
    "subnets" = [
      {
        "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-05349fcd8b3b4288e"
        "assign_ipv6_address_on_creation" = false
        "availability_zone" = "ap-northeast-2a"
        "availability_zone_id" = "apne2-az1"
        "cidr_block" = "10.0.10.0/24"
        "customer_owned_ipv4_pool" = ""
        "id" = "subnet-05349fcd8b3b4288e"
        "ipv6_cidr_block" = ""
        "ipv6_cidr_block_association_id" = ""
        "map_customer_owned_ip_on_launch" = false
        "map_public_ip_on_launch" = false
        "outpost_arn" = ""
        "owner_id" = "714546234903"
        "tags" = tomap({
          "Name" = "test_file_vpc-private-001/az1"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-private"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "tags_all" = tomap({
          "Name" = "test_file_vpc-private-001/az1"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-private"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "timeouts" = null /* object */
        "vpc_id" = "vpc-0c434901441bbc2f0"
      },
      {
        "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-096eef54c8f953415"
        "assign_ipv6_address_on_creation" = false
        "availability_zone" = "ap-northeast-2b"
        "availability_zone_id" = "apne2-az2"
        "cidr_block" = "10.0.11.0/24"
        "customer_owned_ipv4_pool" = ""
        "id" = "subnet-096eef54c8f953415"
        "ipv6_cidr_block" = ""
        "ipv6_cidr_block_association_id" = ""
        "map_customer_owned_ip_on_launch" = false
        "map_public_ip_on_launch" = false
        "outpost_arn" = ""
        "owner_id" = "714546234903"
        "tags" = tomap({
          "Name" = "test_file_vpc-private-002/az2"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-private"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "tags_all" = tomap({
          "Name" = "test_file_vpc-private-002/az2"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-private"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "timeouts" = null /* object */
        "vpc_id" = "vpc-0c434901441bbc2f0"
      },
    ]
    "vpc_id" = "vpc-0c434901441bbc2f0"
  }
  "public" = {
    "arns" = [
      "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0314462f106805abd",
      "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0dac1ad333aeeb594",
    ]
    "availability_zone_ids" = tolist([
      "apne2-az1",
      "apne2-az2",
    ])
    "availability_zones" = tolist([
      "ap-northeast-2a",
      "ap-northeast-2b",
    ])
    "cache_subnet_group_id" = null
    "cidr_blocks" = [
      "10.0.0.0/24",
      "10.0.1.0/24",
    ]
    "dax_subnet_group_id" = null
    "db_subnet_group_arn" = null
    "db_subnet_group_id" = null
    "dms_replication_subnet_group_id" = null
    "docdb_subnet_group_arn" = null
    "docdb_subnet_group_id" = null
    "ids" = [
      "subnet-0314462f106805abd",
      "subnet-0dac1ad333aeeb594",
    ]
    "ipv6_cidr_blocks" = tolist([])
    "name" = "test_file_vpc-public"
    "neptune_subnet_group_arn" = null
    "neptune_subnet_group_id" = null
    "redshift_subnet_group_arn" = null
    "redshift_subnet_group_id" = null
    "subnets" = [
      {
        "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0314462f106805abd"
        "assign_ipv6_address_on_creation" = false
        "availability_zone" = "ap-northeast-2a"
        "availability_zone_id" = "apne2-az1"
        "cidr_block" = "10.0.0.0/24"
        "customer_owned_ipv4_pool" = ""
        "id" = "subnet-0314462f106805abd"
        "ipv6_cidr_block" = ""
        "ipv6_cidr_block_association_id" = ""
        "map_customer_owned_ip_on_launch" = false
        "map_public_ip_on_launch" = true
        "outpost_arn" = ""
        "owner_id" = "714546234903"
        "tags" = tomap({
          "Name" = "test_file_vpc-public-001/az1"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-public"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "tags_all" = tomap({
          "Name" = "test_file_vpc-public-001/az1"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-public"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "timeouts" = null /* object */
        "vpc_id" = "vpc-0c434901441bbc2f0"
      },
      {
        "arn" = "arn:aws:ec2:ap-northeast-2:714546234903:subnet/subnet-0dac1ad333aeeb594"
        "assign_ipv6_address_on_creation" = false
        "availability_zone" = "ap-northeast-2b"
        "availability_zone_id" = "apne2-az2"
        "cidr_block" = "10.0.1.0/24"
        "customer_owned_ipv4_pool" = ""
        "id" = "subnet-0dac1ad333aeeb594"
        "ipv6_cidr_block" = ""
        "ipv6_cidr_block_association_id" = ""
        "map_customer_owned_ip_on_launch" = false
        "map_public_ip_on_launch" = true
        "outpost_arn" = ""
        "owner_id" = "714546234903"
        "tags" = tomap({
          "Name" = "test_file_vpc-public-002/az2"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-public"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "tags_all" = tomap({
          "Name" = "test_file_vpc-public-002/az2"
          "Owner" = "posquite"
          "Project" = "Network"
          "module.terraform.io/full-name" = "terraform-aws-network/subnet-group"
          "module.terraform.io/instance" = "test_file_vpc-public"
          "module.terraform.io/name" = "subnet-group"
          "module.terraform.io/package" = "terraform-aws-network"
          "module.terraform.io/version" = "0.24.0"
        })
        "timeouts" = null /* object */
        "vpc_id" = "vpc-0c434901441bbc2f0"
      },
    ]
    "vpc_id" = "vpc-0c434901441bbc2f0"
  }
}

'DevOps > Terraform' 카테고리의 다른 글

[TF]Terraform 조건문  (0) 2021.12.21
[TF]Terraform Count, Foreach  (0) 2021.12.19
[TF] AWS Resource 생성  (0) 2021.12.19
[TF]HCL 기초문법  (0) 2021.12.19
[TF]Terraform 기초 및 설치  (0) 2021.12.15