Fel*_*olz 8 runtime-error azure terraform azure-web-app-service terraform-provider-azure
我在 Windows 上执行terraform.exe apply
并收到错误:
azurerm_subnet.subnet: Refreshing state... [id=<...>]\nazurerm_app_service_plan.service_plan: Refreshing state... [id=<...>]\nazurerm_app_service.app: Refreshing state... [id=<...>]\nazurerm_app_service_virtual_network_swift_connection.test: Refreshing state... [id=<...>]\nazurerm_app_service_slot.production: Refreshing state... [id=<...>]\nazurerm_app_service_slot.staging: Refreshing state... [id=<...>]\n\nError: ID was missing the `slots` element\n
Run Code Online (Sandbox Code Playgroud)\n我正在尝试使用 terraform 构建具有不同插槽和 docker 图像的 Azure WebApp。它应该根据 Dockerfile 映像部署具有不同插槽的 Azure WebApp。
\n第一次运行没有错误。当我刷新资源时收到错误消息。
\n我正在使用 azurerm 提供程序版本 2.1.0 和 azurerm 后端。
\n请参阅以下 terraform 文件:
\nterraform {\n backend "azurerm" {\n resource_group_name = "..."\n storage_account_name = "..."\n container_name = "..."\n key = "..."\n\n subscription_id = "..."\n tenant_id = "..."\n\n sas_token = "...."\n }\n}\n\nprovider "azurerm" {\n version = "~>2.1.0"\n features {}\n}\n\nvariable "environment" {\n default = "production"\n}\nvariable "resource_group" {}\nvariable "location" {\n default = "West Europe"\n}\nvariable "app_name" {}\nvariable "network" {}\nvariable "subnet_prefix" {}\n\nresource "azurerm_app_service_plan" "service_plan" {\n name = var.app_name\n location = var.location\n resource_group_name = var.resource_group\n\n kind = "Linux"\n reserved = true\n\n sku {\n tier = "Standard"\n size = "S1"\n }\n\n tags = {\n Environment = var.environment\n Cost = "\xe2\x82\xac0,081/Stunde"\n }\n}\n\nresource "azurerm_app_service" "app" {\n name = var.app_name\n location = var.location\n resource_group_name = var.resource_group\n app_service_plan_id = azurerm_app_service_plan.service_plan.id\n depends_on = [azurerm_app_service_plan.service_plan]\n\n site_config {\n linux_fx_version = "DOCKER|<...>.azurecr.io/<...>:0.0.1-95"\n always_on = "true"\n }\n\n app_settings = {\n ...\n }\n\n storage_account {\n access_key = "..."\n account_name = "..."\n name = "certs"\n share_name = "certs"\n type = "AzureBlob"\n mount_path = "/var/certs"\n }\n\n tags = {\n Environment = var.environment\n }\n}\n\nresource "azurerm_app_service_slot" "production" {\n name = var.app_name\n app_service_name = azurerm_app_service.app.name\n location = azurerm_app_service.app.location\n resource_group_name = var.resource_group\n app_service_plan_id = azurerm_app_service_plan.service_plan.id\n\n depends_on = [azurerm_app_service.app]\n\n site_config {\n linux_fx_version = "DOCKER|<...>.azurecr.io/<...>:0.0.1-95"\n always_on = "true"\n\n }\n\n app_settings = {\n "SOME_KEY" = "some-value"\n }\n}\n\nresource "azurerm_app_service_slot" "staging" {\n name = "staging"\n app_service_name = azurerm_app_service.app.name\n location = azurerm_app_service.app.location\n resource_group_name = var.resource_group\n app_service_plan_id = azurerm_app_service_plan.service_plan.id\n\n depends_on = [azurerm_app_service.app]\n\n site_config {\n linux_fx_version = "DOCKER|<...>.azurecr.io/<...>:latest"\n always_on = "true"\n }\n}\n\nresource "azurerm_subnet" "subnet" {\n name = var.app_name\n resource_group_name = var.resource_group\n virtual_network_name = var.network\n address_prefix = var.subnet_prefix\n\n delegation {\n name = var.app_name\n\n service_delegation {\n name = "Microsoft.Web/serverFarms"\n actions = [\n "Microsoft.Network/networkinterfaces/*",\n "Microsoft.Network/virtualNetworks/subnets/action",\n "Microsoft.Network/virtualNetworks/subnets/join/action",\n "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action",\n "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action"\n ]\n }\n }\n}\n\nresource "azurerm_app_service_virtual_network_swift_connection" "test" {\n app_service_id = azurerm_app_service.app.id\n subnet_id = azurerm_subnet.subnet.id\n depends_on = [\n azurerm_app_service.app,\n azurerm_subnet.subnet\n ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n在这种情况下,缺少插槽元素意味着什么?
\nTerraform 将资源标识符视为区分大小写,但 azure 则不然。
在你的状态文件中的某个地方,你可能有一个 id ,/Slots/
而不是/slots/
.
我认为您可以使用terraform state pull
和terraform state push
手动编辑您的状态文件。通常不推荐,但 TF 验证坚持强制区分大小写,而 azure 门户本身会向您显示大小写不一致的资源 ID:/
归档时间: |
|
查看次数: |
4653 次 |
最近记录: |