Terraform variable, module를 이용하여 VPC 생성해 보기

Terraform variable, module를 이용하여 VPC를 생성해 보는 방법 대해서 정리해 봤습니다.
2022.06.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Terraform variable, module를 이용하여 VPC를 생성해 보는 방법 대해서 정리해 봤습니다.

디렉토리 구성

$ tree

├── provider.tf
├── main_vpc.tf
└── module
└── vpc_folder
├── vpc.tf
└── variables.tf

먼저 디렉토리 구성은 다음과 같습니다.

module->vpc_folder 폴더 내에 vpc 변수를 정의하는 파일을 생성하고, main_vpc.tf 파일에서 module을 통해 vpc를 생성합니다.

variable, module를 이용해 VPC 생성


terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

먼저 provider.tf 에서는 버전과 리전을 정의 합니다.


module "network" {
  source   = "./module/vpc"
  cidr_vpc = "10.0.0.0/16"
  cidr_public1 = "10.0.1.0/24"
  cidr_public2 = "10.0.2.0/24"
  cidr_private1 = "10.0.11.0/24"
  cidr_private2 = "10.0.12.0/24"
  az1 = "ap-northeast-1a"
  az2 = "ap-northeast-1c"
}

이어서 main_vpc.tf 입니다.

이 소스코드에서 module을 정의 합니다.

source의 경우 불러올 module의 경로를 의미합니다.


variable "cidr_vpc" {}
variable "cidr_public1" {}
variable "cidr_public2" {}
variable "cidr_private1" {}
variable "cidr_private2" {}
variable "az1" {}
variable "az2" {}

variables.tf 에서는 각각의 변수 값들을 정의합니다.


resource "aws_vpc" "vpc" {
  cidr_block           = var.cidr_vpc
  instance_tenancy     = "default"
  enable_dns_hostnames = true
}

resource "aws_subnet" "public1" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_public1
  availability_zone = var.az1
}

resource "aws_subnet" "public2" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_public2
  availability_zone = var.az2
}

resource "aws_subnet" "private1" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_private1
  availability_zone = var.az1
}

resource "aws_subnet" "private2" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_private2
  availability_zone = var.az2
}

vpc.tf 에서는 variables.tf 에서 정의한 변수 이름을 바탕으로 리소스를 생성합니다.

variable을 사용할 때는 var 를 이용해서 사용합니다.

  • terraform init
  • terraform plan
  • terraform apply

이제 다음 명령어로 리소스를 생성합니다.


  # module.network.aws_vpc.vpc will be created
  + resource "aws_vpc" "vpc" {
      + arn                                  = (known after apply)
      + cidr_block                           = "10.0.0.0/16"
      + default_network_acl_id               = (known after apply)
      + default_route_table_id               = (known after apply)
      + default_security_group_id            = (known after apply)
      + dhcp_options_id                      = (known after apply)
      + enable_classiclink                   = (known after apply)
      + enable_classiclink_dns_support       = (known after apply)
      + enable_dns_hostnames                 = true
      + enable_dns_support                   = true
      + id                                   = (known after apply)
      + instance_tenancy                     = "default"
      + ipv6_association_id                  = (known after apply)
      + ipv6_cidr_block                      = (known after apply)
      + ipv6_cidr_block_network_border_group = (known after apply)
      + main_route_table_id                  = (known after apply)
      + owner_id                             = (known after apply)
      + tags_all                             = (known after apply)
    }

Plan: 5 to add, 0 to change, 0 to destroy.

커맨드 라인에서는 문제없이 리소스가 생성된 것을 확인할 수 있습니다.

Consol에 들어가서 확인해 보면 문제 없이 생성된 것을 확인할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !