我是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
。我假设它将使用相同的配置创建一个新实例,因为我针对资源设置更改了名称。但是它反而破坏了我在第一次运行时创建的实例,然后再次重新创建它。为什么没有我指定的销毁会发生这种情况?
抱歉,如果我可能错过了文档中的某些内容,但是看时看不到。
谢谢。
答案 0 :(得分:1)
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"
}