terraform简单的开始-简单分析一下内容

紧跟上文:terraform简单的开始-安装和一些配置.先对照上一章文章的main.tf进行一下解读

解析上一篇的代码:

上一篇中main.tf代码如下:

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的声明:

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_idvar.secret_keyvar.region应该在Terraform配置文件中定义和赋值,以便在使用此提供者时提供正确的值。
通过这段代码,Terraform将会自动下载并加载所需的Tencent Cloud提供者,并使用指定的版本。这样,在Terraform配置文件中就可以使用Tencent Cloud提供者的资源和数据源来创建和管理腾讯云资源。

其他的:

variable 变量的定义:

这里就定义了 region区域 已经腾讯云密钥:

variable "region" {
  description = "腾讯云地域"
  type    = string
  default     = "ap-shanghai"
}
variable "secret_id" {}
variable "secret_key" {}

data and output块

data块用于从外部数据源获取信息。
output块用于定义输出值,这些值可以在Terraform执行完毕后显示出来

data "tencentcloud_availability_zones" "availability_zones" {}

output "zones" {
  value = data.tencentcloud_availability_zones.availability_zones
}

恩常用的块还有resource块 用户声明和配置terraform相关资源,后面会展开相关。

tfvars 文件:

我是创建了一个credentials.tfvars文件,名称不重要。我是主要为了将密码跟main.tf分开截图方便....免得打马赛克!

secret_id  = "xxxxxxxx"
secret_key = "xxxxxxxx"

相关的命令

terraform init:

terraform简单的开始-简单分析一下内容_第1张图片
目录下会生成.terraform的文件夹,其目录记录基本如下:.terraform/providers/registry.terraform.io/ 我的是腾讯云的,故下面的结构就是tencentcloudstack/tencentcloud/ 版本号

terraform plan

注意:由于为这里都使用了外部变量,故后面跟了-var-file=xxx!
执行 terraform plan命令:

terraform plan

terraform简单的开始-简单分析一下内容_第2张图片
terraform plan命令用于生成并显示Terraform执行计划(execution plan)。

执行计划是Terraform根据当前配置文件和状态文件的内容,以及云服务商的API信息,计算出的一系列操作步骤。这些步骤描述了Terraform将如何创建、修改或删除资源以达到配置文件的期望状态。
当您运行terraform plan时,Terraform会执行以下操作:

  1. 分析配置:Terraform会读取配置文件(如.tf文件)和状态文件(如.tfstate文件),并根据这些信息了解当前资源的状态、配置变化和依赖关系。
  2. 计划生成:Terraform会根据当前状态和配置文件的差异,生成一个计划。这个计划包含了所需的资源创建、修改或删除操作,以及执行这些操作所需的顺序和前置条件。
  3. 显示计划:Terraform会将计划以易读的形式显示在终端中。它会列出要创建、修改或删除的资源,以及相关的属性变化。您可以查看计划,以了解Terraform将要执行的操作,以及它对现有资源的影响。
    通过查看执行计划,您可以验证Terraform的操作是否符合预期,并确保不会意外地创建、修改或删除资源。这使您能够在应用实际变更之前,对计划进行审查和验证。
    请注意,terraform plan只是生成计划,并不会实际应用变更。要应用计划并执行资源变更,请运行terraform apply命令。
    注意:以上文字使用chatgpt3.5生成!

    terraform apply

    执行terraform apply 命令:

    terraform apply -var-file=credentials.tfvars

    terraform简单的开始-简单分析一下内容_第3张图片
    terraform apply命令用于将Terraform的执行计划应用于云环境,并创建、修改或删除相应的资源。
    当您运行terraform apply时,Terraform会执行以下操作:

  4. 计划验证:Terraform会再次验证执行计划,以确保计划与当前的配置文件和状态文件匹配。它会检查是否有其他人或进程已经更新了配置或状态文件。
  5. 资源变更:如果计划验证通过,Terraform会开始执行计划中描述的操作步骤。它会按照计划中指定的顺序,创建、修改或删除资源,以使云环境与配置文件的期望状态保持一致。
  6. 提示确认:在实际应用变更之前,Terraform会向您显示一个提示,列出即将执行的操作和其影响。您需要确认是否要继续应用变更。如果您输入"yes"确认,Terraform将继续执行。
  7. 资源管理:Terraform会调用相应的云服务商API,执行操作以创建、修改或删除资源。它会根据配置文件中定义的资源类型和属性,与云服务商进行交互,并按计划中的指示进行操作。
  8. 状态更新:一旦资源变更完成,Terraform会更新状态文件(如.tfstate文件),以反映最新的云环境状态。状态文件用于跟踪和管理资源的状态,并在后续的计划和应用过程中提供准确的信息。

通过运行terraform apply,您可以将配置文件中的变更应用到云环境,并确保云环境与配置文件的期望状态保持一致。请注意,应用变更可能会导致资源的创建、修改或删除,因此请谨慎操作,并在执行前仔细检查计划和确认提示。
apply 这里顺便讲一下terraform.tfstate 状态文件:
terraform简单的开始-简单分析一下内容_第4张图片
关于tfstate文件
terraform.tfstate文件是Terraform使用的状态文件,用于跟踪和管理资源的状态。
Terraform在执行过程中会将资源的当前状态存储在.tfstate文件中。这个文件记录了创建的资源、其属性的值,以及与其他资源之间的关系和依赖。它是一个JSON格式的文件,包含了资源的详细信息。
.tfstate文件的作用包括:

  1. 跟踪资源状态:状态文件记录了Terraform创建、修改或删除的资源以及其当前属性的值。通过状态文件,Terraform可以了解资源的实际状态,以便在后续的计划(terraform plan)和应用(terraform apply)过程中进行比较和更新。
  2. 避免重复创建:Terraform使用状态文件来判断资源是否已经创建。当您再次运行terraform apply时,Terraform会读取状态文件中的信息,并根据配置文件中的定义和状态文件的对比,决定是否需要创建新的资源。这样可以避免重复创建已经存在的资源。
  3. 管理依赖关系:状态文件记录了资源之间的依赖关系。Terraform使用这些信息来确保在创建或修改资源时,满足依赖关系的顺序和条件。这样可以保证资源之间的正确关联和一致性。
    .tfstate文件通常与Terraform配置文件(如.tf文件)位于同一目录中。在执行terraform init时,Terraform会自动初始化和管理状态文件,根据配置中的backend设置将其存储在本地文件系统或远程存储中(如AWS S3、Azure Blob Storage等)。
    请注意,.tfstate文件包含敏感信息(例如资源的密码、密钥等),因此需要妥善保护。建议不要直接手动修改或共享该文件,而是使用Terraform提供的命令和工具来管理和操作状态文件。

    terraform destroy

    terraform destroy

    terraform destroy -var-file=credentials.tfvars

    terraform简单的开始-简单分析一下内容_第5张图片
    当你使用Terraform创建了基础设施和资源后,有时候你可能需要停止使用这些资源并将其清理掉。这就是使用terraform destroy命令的情况。
    terraform destroy是Terraform命令行工具提供的一个命令,用于销毁通过Terraform创建的基础设施和资源。它会根据你的配置文件(通常是以.tf为后缀的文件)中定义的内容,逆向执行创建资源的操作,将资源从目标环境中删除。
    执行terraform destroy会触发以下过程:

  4. Terraform会读取你的配置文件,分析其中定义的资源和依赖关系。
  5. Terraform会根据依赖关系的逆序,从最底层的资源开始依次销毁。这意味着资源之间的依赖关系会被正确处理,以确保资源在正确的顺序下被销毁。
  6. Terraform会向云服务提供商(如AWS、Azure、Google Cloud等)的API发送请求,执行资源的删除操作。
  7. Terraform会输出销毁过程的详细信息,包括删除的资源和状态更新。
    需要注意的是,terraform destroy是一个非常强大且具有破坏性的命令,它会删除你指定的所有资源,包括存储、虚拟机、数据库等。因此,在执行该命令之前,请确保你真的想要销毁这些资源,并且备份了任何重要的数据。一旦执行了terraform destroy,很难恢复被销毁的资源,可能需要重新创建和配置。
    为了避免意外销毁,你可以使用Terraform的工作空间(workspace)功能,将不同的环境隔离开来,并为每个环境创建独立的配置文件。这样,你可以在不同的工作空间中执行terraform destroy,而不会影响其他环境的资源。
    总而言之,terraform destroy是一个用于销毁通过Terraform创建的基础设施和资源的命令,它能够确保资源的正确删除和清理,但在执行之前请务必谨慎考虑,并确保备份了重要的数据。
    注: 文字都来自chatgpt。由于咱们这例子中并没有创建资源。所以基本忽略只是演示!

    其他有用的玩法:

    Terraform基础概念——Provider看来的:多Provider示例
    terraform简单的开始-简单分析一下内容_第6张图片
    个人觉得可以用一下。先简单记录一下。这一篇文章只是简单记录分析一下项目。接下来完整实现一下!

你可能感兴趣的:(devops运维服务器腾讯云)