在 Terraform 中为 azurerm_app_service_plan 创建 azurerm_sql_firewall_rule
Posted
技术标签:
【中文标题】在 Terraform 中为 azurerm_app_service_plan 创建 azurerm_sql_firewall_rule【英文标题】:Create azurerm_sql_firewall_rule for an azurerm_app_service_plan in Terraform 【发布时间】:2020-10-15 14:23:56 【问题描述】:我想将托管 Sql Server 上的应用服务计划的 IP 地址列入白名单。 问题是,资源 azurerm_app_service_plan 在属性 possible_outbound_ip_addresses 上将其 IP 地址公开为逗号分隔值。
我需要为这些 ip 中的每一个创建一个 azurerm_sql_firewall_rule。 如果我尝试以下方法,Terraform 会给出异常:
locals
staging_app_service_ip =
for v in split(",", azurerm_function_app.prs.possible_outbound_ip_addresses) : v => v
resource "azurerm_sql_firewall_rule" "example"
for_each = local.staging_app_service_ip
name = "my_rules_$each.value"
resource_group_name = data.azurerm_resource_group.example.name
server_name = var.MY_SERVER_NAME
start_ip_address = each.value
end_ip_address = each.value
然后我得到错误:
“for_each”值取决于不能被 在应用之前确定,因此 Terraform 无法预测有多少实例 将被创建。要解决此问题,请使用 -target 参数 首先只应用for_each所依赖的资源。
我不确定如何解决这个问题。 暂时我已经把ip地址添加为变量,并手动设置变量的值。
创建这些防火墙规则的正确方法是什么?
【问题讨论】:
【参考方案1】:我正在尝试处理同样的问题。我的解决方法是执行多步骤设置。 在第一步中,我运行 terraform 配置,它创建数据库、应用程序服务、api 管理和其他一些资源。接下来我部署应用程序。最后我再次运行 terraform,但这次第二个配置从部署的应用程序 swagger 定义创建 sql 防火墙规则和 api 管理 api。
【讨论】:
以上是关于在 Terraform 中为 azurerm_app_service_plan 创建 azurerm_sql_firewall_rule的主要内容,如果未能解决你的问题,请参考以下文章
如何在 terraform 中为 SQL DB 创建警报规则
powershell 在PowerShell中为Azure RM Terraform设置环境变量
在 Terraform 中为 azurerm_app_service_plan 创建 azurerm_sql_firewall_rule