Terraform
销毁基础设施
当您不再需要工作区管理的基础设施时,请使用 Terraform 来销毁它。Terraform 在您从配置中删除资源并应用更改时销毁资源。您还可以使用 terraform destroy 命令销毁由您的配置管理的所有资源。
先决条件
要遵循本教程,您需要
- 已安装 Terraform CLI(1.2.0+)。
- 已安装 AWS CLI。
- 一个 AWS 账户和 关联的凭证,允许您在
us-west-2区域中创建资源,包括一个 EC2 实例、VPC 和安全组。 - 本系列教程中 先前教程 中的配置和基础设施。
移除资源
打开 main.tf 并注释掉 aws_instance.app_server 资源块,以从您的配置中移除 EC2 实例。
main.tf
/*
resource "aws_instance" "app_server" {
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
vpc_security_group_ids = [module.vpc.default_security_group_id]
subnet_id = module.vpc.private_subnets[0]
tags = {
Name = var.instance_name
}
}
*/
由于 outputs.tf 中 instance_hostname 输出值引用了从 main.tf 移除的 EC2 实例,因此您还必须注释掉该输出值,否则您的配置将无效。
outputs.tf
/*
output "instance_hostname" {
description = "Private DNS name of the EC2 instance."
value = aws_instance.app_server.private_dns
}
*/
通过运行 terraform apply 来应用此更改。批准 Terraform 的计划以销毁您的实例并移除您的输出值,方法是在提示确认时回复 yes。
$ terraform apply
data.aws_ami.ubuntu: Reading...
module.vpc.aws_vpc.this[0]: Refreshing state... [id=vpc-01e157ec1af2d7314]
aws_instance.app_server: Refreshing state... [id=i-0226232d8b6e9eea6]
data.aws_ami.ubuntu: Read complete after 1s [id=ami-0a605bc2ef5707a18]
module.vpc.aws_default_route_table.default[0]: Refreshing state... [id=rtb-0c1f047c07a84c278]
module.vpc.aws_default_security_group.this[0]: Refreshing state... [id=sg-04f350f66843618db]
## ...
Plan: 0 to add, 0 to change, 1 to destroy.
Changes to Outputs:
- instance_hostname = "ip-10-0-1-75.us-west-2.compute.internal" -> null
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_instance.app_server: Destroying... [id=i-0226232d8b6e9eea6]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 00m10s elapsed]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 00m20s elapsed]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 00m30s elapsed]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 00m40s elapsed]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 00m50s elapsed]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 01m00s elapsed]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 01m10s elapsed]
aws_instance.app_server: Still destroying... [id=i-0226232d8b6e9eea6, 01m20s elapsed]
aws_instance.app_server: Destruction complete after 1m22s
Apply complete! Resources: 0 added, 0 changed, 1 destroyed.
销毁工作区
移除工作区中的单个资源是您的基础设施管理工作流程的一部分。当您不再需要工作区中的任何基础设施时,请使用 Terraform 来销毁它。例如,您可能会将应用程序环境从服务中移除,或者使用 Terraform 来管理短生命周期环境,例如构建或测试系统。
通过运行 terraform destroy 来销毁您的工作区。批准 Terraform 的计划以移除您的资源,方法是在提示确认时回复 yes。
$ terraform destroy
data.aws_ami.ubuntu: Reading...
module.vpc.aws_vpc.this[0]: Refreshing state... [id=vpc-01e157ec1af2d7314]
data.aws_ami.ubuntu: Read complete after 1s [id=ami-0a605bc2ef5707a18]
module.vpc.aws_default_security_group.this[0]: Refreshing state... [id=sg-04f350f66843618db]
module.vpc.aws_default_route_table.default[0]: Refreshing state... [id=rtb-0c1f047c07a84c278]
module.vpc.aws_subnet.private[1]: Refreshing state... [id=subnet-0d2376b2fad1af4a6]
module.vpc.aws_subnet.private[0]: Refreshing state... [id=subnet-0d2219235033fe9d0]
## ...
Plan: 0 to add, 0 to change, 15 to destroy.
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
module.vpc.aws_route_table_association.private[1]: Destroying... [id=rtbassoc-0ea0b41646a73659c]
module.vpc.aws_default_security_group.this[0]: Destroying... [id=sg-04f350f66843618db]
module.vpc.aws_default_route_table.default[0]: Destroying... [id=rtb-0c1f047c07a84c278]
module.vpc.aws_route.public_internet_gateway[0]: Destroying... [id=r-rtb-0cde73c077eadf7e61080289494]
## ...
module.vpc.aws_subnet.private[1]: Destruction complete after 1s
module.vpc.aws_subnet.public[0]: Destruction complete after 1s
module.vpc.aws_subnet.private[0]: Destruction complete after 1s
module.vpc.aws_internet_gateway.this[0]: Destruction complete after 0s
module.vpc.aws_route_table.private[1]: Destruction complete after 1s
module.vpc.aws_route_table.private[0]: Destruction complete after 1s
module.vpc.aws_route_table.public[0]: Destruction complete after 1s
module.vpc.aws_vpc.this[0]: Destroying... [id=vpc-01e157ec1af2d7314]
module.vpc.aws_vpc.this[0]: Destruction complete after 1s
Destroy complete! Resources: 15 destroyed.
现在您已经使用 Terraform 创建、管理和销毁了基础设施。在下一个教程中,您将使用 HCP Terraform 来存储您的状态并远程执行 Terraform 操作。
交互式终端
您可以在我们的交互式终端中学习如何创建基础设施,而无需设置云账户。要遵循本教程中的练习,请在实验室环境中单击“跳过”按钮跳到第三个挑战。
启动终端
本教程包括一个免费的交互式命令行实验室,您可以跟随实际云基础设施进行操作。