【发布时间】:2019-06-04 23:27:31
【问题描述】:
我尝试在 terraform apply 命令中使用变量的输入参数 启动一个 ec2 实例。这样就成功创建了实例。但是,当我尝试使用 terraform destory 删除实例时,它会执行但没有任何内容被删除。
所以我有一个带有默认值的区域变量。当我使用输入参数传递此变量中的不同区域时,实例在提供的区域中启动得很好,但我无法使用 terraform destroy 终止它。
main.tf
variable "region" {
default = "us-west-1"
}
variable "ami" {
type = "map"
default = {
us-east-2 = "ami-02e680c4540db351e"
us-west-1 = "ami-011b6930a81cd6aaf"
}
}
provider "aws" {
region = "${var.region}"
}
resource "aws_instance" "web" {
ami = "${lookup(var.ami,var.region)}"
instance_type = "t2.micro"
tags {
Name = "naxi"
}
}
地形应用:
terraform apply -var region=us-east-2
terraform destroy 的输出:
aws_instance.web: Refreshing state... (ID: i-05ca0514f61dcaf16)
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
Destroy complete! Resources: 0 destroyed.
虽然它能够在正确的区域中查找实例 ID,但我的猜测是它试图从默认区域终止实例,而不是从我作为参数提供的区域终止。
有没有办法可以用terraform destroy 提供参数-var region=something?
如果我使用默认值且没有输入参数,则 Destroy 会按预期工作。
编辑---
只要我发出以下命令:terraform destroy -varfile=variables.tfvars,terraform.tfstate 文件中的所有实例相关信息都会被删除,并且该文件的所有先前内容都会作为备份保存到 terraform.tfstate.backup。但是实例仍然没有被删除。
【问题讨论】:
-
您是说您使用相同的状态文件两次应用该配置,每个区域一次?如果是这样,那么 Terraform 将在创建第二个区域之前销毁第一个区域中的实例,因此第二个实例将不再存在。您应该检查您的状态文件显示的内容以及您的 AWS 账户中的内容,但我认为这只是您混淆了您正在使用的状态文件或错过了您已经删除它的事实。
-
只要我给出这个命令:terraform destroy -varfile=variables.tfvars,terraform.tfstate 文件就会变空(几乎),并且该文件的所有先前内容都会保存为备份。但仍然没有删除该实例。 (请参阅上面的编辑)
-
我没有应用两次配置文件
标签: amazon-ec2 terraform