将 Terraform 的 Azure SQL 资源从“azurerm_sql_database”升级到“azurerm_mssql_database”

2024-05-01

不久前,我使用 Terraform 创建了一个无服务器 Azure SQL 资源azurerm_sql_database https://www.terraform.io/docs/providers/azurerm/r/sql_database.html堵塞。然后在三月份,azurerm 版本2.3 https://github.com/terraform-providers/terraform-provider-azurerm/releases/tag/v2.3.0他们出来了azurerm_mssql_database https://www.terraform.io/docs/providers/azurerm/r/mssql_database.html块,其中我认为 https://github.com/terraform-providers/terraform-provider-azurerm/issues/6502旨在取代azurerm_sql_database.

我需要改变auto_pause_delay_in_minutes设置,仅适用于azurerm_mssql_database。所以我想我现在需要升级,然后再有任何关于如何执行升级的官方指南(我可以找到)。如果我执行这些步骤:

  • Replace azurerm_sql_database with azurerm_mssql_database
  • Remove resource_group_name
  • Remove location
  • Replace requested_service_objective_name with sku_name
  • Replace server_name with server_id

然后 terraform 尝试删除我的数据库并创建一个新数据库,我收到一条错误,例如“ID [id] 的资源已存在 - 要通过 Terraform 进行管理,需要将此资源导入到状态中。”

如何进行升级和设置auto_pause_delay_in_minutes不删除我的数据库?


Azure 中的旧资源需要导入到 terraform 中的新资源定义中。然后 terraform 中旧的资源状态需要删除。请参阅以下演练。修改您需要的任何附加参数,这是相同的工作流程。

首先构建azurerm_sql_database资源:

# cat .\main.tf
provider "azurerm" {
  version = "~>2.19.0"
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "East US"
}

resource "azurerm_sql_server" "example" {
  name                         = "pearcecexamplesqlserver"
  resource_group_name          = azurerm_resource_group.example.name
  location                     = "East US"
  version                      = "12.0"
  administrator_login          = "4dm1n157r470r"
  administrator_login_password = "4-v3ry-53cr37-p455w0rd"

}

resource "azurerm_sql_database" "example" {
  name                = "pearcecexamplesqldatabase"
  resource_group_name = azurerm_resource_group.example.name
  location            = "East US"
  server_name         = azurerm_sql_server.example.name
}

地形应用-- 假设一个干净的创作

将资源更改为azurerm_mssql_database并更新参数

cat .\main.tf
provider "azurerm" {
  version = "~>2.19.0"
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "East US"
}

resource "azurerm_sql_server" "example" {
  name                         = "pearcecexamplesqlserver"
  resource_group_name          = azurerm_resource_group.example.name
  location                     = "East US"
  version                      = "12.0"
  administrator_login          = "4dm1n157r470r"
  administrator_login_password = "4-v3ry-53cr37-p455w0rd"

}

resource "azurerm_mssql_database" "example" {
  name                = "pearcecexamplesqldatabase"
  server_id           = azurerm_sql_server.example.id
}

地形应用——呃哦

# terraform apply
azurerm_resource_group.example: Refreshing state... [id=/subscriptions/redacted/resourceGroups/example-resources]
azurerm_sql_database.example: Refreshing state... [id=/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver/databases/pearcecexamplesqldatabase]
azurerm_sql_server.example: Refreshing state... [id=/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver]

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create
  - destroy

Terraform will perform the following actions:

  # azurerm_mssql_database.example will be created
  + resource "azurerm_mssql_database" "example" {
      + auto_pause_delay_in_minutes = (known after apply)
      + collation                   = (known after apply)
      + create_mode                 = (known after apply)
      + creation_source_database_id = (known after apply)
      + id                          = (known after apply)
      + license_type                = (known after apply)
      + max_size_gb                 = (known after apply)
      + min_capacity                = (known after apply)
      + name                        = "pearcecexamplesqldatabase"
      + read_replica_count          = (known after apply)
      + read_scale                  = (known after apply)
      + restore_point_in_time       = (known after apply)
      + sample_name                 = (known after apply)
      + server_id                   = "/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver"
      + sku_name                    = (known after apply)
      + zone_redundant              = (known after apply)

      + threat_detection_policy {
          + disabled_alerts            = (known after apply)
          + email_account_admins       = (known after apply)
          + email_addresses            = (known after apply)
          + retention_days             = (known after apply)
          + state                      = (known after apply)
          + storage_account_access_key = (sensitive value)
          + storage_endpoint           = (known after apply)
          + use_server_default         = (known after apply)
        }
    }

  # azurerm_sql_database.example will be destroyed
  - resource "azurerm_sql_database" "example" {
      - collation                        = "SQL_Latin1_General_CP1_CI_AS" -> null
      - create_mode                      = "Default" -> null
      - creation_date                    = "2020-07-31T17:54:48.453Z" -> null
      - default_secondary_location       = "West US" -> null
      - edition                          = "GeneralPurpose" -> null
      - id                               = "/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver/databases/pearcecexamplesqldatabase" -> null
      - location                         = "eastus" -> null
      - max_size_bytes                   = "34359738368" -> null
      - name                             = "pearcecexamplesqldatabase" -> null
      - read_scale                       = false -> null
      - requested_service_objective_id   = "f21733ad-9b9b-4d4e-a4fa-94a133c41718" -> null
      - requested_service_objective_name = "GP_Gen5_2" -> null
      - resource_group_name              = "example-resources" -> null
      - server_name                      = "pearcecexamplesqlserver" -> null
      - tags                             = {} -> null
      - zone_redundant                   = false -> null

      - threat_detection_policy {
          - disabled_alerts      = [] -> null
          - email_account_admins = "Disabled" -> null
          - email_addresses      = [] -> null
          - retention_days       = 0 -> null
          - state                = "Disabled" -> null
          - use_server_default   = "Disabled" -> null
        }
    }

Plan: 1 to add, 0 to change, 1 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:
Apply cancelled

地形导入-- 导入资源

# terraform import azurerm_mssql_database.example /subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver/databases/pearcecexamplesqldatabase
azurerm_mssql_database.example: Importing from ID "/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver/databases/pearcecexamplesqldatabase"...
azurerm_mssql_database.example: Import prepared!
  Prepared azurerm_mssql_database for import
azurerm_mssql_database.example: Refreshing state... [id=/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver/databases/pearcecexamplesqldatabase]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

Terraform 状态删除-- 删除旧状态

terraform state rm azurerm_sql_database.example
Removed azurerm_sql_database.example
Successfully removed 1 resource instance(s)

地形应用 - Clean

# terraform apply
azurerm_resource_group.example: Refreshing state... [id=/subscriptions/redacted/resourceGroups/example-resources]
azurerm_sql_server.example: Refreshing state... [id=/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver]
azurerm_mssql_database.example: Refreshing state... [id=/subscriptions/redacted/resourceGroups/example-resources/providers/Microsoft.Sql/servers/pearcecexamplesqlserver/databases/pearcecexamplesqldatabase]

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Terraform 的 Azure SQL 资源从“azurerm_sql_database”升级到“azurerm_mssql_database” 的相关文章

随机推荐