【问题标题】:Extracting Code Blocks as Variables in Terraform在 Terraform 中将代码块提取为变量
【发布时间】:2019-04-11 09:44:48
【问题描述】:

我目前有一些看起来像这样的 terraform:

resource "aws_autoscaling_group" "my_asg" {
  ...
  tag {
    key                 = "ManagedBy"
    value               = "Terraform"
    propagate_at_launch = true
  }
}

问题是这个代码块非常大,而且很多标签在多个 ASG 中是通用的,所以为了尝试将其缩小到更易于管理并减少重复,我想用通用标签做这样的事情:

resource "aws_autoscaling_group" "my_asg" {
  ...
  tag = "${var.managed_by_tag}"
}

variable "managed_by_tag" {
  type = "map"
  default = {
    key                 = "ManagedBy"
    value               = "Terraform"
    propagate_at_launch = true
  }
}

不幸的是,当我对此运行 terraform apply 时,我收到以下错误:

Error: Error loading C:\path\to\file.tf: Error reading config for aws_autoscaling_group[my_asg]: At 32:9: unknown slice type: *ast.LiteralType

从错误来看,问题似乎在于它试图将错误类型的东西 - 在本例中为地图 - 放在不属于它的地方。但是我感到困惑的是,以下内容可以正常工作,并且暗示(至少对我作为 terraform noob 的我而言)地图在这里应该没问题:

resource "aws_autoscaling_group" "my_asg" {
  ...
  tag = {
    key                 = "ManagedBy"
    value               = "Terraform"
    propagate_at_launch = true
  }
}

所以我的问题是:

  1. 有没有办法将这些标签提取到变量中?
  2. 为什么我上面的方法不起作用?

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:

    仔细看tag = "${var.managed_by_tag}": 您正在将地图插入到一个字符串中,然后您尝试在 Terraform 需要地图的地方使用该字符串。

    试试这个:

     resource "aws_autoscaling_group" "my_asg" {
       ...
       tag = var.managed_by_tag
     }
    

    【讨论】:

      【解决方案2】:

      您用于公共标签的变量已正确声明,这就是您将其传递给标签代码块的方式。您尝试插入的方式传递了错误类型的标签,如果您使用合并功能,这将以正确的格式返回。您可以在下面的文档中看到这一点,

      Interpolation - merge

      tags = "${merge(var.managed_by_tag)}"

      【讨论】:

      • 谢谢,但这会产生与以前完全相同的错误。问题是,虽然看起来该标签块想要一个地图,但传递一个地图变量失败了。如果合并功能可以工作,那么通过下面的地图功能分配它也可以正常工作,但事实并非如此。 tag = "${map("key", "ManagedBy", "value", "Terraform", "propagate_at_launch", true)}"(我最初尝试过,但显然忘记包含在原始问题中 - 我对此表示歉意)
      • 嗨,那不确定。我对 Azure 提供程序(资源组)进行了快速测试,结果正常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2021-05-03
      • 2018-12-15
      • 2021-04-01
      • 2020-05-10
      • 1970-01-01
      相关资源
      最近更新 更多