fullmoon's bright IT blog

[T101] Terraform study - Azure로 알아보는 간단한 테라폼 배포하기 (2) - Network 1편 본문

Cloud/Azure

[T101] Terraform study - Azure로 알아보는 간단한 테라폼 배포하기 (2) - Network 1편

휘영청 2022. 12. 12. 01:53
728x90

 

안녕하세요 휘영청입니다!

지난 번 기초에 이어서 리소스 그룹과 스토리지 계정을 만들어보았습니다.

 추가적으로 네트워킹 부분도 해볼까합니다.


[ 목   차 ]

  • 가상네트워크 + 서브넷
  • 네트워크 인터페이스

 

1.  가상네트워크 - azurerm_virtual_network

가상 네트워크를 생성하고 가상 네트워크 내에 2개의 서브넷을 만드는 간단한 테라폼 양식입니다 :)

#프로바이더
terraform {
    required_providers {
      azurerm = {
        source = "hashicorp/azurerm"
        version = "3.29.1"
      }
    }
  }

#프로바이더지정및구독아이디   
provider "azurerm" {
  subscription_id = "bfa5d97b-bcb7-4de5-844e-7412348afdd2"
  features {}
}

#리소스그룹지정하기
resource "azurerm_resource_group" "hwi_grp" {
    name = "hwi_grp"
    location = "koreacentral"
  }

기존처럼 프로바이더 설정하고 리소스 그룹을 만들어주고

#가상네트워크
resource "azurerm_virtual_network" "appnetwork" {
  name                = "app-network"
  location = "koreacentral"
  resource_group_name = "hwi-grp"
  address_space       = ["10.0.0.0/16"]

#서브넷
  subnet {
    name           = "subnetA"
    address_prefix = "10.0.0.0/24"
  }

  subnet {
    name           = "subnetB"
    address_prefix = "10.0.1.0/24"    
  }
}

 

여기서 현재 서브넷을 볼 때 가상 네트워크 주요 리소스 블록의 일부입니다. 

서브넷 자체에 대한 리소스 블록이 별도로 있답니다!

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet

 

서브넷 리소스 블록을 별도로 구성하여 서브넷을 정의하고 사용할 수 있습니다.

그리고 의존성까지 추가해줍니다.

 depends_on = [
    azurerm_resource_group.hwi-grp
  ]

주소공간

배포된 후 확인해보면 Address space 안에 서브넷이 배포가 되어있음을 확인할 수 있습니다.

2. 네트워크 인터페이스- azurerm_virtual_network

네트워크 인터페이스를 사용하면 Azure Virtual Machine이 인터넷, Azure 및 온-프레미스 리소스와 통신할 수 있습니다.

기본적으로 내부용으로 사용하는 프라이빗 IP 주소를 만들 수 있습니다.

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/network_interface

 

여기서는 변수를 사용해봅니다. 전달할 값을 알려줍니다.

https://developer.hashicorp.com/terraform/language/values

 

즉, 특정 가치를 입력으로 간주하여 전체적으로 재사용할 필요가 있는 경우에 변수를 정의할 수 있습니다. 변수에 숫자 유형이나 문자열을 지정할 수 있습니다.

리소스 그룹의 이름과 같은 값이 여러 번 사용되면 계속 쓰기 불편하니 변수를 지정해서 이 특정 스크립트 전체에서 재사용할 수 있습니다.

#예시

locals {
  resource_group_name=hwi-grp"
  location="koreacentral"
  virtual_network={
    name="app-network"
    address_space="10.0.0.0/16"
  }

이것을 적용하면 나중에 리소스를 일일히 입력하지 않아도 됩니다 :)

#변수지정_리소스그룹
resource "azurerm_resource_group" "hwi-grp" {
  name     = local.resource_group_name
  location = local.location  
}

#변수지정_가상네트워크
resource "azurerm_virtual_network" "appnetwork" {
  name                = local.virtual_network.name
  location            = local.location
  resource_group_name = local.resource_group_name
  address_space       = [local.virtual_network.address_space]  
  
   depends_on = [
     azurerm_resource_group.hwi-grp
   ]
  }

#변수지정_서브넷
  resource "azurerm_subnet" "subnetA" {
  name                 = local.subnets[0].name
  resource_group_name  = local.resource_group_name
  virtual_network_name = local.virtual_network.name
  address_prefixes     = [local.subnets[0].address_prefix]
  depends_on = [
    azurerm_virtual_network.appnetwork
  ]
}

resource "azurerm_subnet" "subnetB" {
  name                 = local.subnets[1].name
  resource_group_name  = local.resource_group_name
  virtual_network_name = local.virtual_network.name
  address_prefixes     = [local.subnets[1].address_prefix]
  depends_on = [
    azurerm_virtual_network.appnetwork
  ]
}

#변수지정_네트워크인터페이스
resource "azurerm_network_interface" "appinterface" {
  name                = "appinterface"
  location            = local.location
  resource_group_name = local.resource_group_name

  ip_configuration {
    name                          = "internal"
    subnet_id                     = azurerm_subnet.subnetA.id
    private_ip_address_allocation = "Dynamic"
  }
  depends_on = [
    azurerm_subnet.subnetA
  ]
}

 

 

 

다음 주제는

  • 퍼블릭 IP
  • 네트워크 보안그룹 으로 올려보겠습니다 :)
728x90