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

基于Terraform部署Azure Function的相关技术问题咨询

针对你提出的三个关于Azure Function部署和Terraform配置的问题,我整理了详细的解决方案,结合你的现有代码片段给出具体示例:

一、Azure Function 除Zip包外的其他部署方式

除了Zip包部署,Azure Function还支持多种部署方式,以下是常用的几种及对应的Terraform配置:

  • 容器镜像部署:适合容器化的Function项目,Terraform中可通过配置镜像仓库凭据和运行时版本实现

    resource "azurerm_function_app" "azure_function_scenario1_hop2" {
      name                       = "scenario1-hop2-azure-function"
      location                   = var.location
      resource_group_name        = var.resource_group_name
      app_service_plan_id        = var.app_service_plan_id
      storage_connection_string  = azurerm_storage_account.example.primary_connection_string
    
      # 配置容器镜像运行时
      site_config {
        linux_fx_version = "DOCKER|${var.acr_login_server}/my-function-image:latest"
      }
    
      # 私有镜像仓库凭据
      image_registry_credential {
        username = var.acr_username
        password = var.acr_password
      }
    }
    
  • 本地Git部署:将代码直接推送到Function App内置的Git仓库,Terraform可配置源代码管理关联

    resource "azurerm_function_app" "azure_function_scenario1_hop2" {
      # 基础配置省略
    
      source_control {
        repo_url        = "https://github.com/your-username/your-function-repo.git"
        branch          = "main"
        manual_integration = true # 手动触发部署,也可设置为自动
      }
    }
    
  • CI/CD流水线部署:通过GitHub Actions、Azure DevOps Pipelines等自动部署,Terraform只需确保Function App的基础配置,流水线负责代码构建和部署(无需额外Terraform配置,只需在流水线中添加部署步骤)

二、在一个Function App中部署多个包(多函数项目)

Azure Function App本身支持在同一个App下部署多个函数,核心是将所有函数的代码打包到同一个部署单元中:

  • Zip包部署:将所有函数的代码文件夹(每个函数包含function.json)放在同一个根目录下,打包成Zip后上传。Terraform配置和单函数一致,只需更新WEBSITE_RUN_FROM_PACKAGE的包地址:

    resource "azurerm_function_app" "azure_function_scenario1_hop2" {
      # 基础配置省略
    
      app_settings = {
        # 指向包含多函数代码的Zip包地址
        WEBSITE_RUN_FROM_PACKAGE = "https://my-storage-account.blob.core.windows.net/packages/multi-function-package.zip?sv=..."
        # 其他应用设置
      }
    }
    
  • 容器镜像部署:将所有函数代码放在镜像的/home/site/wwwroot目录下(每个函数一个子文件夹),Terraform配置和单镜像部署一致,镜像构建时包含所有函数代码即可

三、通过Terraform配置Azure Function的代理

根据代理用途分为两种场景,对应不同的Terraform配置:

1. 出站代理(Function代码调用外部服务时使用代理)

通过应用设置配置代理服务器地址,让Function的出站请求走指定代理:

resource "azurerm_function_app" "azure_function_scenario1_hop2" {
  # 基础配置省略

  app_settings = {
    # HTTP/HTTPS代理地址
    HTTP_PROXY  = "http://your-proxy-server:8080"
    HTTPS_PROXY = "http://your-proxy-server:8080"
    # 无需走代理的地址(逗号分隔)
    NO_PROXY    = "localhost,127.0.0.1,internal-service.azurewebsites.net"
    # 其他应用设置
  }
}

2. 反向代理(Function App作为代理转发请求)

需要在Function App的wwwroot目录下添加proxies.json配置文件,Terraform可通过打包部署的方式将该文件上传:

第一步:创建proxies.json示例

{
  "$schema": "http://json.schemastore.org/proxies",
  "proxies": {
    "ApiProxy": {
      "matchCondition": {
        "route": "/api/proxy/{*path}"
      },
      "backendUri": "https://target-api.example.com/{path}"
    }
  }
}

第二步:Terraform打包部署包含proxies.json的代码包

# 打包包含函数代码和proxies.json的Zip包
data "archive_file" "function_package" {
  type        = "zip"
  source_dir  = "./function-code" # 目录下包含所有函数文件夹和proxies.json
  output_path = "./function-package.zip"
}

# 上传到存储账户
resource "azurerm_storage_blob" "function_blob" {
  name                   = "function-package.zip"
  storage_account_name   = azurerm_storage_account.example.name
  storage_container_name = "packages"
  type                   = "Block"
  source                 = data.archive_file.function_package.output_path
}

# 生成SAS URL用于Function App访问包
data "azurerm_storage_account_sas" "function_sas" {
  connection_string = azurerm_storage_account.example.primary_connection_string
  https_only        = true
  resource_types {
    object = true
  }
  services {
    blob = true
  }
  start  = timestamp()
  expiry = timeadd(timestamp(), "365d")
  permissions {
    read = true
  }
}

resource "azurerm_function_app" "azure_function_scenario1_hop2" {
  # 基础配置省略

  app_settings = {
    WEBSITE_RUN_FROM_PACKAGE = "https://${azurerm_storage_account.example.name}.blob.core.windows.net/${azurerm_storage_blob.function_blob.storage_container_name}/${azurerm_storage_blob.function_blob.name}${data.azurerm_storage_account_sas.function_sas.sas}"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:00:41