Terraform을 사용하여 Azure Managed Lustre 파일 시스템 만들기
이 문서에서는 Terraform을 사용하여 Azure Managed Lustre 파일 시스템을 만듭니다.
Terraform은 클라우드 인프라의 정의, 프리뷰 및 배포를 사용합니다. Terraform을 사용하는 경우 HCL 구문를 사용하여 구성 파일을 만듭니다. HCL 구문을 사용하면 클라우드 공급자(예: Azure) 그리고 클라우드 인프라를 구성하는 요소를 지정할 수 있습니다. 구성 파일을 만든 후 배포되기 전에 인프라 변경을 미리 볼 수 있는 실행 계획를 만듭니다. 변경 내용을 확인 한 후에는 실행 계획을 적용하여 인프라를 배포합니다.
이 문서에서는 다음 방법을 설명합니다.
- random_pet 사용하여 임의의 값(리소스 그룹 이름에 사용)을 만듭니다.
- azurerm_resource_group을 사용하여 Azure 리소스 그룹을 만듭니다.
- azurerm_virtual_network를 사용하여 Azure Virtual Network를 만듭니다.
- azurerm_subnet을 사용하여 Azure 서브넷을 만듭니다.
- random_string 사용하여 임의 값(Managed Lustre 파일 시스템 이름으로 사용)을 만듭니다.
- azurerm_managed_lustre_file_system 사용하여 관리되는 Lustre 파일 시스템을 만듭니다.
참고 항목
이 문서의 코드 예제에서는 random_pet 및 random_string 리소스를 사용하여 리소스 그룹 이름 및 Managed Lustre 파일 시스템 이름에 대한 고유 값을 생성합니다. 이러한 값을 파일의 고유한 리소스 이름으로 variables.tf
main.tf
바꿀 수 있습니다.
필수 조건
Terraform 코드 구현
참고 항목
이 문서의 샘플 코드는 Azure Terraform GitHub 리포지토리에서 제공됩니다. Terraform의 현재 및 이전 버전의 테스트 결과를 포함하는 로그 파일을 볼 수 있습니다.
Terraform을 사용하여 Azure 리소스를 관리하는 방법을 보여 주는 더 많은 문서 및 샘플 코드는 Azure 설명서의 Terraform 기본 페이지를 참조하세요.
샘플 Terraform 코드를 테스트하고 현재 디렉터리로 만들 디렉터리를 만듭니다.
providers.tf
라는 파일을 만들고 다음 코드를 삽입합니다.terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
main.tf
라는 파일을 만들고 다음 코드를 삽입합니다.resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_string" "azurerm_virtual_network_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_virtual_network" "example" { name = coalesce(var.virtual_network_name, "vnet-${random_string.azurerm_virtual_network_name.result}") resource_group_name = azurerm_resource_group.rg.name address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg.location } resource "random_string" "azurerm_subnet_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_subnet" "example" { name = coalesce(var.subnet_name, "subnet-${random_string.azurerm_subnet_name.result}") resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.2.0/24"] } resource "random_string" "azurerm_amlfs_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_managed_lustre_file_system" "example" { name = coalesce(var.amlfs_name, "amlfs-${random_string.azurerm_amlfs_name.result}") resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku_name = var.amlfs_sku_name subnet_id = azurerm_subnet.example.id storage_capacity_in_tb = var.amlfs_storage_capacity_in_tb zones = ["1"] maintenance_window { day_of_week = var.amlfs_maintenance_day_of_week time_of_day_in_utc = var.amlfs_maintenance_time_of_day } }
variables.tf
라는 파일을 만들고 다음 코드를 삽입합니다.variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "virtual_network_name" { type = string description = "The name of the virtual network resource. The value will be randomly generated if blank." default = "" } variable "subnet_name" { type = string description = "The name of the virtual network subnet. The value will be randomly generated if blank." default = "" } variable "amlfs_name" { type = string description = "The name of the Manage Lustre file system resource. The value will be randomly generated if blank." default = "" } variable "amlfs_sku_name" { type = string default = "AMLFS-Durable-Premium-40" validation { condition = contains(["AMLFS-Durable-Premium-40", "AMLFS-Durable-Premium-125", "AMLFS-Durable-Premium-250", "AMLFS-Durable-Premium-500"], var.amlfs_sku_name) error_message = "The SKU value must be one of the following: AMLFS-Durable-Premium-40, AMLFS-Durable-Premium-125, AMLFS-Durable-Premium-250, AMLFS-Durable-Premium-500." } description = "SKU name for the Azure Managed Lustre file system." } variable "amlfs_storage_capacity_in_tb" { type = number default = 48 description = "The size of the Managed Lustre file system, in TiB. This might be rounded up." } variable "amlfs_maintenance_day_of_week" { type = string default = "Saturday" validation { condition = contains(["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], var.amlfs_maintenance_day_of_week) error_message = "The maintenance day of week value must be one of the following: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday." } description = "Day of the week on which the maintenance window will occur." } variable "amlfs_maintenance_time_of_day" { type = string default = "02:00" description = "The time of day (in UTC) to start the maintenance window." }
outputs.tf
라는 파일을 만들고 다음 코드를 삽입합니다.output "resource_group_name" { value = azurerm_resource_group.rg.name } output "virtual_network_name" { value = azurerm_virtual_network.example.name } output "subnet_name" { value = azurerm_subnet.example.name } output "managed_lustre_file_system_name" { value = azurerm_managed_lustre_file_system.example.name } output "amlfs_sku_name" { value = azurerm_managed_lustre_file_system.example.sku_name } output "amlfs_storage_capacity_in_tb" { value = azurerm_managed_lustre_file_system.example.storage_capacity_in_tb }
Terraform 초기화
terraform init를 실행하여 Terraform 배포를 초기화합니다. 이 명령은 Azure 리소스를 관리하는 데 필요한 Azure 공급자를 다운로드합니다.
terraform init -upgrade
주요 정보:
-upgrade
매개 변수는 필요한 공급자 플러그 인을 구성의 버전 제약 조건을 준수하는 최신 버전으로 업그레이드합니다.
Terraform 실행 계획 만들기
terraform plan을 실행하여 실행 계획을 만듭니다.
terraform plan -out main.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
Terraform 실행 계획 적용
terraform apply를 실행하여 실행 계획을 클라우드 인프라에 적용합니다.
terraform apply main.tfplan
주요 정보:
- 예시
terraform apply
명령은 이전에terraform plan -out main.tfplan
를 실행했다고 가정합니다. -out
매개 변수에 다른 파일 이름을 지정한 경우terraform apply
에 대한 호출에서 동일한 파일 이름을 사용합니다.-out
매개 변수를 사용하지 않은 경우 매개 변수 없이terraform apply
를 호출합니다.
결과 확인
Azure 리소스 그룹의 이름을 가져옵니다.
resource_group_name=$(terraform output -raw resource_group_name)
관리되는 Lustre 파일 시스템의 이름을 가져옵니다.
managed_lustre_file_system_name=$(terraform output -raw managed_lustre_file_system_name)
az amlfs show를 실행하여 Managed Lustre 파일 시스템의 이름을 표시합니다.
az amlfs show --resource-group $resource_group_name \ --name $managed_lustre_file_system_name \
리소스 정리
Terraform을 통해 리소스를 만들 필요가 더 이상 없으면 다음 단계를 수행합니다.
terraform 플랜을 실행하고
destroy
플래그를 지정합니다.terraform plan -destroy -out main.destroy.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
terraform apply를 실행하여 실행 계획을 적용합니다.
terraform apply main.destroy.tfplan
Azure의 Terraform 문제 해결
Azure에서 Terraform을 사용할 때 발생하는 일반적인 문제 해결을 참조하세요.