首页 > 解决方案 > terraform 列表中的正则表达式

问题描述

我正在尝试正则表达式列表中的特定变量,特别是aws_instance在 terraform 的标签中。它看起来像这样:

variable "string"  { default = "Foo" }
variable "id"  { default = "https://s3-us-east-1.amazonaws.com/bucket/folder/item-v1.2/item-item2-v1.2.gz" }
variable "id2" { default = "456" }

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"

  tags {
    Name = "${join(".", compact(list(var.string, var.id, var.id2, "lorem-ipsum")))}"
  }
}

我能否variable.id在该列表中应用正则表达式,特别是

${replace(variable.id, "/.*-(.*)/.*/", "$1")}

所以输出会是这样的

tags = foo, v1.2, 456, lorem ipsum

正则表达式已经有效,我只是不知道如何将它放在这样的列表中。我将如何去做呢?谢谢!

标签: regexamazon-web-servicesterraform

解决方案


由于您使用的是 TF 0.14.4,因此您可以执行以下操作:

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"

  tags {
    Name = join(".", compact(list(
                var.string,
                replace(var.id, "/.*-(.*)/.*/", "$1"),
                var.id2,
                "LOREM-ipsum")))
  }
}

以上给出:

Foo.v1.2.456.LOREM-ipsum

或更简单:

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"

  tags {
    Name = join(".", [
                var.string,
                replace(var.id, "/.*-(.*)/.*/", "$1"),
                var.id2,
                "LOREM-ipsum"])
  }
}

推荐阅读