스스로 구축하는 AWS 클라우드 인프라 - 기본편을 수강하며 AWS 인프라를 Terraform으로 작성한 내용입니다.
vpc.tf
파일을 생성하고 아래와 같이 작성resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
enable_dns_hostnames = true
tags = {
Name = var.vpc_name
}
}
variables.tf
파일을 아래와 같이 작성variable "vpc_name" {
type = string
}
terraform.tfvars
파일을 아래와 같이 작성vpc_name = "main"
instance_tenancy
는 VPC에서 EC2 인스턴스를 생성할 때 전용 하드웨어를 사용할 것인지에 대한 설정dedicated
로 지정하고 사용하지 않으면 default
로 지정enable_dns_hostnames
는 VPC가 Public IP 주소가 있는 인스턴스에 Public DNS hostnames를 할당하도록 지원할 것인지에 대한 설정terraform plan
과 terraform apply
명령어 실행subnet.tf
파일을 아래와 같이 작성resource "aws_subnet" "public" {
count = length(var.cidr_numeral_public)
vpc_id = aws_vpc.main.id
cidr_block = "10.0.${var.cidr_numeral_public[count.index]}.0/24"
availability_zone = element(var.availability_zones, count.index)
tags = {
Name = "public-${count.index}-${var.vpc_name}"
}
}
resource "aws_subnet" "private" {
count = length(var.cidr_numeral_private)
vpc_id = aws_vpc.main.id
cidr_block = "10.0.${var.cidr_numeral_private[count.index]}.0/24"
availability_zone = element(var.availability_zones, count.index % length(var.availability_zones))
tags = {
Name = "private-${count.index}-${var.vpc_name}"
}
}
variables.tf
파일에 아래 내용 추가variable "availability_zones" {
type = list(string)
}
variable "cidr_numeral_public" {
type = list(number)
}
variable "cidr_numeral_private" {
type = list(number)
}
terraform.tfvars
파일에 아래 내용 추가availability_zones = [ "ap-northeast-2a", "ap-northeast-2c" ]
cidr_numeral_public = [ 0, 1 ]
cidr_numeral_private = [ 2, 3, 4, 5 ]
internet_gateway.tf
파일을 만들고 아래와 같이 작성resource "aws_internet_gateway" "default" {
vpc_id = aws_vpc.main.id
tags = {
Name = "igw-${var.vpc_name}"
}
}
route_table.tf
파일에 다음과 같이 작성# Route Table for public subnets
resource "aws_route_table" "public" {
vpc_id = aws_vpc.main.id
tags = {
Name = "public-rt-${var.vpc_name}"
}
}
route_table.tf
파일에 다음 내용을 추가# Route Table Association for public subnets
resource "aws_route_table_association" "public" {
count = length(var.cidr_numeral_public)
subnet_id = element(aws_subnet.public.*.id, count.index)
route_table_id = aws_route_table.public.id
}```
#### 3. Route Table 규칙 설정
- `route_table.tf` 파일에 다음 내용을 추가
``` HCL
# Route for public subnets
resource "aws_route" "public_igw" {
route_table_id = aws_route_table.public.id
destination_cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.default.id
}
route_table.tf
에 아래 내용을 추가# Route Table for private subnets
resource "aws_route_table" "private" {
count = length(var.cidr_numeral_private)
vpc_id = aws_vpc.main.id
tags = {
Name = "private-rt-${count.index}-${var.vpc_name}"
}
}
route_table.tf
에 아래 내용을 추가# Route Table Association for private subnets
resource "aws_route_table_association" "private" {
count = length(var.cidr_numeral_private)
subnet_id = element(aws_subnet.private.*.id, count.index)
route_table_id = element(aws_route_table.private.*.id, count.index)
}