问题描述
在使用Terraform时遇到了一个问题。他在一个资源中使用了count
,并在另一个资源中引用了它,但是却收到了一个错误提示,要求先设置count
(实际上已经设置了)。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
问题分析
根据用户提供的信息,我们可以看到错误信息是在azurerm_key_vault.this
资源中引用了count
,但是该资源本身并没有设置count
参数。因此,错误信息是正确的。
解决方案
根据用户的需求,我们可以假设他想在var.env != "prod"
的情况下,从azurerm_key_vault.this
的配置中省略某些内容,以避免引用被禁用的服务主体资源。以下是解决方案的步骤:
- 确保
data.azuread_service_principal.ccdapi
资源的count
参数已正确设置,并且在var.env != "prod"
的情况下为0。 - 在
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
的引用。
请注意,这只是一个示例解决方案,具体的实现方式可能因你的需求而有所不同。你可以根据自己的情况进行调整和修改。
希望以上解决方案能帮助到你!如果你还有其他问题,请随时提问。
正文完