gpt4 book ai didi

azure - 获取 terraform 中可能的出站 IP 地址列表

转载 作者:行者123 更新时间:2023-12-02 08:30:23 30 4
gpt4 key购买 nike

我正在尝试使用 terraform 中的 azure 函数应用程序的导出来获取可能的出站 IP 地址,我可以将其添加到防火墙的白名单中

返回的参数是ips逗号分隔的字符串。

我尝试过在 terraform 中使用 split 函数,但它没有给出列表,它给出了一个不能用作列表的界面。我尝试过使用本地范围在其周围添加方括号,但仍然相同。

让我补充一下,这是 terraform 11 而不是 12。

resource "azurerm_key_vault" "keyvault" {
name = "${var.project_name}-${var.environment}-kv"
location = "${azurerm_resource_group.environment.location}"
resource_group_name = "${azurerm_resource_group.environment.name}"
enabled_for_disk_encryption = true
tenant_id = "${var.tenant_id}"
sku_name = "standard"

network_acls {
bypass = "AzureServices"
default_action = "Deny"
ip_rules = "${split(",", azurerm_function_app.function.possible_outbound_ip_addresses)}"
}

tags = {
asset-code = "${var.storage_tags["asset_code"]}"
module-code = "${var.storage_tags["module_code"]}"
environment = "${var.environment}"
instance-code = "${var.storage_tags["instance_code"]}"
source = "terraform"
}
}

返回错误“ip_rules 必须是列表”。

谢谢

最佳答案

我认为您在这里看到的是一个经典的 Terraform 0.11 设计缺陷:当一个值在计划时未知时(因为它仅在应用期间决定),Terraform 0.11 无法正确跟踪它的类型信息。

由于 possible_outbound_ip_addresses 在规划时是未知值,因此使用该字符串进行split 的结果也是未知的。由于 Terraform 不会跟踪该结果的类型信息,因此提供程序 SDK 代码会拒绝该未知值,因为它不是列表。

要在 Terraform 0.11 中解决此问题,需要使用 -target 参数进行初始运行,以便 Terraform 可以首先专注于创建函数(从而分配其出站 IP 地址),然后处理一旦知道该字符串,就分别对其进行处理:

terraform apply -target=azurerm_function_app.function
terraform apply # to complete the rest of the work that -target excluded

Terraform 0.12 通过跟踪已知和未知值的类型信息解决了此限制,因此在 Terraform 0.12 中,split 函数会看到您为其提供了一个未知字符串,并接受该字符串为正确类型,然后它会返回一个未知的字符串列表,作为结果的占位符,该结果将在应用阶段最终确定。

关于azure - 获取 terraform 中可能的出站 IP 地址列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61379551/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com