Tengo un Azure SQL Server existente y 1 base de datos que no se creó inicialmente en un Elastic Pool. Terraform ha desplegado esto y mantenido el estado.

# Define SQL Server 1
resource "azurerm_mssql_server" "go-1" {
  name                          = "sql-sandbox-server01
  resource_group_name           = data.azurerm_resource_group.env-resourcegroup.name
  location                      = data.azurerm_resource_group.env-resourcegroup.location
  version                       = var.azsqlserver1version
  administrator_login           = var.azsqlserver1sauser
  administrator_login_password  = random_password.sql-password.result
  public_network_access_enabled = "true" # set to false with vNet integration
}
# Define SQL Database 1 - non-ElasticPool
resource "azurerm_mssql_database" "go-1" {
  name                = "sqldb-sandbox-01"
  server_id           = azurerm_mssql_server.go-1.id
  sku_name            = "Basic"
}

Desde que se tomó la decisión de usar Elastic Pools (para esta única base de datos y otras para seguir), la base de datos "sqldb-sandbox-01" ya tiene tablas y datos.

He agregado esto a mi archivo main.tf ... y funciona bien, el grupo elástico se crea ...

resource "azurerm_sql_elasticpool" "go-1" {
  name                = "sqlep-sandbox-pool01
  resource_group_name = data.azurerm_resource_group.env-resourcegroup.name
  location            = data.azurerm_resource_group.env-resourcegroup.location
  server_name         = azurerm_mssql_server.go-1.name
  edition             = "Basic"
  dtu                 = 50
  db_dtu_min          = 0
  db_dtu_max          = 5
  pool_size           = 5000
}

Mi pregunta es ... ¿Cómo muevo el "sqldb-sandbox-01" existente al Elastic Pool en Terraform sin destruir la base de datos y volver a crearla?

Intenté esto, simplemente agregando la línea simple elastic_pool_id, pero como dice la documentación, destruirá / creará la base de datos nuevamente ...

# Define SQL Database 1 - non-ElasticPool
resource "azurerm_mssql_database" "go-1" {
  name                = var.azsqldb1name
  server_id           = azurerm_mssql_server.go-1.id
  sku_name            = var.azsqldb1sku
  elastic_pool_id     = azurerm_sql_elasticpool.go-1.id
}

Estaría agradecido de saber de alguien que haya estado en la misma posición y haya logrado encontrar una manera.

Mover una base de datos del mismo servidor existente a un Elastic Pool se logra fácilmente en la GUI de Azure Portal, por lo que esperaba algo similar aquí. Hice un poco de búsqueda pero no pude encontrar nada específico para esta tarea sencilla.

Gracias de antemano

1
nmca70 26 jun. 2020 a las 13:45

2 respuestas

La mejor respuesta

Para la base de datos SQL Azure existente y Elastic Pool. Agregar directamente la línea única elastic_pool_id en el bloque will forzar la creación de un nuevo recurso. Incluso esta pantalla no es obvia en el portal de Azure.

enter image description here

En lugar de hacer esto, puede usar scripts locales de PowerShell para agregar la base de datos existente al nuevo Elastic Pool. El local-exec provisioner invoca un ejecutable local después de crear un recurso .

Aquí hay una muestra de trabajo de mi lado.

resource "null_resource" "add_pool" {
 
  provisioner "local-exec" {

  command = <<-EOT
   Set-AzSqlDatabase `
   -ResourceGroupName "${azurerm_resource_group.example.name}" `
   -ServerName "${azurerm_mssql_server.example.name}" `
   -DatabaseName "${azurerm_mssql_database.test.name}" `
   -ElasticPoolName "${azurerm_sql_elasticpool.go-1.name}"
  EOT
    
  interpreter = ["PowerShell", "-Command"]

 }

}
1
Nancy Xiong 30 jun. 2020 a las 02:40

En realidad, esto terminó más fácil de lo previsto, después de muchas pruebas.

Mi segmento de base de datos original se veía así ...

# Define SQL Database 1 - non-ElasticPool
resource "azurerm_mssql_database" "go-1" {
  name                = var.azsqldb1name
  server_id           = azurerm_mssql_server.go-1.id
  sku_name            = "Basic"
}

Tenía sentido simplemente mover la base de datos a un grupo elástico manualmente, en lugar de intentar hacerlo en código.

Una vez que la base de datos se movió al grupo elástico, noté que la ID de Azure detrás de la base de datos no cambió.

Luego actualicé Terraform con un cambio en sku_name, y la adición de elastic_pool_id ...

resource "azurerm_mssql_database" "go-1" {
  name                = var.azsqldb1name
  server_id           = azurerm_mssql_server.go-1.id
  sku_name            = "ElasticPool"
  elastic_pool_id     = azurerm_sql_elasticpool.go-1.id
}

Ejecute el Plan Terraform nuevamente, no se detectaron cambios en la infraestructura, ha funcionado y no quiere destruir nada.

En resumen : mueva la base de datos independiente al Elastic Pool manualmente

Actualice su Terraform para la base de datos en cuestión con un cambio a ... sku_name ... y la adición de elastic_pool_id

Gracias a todos los que me ayudaron con esta pregunta.

0
nmca70 29 jun. 2020 a las 15:44