terraform aws_elasticsearch_domain - 如果 zone_awareness_enabled 为假 - 为什么要考虑 zone_awareness_config 而不是忽略?

terraform aws_elasticsearch_domain - if zone_awareness_enabled is false - why is zone_awareness_config taken into account and not ignored?

我正在使用 terraform 在 AWS 中创建许多 elasticsearch 集群。每个集群可以有不同数量的实例。如果有一个实例 - 应该有一个可用区。如果有两个实例 - 应该有两个可用区。如果我的 terraform aws_elasticsearch_domain 资源中有一个实例,我将 zone_awareness_enabled 设置为 false。问题是 zone_awareness_config 没有像我假设的那样被忽略。因此,如果我有两个 AZ,我需要将 zone_awareness_config 添加到 tf 文件中。我必须管理两个文件。

这是cluster_config:

cluster_config {
      instance_type = "c5.large.elasticsearch"
      instance_count = var.es_instance_count
      dedicated_master_enabled = var.dedicated_master_enabled
      dedicated_master_count = var.es_instance_count
      zone_awareness_enabled = var.es_instance_count > 1 ? true : false
      zone_awareness_config {
        availability_zone_count = var.es_instance_count
      }
  }

cluster_config 应该适用于 2 或 3 个实例,但也适用于 1 个 AZ 中的 1 个实例。但事实并非如此。如果我有 1 个 AZ - 我必须从文件中删除 zone_awareness_config。 如果我有 1 个 AZ,如何忽略 zone_awareness_config?

您可以尝试制作 dynamic block 以仅在您的实例数大于 1 时添加 zone_awareness_config 块

dynamic "zone_awareness_config" {
  for_each = var.es_instance_count > 1 ? [var.es_instance_count] : []
  content {
    availability_zone_count = var.es_instance_count
  }
}

此示例未使用 for_each 循环中设置的值。确实应该是:

content {
    availability_zone_count = zone_awareness_config.value
  }