紧跟上文:terraform简单的开始-安装和一些配置.先对照上一章文章的main.tf进行一下解读
解析上一篇的代码:
上一篇中main.tf代码如下:
ini
terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
version = "1.81.25"
}
}
}
variable "region" {
description = "腾讯云地域"
type = string
default = "ap-shanghai"
}
variable "secret_id" {}
variable "secret_key" {}
# 设置腾讯云提供者
provider "tencentcloud" {
secret_id =var.secret_id
secret_key = var.secret_key
region = var.region
}
data "tencentcloud_availability_zones" "availability_zones" {}
output "zones" {
value = data.tencentcloud_availability_zones.availability_zones
}
下面解析以下代码部分:
provider 部分
下面这些代码其实是关于provider的声明:
ini
terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
version = "1.81.25"
}
}
}
# 设置腾讯云提供者
provider "tencentcloud" {
secret_id =var.secret_id
secret_key = var.secret_key
region = var.region
}
这段Terraform代码是用来声明Terraform配置文件中所需的提供者(provider)。在这个例子中,我们使用了Tencent Cloud(腾讯云)的提供者。
terraform块
具体来说,代码中的terraform
块指示Terraform配置的开始,**required_providers**
块用于声明所需的提供者。在这里,我们声明了一个名为"tencentcloud "的提供者。 在**tencentcloud**
块内部,我们指定了提供者的相关信息:
-
**source**
字段指定提供者的源。在这里,我们使用了"tencentcloudstack/tencentcloud"
作为提供者的源,这是Tencent Cloud 官方维护的提供者。
-
**version**
字段指定了所需的提供者版本。在这里,我们指定了版本号为"1.81.25"
,表示我们需要使用1.81.25版本的Tencent Cloud提供者。
provide块
**provide**
块这段代码是在Terraform中配置使用Tencent Cloud提供者(provider),并指定了一些必要的参数。 首先,provider
块用于配置Tencent Cloud提供者。在这里,我们使用了"tencentcloud"
作为提供者的名称,与前面声明的required_providers
块中的名称相对应。 在provider
块内部,我们指定了一些参数:
-
**secret_id**
:这个参数是通过变量var.secret_id
获得的,它应该包含您的Tencent Cloud账号的SecretId。SecretId是一种访问密钥,用于对Tencent Cloud资源进行身份验证和授权。
-
**secret_key**
:这个参数是通过变量var.secret_key
获得的,它应该包含您的Tencent Cloud账号的SecretKey。SecretKey是与SecretId关联的机密,用于对Tencent Cloud资源进行身份验证和授权。
-
**region**
:这个参数是通过变量var.region
获得的,它指定了您希望使用的Tencent Cloud区域。Terraform将在指定的区域中创建和管理资源。
通过这些参数配置,Terraform将使用提供的SecretId、SecretKey和区域信息来进行身份验证,并与Tencent Cloud API进行通信,以创建、更新或删除Tencent Cloud资源。 请注意,变量var.secret_id
、var.secret_key
和var.region
应该在Terraform配置文件中定义和赋值,以便在使用此提供者时提供正确的值。 通过这段代码,Terraform将会自动下载并加载所需的Tencent Cloud提供者,并使用指定的版本。这样,在Terraform配置文件中就可以使用Tencent Cloud提供者的资源和数据源来创建和管理腾讯云资源。
其他的:
variable 变量的定义:
这里就定义了 region区域 已经腾讯云密钥:
go
variable "region" {
description = "腾讯云地域"
type = string
default = "ap-shanghai"
}
variable "secret_id" {}
variable "secret_key" {}
data and output块
data块
用于从外部数据源获取信息。 output
块用于定义输出值,这些值可以在Terraform执行完毕后显示出来
kotlin
data "tencentcloud_availability_zones" "availability_zones" {}
output "zones" {
value = data.tencentcloud_availability_zones.availability_zones
}
恩常用的块还有**resource块 **用户声明和配置terraform相关资源,后面会展开相关。
tfvars 文件:
我是创建了一个credentials.tfvars文件,名称不重要。我是主要为了将密码跟main.tf分开截图方便....免得打马赛克!
ini
secret_id = "xxxxxxxx"
secret_key = "xxxxxxxx"
相关的命令
terraform init:
目录下会生成.terraform的文件夹,其目录记录基本如下:**.terraform/providers/registry.terraform.io/ **我的是腾讯云的,故下面的结构就是tencentcloudstack/tencentcloud/ 版本号
terraform plan
注意:由于为这里都使用了外部变量,故后面跟了**-var-file**=xxx! 执行 terraform plan命令:
terraform plan
terraform plan
命令用于生成并显示Terraform执行计划(execution plan)。
执行计划是Terraform根据当前配置文件和状态文件的内容,以及云服务商的API信息,计算出的一系列操作步骤。这些步骤描述了Terraform将如何创建、修改或删除资源以达到配置文件的期望状态。 当您运行terraform plan
时,Terraform会执行以下操作:
- 分析配置:Terraform会读取配置文件(如
.tf
文件)和状态文件(如.tfstate
文件),并根据这些信息了解当前资源的状态、配置变化和依赖关系。 - 计划生成:Terraform会根据当前状态和配置文件的差异,生成一个计划。这个计划包含了所需的资源创建、修改或删除操作,以及执行这些操作所需的顺序和前置条件。
- 显示计划:Terraform会将计划以易读的形式显示在终端中。它会列出要创建、修改或删除的资源,以及相关的属性变化。您可以查看计划,以了解Terraform将要执行的操作,以及它对现有资源的影响。 通过查看执行计划,您可以验证Terraform的操作是否符合预期,并确保不会意外地创建、修改或删除资源。这使您能够在应用实际变更之前,对计划进行审查和验证。 请注意,
terraform plan
只是生成计划,并不会实际应用变更。要应用计划并执行资源变更,请运行terraform apply
命令。 注意:以上文字使用chatgpt3.5生成!
terraform apply
执行terraform apply 命令:
ini
terraform apply -var-file=credentials.tfvars
terraform apply命令用于将Terraform的执行计划应用于云环境,并创建、修改或删除相应的资源。 当您运行terraform apply时,Terraform会执行以下操作:
- 计划验证:Terraform会再次验证执行计划,以确保计划与当前的配置文件和状态文件匹配。它会检查是否有其他人或进程已经更新了配置或状态文件。
- 资源变更:如果计划验证通过,Terraform会开始执行计划中描述的操作步骤。它会按照计划中指定的顺序,创建、修改或删除资源,以使云环境与配置文件的期望状态保持一致。
- 提示确认:在实际应用变更之前,Terraform会向您显示一个提示,列出即将执行的操作和其影响。您需要确认是否要继续应用变更。如果您输入"yes"确认,Terraform将继续执行。
- 资源管理:Terraform会调用相应的云服务商API,执行操作以创建、修改或删除资源。它会根据配置文件中定义的资源类型和属性,与云服务商进行交互,并按计划中的指示进行操作。
- 状态更新:一旦资源变更完成,Terraform会更新状态文件(如.tfstate文件),以反映最新的云环境状态。状态文件用于跟踪和管理资源的状态,并在后续的计划和应用过程中提供准确的信息。
通过运行terraform apply,您可以将配置文件中的变更应用到云环境,并确保云环境与配置文件的期望状态保持一致。请注意,应用变更可能会导致资源的创建、修改或删除,因此请谨慎操作,并在执行前仔细检查计划和确认提示。 apply 这里顺便讲一下**terraform.tfstate **状态文件: 关于tfstate文件 terraform.tfstate
文件是Terraform使用的状态文件,用于跟踪和管理资源的状态。 Terraform在执行过程中会将资源的当前状态存储在.tfstate
文件中。这个文件记录了创建的资源、其属性的值,以及与其他资源之间的关系和依赖。它是一个JSON格式的文件,包含了资源的详细信息。 .tfstate
文件的作用包括:
- 跟踪资源状态:状态文件记录了Terraform创建、修改或删除的资源以及其当前属性的值。通过状态文件,Terraform可以了解资源的实际状态,以便在后续的计划(
terraform plan
)和应用(terraform apply
)过程中进行比较和更新。 - 避免重复创建:Terraform使用状态文件来判断资源是否已经创建。当您再次运行
terraform apply
时,Terraform会读取状态文件中的信息,并根据配置文件中的定义和状态文件的对比,决定是否需要创建新的资源。这样可以避免重复创建已经存在的资源。 - 管理依赖关系:状态文件记录了资源之间的依赖关系。Terraform使用这些信息来确保在创建或修改资源时,满足依赖关系的顺序和条件。这样可以保证资源之间的正确关联和一致性。
.tfstate
文件通常与Terraform配置文件(如.tf
文件)位于同一目录中。在执行terraform init
时,Terraform会自动初始化和管理状态文件,根据配置中的backend
设置将其存储在本地文件系统或远程存储中(如AWS S3、Azure Blob Storage等)。 请注意,.tfstate
文件包含敏感信息(例如资源的密码、密钥等),因此需要妥善保护。建议不要直接手动修改或共享该文件,而是使用Terraform提供的命令和工具来管理和操作状态文件。
terraform destroy
terraform destroy
ini
terraform destroy -var-file=credentials.tfvars
当你使用Terraform创建了基础设施和资源后,有时候你可能需要停止使用这些资源并将其清理掉。这就是使用terraform destroy
命令的情况。 terraform destroy
是Terraform命令行工具提供的一个命令,用于销毁通过Terraform创建的基础设施和资源。它会根据你的配置文件(通常是以.tf
为后缀的文件)中定义的内容,逆向执行创建资源的操作,将资源从目标环境中删除。 执行terraform destroy
会触发以下过程:
- Terraform会读取你的配置文件,分析其中定义的资源和依赖关系。
- Terraform会根据依赖关系的逆序,从最底层的资源开始依次销毁。这意味着资源之间的依赖关系会被正确处理,以确保资源在正确的顺序下被销毁。
- Terraform会向云服务提供商(如AWS、Azure、Google Cloud等)的API发送请求,执行资源的删除操作。
- Terraform会输出销毁过程的详细信息,包括删除的资源和状态更新。 需要注意的是,
terraform destroy
是一个非常强大且具有破坏性的命令,它会删除你指定的所有资源,包括存储、虚拟机、数据库等。因此,在执行该命令之前,请确保你真的想要销毁这些资源,并且备份了任何重要的数据。一旦执行了terraform destroy
,很难恢复被销毁的资源,可能需要重新创建和配置。 为了避免意外销毁,你可以使用Terraform的工作空间(workspace)功能,将不同的环境隔离开来,并为每个环境创建独立的配置文件。这样,你可以在不同的工作空间中执行terraform destroy
,而不会影响其他环境的资源。 总而言之,terraform destroy
是一个用于销毁通过Terraform创建的基础设施和资源的命令,它能够确保资源的正确删除和清理,但在执行之前请务必谨慎考虑,并确保备份了重要的数据。 注: 文字都来自chatgpt。由于咱们这例子中并没有创建资源。所以基本忽略只是演示!
其他有用的玩法:
从Terraform基础概念------Provider看来的:多Provider示例 个人觉得可以用一下。先简单记录一下。这一篇文章只是简单记录分析一下项目。接下来完整实现一下!