【问题标题】:How to get the "Function Url" which is with in a Function-App deployed using Terraform?如何获取使用 Terraform 部署的功能应用程序中的“功能网址”?
【发布时间】:2021-11-14 04:50:54
【问题描述】:

作为 IaC 的一部分,一个 Function App,我们将其命名为 FuncAppX 是使用 Terraform 部署的,它具有内置功能。

我需要在使用 Terraform 的函数应用程序中访问同一函数的 Url。我在这里分享相同的屏幕截图以供参考,其中很容易获得“GetFunction Url”,但使用 terraform,我没有办法返回相同的内容,需要传递为另一个函数应用的输入。

Function App Function within FunctionApp

【问题讨论】:

  • 不要链接到外部图像服务。将它们添加到此帖子中,以便将来该问题仍然可以理解。

标签: azure-functions terraform terraform-provider-azure infrastructure-as-code


【解决方案1】:

您需要自己构建特定函数端点的 URL。由于具体的函数名称是通过function.json 定义的,因此您需要将其复制到您的 Terraform 脚本中。

locals {
  function_foo = "foo"
}

URL 包含一个秘密作为查询参数,您可以通过数据源azurerm_function_app_host_keys 获取。

data "azurerm_function_app_host_keys" "example" {
  name                = azurerm_function_app.example.name
  resource_group_name = azurerm_function_app.example.resource_group_name

  depends_on = [azurerm_function_app.example]
}

现在您可以自己构建 URL。

output "url" {
  value = "https://${azurerm_function_app.example.default_hostname}/api/${local.function_foo}?code=${data.azurerm_function_app_host_keys.example.default_function_key}"
}

请注意,azurerm_function_app_host_keys 值可能不会立即可用,因为具体 Function App 的部署与 azurerm_function_app 服务创建是分离的。根据您的情况,您可能需要添加一些手动同步(例如使用null_resource)。

【讨论】:

    【解决方案2】:

    考虑通过 azure 中的 API 管理 资源向您公开 http 触发函数。不过你也可以直接调用函数。

    要获取函数应用的 url,您可以使用 azurerm_function_app 上的 default_hostname 属性,例如使用 azurerm_key_vault_secret 放入 keyvault。

    该属性在 terraform 文档here 中列出。

    当然这不会链接到具体功能,也不会包含所需的密钥。

    要提取访问该功能所需的密钥,您可以使用function_app_host_keys。您在哪里获得默认功能键

    然后您可以检索 default_function_key

    然后你需要结合这些东西来调用函数(注意你只能调用带有http触发器的函数)。

    函数的 url 将是 {default_hostname}/api/{functionname}?code={default_function_key}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 2019-10-20
      • 2022-06-15
      • 1970-01-01
      • 2020-06-11
      • 2012-01-20
      • 2019-11-15
      相关资源
      最近更新 更多