我已经在邮件列表和文档中搜索了如何执行此操作,但没有找到任何内容。
以下是我的用例:我在 AWS 上有一个相当简单的架构。有时我想测试一次性的事情,例如安全组配置是否正确。
为此,我启动了两个实例。因为我不喜欢点击(并且因为这些实例需要在 VPC 的不同部分设置),所以我在 terraform.tf
文件中定义了它们。
我希望只有当我明确需要这两个实例时,它们才会启动。换句话说,当我需要时terraform apply
,我不希望创建这两个实例。
以下是我尝试过的几件事:
- 将它们放在
temp
子目录中,然后仅执行此文件(例如使用terraform plan -out=disposable.plan -target=temp/disposable.tf
)。问题:它没有检测到任何变化(“没有变化。基础设施是最新的。”)。 - 我尝试过使用子目录的其他方法(不记得具体原因),terraform 抱怨未定义的变量和资源。问题:我需要访问我在主目录中定义的变量和资源(例如子网 ID、安全组等)。
- 我也尝试直接应用该文件(不确定是否可行)
terraform apply temp/disposable.tf
。问题:它抱怨该文件无效,并显示“不是有效的计划文件”(该文件确实有效)。 - 将文件重命名为其他名称,例如
.tf.temp
,并.tf
在需要资源时将其重命名为。这很好用,但您必须记住不要提交此更改。我更喜欢可以在命令行上完成的操作(例如运行单个.tf
文件)。
答案1
这可以通过使用 count 和有条件的:
设置一个具有默认值的false
变量variables.tf
:
variable temp_instances {
default = false
}
在定义实例时使用此功能,方法是使用 count 属性设置有条件的像这样:
resource "aws_instances" "temp1" {
...
count = "${var.temp_instances ? 1 : 0}"
...
}
由于变量false
默认为 0,因此它会将计数设置为 0 并且不会创建实例。然后,您可以选择在 期间将此变量设置为 true 来设置它apply
:
terraform apply -var 'temp_instances=true'
使用上述条件,现在将为真,因此将计数设置为 1。