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
相关产品推荐
相关产品推荐

