terraform으로 AWS VPC/Subnet 네트워크 구축하기
IT/DevOps

terraform으로 AWS VPC/Subnet 네트워크 구축하기

반응형

Topic

  • terraform으로 AWS VPC/Subnet 구축

사전준비

  • AWS 계정
  • AWS CLI 설치
  • AWS IAM생성
  • AWS CLI configure 설정
  • terraform 설치

본 블로그에서는 AWS Cloud9을 사용하였습니다.

AWS VPC 아키텍처

작업리스트

  • terraform 디렉터리 구조잡기
  • terraform 모듈 활용
  • terraform 코드작성
  • terraform cli로 VPC구축
  • AWS management console에서 VPC생성확인

terraform 디렉터리 구조잡기

  • 디렉터리 구조는 아래와 같이 minimal하게 잡도록 함

├── main.tf
├── variables.tf
├── outputs.tf

terraform 모듈 활용하기

 

  • 또는 상단의 검색바 이용

  • 모듈 사용 방법 예시가 잘 나와있음

main.tf

  • Provider에 대한 설정을 커스텀하게 변경
provider "aws" {
  #version = "~> 3.22"
  region                  = "ap-northeast-2"
  shared_credentials_file = "/Users/test/.aws/credentials"
  profile                 = "default"

}

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

  name = var.vpc_name 
  cidr = var.vpc_cidr

  azs             = var.vpc_azs
  private_subnets = var.private_cidr
  public_subnets  = var.public_cidr

  enable_nat_gateway = true
  enable_vpn_gateway = true

  tags = {
    Terraform = "true"
    Environment = "dev"
  }
}

variables.tf

variable "vpc_name" {
    type        = string
    default     = "my-vpc"
    description = "vpc name"
}

variable "vpc_cidr" {
    type        = string
    default     = "10.0.0.0/16"
    description = "vpc cidr"
}

variable "vpc_azs" {
    type        = list
    default     = ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c"]
    description = "vpc azs"
}

variable "public_cidr" {
    type        = list
    default     = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
    description = "public cidr"
}

variable "private_cidr" {
    type        = list
    default     = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
    description = "private cidr"
}

outputs.tf

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

output "nat_public_ips" {
  value = "${module.vpc.nat_public_ips}"
}

output "private_subnet_ids" {
  value = "${module.vpc.private_subnets}"
}

output "public_subnet_ids" {
  value = "${module.vpc.public_subnets}"
}

output "private_routetable_ids" {
    value = "${module.vpc.private_route_table_ids}"
}

output "public_routetable_ids" {
    value = "${module.vpc.public_route_table_ids}"
}

terraform CLI로 VPC 생성

  • terraform 초기설정
terraform init

  • terraform 리소스 생성확인
terraform plan​

  • terraoform 리소스 생성
terraform apply
## Enter a value: yes

 

terraform CLI로 VPC 삭제

terraform destroy
##  Enter a value: yes

AWS Management Console에서 VPC확인

Services - VPC

Wrap Up

  • 이와 같이 서비스 모듈을 활용하면 VPC를 쉽게 생성할 수 있습니다.
  • 네트워크를 설계에 따라서 서비스 모듈을 어떻게 커스터 마이징 해야하는지도 중요합니다.
  • 커스터마이징하기위해 아래와 같이 테라폼에서 제공하는 모듈을 가져와서 활용하면 쉽게 커스터마이징을 하실 수가 있습니다.
  • mian.tf 코드에 source = "terraform-aws-modules/vpc/aws" 는 테라폼에서 제공하는 모듈을 terraform init 명령어 이후 아래와 같이 자동으로 가져오게 합니다.
  • 이 소스 폴더를 다음과같이 내가 원하는 위치에 복사하여 source = "./modules/vpc" 으로 설정한 뒤 커스텀하게 프로그래밍 하시면됩니다.
반응형