首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获取现有资源的Terraform数据源

无法获取现有资源的Terraform数据源
EN

Stack Overflow用户
提问于 2021-10-10 04:39:56
回答 1查看 892关注 0票数 3

无法使用Terraform数据源获取现有资源。我的错误越来越少,

如果是针对一个存储帐户,则可以成功运行。

但是我需要实现的是,对于第一个存储帐户创建私有DNS区域,即"privatelink.blob.core.windows.net",细分存储帐户使用现有的私有DNS区域,即"privatelink.blob.core.windows.net“。

为此,我使用查找变量,如果它是真的,不要创建只是寻找现有的资源,如果假创建它。

有人能帮忙吗,我在做什么错误在下面代码。所有所需的细节共享如下。如果需要更多的信息,请做评论。

代码语言:javascript
复制
Error: Private DNS Zone "privatelink.blob.core.windows.net" (Resource Group "rg1") was not found
│
│   with module.storage[1].data.azurerm_private_dns_zone.lookup[0],
│   on ../../../../modules/storage/main.tf line 57, in data "azurerm_private_dns_zone" "lookup":
│   57: data "azurerm_private_dns_zone" "lookup" {

下面是模块main.tf

代码语言:javascript
复制
resource "azurerm_storage_account" "main" {
  name                          = var.storage_name
  resource_group_name           = var.storage_resource_group_name
  location                      = var.storage_location
  account_tier                  = var.account_tier
  account_kind                  = var.account_kind
  account_replication_type      = var.account_replication_type
  enable_https_traffic_only     = var.enable_https_traffic_only
  min_tls_version               = var.min_tls_version
  allow_blob_public_access      = var.allow_blob_public_access
  tags                          = var.tags
  depends_on = [
    azurerm_private_dns_zone.main
  ]
}

resource "azurerm_storage_container" "main" {
  count                 = length(var.container_names)
  name                  = var.container_names[count.index]
  storage_account_name  = azurerm_storage_account.main.name
  container_access_type = var.container_access_type
}

resource "azurerm_storage_account_network_rules" "main" {
  storage_account_id = azurerm_storage_account.main.id

  default_action             = var.default_action
  ip_rules                   = var.ip_rules
  virtual_network_subnet_ids = var.virtual_network_subnet_ids
  bypass                     = var.bypass
}

resource "azurerm_private_endpoint" "main" {
  name                = var.pep_name
  location            = var.pep_location
  resource_group_name = var.pep_resource_group_name
  subnet_id           = var.pep_subnet_id

  private_service_connection {
    name                           = var.psc_name
    private_connection_resource_id = azurerm_storage_account.main.id
    subresource_names              = var.subresource_names
    is_manual_connection           = var.is_manual_connection
  }
  private_dns_zone_group {
       name                  = var.private_dns_group_name
       private_dns_zone_ids  = var.lookup_private_dns_zone_name ? [data.azurerm_private_dns_zone.lookup[0].id] : [azurerm_private_dns_zone.main[0].id]
  }
}

resource "azurerm_private_dns_zone" "main" {
  count               = var.lookup_private_dns_zone_name ? 0 : 1
  name                = var.private_dns_zone_name
  resource_group_name = var.private_dns_zone_resource_group_name
}

data "azurerm_private_dns_zone" "lookup" {
  count               = var.lookup_private_dns_zone_name ? 1 : 0
  name                = azurerm_private_dns_zone.main[0].name
  resource_group_name = azurerm_private_dns_zone.main[0].resource_group_name

  depends_on = [
    azurerm_private_dns_zone.main
  ]
}

resource "azurerm_private_dns_zone_virtual_network_link" "main" {
  name                  = var.private_dns_zone_virtual_network_link_name
  resource_group_name   = var.private_dns_zone_virtual_network_link_resource_group_name
  private_dns_zone_name = var.lookup_private_dns_zone_name ? data.azurerm_private_dns_zone.lookup[0].name : azurerm_private_dns_zone.main[0].name
  virtual_network_id    = var.private_dns_zone_virtual_nevtwork_id
}

调用根模块:

代码语言:javascript
复制
module "storage" {
  count                                                     = length(var.storage)
  source                                                    = "../../../../modules/storage"
  storage_name                                              = join("", [local.prefix, "store", var.storage[count.index].id])
  lookup_private_dns_zone_name                              = try(var.storage[count.index].lookup_private_dns_zone_name, false)
  storage_resource_group_name                               = var.storage[count.index].resource_group_name
  storage_location                                          = var.storage[count.index].location
  account_replication_type                                  = try(var.storage[count.index].account_replication_type, "GRS")
  tags                                                      = merge(try(var.storage[count.index].tags, {}), local.tags)
  container_names                                           = try(var.storage[count.index].container_names, [])
  virtual_network_subnet_ids                                = try(var.storage[count.index].virtual_network_subnet_ids, [])
  default_action                                            = try(var.storage[count.index].default_action, "Deny")
  pep_name                                                  = join("", [local.prefix, "pepstore", var.storage[count.index].id])
  pep_location                                              = var.storage[count.index].location
  pep_resource_group_name                                   = var.storage[count.index].resource_group_name
  pep_subnet_id                                             = var.storage[count.index].pep_subnet_id
  psc_name                                                  = join("", [local.prefix, "pscstore", var.storage[count.index].id])
  is_manual_connection                                      = false
  private_dns_group_name                                    = join("", [local.prefix, "dnsgroupstore", var.storage[count.index].id])
  private_dns_zone_name                                     = "privatelink.blob.core.windows.net"
  private_dns_zone_resource_group_name                      = var.storage[count.index].resource_group_name
  private_dns_zone_virtual_network_link_name                = join("", [local.prefix, "pdzvnlstore", var.storage[count.index].id])
  private_dns_zone_virtual_network_link_resource_group_name = var.storage[count.index].resource_group_name
  private_dns_zone_virtual_network_id                       = var.storage[count.index].private_dns_zone_virtual_network_id
  depends_on                                                = [module.resource_group]
}

输入文件poc.tfvars.json:

代码语言:javascript
复制
{"storage": [
        {
            "id": "04",
            "resource_group_name": "rg1",
            "location": "westus2",
            "pep_subnet_id": "sub_net_resource_id",
            "private_dns_zone_virtual_network_id": "virtual_network_id",
            "container_names": ["containerinfratfswsu2ctedev"]
        },
        {
            "id": "05",
            "lookup_private_dns_zone_name": true,
            "resource_group_name": "WUS2-DEV-PE-CTE-CCI-TF-REPO-RG",
            "location": "westus2",
            "pep_subnet_id": "subnet_resource_id",
            "private_dns_zone_virtual_network_id": "virtual_network_id"
        }
    ]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-10 05:09:59

由于您正在使用:

代码语言:javascript
复制
module "storage" {
  count                                                     = length(var.storage)

模块的两个实例将被创建为并发,而不是连续创建。因此很明显,模块的第二个实例失败了,因为它是同时创建的(而不是在第一个实例之后)。因此,在这个时刻,没有azurerm_private_dns_zone

要么使用depends_on手动运行模块,要么以某种方式将lookup_private_dns_zone_name功能提取到它自己的模块中,该模块比其他所有模块都要先运行。

另一种选择是使用为第二个实例模块激活的外部数据源,并在azurerm_private_dns_zone存在之前人为地停止它。但是在这件事上传递却是很讨厌的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69512359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档