• 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
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    下面解析以下代码部分:

    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这段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" {}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    data and output块

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

    data "tencentcloud_availability_zones" "availability_zones" {}
    
    output "zones" {
      value = data.tencentcloud_availability_zones.availability_zones
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    tfvars 文件:

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

    secret_id  = "xxxxxxxx"
    secret_key = "xxxxxxxx"
    
    • 1
    • 2

    相关的命令

    terraform init:

    image.png
    目录下会生成.terraform的文件夹,其目录记录基本如下:**.terraform/providers/registry.terraform.io/ **我的是腾讯云的,故下面的结构就是tencentcloudstack/tencentcloud/ 版本号

    terraform plan

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

    terraform plan
    
    • 1

    image.png
    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
    
    • 1

    image.png
    terraform apply命令用于将Terraform的执行计划应用于云环境,并创建、修改或删除相应的资源。
    当您运行terraform apply时,Terraform会执行以下操作:

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

    通过运行terraform apply,您可以将配置文件中的变更应用到云环境,并确保云环境与配置文件的期望状态保持一致。请注意,应用变更可能会导致资源的创建、修改或删除,因此请谨慎操作,并在执行前仔细检查计划和确认提示。
    apply 这里顺便讲一下**terraform.tfstate **状态文件:
    image.png
    关于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
    
    • 1

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

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

    其他有用的玩法:

    Terraform基础概念——Provider看来的:多Provider示例
    image.png
    个人觉得可以用一下。先简单记录一下。这一篇文章只是简单记录分析一下项目。接下来完整实现一下!

  • 相关阅读:
    数据结构代码实现快速排序
    uni-app —— 下拉刷新 & 上拉加载
    angular的observable
    maven的安装与配置
    Pandas ExcelWrite()读写Excel
    微调大型语言模型(一):为什么要微调(Why finetune)?
    Docker 部署 Geoserver
    Python的os和Pillow库来实现遍历所有子文件夹并将BMP图片转换为PNG格式
    图像分割 - Hough变换圆环检测
    golang学习笔记(defer基础知识)
  • 原文地址:https://blog.csdn.net/saynaihe/article/details/132903695