Terraform 脚本在创建新的之前销毁先前创建的 ec2

Terraform script destroying previously created ec2 before creating a new one

我是 Terraform 的新手,这是我尝试使用它的第一个脚本

provider "aws" {
  profile    = "default"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

我在 C:\TerraformScripts\First.tf

的 windows 桌面上存储了上面的脚本

现在,当我第一次 运行 时,脚本会执行并为我创建一个新实例。我想第二次 运行 只是将名称从 example 更改为 example2。我假设它会创建一个具有相同配置的新实例,因为我根据资源设置更改了名称。但它反而破坏了我在第一个 运行 上创建的实例,然后再次重新创建它。为什么在我没有指定销毁的情况下会发生这种情况?

抱歉,如果我可能遗漏了文档中的某些内容,但我看的时候没看到。

谢谢。

Terraform 是一种声明性语言,这意味着您编写的脚本会告诉 Terraform 您想要到达的状态(然后 Terraform 会计算出如何到达那里)。这实际上就像说 "I want you to make sure I have an aws_instance",而不是 "I want you to create an aws_instance"。

如果我没理解错的话,你的目标可能是:

provider "aws" {
  profile    = "default"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

resource "aws_instance" "example2" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

如果您现在 运行 terraform apply,您将拥有两个 EC2 实例 ,无论之前脚本创建了多少实例 。这是因为在幕后,terraform 正在跟踪它之前在状态文件中为该脚本创建的资源,将它们与当前脚本进行比较,然后计算出要采取什么措施使它们对齐。

或者,您可以使用 count 参数获取同一资源的多个副本:

provider "aws" {
  profile    = "default"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  count         = 2
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}