使用terraform特定环境的计数禁用资源

使用terraform特定环境的计数禁用资源,terraform,Terraform,我正在尝试禁用特定环境的资源在本例中是qa环境,我只希望为生产和暂存创建资源。 我有同样的terraform代码,它通过管道为qa、登台和生产运行 我有一些创建ECS集群的代码。我不希望它为qa环境创建。 这是在ECS上创建集群的代码: resource "aws_ecs_cluster" "main" { name = "${terraform.workspace}-main" tags = { App

我正在尝试禁用特定环境的资源在本例中是qa环境,我只希望为生产和暂存创建资源。 我有同样的terraform代码,它通过管道为qa、登台和生产运行

我有一些创建ECS集群的代码。我不希望它为qa环境创建。 这是在ECS上创建集群的代码:

resource "aws_ecs_cluster" "main" {
  name = "${terraform.workspace}-main"

  tags = {
    App         = var.app_name
    Environment = terraform.workspace
  }
}

output "main_ecs_id" {
  value = aws_ecs_cluster.main.id
}
我尝试使用count禁用qa环境,这是有效的:


resource "aws_ecs_cluster" "main" {
  count   = terraform.workspace != "qa" ? 1 : 0

  name = "${terraform.workspace}-main"

  tags = {
    App         = var.app_name
    Environment = aws_ecs_cluster.main[count.index].name
  }
}

output "main_ecs_id" {
  value = aws_ecs_cluster.main.*.id
}


唯一的问题是它不适用于我想要创建资源的环境(生产和登台)。 当它尝试在生产和登台上使用该代码创建资源时,我得到以下错误:

Error: Self-referential block
on ecs.tf line 8, in resource "aws_ecs_cluster" "main":
8:     Environment = aws_ecs_cluster.main[count.index].name
Configuration for aws_ecs_cluster.main may not refer to itself.

知道我做错了什么吗?
谢谢

您的问题并不是禁用带有count的资源,只是您不能引用自身内部的资源(这里使用的Provisioniers是例外,但它们是额外的资源)

相反,您需要重新生成名称或将名称字符串提取到本地:

resource "aws_ecs_cluster" "main" {
  count = terraform.workspace != "qa" ? 1 : 0

  name = "${terraform.workspace}-main"

  tags = {
    App         = var.app_name
    Environment = "${terraform.workspace}-main"
  }
}
或与本地

locals {
  cluster_name = "${terraform.workspace}-main"
}

resource "aws_ecs_cluster" "main" {
  count = terraform.workspace != "qa" ? 1 : 0

  name = local.cluster_name

  tags = {
    App         = var.app_name
    Environment = local.cluster_name
  }
}

局部变量的使用只允许您处理资源块之外已知的事情(例如字符串连接)。如果您想要依赖于资源块中的
计数
每个
的内容,那么您将无法使用它。有一种方法将资源范围的局部变量作为一个突出的功能请求进行覆盖。

谢谢,我如何在不自引用集群的情况下禁用该资源?与您已经采用的方法相同。禁用资源的操作根本没有链接到自引用。如果你尝试我的答案中的任何一个例子,你会得到一个错误吗?谢谢。使用第一个示例。出于某种原因,我认为如果使用count,我需要在资源中的其他地方引用它。感谢您,我只需将此添加到输出:
output“main_ecs_id”{value=terraform.workspace!=“qa”?aws_ecs_cluster.main[0]。id:null}