我可以通过terraform获取Azure Function授权代码吗

mklgxw1f  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(200)

我有一个通过terraform部署的azure http触发函数。我需要从两个地方调用这个函数:
1.另一个功能
1.函数本身(某种递归)
我遇到的问题是,使用terraform我可以通过以下方式获得default_function_key

data "azurerm_function_app_host_keys" "my_function_auth_keys" {
  name                = azurerm_function_app.replication_prolong_water_meters.name
  resource_group_name = azurerm_function_app.my_function.resource_group_name

  depends_on = [azurerm_function_app.my_function]
}

它符合第一种情况(我可以将?code${data.azurerm_function_app_host_keys.my_function_auth_keys.default_function_key}附加到函数URL)
但是当我想将相同的URL配置注入到my_function函数并尝试应用terraform时,它给了我Error: cycle异常。
那么,我如何才能获得一个有效的URL与验证码为这个函数?

wmtdaxz3

wmtdaxz31#

检查以下代码。

resource "azurerm_storage_account" "fnexample" {
  name                     = "funcptestsa"
  resource_group_name      = data.azurerm_resource_group.example.name
  location                 = data.azurerm_resource_group.example.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_app_service_plan" "example" {
  name                = "azurefunctions-test-plan"
  location            = data.azurerm_resource_group.example.location
  resource_group_name = data.azurerm_resource_group.example.name

  sku {
    tier = "Standard"
    size = "S1"
  }
}

resource "azurerm_function_app" "example" {
  name                       = "tstazure-functions"
  location                   = data.azurerm_resource_group.example.location
  resource_group_name        = data.azurerm_resource_group.example.name
  app_service_plan_id        = azurerm_app_service_plan.example.id
  storage_account_name       = azurerm_storage_account.fnexample.name
  storage_account_access_key = azurerm_storage_account.fnexample.primary_access_key
}

data "azurerm_function_app_host_keys" "example" {
  name                = "tstazure-functions"
  resource_group_name = data.azurerm_resource_group.example.name

 depends_on = [ 
    azurerm_function_app.example
  ]
}

output "hostname" {
  value = azurerm_function_app.example.default_hostname
}

output "functionkeys" {
  value = data.azurerm_function_app_host_keys.example.default_function_key
  sensitive = true
}

Get the url in output value.

output "my_function_url_with_auth" {
  value ="${azurerm_function_app.example.default_hostname}/api/my_function?code=${data.azurerm_function_app_host_keys.example.default_function_key}"

  sensitive = true
}

使用输出值引用函数。如果URL是使用函数生成的,则会出现循环问题。
尝试在本地文件中单独创建url来注入。

locals {
  new_http_url=  "${azurerm_function_app.example.default_hostname}/api/my_function?code=${data.azurerm_function_app_host_keys.example.default_function_key}"
}

参考function_app_function | Terraform registry

相关问题