[DevOps/Terraform/T101] 테라폼으로 AWS VPC 생성
첫 번째 테라폼 실습은 default vpc에서 진행했는데 이번엔 vpc를 직접 생성해 보겠다!
그 전에~~ 테라폼 코드로 리소스 생성할 때 사용하는 구문 구조를 먼저 알아야 한다!!!
resource “<PROVIDER>_<TYPE>” “<NAME>” {
[CONFIG …]
}
PROVIDER
: 공급자 이름 (ex. aws, azurerm, google, kubernetes, …)TYPE
: 해당 공급자에서 생성할 리소스의 유형 (ex. vpc, instance, ami, autoscaling_group, …)NAME
: 테라폼 코드에서 이 리소스를 참조하는 데 사용할 수 있는 식별자 (사용자 정의)CONFIG
: 특정 리소스에 대한 하나 이상의 인수(argument)로 구성-
예를 들어, aws_vpc 리소스를 사용하여 default vpc의 데이터를 사용하는 구문은 아래와 같다 참고참고!
data “aws_vpc” “default” { default = true }
-
vpc.tf 기본 파일 작성
provider는 aws로 지정하였고 리전은 서울!
cidr을 지정하고 이름 태그를 지정해 줬다.
cat <<EOT > vpc.tf provider "aws" { region = "ap-northeast-2" } resource "aws_vpc" "yoogavpc" { cidr_block = "10.10.0.0/16" tags = { Name = "t101-study" } } EOT
- VPC DNS 옵션 수정
enable_dns_support
- (Optional) Defaults 값은true
이고, 이 옵션은 VPC가 Amazon에서 제공하는 DNS 서버를 통해 DNS 확인을 지원하는지(Amazon 제공 DNS 서버에 대한 쿼리) 여부를 결정한다.enable_dns_hostnames
- (Optional) Defaults 값은false
이고, 이 옵션은 VPC가 Public IP 주소가 있는 인스턴스에 Public DNS hostnames을 할당하도록 지원할 여부를 결정한다.
provider "aws" { region = "ap-northeast-2" } resource "aws_vpc" "yoogavpc" { cidr_block = "10.10.0.0/16" enable_dns_support = true enable_dns_hostnames = true tags = { Name = "t101-study" } }
-
Subnet 2개 생성 추가
각각 다른 두 개의 az에
10.10.1.0/24
와10.10.2.0/24
로 분리해서 Subnet을 2개 생성해 주었다.resource "aws_subnet" "yoogasubnet1" { vpc_id = aws_vpc.yoogavpc.id cidr_block = "10.10.1.0/24" availability_zone = "ap-northeast-2a" tags = { Name = "t101-subnet1" } } resource "aws_subnet" "yoogasubnet2" { vpc_id = aws_vpc.yoogavpc.id cidr_block = "10.10.2.0/24" availability_zone = "ap-northeast-2c" tags = { Name = "t101-subnet2" } }
리소스에서 참조하는
vpc_id
는 아래 VPC ID를 말한다! -
외부 인터넷 연결할 Internet Gateway 생성
Internet Gateway를 통해서 VPC와 인터넷 간에 통신을 할 수 있게 해 준다.
resource "aws_internet_gateway" "yoogaigw" { vpc_id = aws_vpc.yoogavpc.id tags = { Name = "t101-igw" } }
-
Route Table 생성
Route Table을 정의한 후에,
aws_route_table_association
리소스를 활용하여 위에 생성한 두 개의 Subnet을 Route Table에 조인하게 한다!인터넷을 통해 인스턴스에 접근하도록 하려면 default route를 생성하고 IGW로 향하게 해야 하므로
aws_route
리소스에서 defualt 라우팅 규칙을 정의해 준다. 대상 주소는0.0.0.0/0
로 잡고 대상은 위에 생성한 Internet Gateway로 설정한다.resource "aws_route_table" "yoogart" { vpc_id = aws_vpc.yoogavpc.id tags = { Name = "t101-rt" } } resource "aws_route_table_association" "yoogartassociation1" { subnet_id = aws_subnet.yoogasubnet1.id route_table_id = aws_route_table.yoogart.id } resource "aws_route_table_association" "yoogartassociation2" { subnet_id = aws_subnet.yoogasubnet2.id route_table_id = aws_route_table.yoogart.id } resource "aws_route" "yoogadefaultroute" { route_table_id = aws_route_table.yoogart.id destination_cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.yoogaigw.id }
-
마지막으로 생성한 리소스 리스트 확인!
$ terraform state list aws_internet_gateway.yoogaigw aws_route.yoogadefaultroute aws_route_table.yoogart aws_route_table_association.yoogartassociation1 aws_route_table_association.yoogartassociation2 aws_subnet.yoogasubnet1 aws_subnet.yoogasubnet2 aws_vpc.yoogavpc
Leave a comment