0

为了我们项目的需要,我们需要通过 Terraform (v. 0.13.5) 自动创建 AWS 实例。我们正在使用 Jenkins 管道,它有一个 groovy 脚本并使用这个 shell 调用 terraform:

   sh """
      terraform init
      terraform apply -auto-approve \
        -var-file=${terraform_vars_filename} \
          -var 'vm-state=running' \
          -var 'vm-private-key=${AWS_KEY}' \
    """.stripIndent()

因为我们会在不同的AWS实例上进行操作,所以我们需要在创建过程中管理AWS实例的Name,所以每个实例都应该有唯一的名称(由Jenkins作业中的字段管理。所以换句话说我们需要“将一个 groovy 变量(比如说 ${nameAwsInstance})导入 Terraform 名称标签(在 AWS 实例创建中使用)。

我尝试了不同的方法,主要基于“-var”选项,试图覆盖名称标签,例如:

-var 'var.tags["Name"]=${nameAwsInstance}

但是他们都没有工作。

那么,是否可以覆盖名称标签,语法是什么?

PS如果有其他想法,我会很高兴。

此致。

4

1 回答 1

2

我认为没有修改.tf文件的方法,你似乎瞄准了。

因此,如果修改.tf适合您,我建议:

  • 在您的 AWS 实例名称定义中使用变量,例如
resource "aws_instance" "myserver" {
  ami           = "ami-005e54dee72cc1d00"
  instance_type = "t2.micro"

  tags = {
    Name = var.my_instance_name
  }
}
  • 然后使用环境变量调用 terraform,例如
export TF_VAR_my_instance_name=somethingSpecial
terraform apply

这是Terraform 中变量的文档

于 2020-11-15T21:46:49.580 回答