在Terraform中连接两个变量

22

我正在尝试使用terraform从kops创建一个kubernetes集群,以下代码是基础设施的一部分,我正试图通过将两个变量连接起来来创建名称,但是第二行出现了非法字符错误,这是因为我尝试使用连接变量来定义名称。在terraform中是否可能?

resource "aws_autoscaling_group" "master-kubernetes" {
  name                 = "master-"${var.zone}".masters."${var.cluster_name}""
  launch_configuration = "${aws_launch_configuration.master-kubernetes.id}"
  max_size             = 1
  min_size             = 1
  vpc_zone_identifier  = ["${aws_subnet.subnet-kubernetes.id}"]
3个回答

25

使用最新的terraform 0.12.x terraform格式化文档,你可以做得更好:

resource "aws_autoscaling_group" "master-kubernetes" {
    name = format("master-%s.masters.%s", var.zone, var.cluster_name)
}

19

试一下这个:

resource "aws_autoscaling_group" "master-kubernetes" {
  name = "master-${var.zone}.masters.${var.cluster_name}"
  # ... other params ...
}

1
在新版本的 Terraform 中,声明变量的方式仍然是 var.name_var。但是,与旧版本一样,可以使用 ${} 来进行操作。这样做没问题吗? - Renato Souza
我的回答中Terraform的语法基于0.11.x及更早版本。 - KJH

1

我建议在资源级别不要直接进行连接,而是先在本地定义一个变量,然后在资源级别使用它。

本地变量声明

locals {
  rds_instance_name = "${var.env}-${var.rds_name}"
}

资源级别声明

resource "aws_db_instance" "default_mssql" {
  count                     = var.db_create ? 1 : 0
  name                      = local.rds_instance_name
........
}

这很简单,只需要如此...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接