You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform:如何在dynamic块中遍历逗号分隔字符串实现IP限制?

Azure Function App IP限制遍历问题

我正在编写一个Azure Function App模块,尝试通过for_each遍历逗号分隔的字符串来添加多个ip_restriction块,但一直失败。现有代码(使用随机IP CIDR块):

resource "azurerm_windows_function_app" "this" {
...
    dynamic "ip_restriction" {
      for_each         = split(",", "1.2.3.4/28,2.3.4.5/28")
      content {
        ip_address = {           

          ip_address    = ip_restriction.value
        }
      }
    }  
...

执行时出现错误:Inappropriate value for attribute "ip_address": string required,且错误出现两次,说明迭代器尝试了两次取值但都失败。我查过Terraform官方文档,但还是搞不懂为什么没法通过.value获取值,请问该怎么正确获取对应的CIDR地址?


问题修复方案

错误根源是你在ip_address字段里额外嵌套了一层对象,而Terraform要求ip_restriction块的ip_address属性直接接收字符串类型的CIDR地址,不需要包裹{ ip_address = ... }结构。

修正后的代码:

resource "azurerm_windows_function_app" "this" {
...
    dynamic "ip_restriction" {
      for_each = split(",", "1.2.3.4/28,2.3.4.5/28")
      content {
        ip_address = ip_restriction.value
      }
    }  
...

核心说明

  • split函数会将输入字符串拆分为["1.2.3.4/28", "2.3.4.5/28"]这样的字符串列表,for_each会逐个遍历列表元素。
  • ip_restriction.value就是当前遍历到的CIDR字符串,直接赋值给ip_address即可,无需额外嵌套。

修改后,Terraform会正确生成两个独立的ip_restriction块,分别对应两个指定的CIDR地址。

内容的提问来源于stack exchange,提问作者flowerpowerdad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:35:29