如何通过Terraform获取已部署Function App内的Function Url
Terraform 获取Function App内指定函数访问URL方案
以下是两种可直接落地的实现方式:
方案1:属性直接拼接(轻量无额外依赖)
Function的访问URL结构固定,可直接通过Function App的已有属性拼接得到:
- 基础结构:
https://<FunctionApp默认域名>/api/<函数名> - 若函数启用了函数级权限校验,尾部追加
?code=<对应访问密钥>即可
Terraform代码示例:
# 已定义的FuncAppX资源 resource "azurerm_linux_function_app" "func_app_x" { name = "FuncAppX" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location service_plan_id = azurerm_service_plan.example.id # 其余配置省略 } # 拼接得到函数访问URL,这里假设函数名为MyFunction locals { my_function_url = "https://${azurerm_linux_function_app.func_app_x.default_hostname}/api/MyFunction" # 若需要带密钥,可结合function密钥资源拼接,例如: # my_function_url_with_key = "${local.my_function_url}?code=${azurerm_linux_function_app_function.my_func.function_keys["default"]}" }
方案2:通过azurerm_function_app_function数据源/资源直接获取(结果更精准)
如果函数本身也是通过Terraform部署,或者已经提前部署到Azure中,可直接通过对应资源/数据源的invoke_url属性拿到完整访问地址:
# 若函数由Terraform部署 resource "azurerm_linux_function_app_function" "my_func" { name = "MyFunction" function_app_id = azurerm_linux_function_app.func_app_x.id script_root_path = "./func_code" # 其余配置省略 } # 直接取invoke_url属性即为完整访问地址 locals { my_function_final_url = azurerm_linux_function_app_function.my_func.invoke_url } # 将该值作为入参传递给另一个Function App的示例 resource "azurerm_linux_function_app" "another_func_app" { name = "FuncAppY" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location service_plan_id = azurerm_service_plan.example.id app_settings = { "FUNC_X_MYFUNCTION_URL" = local.my_function_final_url } # 其余配置省略 }
如果函数是提前部署好的,把上方的resource替换为data "azurerm_linux_function_app_function" "my_func",传入对应函数名和Function App ID即可查询到已有函数的访问地址。
内容的提问来源于stack exchange,提问作者Mukteswar Patnaik
相关产品推荐
相关产品推荐

