如何获取使用 Terraform 部署的功能应用程序中的“功能网址”?
Posted
技术标签:
【中文标题】如何获取使用 Terraform 部署的功能应用程序中的“功能网址”?【英文标题】:How to get the "Function Url" which is with in a Function-App deployed using Terraform? 【发布时间】:2021-11-14 04:50:54 【问题描述】:作为 IaC 的一部分,一个 Function App,我们将其命名为 FuncAppX 是使用 Terraform 部署的,它具有内置功能。
我需要在使用 Terraform 的函数应用程序中访问同一函数的 Url。我在这里分享相同的屏幕截图以供参考,其中很容易获得“GetFunction Url”,但使用 terraform,我没有办法返回相同的内容,需要传递为另一个函数应用的输入。
Function App Function within FunctionApp
【问题讨论】:
不要链接到外部图像服务。将它们添加到此帖子中,以便将来该问题仍然可以理解。 【参考方案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。
【讨论】:
以上是关于如何获取使用 Terraform 部署的功能应用程序中的“功能网址”?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用一个 terraform 脚本和不同的变量值管理多个不同环境的部署