Terraform を使用して Azure Managed Lustre ファイル システムを作成する
この記事では、Terraform を使用して、 Azure Managed Lustre ファイル システムを作成します。
Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。
この記事では、次のことについて説明します。
- random_petを使用してランダムな値 (リソース グループ名で使用する) を作成します。
- azurerm_resource_group を使用して Azure リソース グループを作成する。
- azurerm_virtual_network を使用して Azure 仮想ネットワークを作成する。
- azurerm_subnet を使用して Azure サブネットを作成する。
- random_stringを使用してランダムな値 (Managed Lustre ファイル システム名として使用されます) を作成します。
- azurerm_managed_lustre_file_systemを使用してマネージド Lustre ファイル システムを作成します。
Note
この記事のコード例では、 random_pet リソースと random_string リソースを使用して、リソース グループ名と Managed Lustre ファイル システム名の一意の値を生成します。 これらの値は、 variables.tf
ファイルと main.tf
ファイル内の独自のリソース名に置き換えることができます。
前提条件
Terraform コードを実装する
Note
この記事のサンプル コードは、 Azure Terraform GitHub リポジトリから取得しています。 Terraform の現在および以前のバージョンのテスト結果を含むログ ファイルを確認できます。
Terraform を使用して Azure リソースを管理する方法を示すその他の記事とサンプル コードについては、Azure 上の Terraform の main ページを参照してください。
サンプルの 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)
Managed 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 plan を実行して、
destroy
フラグを指定します。terraform plan -destroy -out main.destroy.tfplan
重要なポイント:
terraform plan
コマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。- 省略可能な
-out
パラメーターを使用すると、プランの出力ファイルを指定できます。-out
パラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
terraform apply を実行して、実行プランを適用します。
terraform apply main.destroy.tfplan
Azure での Terraform のトラブルシューティング
Azure で Terraform を使用する場合の一般的な問題のトラブルシューティングを参照してください。