2

マネージド Sql サーバー上の App Service プランの IP アドレスをホワイトリストに登録したいと考えています。
問題は、リソースazurerm_app_service_planが、属性possible_outbound_ip_addressesで IP アドレスをコンマ区切り値として公開していることです。

これらの IP ごとに1 つの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アドレスを変数として追加し、変数の値を手動で設定しています。

これらのファイアウォール ルールを作成する正しい方法はどれですか?

4

1 に答える 1

1

私は同じ問題に対処しようとしています。私のやり方は、複数ステップのセットアップを実行することです。最初のステップでは、データベース、アプリ サービス、API 管理、その他のリソースを作成する terraform 構成を実行します。次にアプリをデプロイします。最後にもう一度 terraform を実行しますが、今回は 2 番目の構成で、デプロイされたアプリの Swagger 定義から SQL ファイアウォール ルールと API 管理 API を作成します。

于 2021-04-23T15:44:27.070 に答える