如何在 DigitalOcean 中使用 Terraform

介绍

Terraform 是一种以有组织的方式构建和管理基础设施的工具。除了其他提供商提供的大量服务之外,您还可以使用它来管理 DigitalOcean Droplet、负载均衡器甚至 DNS 条目。Terraform 使用命令行界面,可以从您的桌面或远程服务器运行。

Terraform 通过读取描述构成应用程序环境或数据中心的组件的配置文件来工作。根据配置,它生成一个执行计划,描述它将做什么以达到所需的状态。然后使用 Terraform 执行此计划以构建基础架构。当配置发生更改时,Terraform 可以生成并执行增量计划,以将现有基础设施更新到新描述的状态。

在本教程中,您将安装并使用 Terraform 在 DigitalOcean 上创建一个基础设施,该基础设施由两个 Nginx 服务器组成,这些服务器由DigitalOcean Load Balancer 进行负载平衡然后,您将使用 Terraform 在 DigitalOcean 上添加一个指向负载均衡器的 DNS 条目。这将帮助您开始使用 Terraform,并让您了解如何使用它来管理和部署满足您自己需求的基于 DigitalOcean 的基础设施。

本教程使用 Terraform 0.13.1。

先决条件

要完成本教程,您需要:

步骤 1 — 安装 Terraform

Terraform 是一个命令行工具,可以在桌面或远程服务器上运行。要安装它,您需要下载它并将其放在您的电脑上,PATH这样您就可以在您工作的任何目录中执行它。

首先,从官方下载页面下载适合您的操作系统和架构的软件包对于本教程,将 Terraform 下载到本地计算机并将其保存到~/Downloads目录中。

如果您使用的是 macOS 或 Linux,则可以使用curl.

在 macOS 上,使用此命令下载 Terraform 并将其放在您的主目录中:

  • curl -o ~/terraform.zip https://releases.hashicorp.com/terraform/0.13.1/terraform_0.13.1_darwin_amd64.zip

在 Linux 上,使用以下命令:

  • curl -o ~/terraform.zip https://releases.hashicorp.com/terraform/0.13.1/terraform_0.13.1_linux_amd64.zip

然后提取 Terraform 并将其放在~/opt/terraform目录中。首先,创建~/opt/terraform目录:

  • mkdir -p ~/opt/terraform

然后使用unzip命令解压缩 Terraform

在 Ubuntu 上,安装unzip使用apt

  • sudo apt install unzip

然后使用unzipterraform.zip解压缩~/opt/terraform/目录:

  • unzip ~/terraform.zip -d ~/opt/terraform

最后,将 , 添加~/opt/terraform/到您的PATH环境变量中,这样您就可以在terraform不指定可执行文件的完整路径的情况下执行命令。

在 Linux 上,添加文件的路径.bashrc

  • nano ~/.bashrc

注意:在 macOS 上,.bash_profile如果使用 Bash,添加文件路径zshrc如果使用 ZSH ,请添加文件路径

要将 Terraform 的路径附加到您的 PATH,请在文件末尾添加以下行:

.bashrc
export PATH=$PATH:~/opt/terraform/bin

保存文件并退出编辑器。

现在您所有的新 shell 会话都将能够找到该terraform命令。要将新 PATH 加载到当前会话中,如果您在 Linux 系统上使用 Bash,请键入以下命令:

  • . .bashrc

如果您在 macOS 上使用 Bash,请改为执行以下命令:

  • . .bash_profile

如果您使用的是 ZSH,请运行以下命令:

  • . .zshrc

要验证您是否正确安装了 Terraform,请运行terraform不带参数命令:

  • terraform

您将看到类似于以下内容的输出:

Output
Usage: terraform [-version] [-help] <command> [args] The available commands for execution are listed below. The most common, useful commands are shown first, followed by less common or more advanced commands. If you're just getting started with Terraform, stick with the common commands. For the other commands, please read the help and docs before usage. Common commands: apply Builds or changes infrastructure console Interactive console for Terraform interpolations destroy Destroy Terraform-managed infrastructure env Workspace management fmt Rewrites config files to canonical format get Download and install modules for the configuration graph Create a visual graph of Terraform resources import Import existing infrastructure into Terraform init Initialize a Terraform working directory login Obtain and save credentials for a remote host logout Remove locally-stored credentials for a remote host output Read an output from a state file plan Generate and show an execution plan ...

这些是 Terraform 接受的命令。输出为您提供了简要说明,但您将在本教程中了解如何使用它们。

现在安装了 Terraform,让我们配置它以使用 DigitalOcean 的资源。

第 2 步 – 为 DigitalOcean 配置 Terraform

Terraform 通过您可以安装的提供程序支持各种服务提供程序每个提供者都有自己的规范,这些规范通常映射到其各自服务提供者的 API。

DigitalOcean提供商,让Terraform互动与DigitalOcean API来构建我们的基础设施。此提供程序支持创建各种 DigitalOcean 资源,包括以下内容:

  • digitalocean_droplet : Droplets(服务器)
  • digitalocean_loadbalancer : 负载均衡器
  • digitalocean_domain : DNS 域条目
  • digitalocean_record : DNS 记录

Terraform 将使用您的 DigitalOcean 个人访问令牌与 DigitalOcean API 通信并管理您帐户中的资源。不要与他人共享此密钥,并将其置于脚本和版本控制之外。将您的 DigitalOcean 个人访问令牌导出到名为DO_PAT. 这将使在后续命令中使用它更容易,并将其与您的代码分开:

  • export DO_PAT="YOUR_PERSONAL_ACCESS_TOKEN"

注意:如果您经常使用 Terraform 和 DigitalOcean,请使用与PATH在上一步中修改环境变量相同的方法将此行添加到您的 shell 配置文件中

使用 Terraform 构建基础设施的第一步是通过创建一些 Terraform 配置文件来定义您要使用的提供程序。

创建一个目录,用于存储给定项目的配置文件。目录的名称无关紧要,但我们将使用“loadbalance”作为示例(随意更改其名称):

  • mkdir ~/loadbalance

Terraform 配置是以.tf文件扩展名结尾的文本文件它们是人类可读的,并且支持注释。Terraform 还支持 JSON 格式的配置文件,但我们不会在这里介绍这些文件。Terraform 将以声明方式读取您工作目录中的所有配置文件,因此资源和变量定义的顺序无关紧要。您的整个基础架构可以存在于单个配置文件中,但我们将在本教程中按资源分隔配置文件。

将当前目录更改为新创建的目录:

  • cd ~/loadbalance

从现在开始,我们将假设您的工作目录是我们刚刚更改的目录。如果您启动一个新的终端会话,请务必切换到包含您的 Terraform 配置的目录。

如果您碰巧卡住了,并且 Terraform 没有按预期工作,您可以通过删除terraform.tfstate文件重新开始,然后手动销毁已创建的资源(例如,通过控制面板。

注意:您可能还想启用标准输出 (STDOUT) 的日志记录,以便您可以查看 Terraform 正在尝试执行的操作。通过运行以下命令来做到这一点:

  • export TF_LOG=1

要将 DigitalOcean 提供程序与 Terraform 一起使用,您必须将其告知 Terraform 并使用适当的凭据变量配置插件。让我们现在就这样做。

创建一个名为的文件provider.tf该文件将存储提供程序的配置:

  • nano provider.tf

将以下行添加到文件中以告诉 Terraform 您要使用 DigitalOcean 提供程序,并指示 Terraform 在哪里找到它:

提供者.tf
terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "1.22.2"
    }
  }
}

接下来,在文件中定义以下变量,以便您可以在其余配置文件中引用它们:

  • do_token:您的 DigitalOcean 个人访问令牌。
  • pvt_key: 私钥位置,因此 Terraform 可以使用它来登录新的 Droplets 并安装 Nginx。

您将在运行 Terraform 时将这些变量的值传递到 Terraform,而不是在此处对这些值进行硬编码。这使得配置更加便携。

将这些行添加到文件中以定义变量:

提供者.tf
variable "do_token" {}
variable "pvt_key" {}

接下来,添加这些行以配置 DigitalOcean 提供程序并通过将“令牌”分配给do_token变量来指定您的 DigitalOcean 帐户的凭据

提供者.tf
provider "digitalocean" {
  token = var.do_token
}

最后,您需要让 Terraform 自动将您的 SSH 密钥添加到您创建的任何新 Droplet 中。当您将 SSH 密钥添加到 DigitalOcean 时,您为其命名。Terraform 可以使用此名称来检索公钥。添加这些行,但将terraform密钥名称替换为您在 DigitalOcean 帐户中提供密钥名称:

提供者.tf
data "digitalocean_ssh_key" "terraform" {
  name = "terraform"
}

您完成的provider.tf文件将如下所示:

提供者.tf
terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "1.22.2"
    }
  }
}

variable "do_token" {}
variable "pvt_key" {}

provider "digitalocean" {
  token = var.do_token
}

data "digitalocean_ssh_key" "terraform" {
  name = "terraform"
}

保存文件并退出编辑器。

现在为您的项目初始化 Terraform。这将读取您的配置并为您的提供商安装插件:

  • terraform init

你会看到这个输出:

Output
Initializing the backend... Initializing provider plugins... - Finding digitalocean/digitalocean versions matching "1.22.2"... - Installing digitalocean/digitalocean v1.22.2... - Installed digitalocean/digitalocean v1.22.2 (signed by a HashiCorp partner, key ID F82037E524B9C0E8) Partner and community providers are signed by their developers. If you'd like to know more about provider signing, you can read about it here: https://www.terraform.io/docs/plugins/signing.html Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.

Terraform 现在已配置。在下一步中,您将使用 Terraform 定义将运行 Nginx 服务器的 Droplet。

第 3 步 – 定义第一个 Nginx 服务器

您可以使用 Terraform 创建 DigitalOcean Droplet,并在 Droplet 启动后在其上安装软件。在此步骤中,您将配置一个 Ubuntu 18.04 Droplet 并使用 Terraform 安装 Nginx Web 服务器。

创建一个名为的新 Terraform 配置文件www-1.tf,该文件将保存 Droplet 的配置:

  • nano www-1.tf

插入以下行来定义 Droplet 资源:

resource "digitalocean_droplet" "www-1" {
    image = "ubuntu-18-04-x64"
    name = "www-1"
    region = "nyc2"
    size = "s-1vcpu-1gb"
    private_networking = true
    ssh_keys = [
      data.digitalocean_ssh_key.terraform.id
    ]

在前面的配置中,第一行定义了一个名为digitalocean_droplet资源www-1其余行指定 Droplet 的属性,包括其数据中心和标识要配置的 Droplet 大小的 slug。在本例中,我们使用的是s-1vcpu-1gb,它将创建一个具有一个 CPU 和 1GB RAM 的 Droplet。访问此尺寸 slug 图表以查看您可以使用的可用 slug。

ssh_keys部分指定要添加到 Droplet 的公钥列表。在这种情况下,您正在指定您在provider.tf. 确保此处的名称与您在 中指定的名称匹配provider.tf

当您针对 DigitalOcean API 运行 Terraform 时,它将收集有关 Droplet 的各种信息,例如其公共和私有 IP 地址。您的配置中的其他资源可以使用此信息。

如果您想知道 Droplet 资源需要或可选哪些参数,请参阅官方 Terraform 文档:DigitalOcean Droplet Specification

现在,您将设置connectionTerraform 可用于通过 SSH 连接到服务器的一个。在文件末尾插入以下几行:

  connection {
    host = self.ipv4_address
    user = "root"
    type = "ssh"
    private_key = file(var.pvt_key)
    timeout = "2m"
  }

这些行描述了 Terraform 应如何连接到服务器,以便 Terraform 可以通过 SSH 连接以安装 Nginx。注意私钥变量的使用var.pvt_key您将在运行 Terraform 时传入此值。

现在您已经建立了连接,请配置remote-exec您将用于安装 Nginx 的配置器。将以下行添加到配置中来做到这一点:

  provisioner "remote-exec" {
    inline = [
      "export PATH=$PATH:/usr/bin",
      # install nginx
      "sudo apt-get update",
      "sudo apt-get -y install nginx"
    ]
  }
}

请注意,inline数组中的字符串root用户将运行以安装 Nginx的命令

完成的文件如下所示:

www-1.tf
resource "digitalocean_droplet" "www-1" {
  image = "ubuntu-18-04-x64"
  name = "www-1"
  region = "nyc2"
  size = "s-1vcpu-1gb"
  private_networking = true
  ssh_keys = [
    data.digitalocean_ssh_key.terraform.id
  ]
  connection {
    host = self.ipv4_address
    user = "root"
    type = "ssh"
    private_key = file(var.pvt_key)
    timeout = "2m"
  }
  provisioner "remote-exec" {
    inline = [
      "export PATH=$PATH:/usr/bin",
      # install nginx
      "sudo apt-get update",
      "sudo apt-get -y install nginx"
    ]
  }
}

保存文件并退出编辑器。您已经定义了服务器。现在是告诉 Terraform 构建它的时候了。

第 4 步 – 使用 Terraform 创建 Nginx 服务器

您当前的 Terraform 配置描述了单个 Nginx 服务器。让我们使用 Terraform 连接到 DigitalOcean 并创建该服务器。

运行terraform plan命令以查看“执行计划”,或者 Terraform 将尝试做什么来构建您描述的基础设施。您必须指定 DigitalOcean 访问令牌的值和私钥的路径,因为您的 Terraform 配置文件使用此信息来访问 DigitalOcean API 并登录到您的 Droplet 以安装 Nginx。执行以下命令:

  • terraform plan \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa"

Terraform 显示此输出:

Output
Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. data.digitalocean_ssh_key.terraform: Refreshing state... ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # digitalocean_droplet.www-1 will be created + resource "digitalocean_droplet" "www-1" { + backups = false + created_at = (known after apply) + disk = (known after apply) + id = (known after apply) + image = "ubuntu-18-04-x64" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + ipv6_address_private = (known after apply) + locked = (known after apply) + memory = (known after apply) + monitoring = false + name = "www-1" + price_hourly = (known after apply) + price_monthly = (known after apply) + private_networking = true + region = "nyc2" + resize_disk = true + size = "s-1vcpu-1gb" + ssh_keys = [ + "your_ssh_key_id", ] + status = (known after apply) + urn = (known after apply) + vcpus = (known after apply) + volume_ids = (known after apply) + vpc_uuid = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ------------------------------------------------------------------------ Note: You didn't specify an "-out" parameter to save this plan, so Terraform can't guarantee that exactly these actions will be performed if "terraform apply" is subsequently run.

+ digitalocean_droplet.www-1行表示 Terraform 将创建一个名为 的新 Droplet 资源,其后www-1包含详细信息。这正是我们想要的,所以让我们执行计划。运行以下terraform apply命令以执行当前计划。再次指定变量的所有值:

警告:该terraform plan命令支持-out保存计划参数。但是,该计划将存储 API 密钥,Terraform 不会加密这些数据。如果您选择使用此选项,并且您打算将此文件发送给其他人或将其放置较长时间,则应探索加密该文件。

  • terraform apply \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa"

您将获得与之前相同的输出,但这一次,Terraform 会询问您是否要继续:

Output
... Plan: 1 to add, 0 to change, 0 to destroy. 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

输入yes并按ENTERTerraform 将配置您的 Droplet:

Outut
digitalocean_droplet.www-1: Creating...

一段时间后,您将看到 Terraform 使用配置器安装 Nginx remote-exec,然后该过程将完成:

Outut
digitalocean_droplet.www-1: Provisioning with 'remote-exec'... .... digitalocean_droplet.www-1: Creation complete after 1m54s [id=your_www-1_droplet_id] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. ...

Terraform 创建了一个名为 Droplet 的新 Droplet,www-1并在其上安装了 Nginx。如果您访问新 Droplet 的公共 IP 地址,您将看到 Nginx 欢迎屏幕。创建 Droplet 时会显示公共 IP,但您始终可以通过查看 Terraform 的当前状态来查看它。Terraformterraform.tfstate每次执行计划或“刷新”其状态时都会更新状态文件

要查看环境的当前状态,请使用以下命令:

  • terraform show terraform.tfstate

这将显示您的 Droplet 的公共 IP 地址。

Output
resource "digitalocean_droplet" "www-1" { backups = false created_at = "2020-08-27T17:22:44Z" disk = 25 id = "your_www-1_droplet_id" image = "ubuntu-18-04-x64" ipv4_address = "your_www-1_server_ip" ipv4_address_private = "10.128.0.2" ...

在浏览器中导航到以验证您的 Nginx 服务器正在运行。http://your_www-1_server_ip

注意:如果您在 Terraform 之外修改您的基础设施,您的状态文件将过时。如果您的资源在 Terraform 之外被修改,您可以刷新状态文件以使其保持最新状态。此命令将从您的提供程序中提取更新的资源信息:

  • terraform refresh \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa"

您定义并构建了一台服务器。让我们定义另一个。

第 5 步 – 创建第二个 Nginx 服务器

现在你已经描述了一个 Nginx 服务器,你可以通过复制现有服务器的配置文件并替换 Droplet 资源的名称和主机名来快速添加第二个。

您可以手动执行此操作,但使用该sed命令读取www-1.tf文件、替换www-1with 的所有实例www-2并创建一个名为 的新文件会更快www-2.tf这是sed执行此操作的命令:

  • sed 's/www-1/www-2/g' www-1.tf > www-2.tf

sed使用 sed 中了解更多信息

现在terraform plan再次运行以预览 Terraform 将进行的更改:

  • terraform plan \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa"

输出显示 Terraform 将创建第二个服务器www-2

Output
... Terraform will perform the following actions: # digitalocean_droplet.www-2 will be created + resource "digitalocean_droplet" "www-2" { + backups = false + disk = (known after apply) + id = (known after apply) + image = "ubuntu-18-04-x64" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + ipv6_address_private = (known after apply) + locked = (known after apply) + memory = (known after apply) + monitoring = false + name = "www-2" + price_hourly = (known after apply) + price_monthly = (known after apply) + private_networking = true + region = "nyc2" + resize_disk = true + size = "s-1vcpu-1gb" + ssh_keys = [ + "your_ssh_key_id", ] + status = (known after apply) + urn = (known after apply) + vcpus = (known after apply) + volume_ids = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ...

然后terraform apply再次运行以创建第二个服务器:

  • terraform apply \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa"

和以前一样,Terraform 会要求您确认是否要继续。再次查看计划并输入yes以继续。

一段时间后,Terraform 将创建新服务器并显示结果:

Output
digitalocean_droplet.www-2: Creation complete after 1m47s [id=your_www-2_droplet_id] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Terraform 添加了新服务器,但没有更改现有服务器。您可以重复此步骤中的过程以添加其他 Nginx 服务器。

您已配置两台服务器。现在让我们配置负载均衡器。

第 6 步 – 创建负载均衡器

我们将使用DigitalOcean 负载均衡器在我们的两个 Web 服务器之间路由流量。DigitalOcean Terraform 提供程序也支持这一点。

创建一个名为的新 Terraform 配置文件loadbalancer.tf

  • nano loadbalancer.tf

插入以下行以定义负载均衡器:

负载均衡器.tf
resource "digitalocean_loadbalancer" "www-lb" {
  name = "www-lb"
  region = "nyc2"

  forwarding_rule {
    entry_port = 80
    entry_protocol = "http"

    target_port = 80
    target_protocol = "http"
  }

  healthcheck {
    port = 22
    protocol = "tcp"
  }

  droplet_ids = [digitalocean_droplet.www-1.id, digitalocean_droplet.www-2.id ]
}

负载均衡器定义指定了负载均衡器的名称、数据中心、它应该侦听以平衡流量的端口、健康检查的配置以及它应该平衡的 Droplet 的 ID,我们使用 Terraform 变量获取这些 ID。

保存文件并退出编辑器。

terraform plan再次运行命令以查看新的执行计划:

  • terraform plan \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa"

您将看到多行输出,包括以下几行:

Output
... digitalocean_droplet.www-1: Refreshing state... [id=your_www-1_droplet_id] digitalocean_droplet.www-2: Refreshing state... [id=your_www-2_droplet_id] ... ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # digitalocean_loadbalancer.www-lb will be created + resource "digitalocean_loadbalancer" "www-lb" { + algorithm = "round_robin" + droplet_ids = [ + your_www-1_droplet_id, + your_www-2_droplet_id, ]

这意味着www-1www-2Droplets 已经存在,Terraform 将创建www-lb负载均衡器。

运行terraform apply以构建负载均衡器:

  • terraform apply \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa"

再次,Terraform 将要求您查看计划,然后通过输入yes以继续来批准计划

完成后,您将看到包含以下行的输出,为简洁起见被截断:

Output
... digitalocean_loadbalancer.www-lb: Creating... ... digitalocean_loadbalancer.www-lb: Creation complete after 1m18s [id=your_load_balancer_id] ... Apply complete! Resources: 1 added, 0 changed, 0 destroyed. ...

使用terraform show terraform.tfstate找到你的负载平衡器的IP地址:

  • terraform show terraform.tfstate

您将在www-lb条目下找到 IP

Output
... # digitalocean_loadbalancer.www-lb: resource "digitalocean_loadbalancer" "www-lb" { algorithm = "round_robin" droplet_ids = [ your_www-1_droplet_id, your_www-2_droplet_id, ] enable_backend_keepalive = false enable_proxy_protocol = false id = "your_load_balancer_id" ip = "your_load_balaner_ip" name = "www-lb"

在浏览器中导航到,您将看到 Nginx 欢迎屏幕,因为负载均衡器正在向两个 Nginx 服务器之一发送流量。http://your_load_balaner_ip

本教程的其余部分包括有关使用 Terraform 配置 DNS 域和记录资源的信息,以及有关如何使用其他 Terraform 命令的信息。

步骤 7 — 创建 DNS 域和记录

Terraform 还可以创建 DNS 域和记录域。例如,如果您想将您的域指向您的负载均衡器,您可以为此创建一个 Terraform 配置文件。

注意:请使用您自己的唯一域名,否则此步骤将失败。

创建一个新文件来描述您的 DNS:

  • nano your_domain.tf

插入以下域资源:

your_domain.tf
resource "digitalocean_domain" "default" {
   name = "your_domain"
   ip_address = digitalocean_loadbalancer.www-lb.ip
}

虽然我们在这,让我们添加一个CNAME记录点www.your_domainyour_domain

your_domain.tf
resource "digitalocean_record" "CNAME-www" {
  domain = digitalocean_domain.default.name
  type = "CNAME"
  name = "www"
  value = "@"
}

保存并退出。

要添加 DNS 条目,请运行terraform plan后跟terraform apply,与其他资源一样。

第 8 步 – 破坏您的基础设施

Although not commonly used in production environments, Terraform can also destroy infrastructures that it creates. This is mainly useful in development environments that are built and destroyed multiple times.

First, create an execution plan to destroy the infrastructure by using terraform plan -destroy like this:

  • terraform plan -destroy -out=terraform.tfplan \
  • -var "do_token=${DO_PAT}" \
  • -var "pvt_key=$HOME/.ssh/id_rsa" \

Terraform will output a plan with resources marked in red, and prefixed with a minus sign, indicating that it will delete the resources in your infrastructure.

Use terraform apply to run the plan:

  • terraform apply terraform.tfplan

Terraform will destroy the resources, as indicated in the destroy plan.

Conclusion

In this tutorial you used Terraform to build a load-balanced web infrastructure on DigitalOcean, with two Nginx web servers running behind a DigitalOcean Load Balancer. You know how to create and destroy resources, view the current state, and use Terraform to configure DNS entries.

Now that you understand how Terraform works, you can create configuration files that describe a server infrastructure for your own projects. The example in this tutorial is a good starting point that demonstrates how you can automate the deployment of servers. If you already use configuration management tools like Puppet or Chef, you can call those with Terraform’s provisioners to configure servers as part of their creation process instead of using the provisioning method used in this tutorial.

Terraform 具有更多功能,并且可以与其他提供程序一起使用。查看官方Terraform 文档,了解有关如何使用 Terraform 改进自己的基础架构的更多信息。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁