如何在Azure与Terraform环境中将存储容器内的WAR包部署至App Service
从Azure存储容器部署WAR包到App Service的完整步骤(Terraform+手动操作)
一、Azure门户手动部署步骤(无需CI/CD)
部署中心确实以CI/CD集成为主,手动部署WAR包需通过Kudu控制台操作,步骤如下:
- 进入目标App Service管理界面,左侧导航栏选择部署 > 高级工具,点击Go打开Kudu控制台
- 在Kudu顶部菜单选择Debug console > CMD(或PowerShell)
- 进入Java应用专属部署目录:
site\wwwroot\webapps - 回到存储容器界面,找到目标WAR包,点击生成SAS令牌,设置合理过期时间后复制完整SAS URL
- 回到Kudu的CMD控制台,执行
curl命令下载WAR包到当前目录:curl -O "你的WAR包SAS URL" - 下载完成后,App Service会自动检测并完成部署,等待2-3分钟即可访问应用
二、Terraform自动化部署配置
方法1:通过local-exec调用Azure CLI执行部署
在已有Terraform配置基础上,添加以下代码实现自动化部署:
# 假设已有资源定义:azurerm_resource_group.example、azurerm_storage_account.example、azurerm_app_service.example、azurerm_storage_container.example # 生成WAR包的临时SAS访问令牌 data "azurerm_storage_account_sas" "war_sas" { connection_string = azurerm_storage_account.example.primary_connection_string https_only = true resource_types { service = false container = true object = true } services { blob = true queue = false table = false file = false } start = timestamp() expiry = timeadd(timestamp(), "24h") permissions { read = true write = false delete = false list = true add = false create = false update = false process = false } } # 执行WAR包部署命令 resource "null_resource" "deploy_war" { provisioner "local-exec" { command = <<EOT az webapp deploy --resource-group ${azurerm_resource_group.example.name} --name ${azurerm_app_service.example.name} --src-url "https://${azurerm_storage_account.example.name}.blob.core.windows.net/${azurerm_storage_container.example.name}/your-app.war${data.azurerm_storage_account_sas.war_sas.sas}" --type war EOT } depends_on = [ azurerm_app_service.example, data.azurerm_storage_account_sas.war_sas ] }
- 替换
your-app.war为实际WAR包文件名 - 确保本地已安装Azure CLI并完成登录认证
- 执行
terraform apply时会自动完成WAR包的下载与部署
方法2:配置自动同步的部署源
若需定期同步存储容器中的WAR包,可配置App Service部署源指向存储容器:
resource "azurerm_app_service_deployment_source" "war_deploy" { app_service_id = azurerm_app_service.example.id type = "AzureBlob" azure_blob { url = "https://${azurerm_storage_account.example.name}.blob.core.windows.net/${azurerm_storage_container.example.name}/your-app.war${data.azurerm_storage_account_sas.war_sas.sas}" } }
- 此配置会让App Service定期检查存储容器中的WAR包,若有更新则自动部署
内容的提问来源于stack exchange,提问作者Lekha
相关产品推荐
相关产品推荐

