繁体   English   中英

Terraform - Azure - 同时使用“azurerm_windows_virtual_machine”和“azurerm_mssql_virtual_machine” - 但未配置 SQL 存储

[英]Terraform - Azure - Using "azurerm_windows_virtual_machine" and "azurerm_mssql_virtual_machine" together - but SQL Storage isn't getting configured


这是关于 Azure 上的 Terraform。在我之前的项目中,我使用了遗留的“azurerm_virtual_machine”资源 + ARM 模板来配置“Microsoft.SqlVirtualMachine/SqlVirtualMachines”资源并配置了数据磁盘和 lun。

这很好用。
在我当前的项目中,我们一起使用较新的资源“azurerm_windows_virtual_machine”+“azurerm_mssql_virtual_machine”来启动 SQL 个 VM。 然而,到目前为止它一直是一个哑弹。

Terraform 文档示例使用旧资源“azurerm_windows_virtual_machine”。

问题
  • 在“azurerm_windows_virtual_machine”中没有找到描述数据磁盘和lun id的方法结果

  • 当我没有在“azurerm_mssql_virtual_machine”中提及 storage_configuration 块时,Azure 门户显示“在卷列表中找不到驱动器”。 在 SQL 虚拟机资源(不是虚拟机资源)> 配置部分下。 我附上了截图。

  • 请参阅以下错误: 在此处输入图像描述

  • 如果我尝试在“azurerm_mssql_virtual_machine”的 storage_configuration 块中提及数据磁盘和 lun,配置将失败并出现错误

    creating Sql Virtual Machine (Sql Virtual Machine Name "ASQLVM" / Resource Group "a-resource-group"): sqlvirtualmachine.SQLVirtualMachinesClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: Code="InvalidDefaultFilePath" Message="Invalid Default File Path"

有没有同时使用新的“azurerm_windows_virtual_machine”+“azurerm_mssql_virtual_machine”来配置 SQL 虚拟机的好方法?

查看以下代码。 如果您还没有成功,我希望它能回答您的问题。

resource "azurerm_windows_virtual_machine" "vm" {    
    count   = length(var.instances)
    name    = upper(element(var.instances, count.index))
    location                = azurerm_resource_group.resourcegroup[count.index].location
    resource_group_name     = azurerm_resource_group.resourcegroup[count.index].name
    network_interface_ids   = [azurerm_network_interface.nic[count.index].id]
    size                    = var.instancesize
    zone                    = var.instancezone
    admin_username  = var.vmadmin
    admin_password  = data.azurerm_key_vault_secret.vmadminpwd.value
    enable_automatic_updates    = "false"
    patch_mode                  = "Manual"
    provision_vm_agent          = "true"
    tags                        = var.tags

    source_image_reference {
        publisher = "MicrosoftSQLServer"
        offer     = "sql2019-ws2019"
        sku       = "enterprise"
        version   = "latest"
    }
        
    os_disk {
        name                    = "${element(var.instances, count.index)}-osdisk"
        caching                 = "ReadWrite"
        storage_account_type    = "StandardSSD_LRS"
        disk_size_gb            = 250
    }
}

# add a data disk - we were going to iterate through a collection, but this is easier for now
resource "azurerm_managed_disk" "datadisk" {
    count = length(var.instances)
    name                    = "${azurerm_windows_virtual_machine.vm[count.index].name}-data-disk01" 
    location                = azurerm_resource_group.resourcegroup[count.index].location
    resource_group_name     = azurerm_resource_group.resourcegroup[count.index].name
    storage_account_type    = "Premium_LRS"
    zones                   = [var.instancezone]
    create_option           = "Empty"
    disk_size_gb            = 1000
    tags                    = var.tags
}

resource "azurerm_virtual_machine_data_disk_attachment" "datadisk_attach" {
    count = length(var.instances)
    managed_disk_id    = azurerm_managed_disk.datadisk[count.index].id
    virtual_machine_id = azurerm_windows_virtual_machine.vm[count.index].id
    lun                = 1
    caching            = "ReadWrite"
}

# add a log disk - we were going to iterate through a collection, but this is easier for now
resource "azurerm_managed_disk" "logdisk" {
    count = length(var.instances)
    name                    = "${azurerm_windows_virtual_machine.vm[count.index].name}-log-disk01" 
    location                = azurerm_resource_group.resourcegroup[count.index].location
    resource_group_name     = azurerm_resource_group.resourcegroup[count.index].name
    storage_account_type    = "Premium_LRS"
    zones                    = [var.instancezone]
    create_option           = "Empty"
    disk_size_gb            = 500
    tags                    = var.tags
}

resource "azurerm_virtual_machine_data_disk_attachment" "logdisk_attach" {
    count = length(var.instances)
    managed_disk_id    = azurerm_managed_disk.logdisk[count.index].id
    virtual_machine_id = azurerm_windows_virtual_machine.vm[count.index].id
    lun                = 2
    caching            = "ReadWrite"
}

# configure the SQL side of the deployment
resource "azurerm_mssql_virtual_machine" "sqlvm" {
    count = length(var.instances)
    virtual_machine_id               = azurerm_windows_virtual_machine.vm[count.index].id
    sql_license_type                 = "PAYG"
    r_services_enabled               = true
    sql_connectivity_port            = 1433
    sql_connectivity_type            = "PRIVATE"
    sql_connectivity_update_username = var.sqladmin
    sql_connectivity_update_password = data.azurerm_key_vault_secret.sqladminpwd.value

    #The storage_configuration block supports the following:
    storage_configuration {
        disk_type               = "NEW"                         # (Required) The type of disk configuration to apply to the SQL Server. Valid values include NEW, EXTEND, or ADD.
        storage_workload_type   = "OLTP"                        # (Required) The type of storage workload. Valid values include GENERAL, OLTP, or DW.

        # The storage_settings block supports the following:
        data_settings {
            default_file_path = var.sqldatafilepath     # (Required) The SQL Server default path
            luns = [azurerm_virtual_machine_data_disk_attachment.datadisk_attach[count.index].lun]
        }

        log_settings {
            default_file_path = var.sqllogfilepath     # (Required) The SQL Server default path
            luns = [azurerm_virtual_machine_data_disk_attachment.logdisk_attach[count.index].lun]                                 # (Required) A list of Logical Unit Numbers for the disks.
        }

#        temp_db_settings {
#            default_file_path = var.sqltempdbfilepath   #- (Required) The SQL Server default path
#            luns = [3] #- (Required) A list of Logical Unit Numbers for the disks.
#        }

    }

}

与上面的答案相反,建议的代码没有解决问题。 问题是:

关于如何将默认路径传递给terraform sql 资源,没有明确的格式。

    resource "azurerm_mssql_virtual_machine" "sqlserver" {
  virtual_machine_id               = azurerm_windows_virtual_machine.win.id
  sql_license_type                 = "PAYG"
  r_services_enabled               = true
  auto_patching {
    day_of_week                            = "Sunday"
    maintenance_window_duration_in_minutes = 60
    maintenance_window_starting_hour       = 2
  }
  storage_configuration {
  disk_type             = "NEW"
  storage_workload_type = "OLTP"
    data_settings {
      default_file_path = "D:\\Data"
      luns              = [0]
    }
    log_settings {
      default_file_path = "E:\\log"
      luns              = [1]                 
    }
    temp_db_settings {
      default_file_path = "F:\\bin"
      luns              = [2]                 
    }
   }

正如您在此处看到的,我正在尝试定义正确的路径设置。 但它不起作用。

目标是附加磁盘并对其进行格式化,以便 SQL 资源可以控制路径/磁盘。

您需要使用临时驱动器盘符 D: 并省略 E:,因为它是 DVD 驱动器。 你需要这样做:

storage_configuration {
    disk_type             = "NEW"
    storage_workload_type = "OLTP"
   
    data_settings {
      default_file_path = "F:\\Data"
      luns              = [0]
    }

    log_settings {
      default_file_path = "G:\\Log"
      luns              = [1]
    }

    temp_db_settings { 
      default_file_path = "D:\\TempDb"
      luns = [] 
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM