【问题标题】:Overriding Name tag in Terraform在 Terraform 中覆盖名称标签
【发布时间】:2021-02-27 02:14:03
【问题描述】:

为了我们项目的需要,我们需要通过 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 实例的名称,所以每个实例都应该有唯一的名称(由 Jenkins 作业中的字段管理。所以换句话说我们需要将一个 groovy 变量(比如 ${nameAwsInstance})“导入”到 Terraform 名称标签(在 AWS 实例创建中使用)。

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

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

但是他们都没有工作。

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

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

最好的问候。

【问题讨论】:

    标签: terraform terraform-provider-aws terraform-template-file


    【解决方案1】:

    我认为没有办法修改.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
    

    这里是the docs for variables in Terraform

    【讨论】:

    • 抱歉回复晚了,感谢您的解决方案。然而,这些天我正忙着尝试其他的东西。过几天再给你写信。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多