如何在 DigitalOcean 上运行 Terraform

0 股票
0
0
0
0

介绍

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

Terraform 的工作原理是读取描述应用程序环境或数据中心组件的配置文件。基于这些配置,它会创建一个可执行计划,描述如何实现预期状态。然后,您可以使用 Terraform 执行此计划来构建基础设施。当配置发生更改时,Terraform 可以创建并执行增量计划,将现有基础设施更新到新的状态。.

在本教程中,您将安装 Terraform 并使用它来在 DigitalOcean 上创建一个包含两台 Nginx 服务器的基础设施,这两台服务器通过 DigitalOcean 负载均衡器进行负载均衡。接下来,您将使用 Terraform 在 DigitalOcean 上添加一条指向该负载均衡器的 DNS 记录。这将帮助您快速上手 Terraform,并了解如何使用它来管理和部署满足您需求的基于 DigitalOcean 的基础设施。.

先决条件
  • DigitalOcean 账户
  • 您可以通过 DigitalOcean 控制面板创建个人 DigitalOcean 访问代码。.
  • 您的 DigitalOcean 帐户已添加一个免密码 SSH 密钥。.
  • 一个指向名为 DigitalOcean 的服务器的个人域名。.

步骤 1 – 安装 Terraform

Terraform 是一个命令行工具,可以在远程桌面或服务器上运行。要安装它,请下载并将其添加到 PATH 环境变量中,这样您就可以在任何工作目录中运行它。.

首先,请从官方下载页面下载适用于您的操作系统和架构的 Terraform 软件包。如果您使用的是 macOS 或 Linux 系统,可以使用 curl 下载 Terraform。.

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

curl -o ~/terraform.zip https://releases.hashicorp.com/terraform/1.7.2/terraform_1.7.2_darwin_amd64.zip

在Linux系统中,使用以下命令:

curl -o ~/terraform.zip https://releases.hashicorp.com/terraform/1.7.2/terraform_1.7.2_linux_amd64.zip

创建 ~/opt/terraform 文件夹:

mkdir -p ~/opt/terraform

然后使用 unzip 命令将 Terraform 解压缩到 ~/opt/terraform 目录。在 Ubuntu 系统上,您可以使用 apt 安装 unzip:

sudo apt install unzip

使用以下命令将下载的压缩包解压到 ~/opt/terraform 文件夹:

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

最后,将 ~/opt/terraform 添加到 PATH 环境变量中,这样您就可以运行 terraform 命令而无需指定可执行文件的完整路径。.

在 Linux 系统中,你需要将 PATH 环境变量定义在 bashrc 文件中。该文件会在打开新的 shell 时执行。运行以下命令即可打开 bashrc 文件进行编辑:

nano ~/.bashrc

要将 Terraform 路径添加到 PATH 环境变量中,请在文件末尾添加以下行:

export PATH=$PATH:~/opt/terraform

完成后,保存并关闭文件。.

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

. ~/.bashrc

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

. .bash_profile

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

. .zshrc

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

terraform

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

OutputUsage: terraform [global options] <subcommand> [args]
The available commands for execution are listed below.
The primary workflow commands are given first, followed by
less common or more advanced commands.
Main commands:
init Prepare your working directory for other commands
validate Check whether the configuration is valid
plan Show changes required by the current configuration
apply Create or update infrastructure
destroy Destroy previously-created infrastructure
All other commands:
console Try Terraform expressions at an interactive command prompt
fmt Reformat your configuration in the standard style
force-unlock Release a stuck lock on the current workspace
get Install or upgrade remote Terraform modules
graph Generate a Graphviz graph of the steps in an operation
import Associate existing infrastructure with a Terraform resource
login Obtain and save credentials for a remote host
logout Remove locally-stored credentials for a remote host
output Show output values from your root module
providers Show the providers required for this configuration
refresh Update the state to match remote systems
show Show the current state or a saved plan
state Advanced state management
taint Mark a resource instance as not fully functional
test Experimental support for module integration testing
untaint Remove the 'tainted' state from a resource instance
version Show the current Terraform version
workspace Workspace management
Global options (use these before the subcommand, if any):
-chdir=DIR Switch to a different working directory before executing the
given subcommand.
-help Show this help output, or the help for a specified subcommand.
-version An alias for the "version" subcommand.

这些是 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"

运行以下命令创建用于存储基础架构配置的目录:

mkdir ~/loadbalance

进入新创建的目录:

cd ~/loadbalance

Terraform 配置文件是扩展名为 .tf 的文本文件。它们易于阅读并支持注释。(Terraform 也支持 JSON 格式的配置文件,但本文不做详细介绍。)Terraform 以声明式的方式读取工作目录中的所有配置文件,因此资源和变量定义的顺序无关紧要。您的整个基础架构可以存在于单个配置文件中,但为了清晰起见,您应该按资源类型对配置文件进行分类。.

使用 Terraform 创建基础设施的第一步是定义要使用的提供程序。.

要在 Terraform 中使用 DigitalOcean 提供商,您需要告知 Terraform 该提供商,并使用相应的凭据变量配置插件。创建一个名为 provider.tf 的文件,用于存储提供商的配置:

nano provider.tf

将以下几行添加到文件中,告诉 Terraform 你想使用 DigitalOcean 提供程序,并告诉 Terraform 在哪里可以找到它:

terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}

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

  • do_token:您的 DigitalOcean 个人访问密码。.
  • 私钥私钥的位置,以便 Terraform 可以使用它登录到新的 Droplet 并安装 Nginx。.

在 Terraform 运行时,您需要将这些变量的值传递给它,而不是在此处硬编码这些值。这使得配置更具可移植性。.

要定义这些变量,请将以下几行添加到文件中:

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

然后,添加以下代码行来配置 DigitalOcean 提供商并通过分配以下信息来验证您的 DigitalOcean 帐户: do_token 对此论点 令牌 指定提供商:

...
provider "digitalocean" {
token = var.do_token
}

最后,您需要让 Terraform 自动将您的 SSH 密钥添加到您创建的任何新 droplet 中。当您将 SSH 密钥添加到 DigitalOcean 时,您为其指定了一个名称。Terraform 可以使用此名称检索公钥。请添加以下几行代码,并将结果替换为您在 DigitalOcean 帐户中提供的密钥名称。 地形改造 做:

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

文件 provider.tf 您填写完毕的表格将如下所示:

terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
variable "do_token" {}
variable "pvt_key" {}
provider "digitalocean" {
token = var.do_token
}
data "digitalocean_ssh_key" "terraform" {
name = "terraform"
}

运行以下命令初始化项目的 Terraform:

terraform init

这会读取您的配置并安装适用于您服务提供商的插件。您将在输出中看到相关信息:

OutputInitializing the backend...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.34.1...
- Installed digitalocean/digitalocean v2.34.1 (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/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
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.tfstate 然后手动删除已创建的资源(例如通过控制面板),再重新开始。.

Terraform 已配置完成,可以连接到您的 DigitalOcean 帐户。接下来,您将使用 Terraform 定义一个运行 Nginx 服务器的 droplet。.

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

您可以使用 Terraform 创建一个 DigitalOcean Droplet,然后启动它并在 Droplet 上安装软件。在本步骤中,您将配置一个 Ubuntu 20.04 环境,并使用 Terraform 安装 Nginx Web 服务器。.

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

nano www-1.tf

输入以下几行代码来定义 Droplet 源:

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

在之前的配置中,第一行定义了一个名为 www-1 的 digitalocean_droplet 资源。其余行指定了 Droplet 的属性,包括它所在的数据中心以及用于指定 Droplet 大小的 Slug。在本例中,您使用的是 s-1vcpu-1gb,它将创建一个配备一个 CPU 和 1GB 内存的 Droplet。(请参阅此 Slug 大小表,了解您可以使用的 Slug。)

部分 ssh_keys 指定要添加到 Droplet 的公钥列表。在本例中,您指定的是位于 provider.tf 请确保此处的名称与您在[此处应填写具体内容]中定义的名称一致。 provider.tf 您已指定它应该匹配。.

当您使用 Terraform 连接 DigitalOcean API 时,它会收集有关 Droplet 的各种信息,例如其公网和私网 IP 地址。配置中的其他资源可以使用这些信息。.

如果您不清楚 Droplet 源的哪些参数是必需的,哪些是可选的,请参阅 Terraform 官方文档: DigitalOcean Droplet 规范

要设置 Terraform 可以通过 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 时,你需要将该值传递给 Terraform。.

连接建立完成后,接下来配置远程执行提供程序,您将使用它来安装 Nginx。为此,请将以下几行添加到配置文件中:

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

请注意,内联数组中的字符串是 root 用户运行以安装 Nginx 的命令。.

最终文件如下所示:

resource "digitalocean_droplet" "www-1" {
image = "ubuntu-20-04-x64"
name = "www-1"
region = "nyc3"
size = "s-1vcpu-1gb"
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 update",
"sudo apt install -y nginx"
]
}
}

保存文件并退出编辑器。您已定义好服务器,现在可以部署它了,接下来您将执行部署操作。.

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

您当前的 Terraform 配置描述的是一个 Nginx 服务器。现在,您将按照配置精确部署 Droplet。.

命令 地球改造计划 运行命令即可查看执行计划,了解 Terraform 将如何构建您描述的基础架构。您需要指定 DigitalOcean 访问令牌的值和私钥路径,因为您的配置将使用这些信息来访问用于 Nginx 安装的 Droplet。要创建计划,请运行以下命令:

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

你会看到类似这样的输出:

OutputTerraform used the selected providers to generate the following execution plan. 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)
+ graceful_shutdown = false
+ id = (known after apply)
+ image = "ubuntu-20-04-x64"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (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 = (known after apply)
+ region = "nyc3"
+ resize_disk = true
+ size = "s-1vcpu-1gb"
+ ssh_keys = [
+ "...",
]
+ 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 use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.

`+ resource “digitalocean_droplet” “www-1”` 这行命令表示 Terraform 将创建一个名为 www-1 的新 Droplet 资源,并包含以下详细信息。这正是预期行为,因此请运行 `terraform application` 命令来运行当前应用程序:

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”并按回车键。Terraform Droplet 为您提供:

Outputdigitalocean_droplet.www-1: Creating...

过一会儿,你会看到 Terraform 使用 remote-exec 提供程序安装 Nginx,然后该过程将完成:

Output
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 创建了一个名为 www-1 的新 Droplet,并在其上安装了 Nginx。如果您访问新 Droplet 的公网 IP 地址,将会看到 Nginx 欢迎页面。公网 IP 地址会在 Droplet 创建时显示,但您也可以随时通过查看当前的 Terraform 状态来查看。Terraform 每次运行计划或更新其状态时都会更新 terraform.tfstate 状态文件。.

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

terraform show terraform.tfstate

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

Outputresource "digitalocean_droplet" "www-1" {
backups = false
created_at = "..."
disk = 25
id = "your_www-1_droplet_id"
image = "ubuntu-20-04-x64"
ipv4_address = "your_www-1_server_ip"
ipv4_address_private = "10.128.0.2"
...

要验证您的 Nginx 服务器是否正在运行,请在浏览器中访问 http://your_www-1_server_ip。.

至此,您已在 Terraform 中部署了您描述的 Droplet。现在您将创建第二个 Droplet。.

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

现在您已经描述了一个 Nginx 服务器,您可以复制现有的服务器配置文件,然后替换 Droplet 源的名称和主机名,从而快速添加第二个服务器。.

你可以手动完成此操作,但可以使用命令。 sed 读取文件 www-1.tf替换所有实例 www-1www-2 并创建一个名为 www-2.tf 速度更快。命令如下。 sed 要做到这一点,需要:

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

您可以访问“使用 sed”页面了解更多关于使用 sed 的信息。 sed 了解更多。.

要预览 Terraform 将进行的更改,请再次运行 terraform 程序:

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

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

OutputTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# digitalocean_droplet.www-2 will be created
+ resource "digitalocean_droplet" "www-2" {
+ backups = false
+ created_at = (known after apply)
+ disk = (known after apply)
+ id = (known after apply)
+ image = "ubuntu-20-04-x64"
+ ipv4_address = (known after apply)
+ ipv4_address_private = (known after apply)
+ ipv6 = false
+ ipv6_address = (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 = "nyc3"
+ resize_disk = true
+ size = "s-1vcpu-1gb"
+ ssh_keys = [
+ "...",
]
+ 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.
...

再次运行 Terraform 应用程序以创建第二个 droplet:

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

和之前一样,Terraform 会要求您确认是否继续。请再次查看计划并输入“是”继续。.

过了一会儿,Terraform 创建新服务器并显示结果:

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

Terraform 创建了新服务器,而不会修改现有服务器。您可以重复此步骤来添加其他 Nginx 服务器。.

现在您已经有两个运行 Nginx 的 Droplet,接下来您将定义并部署一个负载均衡器,以在它们之间分配流量。.

步骤 6 – 负载均衡

您将使用 DigitalOcean 负载均衡器(由官方 Terraform 提供商支持)在两个 Web 服务器之间路由流量。.

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

nano loadbalancer.tf

添加以下几行代码以定义负载均衡器:

resource "digitalocean_loadbalancer" "www-lb" {
name = "www-lb"
region = "nyc3"
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 ]
}

负载均衡器定义指定其名称、它所在的数据中心、它应该监听以平衡流量的端口、健康检查的配置以及它应该平衡的丢包的 ID,您可以使用 Terraform 变量获取这些 ID。.

接下来,定义一个状态检查,以确保负载均衡器在部署后实际可用:

check "health_check" {
data "http" "lb_check" {
url = "http://${digitalocean_loadbalancer.www-lb.ip}"
}
assert {
condition = data.http.lb_check.status_code == 200
error_message = "${data.http.lb_check.url} returned an unhealthy status code"
}
}

此检查通过 HTTP 请求负载均衡器 IP 地址的状态,并验证返回代码是否为 200,以确认服务器运行状况良好且可用。如果出现任何错误或返回代码不同,部署步骤完成后将显示警告。完成后,请保存并关闭文件。.

再次订购 地球改造计划 运行以查看新生成的可执行文件:

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

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

Output...
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
<= read (data resources)
Terraform will perform the following actions:
# data.http.lb_check will be read during apply
# (config refers to values not yet known)
<= data "http" "lb_check" {
+ body = (known after apply)
+ id = (known after apply)
+ response_body = (known after apply)
+ response_body_base64 = (known after apply)
+ response_headers = (known after apply)
+ status_code = (known after apply)
+ url = (known after apply)
}
# digitalocean_loadbalancer.www-lb will be created
+ resource "digitalocean_loadbalancer" "www-lb" {
+ algorithm = "round_robin"
+ disable_lets_encrypt_dns_records = false
+ droplet_ids = [
+ ...,
+ ...,
]
+ enable_backend_keepalive = false
+ enable_proxy_protocol = false
+ http_idle_timeout_seconds = (known after apply)
+ id = (known after apply)
+ ip = (known after apply)
+ name = "www-lb"
+ project_id = (known after apply)
+ redirect_http_to_https = false
+ region = "nyc3"
+ size_unit = (known after apply)
+ status = (known after apply)
+ urn = (known after apply)
+ vpc_uuid = (known after apply)
+ forwarding_rule {
+ certificate_id = (known after apply)
+ certificate_name = (known after apply)
+ entry_port = 80
+ entry_protocol = "http"
+ target_port = 80
+ target_protocol = "http"
+ tls_passthrough = false
}
+ healthcheck {
+ check_interval_seconds = 10
+ healthy_threshold = 5
+ port = 22
+ protocol = "tcp"
+ response_timeout_seconds = 5
+ unhealthy_threshold = 3
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
│ Warning: Check block assertion known after apply
│ on loadbalancer.tf line 27, in check "health_check":
│ 27: condition = data.http.lb_check.status_code == 200
│ ├────────────────
│ │ data.http.lb_check.status_code is a number
│
│ The condition could not be evaluated at this time, a result will be known when this plan is applied.
╵
...

由于液滴 www-1www-2 它们已经存在,Terraform Load Balancer 会创建 www-lb 并在配置完成后进行检查。.

部署之前,需要重启项目以添加 health_check 中使用的 http 依赖项:

terraform init -upgrade

然后,运行 Terraform 应用程序来创建负载均衡器:

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

Terraform 将再次要求您审核计划。请输入“是”以确认计划并继续。.

完成上述操作后,您将看到包含以下几行的输出结果(为简洁起见,此处省略部分内容):

Output...
digitalocean_loadbalancer.www-lb: Creating...
...
digitalocean_loadbalancer.www-lb: Creation complete after 1m18s [id=your_load_balancer_id]
data.http.lb_check: Reading...
data.http.lb_check: Read complete after 0s [id=http://lb-ip]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
...

请注意,lb_check 已成功完成。.

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"
disable_lets_encrypt_dns_records = false
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_balancer_ip"
name = "www-lb"
...

在浏览器中访问 http://your_load_balancer_ip,您将看到 Nginx 欢迎页面,因为负载均衡器会将流量转发到两个 Nginx 服务器中的一个。.

现在您将学习如何使用 Terraform 为您的 DigitalOcean 帐户配置 DNS。.

步骤 7 – 创建域名和 DNS 记录

除了 Droplet 和负载均衡器之外,Terraform 还可以创建 DNS 域和注册域名。例如,如果您想将域名指向负载均衡器,可以编写配置来描述这种关系。.

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

nano domain_root.tf

添加以下域名来源,并将 your_domain 替换为您的域名:

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

完成后,保存并关闭文件。.

您还可以添加 CNAME 记录, www.your_domain你的域名 为 CNAME 记录创建一个新文件:

nano domain_cname.tf

将以下几行添加到文件中:

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

完成后,保存并关闭文件。.

要添加 DNS 条目,该应用程序 地形改造 进而 Terraform 应用 像运行其他资源一样运行它。.

访问您的域名,您将看到 Nginx 欢迎页面,因为该域名指向负载均衡器,负载均衡器会将流量发送到两个 Nginx 服务器之一。.

第 8 步——摧毁你的基础设施

虽然 Terraform 通常不用于生产环境,但它也可以销毁现有的基础设施。这主要适用于需要多次部署和销毁的开发环境。.

首先,使用 地形改造计划 - 摧毁 制定基础设施拆除实施方案:

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

Terraform 输出的计划中,资源以红色突出显示,并带有减号,表示它将删除您的基础架构资源。.

然后从 Terraform 应用 要实施该计划,请使用:

terraform apply terraform.tfplan

Terraform 将继续按照生成的计划销毁资源。.

结果

在本教程中,您使用 Terraform 在 DigitalOcean 上创建了一个负载均衡的 Web 基础架构,其中包含两台运行在 DigitalOcean 负载均衡器后面的 Nginx Web 服务器。您学习了如何创建和销毁资源、查看当前状态以及使用 Terraform 配置 DNS 条目。.

现在您已经了解了 Terraform 的工作原理,可以创建配置文件来描述项目的服务器基础架构。本教程中的示例是一个很好的起点,展示了如何自动化部署服务器。如果您已经在使用配置工具,可以将它们与 Terraform 集成,以便在创建过程中配置服务器,而无需使用本教程中使用的配置方法。.

Terraform 拥有更多功能,并且可以与其他服务商协同工作。如需了解如何使用 Terraform 改进基础设施,请参阅 Terraform 官方文档。本教程是“如何使用 Terraform 管理基础设施”系列教程的一部分。该系列教程涵盖了 Terraform 的诸多主题,从首次安装 Terraform 到管理复杂项目,应有尽有。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢