You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中获取Azure容器应用URL并一次性配置前端环境变量?

在Terraform中一次性配置Azure容器应用前后端环境变量

完全可以一次性完成配置,不需要分两次执行terraform plan/apply。核心是利用Terraform的资源属性引用机制,让前端容器应用的环境变量直接关联后端容器应用的内置属性,Terraform会自动处理资源创建顺序的依赖关系。

具体实现示例

1. 先创建共用的容器应用环境

把前后端部署在同一个容器应用环境下,既可以用内部服务名高效访问,也能统一管理资源:

resource "azurerm_resource_group" "example" {
  name     = "my-app-rg"
  location = "East US"
}

resource "azure_container_app_environment" "app_env" {
  name                = "my-app-env"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
}

2. 部署后端容器应用

resource "azure_container_app" "backend" {
  name                = "backend-app"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  environment_id      = azure_container_app_environment.app_env.id

  template {
    container {
      name   = "backend"
      image  = "your-backend-image:latest"
      cpu    = 0.5
      memory = "1Gi"

      ports {
        port     = 80
        protocol = "HTTP"
      }
    }
  }

  ingress {
    external_enabled = true
    target_port      = 80
    traffic {
      latest_revision = true
      weight          = 100
    }
  }
}

3. 部署前端容器应用并关联后端地址

根据访问需求分两种场景:

场景一:同环境内部访问(推荐)

同一容器应用环境内,后端的内部服务固定格式为 <后端应用名>.azurecontainerapps.io,直接作为环境变量传入前端:

resource "azure_container_app" "frontend" {
  name                = "frontend-app"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  environment_id      = azure_container_app_environment.app_env.id

  template {
    container {
      name   = "frontend"
      image  = "your-frontend-image:latest"
      cpu    = 0.5
      memory = "1Gi"

      ports {
        port     = 80
        protocol = "HTTP"
      }

      # 直接引用后端的内部服务地址
      env {
        name  = "REACT_APP_BACKEND_URL" # 对应你前端框架的环境变量名,比如Vue用VUE_APP_*
        value = "http://${azure_container_app.backend.name}.azurecontainerapps.io"
      }
    }
  }

  ingress {
    external_enabled = true
    target_port      = 80
    traffic {
      latest_revision = true
      weight          = 100
    }
  }
}

场景二:使用外部可访问的FQDN

如果前端需要通过公网访问后端,直接引用后端容器应用的fqdn属性即可:

resource "azure_container_app" "frontend" {
  # 其他配置同上

  template {
    container {
      # 其他配置同上

      env {
        name  = "REACT_APP_BACKEND_URL"
        value = "https://${azure_container_app.backend.fqdn}"
      }
    }
  }
}

核心逻辑

Terraform会自动识别资源间的依赖:因为前端的环境变量引用了azure_container_app.backend的属性,它会先创建后端容器应用,待后端的属性(如名称、FQDN)确定后,再创建并配置前端,全程只需一次terraform apply即可完成部署,和Docker Compose的内部主机名、Kubernetes的服务名引用逻辑完全一致。

内容的提问来源于stack exchange,提问作者Marty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:35:15