이번에 T101 3기 스터디를 시작하게 되면서, 오랜만에 Terraform 스터디를 진행하게 되었습니다.
작년 Terraform 스터디를 진행했을 때 굉장히 많은 레벨업을 했기에 이번 스터디도 기대가 됩니다. :)
이번 스터디는 최근 발매된 테라폼으로 시작하는 IaC 을 기반으로 진행되고 있습니다.
실습 코드 GitHub
0. 시작하기에 앞서...
현재 회사에서 Terraform 을 사용하여 AWS 리소스를 배포하는 업무를 담당하고 있기에,
이번 스터디에서는 배운 것을 기반으로 Terraform 을 사용해 Azure 클라우드 상에 리소스를 배포하는 과정을 공부하고 기록해볼까 합니다.
AWS 를 주로 다루고 있어 Azure 를 완벽하게 이해하고 있지는 않습니다.
혹시라도 틀린 내용이 있다면 너그러이 지적 부탁드립니다. :)
1. Terraform 에 대한 간략한 설명
Terraform 은 하시코프사에서 공개한 IaC 도구입니다.
- Terraform Cloud
하시코프에서 제공하는 SaaS 형태의 Terraform 이며, 하시코프가 관리하는 서버 환경이 제공됩니다.
- Terraform Enterprise
서버 설치형 구성 환경으로, 기업의 사내 정책에 따라 프로비저닝 관리가 외부 네트워크와 격리될 수 있습니다.
- Terraform Community Edition
사용자의 컴퓨팅 환경에 오픈소스 바이너리툴인 테라폼을 통해 사용하는 것입니다.
흔히 Terraform 을 사용한다고 하면 Community Edition 을 사용하는 것이고,
원래 명칭은 Terraform Open Source 였으나 최근 라이센스 정책이 바뀌면서 Community Edition 으로 명칭이 바뀌었습니다.
Terraform 에 대한 더 자세한 내용은 이전 블로그 글을 통해서도 확인이 가능합니다.
01. 테라폼이란 무엇인가?
02. 테라폼 Mac 실행환경 구성
03. 테라폼을 통한 리소스 배포
04. 테라폼을 통한 EC2 웹서버 배포
2. Terraform 으로 vNet 배포
Azure 에서 Terraform 을 사용하기 위해서는 AWS 와 마찬가지로 로컬에 API 를 전송할 수 있는 권한이 부여되어야 합니다.
가장 쉬운 방법인 Azure CLI 를 통해 권한을 부여해보겠습니다.
2.1. Azure CLI 로그인
Brew 를 통해 간단하게 CLI 설치가 가능합니다.
brew install azure-cli
# CLI 설치 후 로그인
az login
Azure 에서는 다음과 같이 콘솔을 통해 자격증명을 얻어올 수 있습니다.
2.2. Terraform Provider 작성
간단한 리소스를 위해 main.tf 파일을 생성 후 Azure Provider 를 지정합니다.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">=3.71.0" # 230903 기준 가장 최신 azure provider
}
}
}
provider "azurerm" {
features {}
}
2.3. Azure Resource Group 생성
Azure 는 AWS 와 달리, 생성한 리소스를 한곳에서 관리해주는 Resource Group 이란 것이 별도로 존재합니다.
앞으로 생성할 vNet, VM 등은 Resource Group 에 속해있어야 하기 때문에 Resource Group 을 먼저 생성해줍니다.
resource "azurerm_resource_group" "azure_rg" {
name = "test-terraform"
location = "Korea Central"
}
2.4. vNet 생성
AWS VPC 와 같이 Azure 에서 가상 네트워크를 만들 수 있는 vNet 리소스를 생성하기 위해 다음 코드를 추가해줍니다.
'10.0.0.0/16' 의 CIDR 를 보유한 네트워크 대역입니다.
resource "azurerm_virtual_network" "azure_vnet" {
location = azurerm_resource_group.azure_rg.location
resource_group_name = azurerm_resource_group.azure_rg.name
name = "test-vnet"
address_space = ["10.0.0.0/16"]
}
2.5. Subnet 생성
vNet 에 포함될 Subnet 을 생성해주겠습니다.
간단한 테스트를 위해 1개의 Subnet 을 생성하겠습니다.
resource "azurerm_subnet" "azure_subnet_1" {
resource_group_name = azurerm_resource_group.azure_rg.name
virtual_network_name = azurerm_virtual_network.azure_vnet.name
name = "test-subnet-1"
address_prefixes = ["10.0.1.0/24"]
}
2.6. Terraform 배포
완성된 Terraform 코드는 다음과 같습니다.
Terraform Plan 및 Apply 를 통해 실제 리소스를 배포해보겠습니다.
terraform plan
terraform apply -auto-approve
Azure 콘솔에서도 확인해보겠습니다.
리소스가 잘 배포된 것을 확인할 수 있었습니다.
다음 글에서는 생성한 Subnet 상에 VM 을 배포해보겠습니다.
원래 VM 까지 배포하는 것을 이번 포스팅을 통해 진행하려고 했지만,
Azure 에서는 네트워크 인터페이스와 vNet 을 모두 생성해야 VM 을 만들 수 있어 다음 번 글로 넘기도록 하겠습니다. ㅜㅜ
AWS 에서는 Default VPC 로 쉽게 만들 수 있었는데 말이죠...