Миграция на саммит инноваций:
Узнайте, как миграция и модернизация в Azure может повысить производительность, устойчивость и безопасность вашего бизнеса, что позволяет полностью принять ИИ.Зарегистрироваться
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Краткое руководство. Создание виртуальной машины Linux с помощью Terraform
Статья
Область применения: ✔️ виртуальные машины Linux
Статья проверена со следующими версиями Terraform и поставщика Terraform:
В этой статье показано, как создать готовую среду Linux и вспомогательные ресурсы с помощью Terraform. К этим ресурсам относятся виртуальная сеть, подсеть, общедоступный IP-адрес и др.
Terraform поддерживает определение, предварительный просмотр и развертывание облачной инфраструктуры. С помощью Terraform можно создавать файлы конфигурации с применением синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, например Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации создается план выполнения, который позволяет предварительно просматривать изменения инфраструктуры до их развертывания. После проверки изменений примените план выполнения для развертывания инфраструктуры.
Вы узнаете, как выполнять следующие задачи:
Создайте случайное значение для имени группы ресурсов Azure с помощью random_pet.
Создайте файл с именем main.tf и вставьте следующий код:
Terraform
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
}
# Create virtual networkresource"azurerm_virtual_network""my_terraform_network" {
name = "myVnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
}
# Create subnetresource"azurerm_subnet""my_terraform_subnet" {
name = "mySubnet"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.my_terraform_network.name
address_prefixes = ["10.0.1.0/24"]
}
# Create public IPsresource"azurerm_public_ip""my_terraform_public_ip" {
name = "myPublicIP"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
allocation_method = "Dynamic"
}
# Create Network Security Group and ruleresource"azurerm_network_security_group""my_terraform_nsg" {
name = "myNetworkSecurityGroup"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
security_rule {
name = "SSH"
priority = 1001
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
# Create network interfaceresource"azurerm_network_interface""my_terraform_nic" {
name = "myNIC"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
ip_configuration {
name = "my_nic_configuration"
subnet_id = azurerm_subnet.my_terraform_subnet.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.my_terraform_public_ip.id
}
}
# Connect the security group to the network interfaceresource"azurerm_network_interface_security_group_association""example" {
network_interface_id = azurerm_network_interface.my_terraform_nic.id
network_security_group_id = azurerm_network_security_group.my_terraform_nsg.id
}
# Generate random text for a unique storage account nameresource"random_id""random_id" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = azurerm_resource_group.rg.name
}
byte_length = 8
}
# Create storage account for boot diagnosticsresource"azurerm_storage_account""my_storage_account" {
name = "diag${random_id.random_id.hex}"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
account_tier = "Standard"
account_replication_type = "LRS"
}
# Create virtual machineresource"azurerm_linux_virtual_machine""my_terraform_vm" {
name = "myVM"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
network_interface_ids = [azurerm_network_interface.my_terraform_nic.id]
size = "Standard_DS1_v2"
os_disk {
name = "myOsDisk"
caching = "ReadWrite"
storage_account_type = "Premium_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts-gen2"
version = "latest"
}
computer_name = "hostname"
admin_username = var.username
admin_ssh_key {
username = var.username
public_key = azapi_resource_action.ssh_public_key_gen.output.publicKey
}
boot_diagnostics {
storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint
}
}
Создайте файл с именем variables.tf и вставьте следующий код:
Terraform
variable"resource_group_location" {
type = string
default = "eastus"
description = "Location of the resource group."
}
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"username" {
type = string
description = "The username for the local account that will be created on the new VM."
default = "azureadmin"
}
Создайте файл с именем outputs.tf и вставьте следующий код:
Terraform
output"resource_group_name" {
value = azurerm_resource_group.rg.name
}
output"public_ip_address" {
value = azurerm_linux_virtual_machine.my_terraform_vm.public_ip_address
}
Инициализация 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 без параметров.
Сведения о затратах не представлены во время процесса создания виртуальной машины для Terraform, как и для портал Azure. Дополнительные сведения о том, как работает стоимость виртуальных машин, см. на странице обзора оптимизации затрат.
Запустите Get-AzVm , чтобы отобразить имена всех виртуальных машин в группе ресурсов.
Azure PowerShell
Get-AzVm -ResourceGroupName$resource_group_name
Очистка ресурсов
Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:
Выполните команду terraform plan и укажите флаг destroy.
Консоль
terraform plan -destroy -out main.destroy.tfplan
Основные моменты:
Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы.
Необязательный параметр -out позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что проверяемый план полностью соответствует применяемому.
Выполните команду terraform apply, чтобы применить план выполнения.
Из этого краткого руководства вы узнали, как развернуть простую виртуальную машину с помощью Terraform. Дополнительные сведения о виртуальных машинах Azure см. в руководстве для виртуальных машин Linux.
Планирование, доставка, управление и мониторинг возможностей виртуального рабочего стола и удаленных приложений в Microsoft Azure для любого устройства.
Узнайте, как использовать шаблон Azure Resource Manager для создания и развертывания виртуальной машины Ubuntu Linux с помощью этого краткого руководства.