使用Terraform部署WAR包至Azure App Service遇报错求助
问题修正:Terraform部署WAR包到Azure的404错误解决
错误原因及修复方案
1. Storage Blob容器不存在错误
- 问题根源:
azurerm_storage_blob.blobexample中storage_container_name错误引用了App Service的名称azurerm_app_service.appservice2.name,而实际创建的存储容器是azurerm_storage_container.storageofwebapp,导致找不到目标容器。 - 修复:将
storage_container_name改为引用正确的存储容器资源。
2. 虚拟网络找不到错误
- 问题根源:
azurerm_app_service_virtual_network_swift_connection.example中subnet_id使用了硬编码值,其中资源组名写成了rg2(实际资源组为resoursegrpthree),且硬编码ID易因配置变更出错。 - 修复:改用Terraform资源引用
azurerm_subnet.snet1.id自动获取子网ID,避免硬编码错误。
修正后的完整代码
provider "azurerm" { features {} } resource "azurerm_resource_group" "rg2" { name = "resoursegrpthree" location = "East US" } resource "azurerm_virtual_network" "virtunet1" { name = "virnetxample" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg2.location resource_group_name = azurerm_resource_group.rg2.name } resource "azurerm_subnet" "snet1" { name = "sunetxample" resource_group_name = azurerm_resource_group.rg2.name virtual_network_name = azurerm_virtual_network.virtunet1.name address_prefixes = ["10.0.1.0/24"] } resource "azurerm_app_service_plan" "azurewebapp2" { name = "example-appservice-plan" location = azurerm_resource_group.rg2.location resource_group_name = azurerm_resource_group.rg2.name kind = "Linux" reserved = true sku { tier = "Standard" size = "B1" } } resource "azurerm_app_service" "appservice2" { name = "terraformappsvc" location = azurerm_resource_group.rg2.location resource_group_name = azurerm_resource_group.rg2.name app_service_plan_id = azurerm_app_service_plan.azurewebapp2.id site_config { java_version = "1.8" java_container = "TOMCAT" java_container_version = "8.5" app_command_line = "" } app_settings = { "WEBSITE_WEBDEPLOY_USE_SCM" = "false" } connection_string { name = "ExampleDB" type = "SQLServer" value = "Server=myserver;User Id=myuser;Password=mypassword;Initial Catalog=mydb;" } } resource "azurerm_storage_account" "storagesecond2" { name = "accountstoragsec2" resource_group_name = azurerm_resource_group.rg2.name location = azurerm_resource_group.rg2.location account_tier = "Standard" account_replication_type = "LRS" } resource "azurerm_storage_container" "storageofwebapp" { name = "webappcontainer" storage_account_name = azurerm_storage_account.storagesecond2.name container_access_type = "private" } resource "azurerm_storage_blob" "blobexample" { name = "ram.war" storage_account_name = azurerm_storage_account.storagesecond2.name storage_container_name = azurerm_storage_container.storageofwebapp.name # 修正容器引用 type = "Block" source = "C:/Downloads/sample.war" } resource "azurerm_app_service_virtual_network_swift_connection" "example" { app_service_id = azurerm_app_service.appservice2.id subnet_id = azurerm_subnet.snet1.id # 修正子网ID引用 } output "app_service_id" { value = azurerm_app_service.appservice2.id }
额外说明
- 确保本地路径
C:/Downloads/sample.war真实存在,若路径变更需同步修改source字段值。 - 部署前建议先执行
terraform plan检查资源依赖和配置合法性,确认无误后再运行terraform apply完成部署。
内容的提问来源于stack exchange,提问作者Lekha
相关产品推荐
相关产品推荐

