在创建新 ec2 之前销毁以前创建的 ec2 的 terraform 脚本



我是Terraform的新手,这是我第一次尝试它的脚本

provider "aws" {
profile    = "default"
region     = "us-east-1"
}
resource "aws_instance" "example" {
ami           = "ami-2757f631"
instance_type = "t2.micro"
}

我将上述脚本存储在我的 Windows 桌面上C:TerraformScriptsFirst.tf

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

抱歉,如果我可能错过了文档中的某些内容,但是当我查看时我看不到它。

谢谢。

Terraform 是一种声明性语言,这意味着你编写的脚本正在告诉 terraform 你想要达到的状态(然后 terraform 计算出如何到达那里(。这实际上就像说"我希望你确保我有一个aws_instance",而不是"我希望你创建一个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"
}

相关内容

  • 没有找到相关文章

最新更新