Terraform中使用count设置并在资源中使用,但仍然出现“在非计数上下文中引用“count””错误

75次阅读
没有评论

问题描述

在使用Terraform时遇到了一个问题。他在一个资源中使用了count,并在另一个资源中引用了它,但是却收到了一个错误提示,要求先设置count(实际上已经设置了)。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

问题分析

根据用户提供的信息,我们可以看到错误信息是在azurerm_key_vault.this资源中引用了count,但是该资源本身并没有设置count参数。因此,错误信息是正确的。

解决方案

根据用户的需求,我们可以假设他想在var.env != "prod"的情况下,从azurerm_key_vault.this的配置中省略某些内容,以避免引用被禁用的服务主体资源。以下是解决方案的步骤:

  1. 确保data.azuread_service_principal.ccdapi资源的count参数已正确设置,并且在var.env != "prod"的情况下为0。
  2. azurerm_key_vault.this资源的配置中,使用条件语句来检查var.env的值。如果var.env != "prod",则省略对data.azuread_service_principal.ccdapi的引用。

下面是一个示例的解决方案:

data "azuread_service_principal" "ccdapi" {
  display_name = "app-ccdapi-${var.env}"
  count        = var.env == "prod" ? 1 : 0
  # 其他配置
}

resource "azurerm_key_vault" "this" {
  name                       = local.kv_name
  location                   = azurerm_resource_group.this.location
  resource_group_name        = azurerm_resource_group.this.name
  tenant_id                  = data.azurerm_client_config.this.tenant_id
  sku_name                   = "premium"
  soft_delete_retention_days = 14
  purge_protection_enabled   = true
  tags                       = local.tags

  access_policy = [
    {
      application_id          = ""
      certificate_permissions = []
      key_permissions         = []
      object_id               = var.env == "prod" ? data.azuread_service_principal.ccdapi[count.index].object_id : null
      secret_permissions      = ["Get", "List"]
      storage_permissions     = []
      tenant_id               = data.azurerm_client_config.this.tenant_id
    },
  ]
}

在上面的示例中,我们使用条件语句来检查var.env的值。如果var.env != "prod",则将object_id设置为null,从而省略了对data.azuread_service_principal.ccdapi的引用。

请注意,这只是一个示例解决方案,具体的实现方式可能因你的需求而有所不同。你可以根据自己的情况进行调整和修改。

希望以上解决方案能帮助到你!如果你还有其他问题,请随时提问。

正文完