account_id = ["123456789012"] # 아이디 변경 필수, output 확인용, 실수 방지용도, 리소스에 사용하진 않음
region = "ap-northeast-2" # 리전 변경 필수, output 확인용, 실수 방지용도, 리소스에 사용하진 않음
prefix = "bsg"
vpc_name = "terraform-test-vpc" # 최종 VPC 이름: ${prefix}-${vpc_name}
vpc_cidr = "10.10.0.0/16" # 적절하게 변경
azs = ["ap-northeast-2a", "ap-northeast-2c"] # AZ 개수와 서브넷 개수는 같아야함
enable_internet_gateway = "true"
enable_nat_gateway = "false"
# -[ nat gateway 사용 시 필수 조건 ]-
# 1. enable_internet_gateway = "true"
# 2. enable_nat_gateway = "true"
# 3. subnets 맵에 natgw 이름의 오브젝트 필요(아래 참고)
# 4. nat gateway가 필요한 서브넷에 "rt2natgw" = "yes" 필요
subnets = {
"natgw" = { # enable_nat_gateway = "true" 일 경우 반드시 필요
"cidr" = ["10.10.0.0/24", "10.10.10.0/24"],
"ipv4_type" = "public", # enable_nat_gateway = "true" 일 경우 반드시 public 이어야 함
"rt2natgw" = "no",
},
"web" = {
"cidr" = ["10.10.20.0/24", "10.10.30.0/24"],
"ipv4_type" = "private",
"rt2natgw" = "no",
},
"was" = {
"cidr" = ["10.10.40.0/24", "10.10.50.0/24"],
"ipv4_type" = "private",
"rt2natgw" = "yes", # nat gateway를 routing table에 추가 할려면 변수 선언 필요
},
"rds" = {
"cidr" = ["10.10.60.0/24", "10.10.70.0/24"],
"ipv4_type" = "private",
"rt2natgw" = "no",
}
}
# 공통 tag, 생성되는 모든 리소스에 태깅
tags = {
"CreatedByTerraform" = "true"
}
module "vpc" {
source = "git::https://github.com/sgbyeon/terraform-aws-module-vpc.git"
prefix = var.prefix
region = var.region
vpc_name = var.vpc_name
vpc_cidr = var.vpc_cidr
azs = var.azs
enable_nat_gateway = var.enable_nat_gateway
subnets = var.subnets
tags = var.tags
}
provider "aws" {
region = var.region
}
terraform {
required_version = ">= 0.15.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.39"
}
}
}
variable "region" {
description = "AWS Region"
type = string
default = ""
}
variable "account_id" {
description = "List of Allowed AWS account IDs"
type = list(string)
default = [""]
}
variable "prefix" {
description = "prefix for aws resources and tags"
type = string
}
variable "vpc_name" {
description = "VPC name"
type = string
default = ""
}
variable "vpc_cidr" {
description = "VPC default cidr"
type = string
default = ""
}
variable "azs" {
description = "Availability Zone List"
type = list
}
variable "enable_internet_gateway" {
description = "internet gateway whether or not use"
type = string
default = "false"
}
variable "enable_nat_gateway" {
description = "nat gateway whether or not use"
type = string
default = "false"
}
variable "tags" {
description = "tag map"
type = map(string)
}
variable "subnets" {
type = map(any)
}
output "account_id" {
description = "AWS Account ID"
value = module.vpc.account_id
}
output "vpc_id" {
description = "VPC ID"
value = module.vpc.vpc_id
}
output "vpc_cidr_block" {
description = "CIDR block for VPC"
value = module.vpc.vpc_cidr_block
}
output "subnet_ids" {
description = "Subnet ID List"
value = module.vpc.subnet_ids
}
output "igw_id" {
description = "Internet Gateway ID"
value = module.vpc.igw_id
}
output "natgw_id" {
description = "Nat Gateway ID"
value = module.vpc.natgw_id
}
output "public_route_table_ids" {
description = "Public Route Table ID List"
value = module.vpc.public_route_table_ids
}
output "private_route_table_ids" {
description = "Public Route Table ID List"
value = module.vpc.private_route_table_ids
}
output "private_route_table_with_natgw_ids" {
description = "Public Route Table ID List"
value = module.vpc.private_route_table_with_natgw_ids
}
output "default_security_group" {
description = "Default Security Group"
value = module.vpc.default_security_group
}