Today
-
Yesterday
-
Total
-


  • [TF]Terraform Variable & Local & Output
    DevOps/Terraform 2021. 12. 19. 16:51

    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

    댓글

www.devc4sh.com