我是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"
}