흰 스타렉스에서 내가 내리지

Terraform 을 이용하여 VPC 와 Subnet 생성 본문

DevOps

Terraform 을 이용하여 VPC 와 Subnet 생성

주씨. 2024. 8. 6. 19:08
728x90

# Terraform 으로 VPC 생성하기

 

가장 먼저 해야 하는 것은 ? >> provider 생성하기 

vim provider.tf
provider "aws" {
  region = "ap-northeast-2"
}

 

 

VPC 를 생성할 때는 `aws_vpc` 리소스를 사용하고, 필수적으로 필요한 설정은 cidr_block 이다.

vim vpc.tf
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "devops-demo-vpc"
  }
}

 

 

terraform init

aws sdk 를 다운받는 과정

 

 

terraform plan

 

 

terraform apply

 

 

 

AWS 에서 VPC 대시보드로 이동해보면 VPC 리소스가 성공적으로 생성됨을 확인할 수 있다. 

 

 

 

그러나 서브넷은 만들어지지 않았다. 

 

서브넷을 만들어보도록 하자.

 


# Terraform 으로 서브넷 생성하기

Subnet 은 특정 Availability Zone 에 속한 네트워크 그룹으로, VPC 내에서도 나눠진 독립적인 네트워크 구역이다. 

 

Subnet 을 생성할 떄는 `aws_subnet` 이라는 리소스를 사용하면 된다. 

필수 설정은 해당 서브넷을 연결할 VPC 의 ID 와 해당 서브넷의 cidr block 이다. 

 

서브넷의 cidr block 은 VPC 의 cidr block 내에 속해 있어야 한다. 

 

 

- 현재까지 폴더 상태

 

tf 파일들을 저렇게 다 나눠서 써도 되고, 한 파일에 같이 써도 된다. 상관없다. 

 

 

vim vpc.tf
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "devops-demo-vpc"
  }
}

resource "aws_subnet" "public_subnet" {
  vpc_id = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"

  availability_zone = "ap-northeast-2a"

  tags = {
    Name = "devops-demo-subnet-1"
  }
}

resource "aws_subnet" "private_subnet" {
  vpc_id = aws_vpc.main.id
  cidr_block = "10.0.2.0/24"

  availability_zone = "ap-northeast-2c"

  tags = {
    Name = "devops-demo-subnet-2"
  }
}

테라폼 코드에서는 참조를 할 수 있기 때문에, vpc id 를 위와 같이 가져올 수 있다. 

AZ 는 명시하지 않으면, no preference 로 아무데나 만들어진다. 

 

terraform plan

 

 

terraform apply

 

 

`terraform state list` 명령어를 실행하여 생성된 리소스들의 리스트를 볼 수 있다. 

terraform state list

 

 

 

AWS 의 VPC 대시보드로 가면 서브넷이 잘 생성되었음을 확인할 수 있다.

 

 

나는 ~~-subnet-1 을 public subnet 으로 하고자 한다. 

 

그러나, route table 에 대한 리소스 정의를 하지 않았기 때문에, default 라우트 테이블이 연결되어 있는 것을 확인할 수 있다. 

 

다음 글에서 이 코드를 그대로 가지고 Internet Gateway 를 생성하고 route table , 그리고 NAT Gateway 까지 같이 생성해보자.