0

我想使用 terraform 为 aws 中的不同组件创建不同的实例。但是如果我想销毁一个组件的特定实例,它将一次销毁不同组件的所有不同实例,因为它们在一个文件夹中共享公共 tfstate 文件。所以解决方法是我需要在不同的文件夹中创建不同的组件实例为单独的 tfstate 文件运行 terraform。我们是否需要为单独的组件创建单独的文件夹并在那里运行 terraform?

除了这个还有其他工作吗?

谢谢

4

2 回答 2

0

好的,由于问题中没有太多细节,让我猜猜。

您希望跑步terraform destroy会破坏您的一些“实例”。

但是您不希望它破坏您的所有资源。

您考虑将资源分成具有不同状态的不同文件夹。

但这不是必需的。如果您想销毁某些特定的“实例”/“资源”——只需将其从配置(.tf文件)中删除并运行terraform apply. 这将破坏一些“实例”,但保留所有其他“实例”。

假设您有以下配置:

resource "aws_instance" "api" {
  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t2.micro"
}

resource "aws_instance" "web" {
  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t2.micro"
}

resource "aws_instance" "app" {
  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t2.micro"
}

3 个实例:Web、应用程序、API。你要毁灭web

不要运行terraform destroy,这会破坏你的所有状态,只要留下你需要的东西并运行terraform plan

PS在不同文件夹中分离状态也很有意义。例如,非常非常建议将您的不同环境分成不同的状态文件。此外,您可以将更常见的内容(如 VPC 或 S3 存储桶配置)移至单独的状态,当对 EC2 实例应用一些更频繁的更改时,这种状态很少会发生变化,从而不会将其置于风险之中。

于 2017-05-16T21:48:51.333 回答
0

只需在 .tf 文件中注释掉不再需要的部分,然后再次运行 plan/apply。它只会破坏您注释掉的位。

于 2017-05-16T21:50:33.537 回答