첫 번째 테라폼 실습은 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
      }
    
  1. 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
    
  2. 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"
       }
     }
    

    image

  3. Subnet 2개 생성 추가

    각각 다른 두 개의 az에 10.10.1.0/2410.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를 말한다!

    image

  4. 외부 인터넷 연결할 Internet Gateway 생성

    Internet Gateway를 통해서 VPC와 인터넷 간에 통신을 할 수 있게 해 준다.

     resource "aws_internet_gateway" "yoogaigw" {
       vpc_id = aws_vpc.yoogavpc.id
        
       tags = {
         Name = "t101-igw"
       }
     }
    
  5. 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
     }
    

    image

  6. 마지막으로 생성한 리소스 리스트 확인!

     $ 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
    

Categories:

Updated:

Leave a comment