기본 네트워크 환경 구성

Chori·2024년 12월 28일
0
post-thumbnail

스스로 구축하는 AWS 클라우드 인프라 - 기본편을 수강하며 AWS 인프라를 Terraform으로 작성한 내용입니다.


VPC 생성

  • Backend와 Provider 설정을 마친 후 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 planterraform apply 명령어 실행

Subnet 생성

  • 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 생성

  • internet_gateway.tf 파일을 만들고 아래와 같이 작성
resource "aws_internet_gateway" "default" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "igw-${var.vpc_name}"
  }
}

Route Table 생성

  • Subnet에 위치한 인스턴스들이 대상지에 따라서 어떤 경로를 통해 트래픽이 이동할 것인지를 작성한 테이블

Public Subnet의 Route Table

1. Route Table 만들기

  • 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}"
  }
}

2. Route Table을 Public Subnet에 연결

  • 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
}

Private Subnet의 Route Table

1. Route Table 만들기

  • 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}"
  }
}

2. Route Table을 Private Subnet에 연결

  • 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)
}

참고자료

profile
전부인 것처럼, 전부가 아닌 것처럼

0개의 댓글