动态更改terraform中aws_elasticache_replication_group的配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态更改terraform中aws_elasticache_replication_group的配置相关的知识,希望对你有一定的参考价值。

我正在使用terraform配置弹性缓存集群,一切正常!现在我的要求是我想在集群模式的资源内部进行动态配置。

以下是我的常用代码..

resource "aws_elasticache_replication_group" "elasticache_redis_cluster" {
  replication_group_id          = "cache"
  engine_version                = "${var.engine_version}"
  node_type                     = "${var.node_type}"
  port                          = "${var.elasticache_port}"
  parameter_group_name          = "${var.param_group_name}"
  security_group_ids            = ["${aws_sg.id}"]
  subnet_group_name             = "${aws_elasticache_subnet_group.subnet_group.id}"
}

现在我想基于传递的参数执行以下操作。

  if (${var.cluster_mode == "enable") {
        automatic_failover_enabled    = true  
        cluster_mode { 
           replicas_per_node_group     = 1 
           num_node_groups             = 1
        }
  }
  else {
        number_cache_clusters = 2
  }

基于匹配条件的上述代码应该附加在集群的配置中。

任何帮助将非常感谢!

答案

Terraform Conditionals仅支持三元值分配。

例如,它们只能采用以下形式:

resource "cool_thing" "my_resource" {
    is_prod_thing = "${var.env == "production" ? true : false}"
}

从三元操作返回的值必须是相同的类型,并且没有直接的方法在不同的资源配置之间进行内部切换。

一种可能的解决方法是使用count Meta-Parameter根据变量值创建零个或多个资源:

variable "cluster_mode" {
  default = "enable"
}

locals {
  cluster_count = "${var.cluster_mode == "enable" ? 1 : 0}"
  non_cluster_count = "${var.cluster_mode == "enable" ? 0 : 1}"
} 

resource "aws_elasticache_replication_group" "elasticache_redis_cluster" {
  # Configuration for clustered nodes
  count = "${local.cluster_count}"
}

resource "aws_elasticache_replication_group" "elasticache_redis_non_cluster" {
  # Configuration for non-clustered nodes
  count = "${local.non_cluster_count}"
}

这样,您可以描述可能需要的资源的两种配置,并根据cluster_mode的值切换创建的资源。

以上是关于动态更改terraform中aws_elasticache_replication_group的配置的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 动态块

您如何在应用程序代码中引用动态 terraform 输出?

等待 GCP 基础架构更改传播的 Terraform 问题

动态/静态资源映射(Terraform)

使用 github-script@v5 操作提取 terraform 资源更改

如何在terraform中更改GKE Cluster的节点池中的节点名称?