是否有人能够仅使用 Terraform 将在 STv1 平台上运行的现有 APIM 实例迁移到 STv2(禁止通过 Azure 门户进行手动更新)? 我们可以创建全新的 STv2 实例,但我们似乎找不到任何有关迁移过程的文档,而且我们的努力(甚至包括 Hashicorp 支持)也没有取得成果。 一些背景:
谢谢!
更新: 这是我正在使用的 APIM 代码,它对于我的测试用例来说非常基本。我的理解是,在涵盖 STv2 要求(我做到了)之后,将 subnet_id 更新为新的应该将 APIM 升级为子网移动的一部分,但这种情况不会发生。尽管计划显示正确的子网更新并应用成功完成,但它只是不会将实例移动到新子网。
´´´´
############ APIM Configuration ##############
resource "azurerm_api_management" "apim" {
depends_on = [azurerm_public_ip.ip, azurerm_subnet_network_security_group_association.nsg2subnet]
name = "apim-${var.api_management["name"]}" # prefix with apim-
location = var.location
min_api_version = "2021-01-01-preview" # min version required for STV2
resource_group_name = var.rg_name
public_ip_address_id = azurerm_public_ip.ip.id
publisher_name = var.api_management["publisher_name"]
publisher_email = var.api_management["publisher_email"]
sku_name = var.api_management["sku_name"]
virtual_network_type = "Internal"
virtual_network_configuration {
subnet_id = var.api_management["subnet_id"]
}
tenant_access {
enabled = var.enable_management_api_access
}
zones = []
dynamic "additional_location" {
for_each = var.multiregion_configs
content {
location = additional_location.value["location"]
virtual_network_configuration {
subnet_id = additional_location.value["subnet_id"]
}
}
}
dynamic "identity" {
for_each = [var.identity]
content {
type = identity.value["type"]
identity_ids = identity.value["type"] == "UserAssigned" || identity.value["type"] == "SystemAssigned, UserAssigned" ? [identity.value["id"]] : null
}
}
policy {
xml_content = coalesce(var.policy, local.default_policy)
}
security {
tls_rsa_with_aes128_gcm_sha256_ciphers_enabled = true
}
tags = local.tags
}
´´´´
截至目前,需要手动干预才能通过 Terraform 将 APIM STv1 迁移到 STv2。此迁移无法自动完成。使用 Terraform 将复杂的 Azure API 管理 (APIM) 实例从 STv1 迁移到 STv2 平台可能会带来一些挑战。对于内部模式 VNET 中的开发人员和高级 APIM 实例尤其如此。
了解要求和潜在挑战:
APIM从STv1迁移到STv2:这意味着修改APIM服务的基本框架,同时保持当前设置和连接不变。 直接迁移支持:所面临挑战的一个可能解释是 Terraform 没有提供将 APIM 实例从 STv1 升级到 STv2 的直接方法。
我的地形配置:
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "example" {
name = "demvksb1-rg"
location = "East US"
}
resource "azurerm_api_management" "example_stv1" {
name = "demvksb1-apim-stv1"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
publisher_name = "My Company"
publisher_email = "[email protected]"
sku_name = "Developer_1" # Choose the appropriate SKU
}
输出:
当我尝试将现有的 Azure API 管理 (APIM) 实例从标准层 V1 (STv1) 迁移到标准层 V2 (STv2) 时出现问题
问题出在这个
由于处理有状态资源转换和特定 Azure 服务细微差别的限制,Terraform 可能难以应对复杂的 Azure 迁移,通常需要手动干预或补充脚本。
参考:
https://learn.microsoft.com/en-us/azure/api-management/migrate-stv1-to-stv2?tabs=portal
https://techcommunity.microsoft.com/t5/fasttrack-for-azure/migration-api-management-platform-version-from-stv1-to-stv2/ba-p/3951108
https://github.com/hashicorp/terraform-provider-azurerm/issues/20939