02_Terraform/AWS

[AWS_Terraform]01_초기 설정 및 VPC, Subnet 생성

boan-stu 2025. 3. 18. 23:00

요번 포스팅에서는 AWS를 사용하기 위한 초기 세팅을 해보겠습니다. 이전 포스팅에서 진행한 CLI 환경 구성이 선행되어야 하니, 필요하시면 아래 포스팅을 참고해주세요.

https://boan-stu.tistory.com/11

 

[실습환경구성]AWS_CLI 구성

안녕하세요! 오늘은 Terraform을 활용하기 위하여 AWS_CLI를 구성해보겠습니다.총 목표는 테라폼 코드를 활용하여 네트워크 인프라 구성, 이후 DB 서버 연동, Auto Scailing까지 진행해보겠습니다.1. AWS CL

boan-stu.tistory.com

 

 

또한, 제가 작성한 코드는 대부분 Terraform에서 제공하는 Registry 사이트를 참고하고 있습니다. 참고할 자료를 원하시는 분들은 아래의 URL에서 [Browse Providers] → [코드를 보고 싶은 클라우드 플랫폼] → [Documentation] 을 통하여 확인하실 수 있습니다.

https://registry.terraform.io/

 

Terraform Registry

 

registry.terraform.io

 

 


1. 초기 준비

1.1 처음으로, 코드 및 기타 필요한 소스들을 모아둘 폴더를 만들어준 후, RSA Key를 생성해주겠습니다. 저의 경우에는 폴더를 ( D:\04_IaC\02_aws\01_prod ) 의 형식으로 생성했습니다.

 

  • Win + R 키를 통하여 실행창에 cmd 입력, 아래의 커맨드를 통하여 RSA 키 쌍을 생성해주세요.
ssh-keygen -b 2048 -m PEM -t rsa -N ""

 

  • 아래와 같이 키 쌍이 생성됐음을 볼 수 있습니다. 이 키는 초기 세팅 시에 생성 및 지정한 후, 앞으로 진행될 Instance 생성 후 접근하는 등의 용도로 사용할 예정입니다.

 

 

  • id_rsa : 개인키 / SSH를 통해 인증하는 용도로 사용
  • id_rsa.pub : 공개키 / SSH를 통해 인증되는 용도로 사용

 

 

1.2 이제 초기 코드를 작성하겠습니다. 위에 언급한 소스들을 모아둘 폴더 안에 01_init.tf 의 이름으로 파일을 생성해주세요. 참고로, 저는 Vscode를 사용해서 작성하겠습니다.

 

 

  • 이후 아래 코드를 작성해줍니다.

Init.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}
provider "aws" {
  region = var.region
}
resource "aws_key_pair" "twcha_key" {
  key_name = "twcha-key.pub"
  public_key = file("C:/Users/secu22/.ssh/id_rsa.pub")
}

 

  • 저는 region 이라는 변수를 등록하여 var.region 으로 코드를 작성하였습니다. 편의에 따라 저와 같이 변수를 등록 후 사용, 혹은 “ap-northeast-2” 로 작성해주시면 됩니다.

var.tf

variable "region" {
  type    = string
  default = "ap-northeast-2"
}

 

  • 이후 cmd 창을 연 후, 경로를 해당 코드가 있는 폴더로 이동해줍니다. 이후, terraform init 명령어를 통하여 초기화를 진행해줍니다. 아래 화면과 같이 보인다면 성공입니다!

 

 

 

 


 

 

2. VPC 및 Subnet 생성

2.1 저는 요번에 VPC는 10.0.0.0/16 네트워크를 사용할 예정이며, Subnet은 다음 그림과 같습니다.

 

  • VPC : AWS에서 사용자에게 제공하는 가상 네트워크 환경
  • Subnet : VPC 내에서 IP 주소 범위를 나눈 단위

 

 

2.2 이에 해당하는 코드는 다음과 같습니다. 또한, 이전 var.tf 변수 선언 파일에 cidr 변수를 선언, default 값으로 “10.0.0.0/16” 값을 부여하였습니다.

 

 

var.tf

 

variable "region" {
  type    = string
  default = "ap-northeast-2"
}
variable "cidr" {
  type    = string
  default = "10.0.0.0/16"
}

 

 

02_vpc.tf

resource "aws_vpc" "twcha_vpc" {
  cidr_block           = var.cidr
  instance_tenancy     = "default"
  enable_dns_hostnames = true
  tags = {
    name = "twcha-vpc"
  }
}
output "vpc-id" {
  value = aws_vpc.twcha_vpc.id
}
output "owner-id" {
  value = aws_vpc.twcha_vpc.owner_id
}

 

 

03_sub.tf

resource "aws_subnet" "twcha_puba" {
  vpc_id     = aws_vpc.twcha_vpc.id
  cidr_block = "10.0.0.0/24"
  availability_zone = "${var.region}a"

  tags = {
    Name = "twcha-puba"
  }
}
resource "aws_subnet" "twcha_pubc" {
  vpc_id     = aws_vpc.twcha_vpc.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "${var.region}c"

  tags = {
    Name = "twcha-pubc"
  }
}
resource "aws_subnet" "twcha_pria" {
  vpc_id     = aws_vpc.twcha_vpc.id
  cidr_block = "10.0.2.0/24"
  availability_zone = "${var.region}a"

  tags = {
    Name = "twcha-pria"
  }
}
resource "aws_subnet" "twcha_pric" {
  vpc_id     = aws_vpc.twcha_vpc.id
  cidr_block = "10.0.3.0/24"
  availability_zone = "${var.region}c"

  tags = {
    Name = "twcha-pric"
  }
}
resource "aws_subnet" "twcha_dba" {
  vpc_id     = aws_vpc.twcha_vpc.id
  cidr_block = "10.0.4.0/24"
  availability_zone = "${var.region}a"

  tags = {
    Name = "twcha-dba"
  }
}
resource "aws_subnet" "twcha_dbc" {
  vpc_id     = aws_vpc.twcha_vpc.id
  cidr_block = "10.0.5.0/24"
  availability_zone = "${var.region}c"

  tags = {
    Name = "twcha-dbc"
  }
}

 

 

 


 

 

3. 설정 적용 및 확인

3.1 이제 설정한 파일을 적용시켜 보겠습니다. CMD 창을 연 후, 파일의 경로로 이동, ‘terraform plan’ 커맨드를 이용하여 적용될 사항을 눈으로 확인해주세요.

 

 

  • 문제가 없으시다면 아래와 같은 화면을 확인하실 수 있습니다. 이후 적용하시려면, ‘terraform apply’ 커맨드를 사용해주세요. 여기서 —auto-approve 옵션은 자동으로 yes를 해주는 옵션인데, 단 세글자를 치지 않기 위해서 저 긴 문장을 써야하는 아이러니한 상황이 발생합니다.

 

 

  • 잘 진행하셨다면, VPC 대시보드에 서브넷이 잘 생성된 것을 보실 수 있습니다. 이후, 진행 상황을 되돌리기 위하여, ‘terraform destroy’ 커맨드를 통하여 리소스를 삭제해주겠습니다.