본문 바로가기

Terraform

114_Terraform: AWS VPC 생성①

1. 사전 설정
2. Provider 선택
3. Key-Pair 생성

4. VPC 생성
5. Subnet 생성

 

※ Terraform AWS Document
https://registry.terraform.io/providers/hashicorp/aws/latest/docs 
 

Terraform Registry

 

registry.terraform.io

 

1. 사전 설정


작업 폴더 생성
HashiCorp Terraform 확장팩 설치
생성한 폴더 열기

 

2. Provider 선택


 - terraform provider를 선택하는 01_main.tf 파일 생성 및 입력

 - 터미널에서 terraform init 명령어로 AWS에서 사용해야 할 특정 파일들을 HashiCorp로부터 받아옴

# 01_main.tf

provider "aws" {			# terraform provider 지정
  region = "ap-northeast-2"		# region 지정
}

terraform init
terraform init으로 생성된 파일

 

3. Key-Pair 생성


 - Key 값을 직접 하드코딩해도 생성이 가능하나 보안상 좋지 않으므로 Pubilc Key file을 지정하여 생성

# 00_key.tf

resource "aws_key_pair" "hjjeong_key" {
  key_name = "hjjeong1-key"					# Key Pair 이름 지정
#  public_key = "PUBLIC_KEY"					# Public Key Hard Coding
  public_key = file("../../users/user/.ssh/hjjeong.pub")	# Public Key file link
}

※ terraform plan/apply 명령은 VSCode의 터미널에서도 실행 가능하지만 CMD에서 실행하는 것이 내용을 보기 좋음

terraform plan
terraform apply --auto-approve
key pair 생성 완료

※ 이후 terraform plan/apply 명령어 캡쳐는 생략

 

4. VPC 생성


 - cidr_block: VPC Network 대역 설정

 - enable_dns_hostnames: VPC에서 DNS 호스트 활성화

 - tags: 생성되는 resource 이름 지정

 - terraform plan 명령어로 resource의 실행 내용을 미리 확인할 수 있음

 - terraform apply 명령어로 resource를 실행할 수 있음

  · --auto-approve 옵션을 추가하면 'yes' 입력 생략 가능

# 02_vpc.tf

resource "aws_vpc" "hjjeong_vpc" {
  cidr_block           = "10.0.0.0/16"		# Network 대역 지정
  enable_dns_hostnames = true			# DNS hostname 활성화
  tags = {
    "Name" = "hjjeong-vpc"			# 이름 지정
  }
}

VPC 생성 완료

 

5. Subnet 생성


 - vpc_id: VPC 지정

 - cidr_block: Network 대역 지정

 - availability_zone: 가용 영역 지정

# 03_subnet.tf

resource "aws_subnet" "hjjeong_weba" {
  vpc_id            = aws_vpc.hjjeong_vpc.id		# VPC 지정
  cidr_block        = "10.0.0.0/24"			# Network 대역 지정
  availability_zone = "ap-northeast-2a"			# 가용 영역 지정
  tags = {
    "Name" = "hjjeong-weba"				# 이름 지정
  }
}
resource "aws_subnet" "hjjeong_webc" {
  vpc_id            = aws_vpc.hjjeong_vpc.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-northeast-2c"
  tags = {
    "Name" = "hjjeong-webc"
  }
}
resource "aws_subnet" "hjjeong_wasa" {
  vpc_id            = aws_vpc.hjjeong_vpc.id
  cidr_block        = "10.0.2.0/24"
  availability_zone = "ap-northeast-2a"
  tags = {
    "Name" = "hjjeong-wasa"
  }
}
resource "aws_subnet" "hjjeong_wasc" {
  vpc_id            = aws_vpc.hjjeong_vpc.id
  cidr_block        = "10.0.3.0/24"
  availability_zone = "ap-northeast-2c"
  tags = {
    "Name" = "hjjeong-wasc"
  }
}
resource "aws_subnet" "hjjeong_dba" {
  vpc_id            = aws_vpc.hjjeong_vpc.id
  cidr_block        = "10.0.4.0/24"
  availability_zone = "ap-northeast-2a"
  tags = {
    "Name" = "hjjeong-dba"
  }
}
resource "aws_subnet" "hjjeong_dbc" {
  vpc_id            = aws_vpc.hjjeong_vpc.id
  cidr_block        = "10.0.5.0/24"
  availability_zone = "ap-northeast-2c"
  tags = {
    "Name" = "hjjeong-dbc"
  }
}

Subnet 생성 완료

 

※ 생성한 Resource는 terraform destroy 명령어로 삭제 가능

terraform destroy
VPC 삭제 완료
서브넷 삭제 완료
인터넷 게이트웨이 삭제 완료